Skip to content

Commit

Permalink
build: Use cmake for macOS builds
Browse files Browse the repository at this point in the history
This is a first attempt to use cmake instead of qmake for building our
nightlies on macOS. We are using cmake on most platforms and it would be
easier for us to only maintain one build system. Because support for
qmake is dropped in Qt6 anyway it makes sense to transition to only
using cmake in the near-ish future.

Please note that this commit has been assembled in a mostly blind
fashion. I would be surprised if this worked without further tweaking.
  • Loading branch information
MKleusberg committed Aug 12, 2021
1 parent 183d8f7 commit 33ee736
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 10 deletions.
30 changes: 27 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,14 @@ if(WIN32 AND MSVC)
set(CMAKE_PREFIX_PATH "${QT5_PATH};${SQLITE3_PATH}")
endif()

# See https://github.com/Homebrew/homebrew-core/issues/8392#issuecomment-325226494
if(APPLE AND EXISTS /usr/local/opt/qt5)
# Homebrew installs Qt5 (up to at least 5.9.1) in
# /usr/local/qt5, ensure it can be found by CMake since
# it is not in the default /usr/local prefix.
list(APPEND CMAKE_PREFIX_PATH "/usr/local/opt/qt5")
endif()

find_package(Qt5 REQUIRED COMPONENTS Concurrent Gui LinguistTools Network PrintSupport Test Widgets Xml)

if(NOT FORCE_INTERNAL_QSCINTILLA)
Expand Down Expand Up @@ -418,14 +426,23 @@ else()
include_directories(${QSCINTILLA_DIR})
endif()

add_executable(${PROJECT_NAME}
if(NOT APPLE)
add_executable(${PROJECT_NAME}
${SQLB_HDR}
${SQLB_SRC}
${SQLB_FORM_HDR}
${SQLB_MOC}
${SQLB_RESOURCES_RCC}
${SQLB_MISC})
else()
add_executable(${PROJECT_NAME} MACOSX_BUNDLE
${SQLB_HDR}
${SQLB_SRC}
${SQLB_FORM_HDR}
${SQLB_MOC}
${SQLB_RESOURCES_RCC}
${SQLB_MISC})

endif()

# Warnings
if (ALL_WARNINGS AND CMAKE_COMPILER_IS_GNUCC)
Expand Down Expand Up @@ -495,7 +512,7 @@ if(WIN32 AND MSVC)
endif()
endif()

if(NOT WIN32)
if(NOT WIN32 AND NOT APPLE)
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib)
Expand Down Expand Up @@ -588,3 +605,10 @@ if(WIN32 AND MSVC)
distri/winlaunch.bat
DESTINATION "/")
endif()

if(APPLE)
set_target_properties(${PROJECT_NAME} PROPERTIES
BUNDLE True
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/src/app.plist
)
endif()
20 changes: 13 additions & 7 deletions installer/macos/build_sqlitebrowser_nightly.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ LRELEASE="$HOME/Qt/${QTVER}/clang_64/bin/lrelease"
LUPDATE="$HOME/Qt/${QTVER}/clang_64/bin/lupdate"
MACDEPLOYQT="$HOME/Qt/${QTVER}/clang_64/bin/macdeployqt"
PATH="$PATH:/usr/local/bin:/usr/sbin"
QMAKE="$HOME/Qt/${QTVER}/clang_64/bin/qmake"
CMAKE="/usr/local/bin/cmake"

# Add the sensitive values we don't want to store in this script file
source ~/.db4s_secure
Expand Down Expand Up @@ -85,13 +85,16 @@ $LRELEASE src/src.pro >>$LOG 2>&1

# Build and package standard sqlitebrowser nightly
echo Build and package standard sqlitebrowser nightly >>$LOG 2>&1
mkdir build >>$LOG 2>&1
cd build >>$LOG 2>&1
if [ "${BUILD_TYPE}" = "debug" ]; then
$QMAKE sqlitebrowser.pro -r -spec macx-clang CONFIG+=debug CONFIG+=x86_64 CONFIG+="c++14" >>$LOG 2>&1
$CMAKE -DCMAKE_BUILD_TYPE=Debug .. >>$LOG 2>&1
else
$QMAKE sqlitebrowser.pro -r -spec macx-clang CONFIG+=x86_64 CONFIG+="c++14" >>$LOG 2>&1
$CMAKE .. >>$LOG 2>&1
fi
make -j3 >>$LOG 2>&1
make -j3 >>$LOG 2>&1 # Seems to need a 2nd time now, due to language files needing initialisation or something
cd .. >>$LOG 2>&1
cp -R build/sqlitebrowser.app src/DB\ Browser\ for\ SQLite.app >>$LOG 2>&1

# Include the depencencies in the .app bundle
$MACDEPLOYQT src/DB\ Browser\ for\ SQLite.app -verbose=2 -sign-for-notarization="${DEV_ID}">>$LOG 2>&1
Expand Down Expand Up @@ -163,13 +166,16 @@ $LRELEASE src/src.pro >>$LOG 2>&1

# Build and package sqlitebrowser with SQLCipher support
echo Build and package sqlitebrowser with SQLCipher support >>$LOG 2>&1
mkdir build >>$LOG 2>&1
cd build >>$LOG 2>&1
if [ "${BUILD_TYPE}" = "debug" ]; then
$QMAKE sqlitebrowser.pro -r -spec macx-clang CONFIG+=debug CONFIG+=x86_64 CONFIG+=sqlcipher CONFIG+="c++14" >>$LOG 2>&1
$CMAKE -DCMAKE_BUILD_TYPE=Debug -Dsqlcipher=1 .. >>$LOG 2>&1
else
$QMAKE sqlitebrowser.pro -r -spec macx-clang CONFIG+=x86_64 CONFIG+=sqlcipher CONFIG+="c++14" >>$LOG 2>&1
$CMAKE -Dsqlcipher=1 .. >>$LOG 2>&1
fi
make -j3 >>$LOG 2>&1
make -j3 >>$LOG 2>&1 # Seems to need a 2nd time now, due to language files needing initialisation or something
cd .. >>$LOG 2>&1
cp -R build/sqlitebrowser.app src/DB\ Browser\ for\ SQLite.app >>$LOG 2>&1

# Unlock the local security keychain, so signing can be done
security unlock-keychain -p "${KEYCHAIN_PASSWORD}" "${HOME}/Library/Keychains/login.keychain"
Expand Down

0 comments on commit 33ee736

Please sign in to comment.