VirtualBox

Changeset 100819 in vbox for trunk


Ignore:
Timestamp:
Aug 7, 2023 10:39:52 PM (19 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
158714
Message:

configure: bugref:10450: Implementing Qt6 support for configure script; In a hope to fix .deb/.rpm stuff for recent distributions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/configure

    r99764 r100819  
    9292WITH_VMMRAW=1
    9393WITH_LIBIDL=1
    94 WITH_QT5=1
     94WITH_QT6=1
    9595WITH_SDL=1
    9696WITH_SDL_TTF=1
     
    173173PKGCONFIG="`which_wrapper pkg-config`"
    174174PYTHONDIR="/usr /usr/local"
    175 QT5DIR="/usr/lib/qt5 /usr/share/qt5 /usr/lib64/qt5 /usr /usr/local"
    176 QT5DIR_PKGCONFIG=1
    177 QT5MAJ=5
    178 QT5MIN=9
     175QT6DIR="/usr/lib/qt6 /usr/share/qt6 /usr/lib64/qt6 /usr /usr/local"
     176QT6DIR_PKGCONFIG=1
     177QT6MAJ=6
     178QT6MIN=3
    179179KBUILDDIR="`cd \`dirname $0\`; pwd`/kBuild"
    180180DEVDIR="`cd \`dirname $0\`; pwd`/tools"
     
    15431543
    15441544#
    1545 # Check for the Qt5 library, needed by the VirtualBox frontend
     1545# Check for the Qt6 library, needed by the VirtualBox frontend
    15461546#
    15471547# Currently not fatal.
    15481548#
    1549 check_qt5()
    1550 {
    1551   foundqt5=
    1552   test_header Qt5
     1549check_qt6()
     1550{
     1551  foundqt6=
     1552  test_header Qt6
    15531553  cat > $ODIR.tmp_src.cc << EOF
    15541554#include <QtGlobal>
     
    15561556{
    15571557EOF
    1558   echo "#if QT_VERSION >= $(($QT5MAJ*65536+$QT5MIN*256))" >> $ODIR.tmp_src.cc
     1558  echo "#if QT_VERSION >= $(($QT6MAJ*65536+$QT6MIN*256))" >> $ODIR.tmp_src.cc
    15591559  cat >> $ODIR.tmp_src.cc << EOF
    15601560  return 0;
     
    15761576    done
    15771577    # Now try the user provided directory and some of the standard directories.
    1578     QT_TRIES="$QT5DIR /System/Library /Library"
     1578    QT_TRIES="$QT6DIR /System/Library /Library"
    15791579    for t in $QT_TRIES; do
    15801580      if [ -f "$t/Frameworks/QtCore.framework/QtCore" -o -f "$t/clang_64/lib/QtCore.framework/QtCore" ]; then
    1581         PATH_SDK_QT5="$t"
    1582         foundqt5=1
     1581        PATH_SDK_QT6="$t"
     1582        foundqt6=1
    15831583        break
    15841584      fi
    15851585    done
    15861586    # Add the necessary params for building the test application
    1587     if [ -n "$PATH_SDK_QT5" ]; then
     1587    if [ -n "$PATH_SDK_QT6" ]; then
    15881588      if [ -f "$t/clang_64/lib/QtCore.framework/QtCore" ]; then
    1589         INCQT5=-I$PATH_SDK_QT5/clang_64/lib/QtCore.framework/Headers
    1590         LIBQT5=-F$PATH_SDK_QT5/clang_64/lib
    1591         SDKQT5=$PATH_SDK_QT5/clang_64
     1589        INCQT6=-I$PATH_SDK_QT6/clang_64/lib/QtCore.framework/Headers
     1590        LIBQT6=-F$PATH_SDK_QT6/clang_64/lib
     1591        SDKQT6=$PATH_SDK_QT6/clang_64
    15921592      else
    1593         INCQT5=-I$PATH_SDK_QT5/Frameworks/QtCore.framework/Headers
    1594         LIBQT5=-F$PATH_SDK_QT5/Frameworks
    1595         SDKQT5=$PATH_SDK_QT5
    1596       fi
    1597       FLGQT5="-framework QtCore -std=c++11 -Wl,-rpath,`L_to_PATH "$LIBQT5"`"
     1593        INCQT6=-I$PATH_SDK_QT6/Frameworks/QtCore.framework/Headers
     1594        LIBQT6=-F$PATH_SDK_QT6/Frameworks
     1595        SDKQT6=$PATH_SDK_QT6
     1596      fi
     1597      FLGQT6="-framework QtCore -std=c++17 -Wl,-rpath,`L_to_PATH "$LIBQT6"`"
    15981598    else
    1599       log_failure "Qt5 framework not found (can be disabled using --disable-qt)"
     1599      log_failure "Qt6 framework not found (can be disabled using --disable-qt)"
    16001600      fail
    16011601    fi
    16021602  else # !darwin
    1603     if [ $QT5DIR_PKGCONFIG -eq 1 ]; then
     1603    if [ $QT6DIR_PKGCONFIG -eq 1 ]; then
    16041604      # Default is to use pkg-config:
    16051605      if which_wrapper pkg-config > /dev/null; then
    1606         qt5_ver=`pkg-config Qt5Core --modversion 2>> $LOG`
     1606        qt6_ver=`pkg-config Qt6Core --modversion 2>> $LOG`
    16071607        if [ $? -eq 0 ]; then
    1608           echo "(Qt5 from pkg-config)" >> $LOG
    1609           FLGQT5=`pkg-config Qt5Core --cflags`
    1610           # gcc 4.8 is able to compile with C++11 (see also VBOX_GCC_std in Config.kmk)
    1611           [ $(($cc_maj * 100 + $cc_min)) -ge 408 ] && FLGQT5="$FLGQT5 -std=c++11"
    1612           INCQT5=`strip_I "$FLGQT5"`
    1613           LIBDIR5=`pkg-config Qt5Core --variable=libdir`
    1614           LIBQT5=`pkg-config Qt5Core Qt5Gui --libs`
    1615           LIBQT5="-L$LIBDIR5 $LIBQT5"
    1616           TOOLQT5=`pkg-config Qt5Core --variable=prefix`
    1617           TOOLQT5BIN=`pkg-config Qt5Core --variable=host_bins`
    1618           if test_compile "$LIBQT5 $LIBPTHREAD $FLGQT5" qt5 qt5 nofatal; then
    1619             test_execute_path "`L_to_PATH "$LIBQT5"`" nofatal && foundqt5=3 # pkg-config
     1608          echo "(Qt6 from pkg-config)" >> $LOG
     1609          FLGQT6=`pkg-config Qt6Core --cflags`
     1610          # gcc 8.0 is able to compile with C++17 (see also VBOX_GCC_std in Config.kmk)
     1611          [ $(($cc_maj * 100 + $cc_min)) -ge 408 ] && FLGQT6="$FLGQT6 -std=c++17"
     1612          INCQT6=`strip_I "$FLGQT6"`
     1613          LIBDIR5=`pkg-config Qt6Core --variable=libdir`
     1614          LIBQT6=`pkg-config Qt6Core Qt6Gui --libs`
     1615          LIBQT6="-L$LIBDIR5 $LIBQT6"
     1616          TOOLQT6=`pkg-config Qt6Core --variable=prefix`
     1617          TOOLQT6BIN=`pkg-config Qt6Core --variable=bindir`
     1618          TOOLQT6LIBEXEC=`pkg-config Qt6Core --variable=libexecdir`
     1619          if test_compile "$LIBQT6 $LIBPTHREAD $FLGQT6" qt6 qt6 nofatal; then
     1620            test_execute_path "`L_to_PATH "$LIBQT6"`" nofatal && foundqt6=3 # pkg-config
    16201621          fi
    16211622        fi
     
    16251626      fi
    16261627    fi
    1627     if [ -z "$foundqt5" ]; then
    1628       # Do it the old way (e.g. user has specified QT5DIR):
    1629       for q in $QT5DIR "$DEVDIR/linux.$TARGET_MACHINE"/qt/v5.*; do
    1630         echo "(Qt5 from '$q')" >> $LOG
    1631         INCQT5="$q/include $q/include/QtCore"
    1632         FLGQT5="-DQT_SHARED -std=c++11"
    1633         I_INCQT5=`prefix_I "$INCQT5"`
    1634         LIBQT5="-L$q/lib -lQt5CoreVBox -lQt5GuiVBox"
    1635         TOOLQT5="$q"
    1636         if test_compile "$LIBQT5 $LIBPTHREAD $I_INCQT5 $FLGQT5" qt5 qt5 nofatal &&
    1637             test_execute_path "`L_to_PATH "$LIBQT5"`" nofatal; then
    1638           foundqt5=2 # internal
     1628    if [ -z "$foundqt6" ]; then
     1629      # Do it the old way (e.g. user has specified QT6DIR):
     1630      for q in $QT6DIR "$DEVDIR/linux.$TARGET_MACHINE"/qt/v6.*; do
     1631        echo "(Qt6 from '$q')" >> $LOG
     1632        INCQT6="$q/include $q/include/QtCore"
     1633        FLGQT6="-DQT_SHARED -std=c++17"
     1634        I_INCQT6=`prefix_I "$INCQT6"`
     1635        LIBQT6="-L$q/lib -lQt6CoreVBox -lQt6GuiVBox"
     1636        TOOLQT6="$q"
     1637        if test_compile "$LIBQT6 $LIBPTHREAD $I_INCQT6 $FLGQT6" qt6 qt6 nofatal &&
     1638            test_execute_path "`L_to_PATH "$LIBQT6"`" nofatal; then
     1639          foundqt6=2 # internal
    16391640          break;
    16401641        fi
    1641         LIBQT5="-L$q/lib -lQt5Core -lQt5Gui"
    1642         if test_compile "$LIBQT5 $LIBPTHREAD $I_INCQT5 $FLGQT5" qt5 qt5 nofatal &&
    1643             test_execute_path "`L_to_PATH "$LIBQT5"`" nofatal; then
    1644           foundqt5=1 # no pkg-config, Qt directory
     1642        LIBQT6="-L$q/lib -lQt6Core -lQt6Gui"
     1643        if test_compile "$LIBQT6 $LIBPTHREAD $I_INCQT6 $FLGQT6" qt6 qt6 nofatal &&
     1644            test_execute_path "`L_to_PATH "$LIBQT6"`" nofatal; then
     1645          foundqt6=1 # no pkg-config, Qt directory
    16451646          break;
    16461647        fi
     
    16481649    fi
    16491650  fi
    1650   if [ -n "$foundqt5" ]; then
     1651  if [ -n "$foundqt6" ]; then
    16511652    # We decided which version of Qt to use, now enforce the version requirement:
    16521653    cat > $ODIR.tmp_src.cc << EOF
     
    16571658  printf("found version %s", QT_VERSION_STR);
    16581659EOF
    1659   echo "#if QT_VERSION >= $(($QT5MAJ*65536+$QT5MIN*256))" >> $ODIR.tmp_src.cc
     1660  echo "#if QT_VERSION >= $(($QT6MAJ*65536+$QT6MIN*256))" >> $ODIR.tmp_src.cc
    16601661    cat >> $ODIR.tmp_src.cc << EOF
    16611662  printf(", OK.\n");
     
    16631664#else
    16641665EOF
    1665 echo "  printf(\", expected version $QT5MAJ.$QT5MIN or higher\\\\n\");" >> $ODIR.tmp_src.cc
     1666echo "  printf(\", expected version $QT6MAJ.$QT6MIN or higher\\\\n\");" >> $ODIR.tmp_src.cc
    16661667    cat >> $ODIR.tmp_src.cc << EOF
    16671668  return 1;
     
    16691670}
    16701671EOF
    1671     [ -n "$INCQT5" ] && I_INCQT5=`prefix_I "$INCQT5"`
    1672     if test_compile "$LIBQT5 $LIBPTHREAD $I_INCQT5 $FLGQT5" qt5 qt5 nofatal; then
    1673       if test_execute_path "`L_to_PATH "$LIBQT5"`"; then
     1672    [ -n "$INCQT6" ] && I_INCQT6=`prefix_I "$INCQT6"`
     1673    if test_compile "$LIBQT6 $LIBPTHREAD $I_INCQT6 $FLGQT6" qt6 qt6 nofatal; then
     1674      if test_execute_path "`L_to_PATH "$LIBQT6"`"; then
    16741675        if [ "$OS" = "darwin" ]; then
    16751676          # Successful build & run the test application so add the necessary
    16761677          # params to AutoConfig.kmk:
    1677           cnf_append "PATH_SDK_QT5_INC" "`L_to_PATH "$LIBQT5"`"
    1678           cnf_append "PATH_SDK_QT5_LIB" "`L_to_PATH "$LIBQT5"`"
    1679           cnf_append "PATH_SDK_QT5" "$SDKQT5"
     1678          cnf_append "PATH_SDK_QT6_INC" "`L_to_PATH "$LIBQT6"`"
     1679          cnf_append "PATH_SDK_QT6_LIB" "`L_to_PATH "$LIBQT6"`"
     1680          cnf_append "PATH_SDK_QT6" "$SDKQT6"
    16801681          # Check for the moc tool in the Qt directory found & some standard
    16811682          # directories.
    1682           for q in $PATH_SDK_QT5 $PATH_SDK_QT5/clang_64 /usr /Developer/Tools/Qt; do
    1683             if which_wrapper "$q/bin/moc" > /dev/null; then
    1684               cnf_append "PATH_TOOL_QT5_BIN" "$q/bin"
     1683          for q in $PATH_SDK_QT6 $PATH_SDK_QT6/clang_64 /usr /Developer/Tools/Qt; do
     1684            if which_wrapper "$q/bin/lrelease" > /dev/null; then
     1685              cnf_append "PATH_TOOL_QT6_BIN" "$q/bin"
     1686            fi
     1687            if which_wrapper "$q/libexec/moc" > /dev/null; then
     1688              cnf_append "PATH_TOOL_QT6_LIBEXEC" "$q/libexec"
    16851689            fi
    16861690          done
    16871691        else
    16881692          # Strip .../QtCore as we add components ourself:
    1689           INCQT5=`echo "$INCQT5"|$KBUILD_SED 's|\([^ ]*\)/QtCore|\1|g; s| $||g'`
     1693          INCQT6=`echo "$INCQT6"|$KBUILD_SED 's|\([^ ]*\)/QtCore|\1|g; s| $||g'`
    16901694          # store only the first path, remove all other paths
    1691           # most likely pkg-config gave us -I/usr/include/qt5 -I/usr/include/qt5/QtCore
    1692           INCQT5=`echo "$INCQT5"|$KBUILD_SED 's|\([^ ]*\) .*|\1|'`
    1693           cnf_append "VBOX_PATH_QT_LIB" "`strip_L "$LIBQT5"`"
    1694           cnf_append "PATH_SDK_QT5_INC" "$INCQT5"
     1695          # most likely pkg-config gave us -I/usr/include/qt6 -I/usr/include/qt6/QtCore
     1696          INCQT6=`echo "$INCQT6"|$KBUILD_SED 's|\([^ ]*\) .*|\1|'`
     1697          cnf_append "VBOX_PATH_QT_LIB" "`strip_L "$LIBQT6"`"
     1698          cnf_append "PATH_SDK_QT6_INC" "$INCQT6"
    16951699          # This is not quite right since the qt libpath does not have to be first...
    1696           cnf_append "PATH_SDK_QT5_LIB" '$'"(firstword `strip_L "$LIBQT5"`)"
    1697           if [ "$foundqt5" = "2" ]; then
     1700          cnf_append "PATH_SDK_QT6_LIB" '$'"(firstword `strip_L "$LIBQT6"`)"
     1701          if [ "$foundqt6" = "2" ]; then
    16981702            cnf_append "VBOX_WITH_ORACLE_QT" "1"
    16991703          fi
    1700           if [ "$foundqt5" != "3" ]; then
    1701             TOOLQT5BIN="$TOOLQT5/bin"
     1704          if [ "$foundqt6" != "3" ]; then
     1705            TOOLQT6BIN="$TOOLQT6/bin"
     1706            TOOLQT6LIBEXEC="$TOOLQT6/libexec"
    17021707          fi
    1703           test_header "Qt5 devtools"
     1708          test_header "Qt6 devtools"
    17041709          # Try it with a suffix, some platforms use that
    1705           if which_wrapper "$TOOLQT5BIN/moc-qt5" > /dev/null; then
    1706             QT5BINSUFF="-qt5"
     1710          if which_wrapper "$TOOLQT6LIBEXEC/moc-qt6" > /dev/null; then
     1711            QT6BINSUFF="-qt6"
    17071712          else
    1708             QT5BINSUFF=""
     1713            QT6BINSUFF=""
    17091714          fi
    1710           moc_ver=`$TOOLQT5BIN/moc$QT5BINSUFF -v 2>&1|sed 's+^.*(Qt \(.*\))+\1+'`
     1715          moc_ver=`$TOOLQT6LIBEXEC/moc$QT6BINSUFF -v 2>&1|sed 's+^.*(Qt \(.*\))+\1+'`
    17111716          if [ $? -ne 0 ]; then
    1712             log_failure "moc$QT5BINSUFF not working"
     1717            log_failure "moc$QT6BINSUFF not working"
    17131718            fail
    17141719          else
    17151720            log_success "found version $moc_ver"
    1716             cnf_append "VBOX_PATH_QT" "$TOOLQT5"
    1717             cnf_append "PATH_SDK_QT5" "$TOOLQT5"
    1718             cnf_append "PATH_TOOL_QT5_BIN" "$TOOLQT5BIN"
    1719             [ -n "$QT5BINSUFF" ] && cnf_append "TOOL_QT5_BIN_SUFF" "$QT5BINSUFF"
     1721            cnf_append "VBOX_PATH_QT" "$TOOLQT6"
     1722            cnf_append "PATH_SDK_QT6" "$TOOLQT6"
     1723            cnf_append "PATH_TOOL_QT6_BIN" "$TOOLQT6BIN"
     1724            cnf_append "PATH_TOOL_QT6_LIBEXEC" "$TOOLQT6LIBEXEC"
     1725            [ -n "$QT6BINSUFF" ] && cnf_append "TOOL_QT6_BIN_SUFF" "$QT6BINSUFF"
    17201726          fi
    17211727        fi
    17221728      fi
    17231729    else
    1724       log_failure "qt5 not working"
     1730      log_failure "qt6 not working"
    17251731      fail
    17261732    fi
    17271733  else
    1728     log_failure "qt5 not found"
     1734    log_failure "qt6 not found"
    17291735    fail
    17301736  fi
     
    25102516[ $WITH_VMMRAW  -eq 1 ] && echo "  --disable-vmmraw         disable VMM raw mode (VT-x/AMD-V mandatory!)"
    25112517[ $WITH_SDL_TTF -eq 1 ] && echo "  --disable-sdl-ttf        disable SDL_ttf detection"
    2512 [ $WITH_QT5     -eq 1 ] && echo "  --disable-qt             disable Qt detection"
     2518[ $WITH_QT6     -eq 1 ] && echo "  --disable-qt             disable Qt detection"
    25132519[ $WITH_ALSA    -eq 1 ] && echo "  --disable-alsa           disable the ALSA sound backend"
    25142520[ $WITH_PULSE   -eq 1 ] && echo "  --disable-pulse          disable the PulseAudio backend"
     
    25162522[ $WITH_KMODS   -eq 1 ] && echo "  --disable-kmods          don't build Linux kernel modules (host and guest)"
    25172523[ $WITH_OPENGL  -eq 1 ] && echo "  --disable-opengl         disable OpenGL support (2D & 3D)"
    2518 [ $WITH_QT5     -eq 0 ] && echo "  --enable-qt5             enable Qt5 detection"
     2524[ $WITH_QT6     -eq 0 ] && echo "  --enable-qt6             enable Qt6 detection"
    25192525[ $OSE          -eq 1 ] && echo "  --enable-vnc             enable the VNC server"
    25202526[ $OSE          -eq 0 ] && echo "  --disable-extpack        don't build the extpack"
     
    25552561[ "$OS"   = "darwin" ] && echo "                           only, ignored for the rest)"
    25562562[ "$OS"    = "linux" ] && echo "  --with-linux=DIR         Linux kernel source directory [$LINUX]"
    2557 [ $WITH_QT5    -eq 1 ] && echo "  --with-qt-dir=DIR        directory for Qt headers/libraries [pkgconfig]"
     2563[ $WITH_QT6    -eq 1 ] && echo "  --with-qt-dir=DIR        directory for Qt headers/libraries [pkgconfig]"
    25582564cat << EOF
    25592565  --with-gsoap-dir=PATH    directory for gSOAP compiler/headers/libraries
     
    26542660      ;;
    26552661    --with-qt-dir=*)
    2656       [ $WITH_QT5 -eq 1 ] && QT5DIR=`echo $option | cut -d'=' -f2`
    2657       [ $WITH_QT5 -eq 1 ] && QT5DIR_PKGCONFIG=0
    2658       ;;
    2659     --with-qt5-minor=*)
    2660       QT5MIN=`echo $option | cut -d'=' -f2`
    2661       ;;
    2662     --with-qt5-major=*)
    2663       QT5MAJ=`echo $option | cut -d'=' -f2`
     2662      [ $WITH_QT6 -eq 1 ] && QT6DIR=`echo $option | cut -d'=' -f2`
     2663      [ $WITH_QT6 -eq 1 ] && QT6DIR_PKGCONFIG=0
     2664      ;;
     2665    --with-qt6-minor=*)
     2666      QT6MIN=`echo $option | cut -d'=' -f2`
     2667      ;;
     2668    --with-qt6-major=*)
     2669      QT6MAJ=`echo $option | cut -d'=' -f2`
    26642670      ;;
    26652671    --with-openssl-dir=*)
     
    27152721      ;;
    27162722    --disable-qt)
    2717       [ $WITH_QT5 -eq 1 ] && WITH_QT5=0
    2718       ;;
    2719     --enable-qt5)
    2720       [ $WITH_QT5 -eq 0 ] && WITH_QT5=1
     2723      [ $WITH_QT6 -eq 1 ] && WITH_QT6=0
     2724      ;;
     2725    --enable-qt6)
     2726      [ $WITH_QT6 -eq 0 ] && WITH_QT6=1
    27212727      ;;
    27222728    --passive-mesa)
     
    28152821      WITH_X11=0
    28162822      WITH_OPENGL=0
    2817       WITH_QT5=0
     2823      WITH_QT6=0
    28182824      ;;
    28192825    --ose)
     
    29672973fi
    29682974[ $WITH_XPCOM     -eq 0 ] && cnf_append "VBOX_WITH_MAIN" ""
    2969 [ $WITH_QT5       -eq 0 ] && cnf_append "VBOX_WITH_QTGUI" ""
     2975[ $WITH_QT6       -eq 0 ] && cnf_append "VBOX_WITH_QTGUI" ""
    29702976[ $WITH_SDL_TTF   -eq 0 ] && cnf_append "VBOX_WITH_SECURELABEL" ""
    29712977[ $WITH_PYTHON    -eq 0 ] && cnf_append "VBOX_WITH_PYTHON" ""
     
    30283034  [ $WITH_X11    -eq 1 ] && check_xrandr
    30293035  [ $WITH_OPENGL -eq 1 ] && check_opengl
    3030   [ $WITH_QT5    -eq 1 ] && check_qt5
     3036  [ $WITH_QT6    -eq 1 ] && check_qt6
    30313037  [ $WITH_PYTHON -eq 1 ] && check_python
    30323038  [ $WITH_JAVA   -eq 1 ] && check_java
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette