Use External projects to prepare projects, use macdeploy only for packaging, reoder App instanciation

This commit is contained in:
Julien Wadel 2020-03-26 11:37:26 +01:00
parent 3e7452af29
commit 0c476e1ec7
4 changed files with 47 additions and 25 deletions

View file

@ -29,7 +29,7 @@ foreach(var ${vars})
#message("${var} = [${${var}}] -- ${currentHelpString}") # uncomment to see the variables being processed
list(APPEND USER_ARGS "-D${var}=${${var}}")
if( "${var}" STREQUAL "CMAKE_PREFIX_PATH")
set(PREFIX_PATH "|${${var}}")
set(PREFIX_PATH ";${${var}}")
endif()
endif()
endforeach()
@ -47,7 +47,9 @@ set(MINIZIP_OUTPUT_DIR "${CMAKE_BINARY_DIR}/minizip_OUTPUT")
set(APPLICATION_OUTPUT_DIR "${CMAKE_BINARY_DIR}/OUTPUT")
message("minizip=${MINIZIP_OUTPUT_DIR} sdk=${LINPHONE_OUTPUT_DIR}")
set(PREFIX_PATH "${LINPHONE_OUTPUT_DIR}|${MINIZIP_OUTPUT_DIR}|${APPLICATION_OUTPUT_DIR}${PREFIX_PATH}")
set(CMAKE_PREFIX_PATH "${LINPHONE_OUTPUT_DIR};${MINIZIP_OUTPUT_DIR};${APPLICATION_OUTPUT_DIR}${PREFIX_PATH}")
string(REPLACE ";" "|" PREFIX_PATH "${CMAKE_PREFIX_PATH}")
#set(PREFIX_PATH "${LINPHONE_OUTPUT_DIR}|${MINIZIP_OUTPUT_DIR}|${APPLICATION_OUTPUT_DIR}${PREFIX_PATH}")
# Avoid cmake warning if CMP0071 is not set.
if (POLICY CMP0071)
@ -104,7 +106,7 @@ list(APPEND APP_OPTIONS "-DENABLE_RELATIVE_PREFIX=${ENABLE_RELATIVE_PREFIX}")
list(APPEND APP_OPTIONS "-DLINPHONE_OUTPUT_DIR=${LINPHONE_OUTPUT_DIR}")
include(ExternalProject)
set(PROJECT_BUILD_COMMAND "--verbose")
set(PROJECT_BUILD_COMMAND "")
if(CMAKE_BUILD_PARALLEL_LEVEL)
list(APPEND APP_OPTIONS "-DCMAKE_BUILD_PARALLEL_LEVEL=${CMAKE_BUILD_PARALLEL_LEVEL}")
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.12.0") #CMAKE_BUILD_PARALLEL_LEVEL will not always work for External projects
@ -131,7 +133,8 @@ ExternalProject_Add_Step(sdk force_build
DEPENDERS build
ALWAYS 1
)
ExternalProject_Add(minizip PREFIX "${CMAKE_BINARY_DIR}/minizip"
#Don't use minizip as target name because it can be a conflict with link libraries names
ExternalProject_Add(miniziplib PREFIX "${CMAKE_BINARY_DIR}/minizip"
SOURCE_DIR "${CMAKE_SOURCE_DIR}/submodules/externals/minizip"
INSTALL_DIR "${MINIZIP_OUTPUT_DIR}"
BUILD_ALWAYS ON
@ -140,17 +143,37 @@ ExternalProject_Add(minizip PREFIX "${CMAKE_BINARY_DIR}/minizip"
LIST_SEPARATOR | # Use the alternate list separator
CMAKE_ARGS ${APP_OPTIONS} ${USER_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_PREFIX_PATH=${PREFIX_PATH}
)
ExternalProject_Add(linphone-qt PREFIX "${CMAKE_BINARY_DIR}/linphoneqt"
SOURCE_DIR "${CMAKE_SOURCE_DIR}/linphone-desktop"
INSTALL_DIR "${APPLICATION_OUTPUT_DIR}"
DEPENDS minizip sdk
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> ${PROJECT_BUILD_COMMAND}
LIST_SEPARATOR | # Use the alternate list separator
CMAKE_ARGS ${APP_OPTIONS} ${USER_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_PREFIX_PATH=${PREFIX_PATH}
# ${APP_OPTIONS}
BUILD_ALWAYS ON
)
ExternalProject_Add(linphone-qt-only PREFIX "${CMAKE_BINARY_DIR}/linphoneqt"
include(FindPkgConfig)
find_package(LinphoneCxx CONFIG)
find_package(Linphone CONFIG)
find_package(bctoolbox CONFIG)
find_package(belcard CONFIG)
find_package(Mediastreamer2 CONFIG)
find_package(ortp CONFIG)
pkg_search_module(MINIZIP minizip)
if(NOT (LinphoneCxx_FOUND) OR NOT (Linphone_FOUND) OR NOT (bctoolbox_FOUND) OR NOT (belcard_FOUND) OR NOT (Mediastreamer2_FOUND) OR NOT (ortp_FOUND) OR NOT(MINIZIP_FOUND) )
message("Projects are set as External projects. You can start building them by using for example : cmake --build . --target all")
ExternalProject_Add(linphone-qt PREFIX "${CMAKE_BINARY_DIR}/linphoneqt"
SOURCE_DIR "${CMAKE_SOURCE_DIR}/linphone-desktop"
INSTALL_DIR "${APPLICATION_OUTPUT_DIR}"
DEPENDS miniziplib sdk
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> ${PROJECT_BUILD_COMMAND}
LIST_SEPARATOR | # Use the alternate list separator
CMAKE_ARGS ${APP_OPTIONS} ${USER_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_PREFIX_PATH=${PREFIX_PATH}
# ${APP_OPTIONS}
BUILD_ALWAYS ON
)
set(AUTO_REGENERATION auto_regeneration)
add_custom_target(${AUTO_REGENERATION} ALL
COMMAND ${CMAKE_COMMAND} ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS linphone-qt)
else()
message("Adding Linphone Desktop in an IDE-friendly state")
set(CMAKE_INSTALL_PREFIX "${APPLICATION_OUTPUT_DIR}")
add_subdirectory(${CMAKE_SOURCE_DIR}/linphone-desktop)
endif()
ExternalProject_Add(linphoneqt-only PREFIX "${CMAKE_BINARY_DIR}/linphoneqt"
SOURCE_DIR "${CMAKE_SOURCE_DIR}/linphone-desktop"
INSTALL_DIR "${APPLICATION_OUTPUT_DIR}"
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> ${PROJECT_BUILD_COMMAND}

View file

@ -62,7 +62,6 @@ find_package(ortp CONFIG)
include(FindPkgConfig)
pkg_search_module(MINIZIP minizip)
set(MINIZIP_INCLUDE_DIRS "${MINIZIP_PREFIX}/${MINIZIP_INCLUDE_DIRS}")
#set(MINIZIP_LIBRARIES "${MINIZIP_PREFIX}/${MINIZIP_LIBRARIES}")
message("MINIZIP : ${MINIZIP_INCLUDE_DIRS} => ${MINIZIP_LIBRARIES}")
message("INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} FRAMEWORK_PATH=${CMAKE_FRAMEWORK_PATH}")
@ -296,12 +295,12 @@ endforeach ()
if (NOT WIN32)
add_custom_target(
check_qml DEPENDS ${QML_SOURCES}
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tools/check_qml_syntax"
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/../tools/check_qml_syntax"
)
endif()
execute_process(COMMAND ${CMAKE_COMMAND} -E copy
"${CMAKE_CURRENT_SOURCE_DIR}/tools/private/pre-commit"
"${CMAKE_CURRENT_SOURCE_DIR}/../tools/private/pre-commit"
"${CMAKE_CURRENT_SOURCE_DIR}/../.git/hooks/pre-commit"
)
set(_QML_IMPORT_PATHS "")
@ -396,8 +395,8 @@ set_target_properties(${TARGET_NAME} PROPERTIES OUTPUT_NAME "${EXECUTABLE_NAME}"
set(INCLUDED_DIRECTORIES "${LINPHONECXX_INCLUDE_DIRS}" "${MINIZIP_INCLUDE_DIRS}")
#set(LIBRARIES ${BCTOOLBOX_CORE_LIBRARIES} ${BELCARD_LIBRARIES} ${LINPHONE_LIBRARIES} ${LINPHONECXX_LIBRARIES} ${MEDIASTREAMER2_LIBRARIES} ${ORTP_LIBRARIES} ${OPUS_LIBRARIES} ${MINIZIP_LIBRARIES})
set(LIBRARIES ${BCTOOLBOX_CORE_LIBRARIES} ${BELCARD_LIBRARIES} ${LINPHONE_LIBRARIES} ${LINPHONECXX_LIBRARIES} ${MEDIASTREAMER2_LIBRARIES} ${ORTP_LIBRARIES} ${OPUS_LIBRARIES} "minizip")
set(LIBRARIES ${BCTOOLBOX_CORE_LIBRARIES} ${BELCARD_LIBRARIES} ${LINPHONE_LIBRARIES} ${LINPHONECXX_LIBRARIES} ${MEDIASTREAMER2_LIBRARIES} ${ORTP_LIBRARIES} ${OPUS_LIBRARIES} ${MINIZIP_LIBRARIES})
#set(LIBRARIES ${BCTOOLBOX_CORE_LIBRARIES} ${BELCARD_LIBRARIES} ${LINPHONE_LIBRARIES} ${LINPHONECXX_LIBRARIES} ${MEDIASTREAMER2_LIBRARIES} ${ORTP_LIBRARIES} ${OPUS_LIBRARIES} "minizip")
message("LIBRARIES : ${LIBRARIES}")
foreach (package ${QT5_PACKAGES})

View file

@ -175,8 +175,9 @@ elseif (APPLE)
install( CODE "execute_process(COMMAND install_name_tool -add_rpath \"@executable_path/../Frameworks/\" \"\${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app/Contents/MacOS/${EXECUTABLE_NAME}\")")
install( CODE "execute_process(COMMAND install_name_tool -add_rpath \"@executable_path/../lib/\" \"\${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app/Contents/MacOS/${EXECUTABLE_NAME}\")")
install( CODE "execute_process(COMMAND ${DEPLOYQT_PROGRAM} \${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app -qmldir=${LINPHONE_QML_DIR})")# -verbose=2)" COMPONENT binary_application)
if(ENABLE_APP_PACKAGING)
install( CODE "execute_process(COMMAND ${DEPLOYQT_PROGRAM} \${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app -qmldir=${LINPHONE_QML_DIR})")
endif()
if (LINPHONE_BUILDER_SIGNING_IDENTITY)
file(GLOB FRAMEWORKS_NAMES "${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_NAME}.app/Contents/Frameworks/*")
foreach (FRAMEWORK ${FRAMEWORKS_NAMES})

View file

@ -43,6 +43,7 @@ AppController::AppController (int &argc, char *argv[]) {
// Disable QML cache. Avoid malformed cache.
qputenv("QML_DISABLE_DISK_CACHE", "true");
mApp = new App(argc, argv);
// ---------------------------------------------------------------------------
QGuiApplication::setAttribute(Qt::AA_DisableHighDpiScaling, true);
@ -57,10 +58,8 @@ AppController::AppController (int &argc, char *argv[]) {
// Do not use APPLICATION_NAME here.
// The EXECUTABLE_NAME will be used in qt standard paths. It's our goal.
QCoreApplication::setApplicationName(EXECUTABLE_NAME);
QCoreApplication::setApplicationVersion(LINPHONE_QT_GIT_VERSION);
QCoreApplication::setApplicationVersion(LINPHONE_QT_GIT_VERSION);
QApplication::setOrganizationDomain(APPLICATION_ID);
mApp = new App(argc, argv);
QQuickStyle::setStyle("Default");
if (mApp->isSecondary()) {
#ifdef Q_OS_MACOS