Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

macOS Big Sur and Database driver



  • I know that macOS 11.1 Big Sur currently isn't officially supported. I have installed MariaDB 10.5.8 using Homebrew on my Mac. I've been through the loop of building the drivers:

    Go to:

    ~/Qt/5.15.2/Src/qtbase/src/plugins/sqldrivers
    

    First I remove the config.cache:

    rm config.cache
    

    My environment variables:

    MYSQLDIR=/usr/local/Cellar/mariadb/10.5.8
    QTDIR=/Users/sy/Qt/5.15.2
    QTDIRBIN=/Users/sy/Qt/5.15.2/clang_64/bin
    

    Start the build process:

    $QTDIRBIN/qmake -- MYSQL_INCDIR="/usr/local/Cellar/mariadb/10.5.8/include/mysql" "MYSQL_LIBDIR=/usr/local/Cellar/mariadb/10.5.8/lib" MYSQL_LIBS="-lmariadb"
    

    Then run:

    make
    

    Wait for it to complete:

    make install
    

    Review config.log:

    cat config.log
    

    The log contains:

    > Project WARNING: Qt has only been tested with version 10.15 of the platform SDK, you're using 11.1.
    > Project WARNING: This is an unsupported configuration. You may experience build issues, and by using
    > Project WARNING: the 11.1 SDK you are opting in to new features that Qt has not been prepared for.
    > Project WARNING: Please downgrade the SDK you use to build your app to version 10.15, or configure
    > Project WARNING: with CONFIG+=sdk_no_version_check when running qmake to silence this warning.
    + cd /Users/sy/Qt/5.15.2/Src/qtbase/src/plugins/sqldrivers/config.tests/tds && MAKEFLAGS= make clean && MAKEFLAGS= make
    

    Where do I put CONFIG+=sdk_no_version_check ?
    I've added this to all the .pro files I could find from the sqldrivers folder:

    sqldrivers.pro
    mysql/mysql.pro
    

    Also I have:

    > main.cpp:2:10: fatal error: 'sybfront.h' file not found
    > #include <sybfront.h>
    

  • Lifetime Qt Champion

    @SPlatten Google says sybfront.h belongs to freetds. So, I guess you need to install freetds first.



  • @jsulm , I have already the last time I built a database driver for an earlier version of Qt:

    brew info freetds
    freetds: stable 1.2.18 (bottled), HEAD
    Libraries to talk to Microsoft SQL Server and Sybase databases
    https://www.freetds.org/
    /usr/local/Cellar/freetds/1.2.17 (1,259 files, 13.8MB) *
      Poured from bottle on 2020-12-17 at 10:59:11
    From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/freetds.rb
    License: LGPL-2.0-or-later
    ==> Dependencies
    Build: pkg-config ✔
    Required: openssl@1.1 ✔, unixodbc ✔
    ==> Options
    --HEAD
    	Install HEAD version
    ==> Analytics
    install: 65,640 (30 days), 275,256 (90 days), 868,455 (365 days)
    install-on-request: 12,025 (30 days), 48,740 (90 days), 118,945 (365 days)
    build-error: 0 (30 days)
    

  • Lifetime Qt Champion

    @SPlatten So, do you have sybfront.h somewhere?



  • @jsulm , yes, this is exactly the path I went down when I got the message:

    find / -name sybfront.h
    /usr/local/include/sybfront.h
    /usr/local/Cellar/freetds/1.2.17/include/sybfront.h
    

  • Lifetime Qt Champion

    @SPlatten said in macOS Big Sur and Database driver:

    /usr/local/include

    This include directory is not checked by default when building. You will need to add it as additional include directory. And the dir containing the actual lib also needs to be added as additional libs dir.



  • @jsulm , I think that's a symbolic link.

    ls -la sybfront.h
    lrwxr-xr-x  1 sy  admin  43 17 Dec 10:59 sybfront.h -> ../Cellar/freetds/1.2.17/include/sybfront.h
    

  • Lifetime Qt Champion

    @SPlatten Doesn't matter. You have to tell the compiler where to look for the headers (and the linker where to look for the libs) if those are not in system include dirs.



  • @jsulm thank you, I know how to do this on a PC, how do I do that on a MAC?


  • Lifetime Qt Champion

    @SPlatten Should be the same on MAC (is a UNIX)



  • @jsulm , I'm trying to add the library to the project, by selecting the Add Library... option from the project context menu, but I cannot or don't know how to navigate to the path as /usr/local doesn't appear to be available.


  • Lifetime Qt Champion

    @SPlatten said in macOS Big Sur and Database driver:

    Add Library...

    ?
    Aren't you building MySQL driver on the command line? How is "Add Library..." related to this?



  • @jsulm , yes, sorry, you are quite correct.



  • @jsulm , I added:

    INCLUDEPATH += /usr/local/include
    

    To sqldrivers.pro and removed all the config:

    rm -R config.*
    

    Then ran:

    $QTDIRBIN/qmake -- MYSQL_INCDIR="/usr/local/Cellar/mariadb/10.5.8/include/mysql" "MYSQL_LIBDIR=/usr/local/Cellar/mariadb/10.5.8/lib" MYSQL_LIBS="-lmariadb"
    make
    make install
    

    config.log still shows:

    > main.cpp:2:10: fatal error: 'sybfront.h' file not found
    > #include <sybfront.h>
    >          ^~~~~~~~~~~~
    > 1 error generated.
    > make: *** [main.o] Error 1
     => source failed verification.
    test config.sqldrivers.libraries.tds FAILED
    

  • Lifetime Qt Champion

    @SPlatten From a clean state (no build artefacts from previous attempt)?



  • @jsulm , can you elaborate please?


  • Lifetime Qt Champion

    @SPlatten You already tried to build before, right? That means there are build artefacts (like object files, Makefile, ...). You should make sure you delete all these build artefacts before trying again...
    Even better are out-of-source builds (create a build folder, go there and call qmake from there).



  • @jsulm I just did:

    make clean
    

    From:

    /Users/sy/Qt/5.15.2/Src/qtbase/src/plugins/sqldrivers
    

    Result was:

    rm -f .moc/moc_predefs.h
    rm -f .moc/moc_qsql_mysql_p.cpp
    rm -f .moc/main.moc
    rm -f .obj/qsql_mysql.o .obj/main.o .obj/moc_qsql_mysql_p.o
    rm -f *~ core *.core
    cd sqlite/ && ( test -e Makefile || /Users/sy/Qt/5.15.2/clang_64/bin/qmake -o Makefile /Users/sy/Qt/5.15.2/Src/qtbase/src/plugins/sqldrivers/sqlite/sqlite.pro ) && /Applications/Xcode.app/Contents/Developer/usr/bin/make -f Makefile clean
    rm -f .moc/moc_predefs.h
    rm -f .moc/moc_qsql_sqlite_p.cpp
    rm -f .moc/smain.moc
    rm -f .obj/qsql_sqlite.o .obj/smain.o .obj/sqlite3.o .obj/moc_qsql_sqlite_p.o
    rm -f *~ core *.core
    

    Then rerun:

    $QTDIRBIN/qmake -- MYSQL_INCDIR="/usr/local/Cellar/mariadb/10.5.8/include/mysql" "MYSQL_LIBDIR=/usr/local/Cellar/mariadb/10.5.8/lib" MYSQL_LIBS="-lmariadb"
    make
    make install
    

    And waited for build to finish. Same result, log file still reports:

    > Project WARNING: Qt has only been tested with version 10.15 of the platform SDK, you're using 11.1.
    > Project WARNING: This is an unsupported configuration. You may experience build issues, and by using
    > Project WARNING: the 11.1 SDK you are opting in to new features that Qt has not been prepared for.
    > Project WARNING: Please downgrade the SDK you use to build your app to version 10.15, or configure
    > Project WARNING: with CONFIG+=sdk_no_version_check when running qmake to silence this warning.
    + cd /Users/sy/Qt/5.15.2/Src/qtbase/src/plugins/sqldrivers/config.tests/tds && MAKEFLAGS= make
    > /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -c -pipe -stdlib=libc++ -O2 -std=gnu++11  -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk -mmacosx-version-min=10.13 -w -fPIC  -I. -I/usr/local/opt/openssl/include -I/Users/sy/Qt/5.15.2/clang_64/mkspecs/macx-clang -o main.o main.cpp
    > main.cpp:2:10: fatal error: 'sybfront.h' file not found
    > #include <sybfront.h>
    >          ^~~~~~~~~~~~
    > 1 error generated.
    > make: *** [main.o] Error 1
     => source failed verification.
    test config.sqldrivers.libraries.tds FAILED
    

  • Lifetime Qt Champion

    @SPlatten said in macOS Big Sur and Database driver:

    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -c -pipe -stdlib=libc++ -O2 -std=gnu++11 -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk -mmacosx-version-min=10.13 -w -fPIC -I. -I/usr/local/opt/openssl/include -I/Users/sy/Qt/5.15.2/clang_64/mkspecs/macx-clang -o main.o main.cpp

    According to this compiler invocation /usr/local/include was not passed as additional include directory...



  • @jsulm I tried adding another symbolic link to the sqldrivers folder, still same result, where did your output come from?


  • Lifetime Qt Champion

    @SPlatten said in macOS Big Sur and Database driver:

    where did your output come from?

    It's the output you posted...


  • Lifetime Qt Champion

    @SPlatten Take a look at this: https://forum.qt.io/topic/39337/qt-5-2-1-mysql-sql-driver-installieren-solved/10
    You can see how you can define additional include directories when calling qmake (and also libs).



  • This post is deleted!

  • Lifetime Qt Champion

    @SPlatten It's German. But the relevant part is: ""INCLUDEPATH+=C:/MySQL/include" "LIBS+=C:/MYSQL/MySQL Server <version>/lib/opt/libmysql.lib""
    So, in your case: "INCLUDEPATH+=/usr/local/include" "LIBS+=/usr/local/lib"



  • @jsulm , thank you.



  • @jsulm said in macOS Big Sur and Database driver:

    INCLUDEPATH+=/usr/local/include" "LIBS+=/usr/local/lib"

    Ok, so started off from:

    rm -R config.*
    make clean
    $QTDIRBIN/qmake -- MYSQL_INCDIR="/usr/local/Cellar/mariadb/10.5.8/include/mysql" MYSQL_LIBDIR=“/usr/local/Cellar/mariadb/10.5.8/lib" MYSQL_LIBS="-lmariadb" "INCLUDEPATH+=/usr/local/include" "LIBS+=/usr/local/lib”
    make 
    make install
    

    Same result, config.log:

    > Project WARNING: Qt has only been tested with version 10.15 of the platform SDK, you're using 11.1.
    > Project WARNING: This is an unsupported configuration. You may experience build issues, and by using
    > Project WARNING: the 11.1 SDK you are opting in to new features that Qt has not been prepared for.
    > Project WARNING: Please downgrade the SDK you use to build your app to version 10.15, or configure
    > Project WARNING: with CONFIG+=sdk_no_version_check when running qmake to silence this warning.
    + cd /Users/sy/Qt/5.15.2/Src/qtbase/src/plugins/sqldrivers/config.tests/tds && MAKEFLAGS= make
    > /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -c -pipe -stdlib=libc++ -O2 -std=gnu++11  -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk -mmacosx-version-min=10.13 -w -fPIC  -I. -I/usr/local/opt/openssl/include -I/Users/sy/Qt/5.15.2/clang_64/mkspecs/macx-clang -o main.o main.cpp
    > main.cpp:2:10: fatal error: 'sybfront.h' file not found
    > #include <sybfront.h>
    >          ^~~~~~~~~~~~
    > 1 error generated.
    > make: *** [main.o] Error 1
     => source failed verification.
    test config.sqldrivers.libraries.tds FAILED
    

  • Lifetime Qt Champion

    Hi,

    Since you are only interested in the MySQL driver, why do you care about the TDS checks errors ?

    This will just disable the TDS plugin build.



  • @SGaist , thank you, somewhere along the line I now have a working driver.


Log in to reply