diff --git a/buildscripts/cmake/DeclareModuleSetup.cmake b/buildscripts/cmake/DeclareModuleSetup.cmake
index 2f97eeac21c80..7b54be028e80b 100644
--- a/buildscripts/cmake/DeclareModuleSetup.cmake
+++ b/buildscripts/cmake/DeclareModuleSetup.cmake
@@ -18,13 +18,149 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
+# - Creates a target and sets up common properties for Muse modules
+function(muse_create_module target_name)
+ set(options NO_QT NO_PCH NO_UNITY STUB)
+ set(oneValueArgs ALIAS)
+ cmake_parse_arguments(PARSE_ARGV 1 arg "${options}" "${oneValueArgs}" "")
+
+ # Status message
+ set(message "Configuring ${target_name}")
+ if (arg_ALIAS)
+ set(message "${message} <${arg_ALIAS}>")
+ endif()
+ if (arg_STUB)
+ set(message "${message} [stub]")
+ endif()
+ message(STATUS "${message}")
+
+ # Create target
+ if (NOT arg_NO_QT AND QT_SUPPORT)
+ # STATIC/SHARED based on BUILD_SHARED_LIBS, which is set in SetupBuildEnvironment.cmake
+ qt_add_library(${target_name})
+ else()
+ # STATIC/SHARED based on BUILD_SHARED_LIBS, which is set in SetupBuildEnvironment.cmake
+ add_library(${target_name})
+
+ set_target_properties(${target_name} PROPERTIES
+ AUTOMOC OFF
+ AUTOUIC OFF
+ AUTORCC OFF
+ )
+ endif()
+
+ # Alias target
+ if (arg_ALIAS)
+ add_library(${arg_ALIAS} ALIAS ${target_name})
+ endif()
+
+ # Include directories
+ if (NOT MUSE_FRAMEWORK_PATH)
+ set(MUSE_FRAMEWORK_PATH ${PROJECT_SOURCE_DIR})
+ endif()
+
+ target_include_directories(${target_name} PRIVATE
+ ${PROJECT_BINARY_DIR}
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}
+
+ ${PROJECT_SOURCE_DIR}/src
+
+ ${MUSE_FRAMEWORK_PATH}
+ ${MUSE_FRAMEWORK_PATH}/framework
+ ${MUSE_FRAMEWORK_PATH}/framework/global
+ ${MUSE_FRAMEWORK_PATH}/framework/testing/thirdparty/googletest/googletest/include
+
+ # compat
+ ${MUSE_FRAMEWORK_PATH}/src
+ ${MUSE_FRAMEWORK_PATH}/src/framework
+ ${MUSE_FRAMEWORK_PATH}/src/framework/global
+ ${MUSE_FRAMEWORK_PATH}/src/framework/testing/thirdparty/googletest/googletest/include
+ # end compat
+ )
+
+ # Precompiled header
+ if (NOT arg_NO_PCH AND MUSE_COMPILE_USE_PCH)
+ if (${target_name} STREQUAL muse_global)
+ target_precompile_headers_clang_ccache(${target_name} PRIVATE ${MUSE_FRAMEWORK_PATH}/buildscripts/pch/pch.h)
+ else()
+ target_precompile_headers_clang_ccache(${target_name} REUSE_FROM muse_global)
+ target_compile_definitions(${target_name} PRIVATE muse_global_EXPORTS=1)
+ set(MODULE_LINK_GLOBAL ON)
+ endif()
+ endif()
+
+ # Unity build
+ if (arg_NO_UNITY)
+ set_target_properties(${target_name} PROPERTIES UNITY_BUILD OFF)
+ elseif(MUSE_COMPILE_USE_UNITY)
+ set_target_properties(${target_name} PROPERTIES UNITY_BUILD ON)
+ endif()
+
+ # Code coverage
+ if (MUSE_ENABLE_UNIT_TESTS_CODE_COVERAGE AND MODULE_USE_COVERAGE)
+ set(COVERAGE_FLAGS -fprofile-arcs -ftest-coverage --coverage)
+ target_compile_options(${target_name} PRIVATE ${COVERAGE_FLAGS})
+ target_link_options(${target_name} PRIVATE -lgcov --coverage -fprofile-arcs -ftest-coverage)
+ endif()
+
+ # Link with global module
+ if (NOT ${target_name} STREQUAL muse_global AND MODULE_LINK_GLOBAL)
+ target_link_libraries(${target_name} PRIVATE muse_global)
+ endif()
+endfunction()
+
+function(muse_create_qml_module target_name)
+ set(oneValueArgs FOR)
+ cmake_parse_arguments(PARSE_ARGV 1 arg "" "${oneValueArgs}" "")
+
+ muse_create_module(${target_name} ${arg_UNPARSED_ARGUMENTS})
+ target_link_libraries(${target_name} INTERFACE ${target_name}plugin)
+
+ if (arg_FOR)
+ get_target_property(_for_dir ${arg_FOR} SOURCE_DIR)
+ target_include_directories(${target_name} PRIVATE ${_for_dir})
+
+ target_link_libraries(${target_name} PRIVATE ${arg_FOR})
+ endif()
+endfunction()
+
+# - Creates a target and sets up common properties for Muse thirdparty modules
+function(muse_create_thirdparty_module target_name)
+ set(oneValueArgs ALIAS)
+ cmake_parse_arguments(PARSE_ARGV 1 arg "" "${oneValueArgs}" "")
+
+ # Status message
+ set(message "Configuring ${target_name}")
+ if (arg_ALIAS)
+ set(message "${message} <${arg_ALIAS}>")
+ endif()
+ message(STATUS "${message}")
+
+ # Create target
+ # STATIC/SHARED based on BUILD_SHARED_LIBS, which is set in SetupBuildEnvironment.cmake
+ add_library(${target_name})
+
+ set_target_properties(${target_name} PROPERTIES
+ AUTOMOC OFF
+ AUTOUIC OFF
+ AUTORCC OFF
+ )
+
+ # Alias target
+ if (arg_ALIAS)
+ add_library(${arg_ALIAS} ALIAS ${target_name})
+ endif()
+endfunction()
+
+### LEGACY MACROS
+
## Declare
# declare_module(somename) - set module (target) name
## Setup
# set(MODULE somename) - set module (target) name
# set(MODULE_ALIAS somename) - set module (target) alias name
-# set(MODULE_ROOT ${CMAKE_CURRENT_LIST_DIR}) - set module root
# set(MODULE_INCLUDE ...) - set include (by default see below include_directories)
# set(MODULE_INCLUDE_PRIVATE ...) - set private include
# set(MODULE_DEF ...) - set definitions
@@ -49,7 +185,6 @@ macro(declare_module name)
set(MODULE ${name})
# just reset all settings
unset(MODULE_ALIAS)
- unset(MODULE_ROOT)
unset(MODULE_INCLUDE)
unset(MODULE_DEF)
unset(MODULE_SRC)
@@ -67,15 +202,6 @@ macro(declare_module name)
set(MODULE_USE_COVERAGE ON)
endmacro()
-macro(declare_thirdparty_module name)
- declare_module(${name})
- set(MODULE_USE_QT OFF)
- set(MODULE_LINK_GLOBAL OFF)
- set(MODULE_USE_PCH OFF)
- set(MODULE_USE_COVERAGE OFF)
-endmacro()
-
-
macro(add_qml_import_path input_var)
if (NOT ${${input_var}} STREQUAL "")
set(QML_IMPORT_PATH "$CACHE{QML_IMPORT_PATH}")
@@ -98,24 +224,32 @@ function(target_precompile_headers_clang_ccache target)
endfunction()
macro(setup_module)
- if (MODULE_IS_STUB)
- message(STATUS "Configuring ${MODULE} <${MODULE_ALIAS}> [stub]")
- else()
- message(STATUS "Configuring ${MODULE} <${MODULE_ALIAS}>")
+ set(ARGS)
+
+ if (NOT MODULE_USE_QT)
+ list(APPEND ARGS NO_QT)
endif()
- if (MODULE_USE_QT AND QT_SUPPORT)
- # STATIC/SHARED based on BUILD_SHARED_LIBS, which is set in SetupBuildEnvironment.cmake
- qt_add_library(${MODULE} ${MODULE_SRC})
- else()
- # STATIC/SHARED based on BUILD_SHARED_LIBS, which is set in SetupBuildEnvironment.cmake
- add_library(${MODULE} ${MODULE_SRC})
+ if (MODULE_IS_STUB)
+ list(APPEND ARGS STUB)
endif()
if (MODULE_ALIAS)
- add_library(${MODULE_ALIAS} ALIAS ${MODULE})
+ list(APPEND ARGS ALIAS ${MODULE_ALIAS})
endif()
+ if (NOT MODULE_USE_PCH)
+ list(APPEND ARGS NO_PCH)
+ endif()
+
+ if (NOT MODULE_USE_UNITY)
+ list(APPEND ARGS NO_UNITY)
+ endif()
+
+ muse_create_module(${MODULE} ${ARGS})
+
+ target_sources(${MODULE} PRIVATE ${MODULE_SRC})
+
if (MODULE_USE_QT AND QT_SUPPORT)
if (MODULE_QRC)
qt_add_resources(RCC_SOURCES ${MODULE_QRC})
@@ -126,12 +260,6 @@ macro(setup_module)
qt_add_big_resources(RCC_BIG_SOURCES ${MODULE_BIG_QRC})
target_sources(${MODULE} PRIVATE ${RCC_BIG_SOURCES})
endif()
- else()
- set_target_properties(${MODULE} PROPERTIES
- AUTOMOC OFF
- AUTOUIC OFF
- AUTORCC OFF
- )
endif()
add_qml_import_path(MODULE_QML_IMPORT)
@@ -145,49 +273,9 @@ macro(setup_module)
set(MUSE_FRAMEWORK_PATH ${PROJECT_SOURCE_DIR})
endif()
- if (MUSE_COMPILE_USE_PCH AND MODULE_USE_PCH)
- if (${MODULE} STREQUAL muse_global)
- target_precompile_headers_clang_ccache(${MODULE} PRIVATE ${MUSE_FRAMEWORK_PATH}/buildscripts/pch/pch.h)
- else()
- target_precompile_headers_clang_ccache(${MODULE} REUSE_FROM muse_global)
- target_compile_definitions(${MODULE} PRIVATE muse_global_EXPORTS=1)
-
- set(MODULE_LINK_GLOBAL ON)
- endif()
- endif()
-
- if (MUSE_COMPILE_USE_UNITY)
- if (MODULE_USE_UNITY)
- set_target_properties(${MODULE} PROPERTIES UNITY_BUILD ON)
- else()
- set_target_properties(${MODULE} PROPERTIES UNITY_BUILD OFF)
- endif()
- endif()
-
- target_include_directories(${MODULE} PUBLIC
- ${MODULE_INCLUDE}
- )
-
- target_include_directories(${MODULE} PRIVATE
- ${PROJECT_BINARY_DIR}
- ${CMAKE_CURRENT_BINARY_DIR}
- ${MODULE_ROOT}
-
- ${PROJECT_SOURCE_DIR}/src
-
- ${MUSE_FRAMEWORK_PATH}
- ${MUSE_FRAMEWORK_PATH}/framework
- ${MUSE_FRAMEWORK_PATH}/framework/global
- ${MUSE_FRAMEWORK_PATH}/framework/testing/thirdparty/googletest/googletest/include
-
- # compat
- ${MUSE_FRAMEWORK_PATH}/src
- ${MUSE_FRAMEWORK_PATH}/src/framework
- ${MUSE_FRAMEWORK_PATH}/src/framework/global
- ${MUSE_FRAMEWORK_PATH}/src/framework/testing/thirdparty/googletest/googletest/include
- # end compat
-
- ${MODULE_INCLUDE_PRIVATE}
+ target_include_directories(${MODULE}
+ PRIVATE ${MODULE_INCLUDE_PRIVATE}
+ PUBLIC ${MODULE_INCLUDE}
)
target_compile_definitions(${MODULE} PUBLIC
@@ -199,18 +287,8 @@ macro(setup_module)
${MODULE_DEF_PRIVATE}
)
- if (MUSE_ENABLE_UNIT_TESTS_CODE_COVERAGE AND MODULE_USE_COVERAGE)
- set(COVERAGE_FLAGS -fprofile-arcs -ftest-coverage --coverage)
- target_compile_options(${MODULE} PRIVATE ${COVERAGE_FLAGS})
- target_link_options(${MODULE} PRIVATE -lgcov --coverage)
- endif()
-
- if (NOT ${MODULE} MATCHES muse_global AND MODULE_LINK_GLOBAL)
- target_link_libraries(${MODULE} PRIVATE muse_global)
- endif()
-
target_link_libraries(${MODULE}
- PRIVATE ${MODULE_LINK} ${COVERAGE_FLAGS}
+ PRIVATE ${MODULE_LINK}
PUBLIC ${MODULE_LINK_PUBLIC}
)
endmacro()
diff --git a/buildscripts/cmake/SetupSndFile.cmake b/buildscripts/cmake/SetupSndFile.cmake
index 1b9a2d592b518..a0e58e10a309e 100644
--- a/buildscripts/cmake/SetupSndFile.cmake
+++ b/buildscripts/cmake/SetupSndFile.cmake
@@ -14,9 +14,9 @@ elseif (OS_IS_WASM)
set(LIBVORBIS_PATH "" CACHE PATH "Path to libogg sources")
set(SNDFILE_INCDIR LIBSND_PATH)
- declare_thirdparty_module(sndfile)
+ muse_create_thirdparty_module(sndfile)
- set(MODULE_SRC
+ target_sources(sndfile PRIVATE
${LIBSND_PATH}/sndfile.c
${LIBSND_PATH}/sndfile.hh
${LIBSND_PATH}/command.c
@@ -57,16 +57,14 @@ elseif (OS_IS_WASM)
${LIBVORBIS_PATH}/lib/vorbisfile.c
${LIBVORBIS_PATH}/lib/window.c
${LIBVORBIS_PATH}/lib/synthesis.c
- )
+ )
- set(MODULE_INCLUDE
+ target_include_directories(sndfile PRIVATE
${LIBSND_PATH}
${LIBOGG_PATH}/include
${LIBVORBIS_PATH}/include
${LIBVORBIS_PATH}/lib
- )
-
- setup_module()
+ )
else()
find_package(SndFile)
diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt
index 367435bd6678a..5d9f02f141747 100644
--- a/src/app/CMakeLists.txt
+++ b/src/app/CMakeLists.txt
@@ -115,6 +115,7 @@ set(LINK_LIB
muse::mpe
muse::midi
muse::learn
+ muse::learn_qml
muse::tours
muse::multiinstances
muse::cloud
@@ -133,7 +134,6 @@ set(LINK_LIB
playback
preferences
preferences_qml
- preferences_qmlplugin
instrumentsscene
musesounds
)
diff --git a/src/appshell/qml/HomePage/HomePage.qml b/src/appshell/qml/HomePage/HomePage.qml
index f2fd7da3e1689..4c32eec48e13c 100644
--- a/src/appshell/qml/HomePage/HomePage.qml
+++ b/src/appshell/qml/HomePage/HomePage.qml
@@ -26,7 +26,7 @@ import Muse.UiComponents 1.0
import Muse.Dock 1.0
import Muse.Cloud 1.0
-import Muse.Learn 1.0
+import Muse.Learn
import MuseScore.Project 1.0
import MuseScore.MuseSounds 1.0
diff --git a/src/braille/thirdparty/liblouis/CMakeLists.txt b/src/braille/thirdparty/liblouis/CMakeLists.txt
index 9dd5b06c872f4..3938087f42422 100644
--- a/src/braille/thirdparty/liblouis/CMakeLists.txt
+++ b/src/braille/thirdparty/liblouis/CMakeLists.txt
@@ -1,9 +1,9 @@
-declare_thirdparty_module(liblouis)
+muse_create_thirdparty_module(liblouis)
add_subdirectory(tables)
-set(MODULE_DEF
- -DTABLESDIR=dataPathPtr # compileTranslationTable.c
+target_compile_definitions(liblouis PRIVATE
+ TABLESDIR=dataPathPtr # compileTranslationTable.c
)
set(WIDECHARS_ARE_UCS4 TRUE) # configMS.h
@@ -21,7 +21,7 @@ configure_file(
@ONLY
)
-set(MODULE_SRC
+target_sources(liblouis PRIVATE
# Alphabetical order please!
${CMAKE_CURRENT_LIST_DIR}/liblouis/commonTranslationFunctions.c
${CMAKE_CURRENT_LIST_DIR}/liblouis/compileTranslationTable.c
@@ -36,10 +36,7 @@ set(MODULE_SRC
${CMAKE_CURRENT_LIST_DIR}/liblouis/utils.c
)
-set(MODULE_USE_UNITY OFF)
-set(MODULE_USE_COVERAGE OFF)
+set_target_properties(liblouis PROPERTIES UNITY_BUILD OFF)
-setup_module()
-
-target_no_warning(${MODULE} -Wno-conversion)
-target_no_warning(${MODULE} -w)
+target_no_warning(liblouis -Wno-conversion)
+target_no_warning(liblouis -w)
diff --git a/src/engraving/CMakeLists.txt b/src/engraving/CMakeLists.txt
index 3340c19703ed5..436571fd00585 100644
--- a/src/engraving/CMakeLists.txt
+++ b/src/engraving/CMakeLists.txt
@@ -411,7 +411,6 @@ if (QT_SUPPORT)
list(APPEND MODULE_LINK Qt::Quick)
endif()
-set(MODULE_ROOT ${CMAKE_CURRENT_LIST_DIR})
setup_module()
set_property(TARGET ${MODULE} APPEND PROPERTY AUTOMOC_MACRO_NAMES "BEGIN_QT_REGISTERED_ENUM")
diff --git a/src/framework/audio/CMakeLists.txt b/src/framework/audio/CMakeLists.txt
index b2b459012c28c..481383f700911 100644
--- a/src/framework/audio/CMakeLists.txt
+++ b/src/framework/audio/CMakeLists.txt
@@ -23,7 +23,6 @@ set(MODULE_ALIAS muse::audio)
set(MODULE_QRC main/audio.qrc)
-set(MODULE_ROOT ${CMAKE_CURRENT_LIST_DIR})
set(MODULE_QML_IMPORT ${CMAKE_CURRENT_LIST_DIR}/qml)
include(GetPlatformInfo)
diff --git a/src/framework/audio/driver/platform/win/asio/asiosdk/CMakeLists.txt b/src/framework/audio/driver/platform/win/asio/asiosdk/CMakeLists.txt
index 4f4198ed57e04..8c6cee44c1178 100644
--- a/src/framework/audio/driver/platform/win/asio/asiosdk/CMakeLists.txt
+++ b/src/framework/audio/driver/platform/win/asio/asiosdk/CMakeLists.txt
@@ -1,5 +1,5 @@
-declare_thirdparty_module(asiosdk)
+muse_create_thirdparty_module(asiosdk)
if(MUSE_MODULE_AUDIO_ASIO_SDK_PATH)
set(ASIO_SDK_PATH ${MUSE_MODULE_AUDIO_ASIO_SDK_PATH})
@@ -28,22 +28,18 @@ else()
endif()
-set(MODULE_SRC
+target_sources(asiosdk PRIVATE
${CMAKE_CURRENT_LIST_DIR}/asiosdk_asio.cpp
${CMAKE_CURRENT_LIST_DIR}/asiosdk_asiolist.cpp
${CMAKE_CURRENT_LIST_DIR}/asiosdk_asiodrivers.cpp
- )
+)
-set(MODULE_INCLUDE
+target_include_directories(asiosdk PUBLIC
${ASIO_SDK_PATH}
${ASIO_SDK_PATH}/ASIOSDK/common
${ASIO_SDK_PATH}/ASIOSDK/host
${ASIO_SDK_PATH}/ASIOSDK/host/pc
- )
-
-set(MODULE_USE_UNITY OFF)
-
-setup_module()
+)
# Silence warnings from SDK
target_compile_options(asiosdk PRIVATE /wd4267)
diff --git a/src/framework/audio/thirdparty/flac/CMakeLists.txt b/src/framework/audio/thirdparty/flac/CMakeLists.txt
index 54498b690d87a..cac66f3525d50 100644
--- a/src/framework/audio/thirdparty/flac/CMakeLists.txt
+++ b/src/framework/audio/thirdparty/flac/CMakeLists.txt
@@ -1,4 +1,4 @@
-declare_thirdparty_module(flac)
+muse_create_thirdparty_module(flac)
include(GetPlatformInfo)
include(GetCompilerInfo)
@@ -9,9 +9,10 @@ set(FLAC_SRC ${FLAC_DIR}/src)
include(GetFlacCompileInfo.cmake)
-list(APPEND FLAC_DEFS
- -DHAVE_CONFIG_H
- -DFLAC__NO_DLL)
+target_compile_definitions(flac
+ PRIVATE HAVE_CONFIG_H
+ PUBLIC FLAC__NO_DLL
+)
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "i686" AND HAVE_STACKREALIGN_FLAG)
add_compile_options(-mstackrealign)
@@ -19,18 +20,17 @@ endif()
configure_file(${FLAC_DIR}/config.cmake.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
-set(MODULE_DEF ${FLAC_DEFS})
+target_include_directories(flac
+ PUBLIC
+ ${FLAC_DIR}/include
+ ${FLAC_DIR}/src/libFLAC/include
+ ${FLAC_DIR}/src/libFLAC++/include
+ PRIVATE
+ ${CMAKE_CURRENT_BINARY_DIR}
+)
-set (MODULE_INCLUDE
- ${FLAC_DIR}
- ${FLAC_DIR}/include
- ${FLAC_DIR}/src
- ${FLAC_DIR}/src/libFLAC/include
- ${FLAC_DIR}/src/libFLAC++/include
- ${CMAKE_CURRENT_BINARY_DIR}
- )
-
-set (MODULE_SRC
+target_sources(flac PRIVATE
+ ${CMAKE_CURRENT_BINARY_DIR}/config.h
${FLAC_SRC}/libFLAC/bitmath.c
${FLAC_SRC}/libFLAC/bitreader.c
${FLAC_SRC}/libFLAC/bitwriter.c
@@ -65,29 +65,24 @@ set (MODULE_SRC
${FLAC_SRC}/libFLAC++/stream_encoder.cpp
$<$:${FLAC_DIR}/include/share/win_utf8_io.h>
$<$:${FLAC_SRC}/share/win_utf8_io/win_utf8_io.c>
- )
-
-set(MODULE_USE_UNITY OFF)
-set(MODULE_USE_COVERAGE OFF)
-
-setup_module()
+)
-target_no_warning(${MODULE} -Wno-deprecated)
-target_no_warning(${MODULE} -Wno-conversion)
-target_no_warning(${MODULE} -Wno-unused-parameter)
-target_no_warning(${MODULE} -Wno-unused-variable)
-target_no_warning(${MODULE} -Wno-type-limits)
-target_no_warning(${MODULE} -Wno-unknown-pragmas)
-target_no_warning(${MODULE} -Wno-conversion)
-target_no_warning(${MODULE} -Wno-uninitialized)
-target_no_warning(${MODULE} -Wno-shift-negative-value)
-target_no_warning(${MODULE} -Wno-implicit-fallthrough)
-target_no_warning(${MODULE} -Wno-empty-body)
-target_no_warning(${MODULE} -Wno-attributes)
-target_no_warning(${MODULE} -WMSVC-no-translation-unit-is-empty)
-target_no_warning(${MODULE} -WMSVC-no-nonstandard-extension-used)
-target_no_warning(${MODULE} -WMSVC-no-assignment-within-conditional-expression)
-target_no_warning(${MODULE} -WMSVC-no-hides-previous)
-target_no_warning(${MODULE} -WMSVC-no-undefined-assuming-extern)
-target_no_warning(${MODULE} -WMSVC-named-type-definition-in-parentheses)
-target_no_warning(${MODULE} -WMSVC-no-unreachable)
+target_no_warning(flac -Wno-deprecated)
+target_no_warning(flac -Wno-conversion)
+target_no_warning(flac -Wno-unused-parameter)
+target_no_warning(flac -Wno-unused-variable)
+target_no_warning(flac -Wno-type-limits)
+target_no_warning(flac -Wno-unknown-pragmas)
+target_no_warning(flac -Wno-conversion)
+target_no_warning(flac -Wno-uninitialized)
+target_no_warning(flac -Wno-shift-negative-value)
+target_no_warning(flac -Wno-implicit-fallthrough)
+target_no_warning(flac -Wno-empty-body)
+target_no_warning(flac -Wno-attributes)
+target_no_warning(flac -WMSVC-no-translation-unit-is-empty)
+target_no_warning(flac -WMSVC-no-nonstandard-extension-used)
+target_no_warning(flac -WMSVC-no-assignment-within-conditional-expression)
+target_no_warning(flac -WMSVC-no-hides-previous)
+target_no_warning(flac -WMSVC-no-undefined-assuming-extern)
+target_no_warning(flac -WMSVC-named-type-definition-in-parentheses)
+target_no_warning(flac -WMSVC-no-unreachable)
diff --git a/src/framework/audio/thirdparty/fluidsynth/CMakeLists.txt b/src/framework/audio/thirdparty/fluidsynth/CMakeLists.txt
index f5b745e8421c9..823c45b178139 100644
--- a/src/framework/audio/thirdparty/fluidsynth/CMakeLists.txt
+++ b/src/framework/audio/thirdparty/fluidsynth/CMakeLists.txt
@@ -1,43 +1,30 @@
-declare_thirdparty_module(fluidsynth)
+muse_create_thirdparty_module(fluidsynth)
include(${CMAKE_CURRENT_LIST_DIR}/fluidsynth.cmake)
-set(MODULE_SRC
- ${FLUIDSYNTH_SRC}
- )
+target_sources(fluidsynth PRIVATE ${FLUIDSYNTH_SRC})
-set(MODULE_INCLUDE
- ${FLUIDSYNTH_INC}
- )
+target_include_directories(fluidsynth PUBLIC ${FLUIDSYNTH_INC})
-set(MODULE_DEF
- ${FLUIDSYNTH_DEF}
- )
+target_compile_definitions(fluidsynth PUBLIC ${FLUIDSYNTH_DEF})
if (NOT MUSE_ENABLE_UNIT_TESTS_CODE_COVERAGE)
- set(MODULE_DEF ${MODULE_DEF}
- -DEXTERN_VORBIS_SUPPORT
- )
+ target_compile_definitions(fluidsynth PRIVATE EXTERN_VORBIS_SUPPORT)
endif()
-set(MODULE_USE_UNITY OFF)
-set(MODULE_USE_COVERAGE OFF)
-
-setup_module()
-
-#target_no_warning(${MODULE} -Wunused-const-variable=0)
-target_no_warning(${MODULE} -Wno-deprecated)
-target_no_warning(${MODULE} -Wno-unused-parameter)
-target_no_warning(${MODULE} -Wno-unused-variable)
-target_no_warning(${MODULE} -Wno-type-limits)
-target_no_warning(${MODULE} -Wno-unknown-pragmas)
-target_no_warning(${MODULE} -Wno-conversion)
-target_no_warning(${MODULE} -Wno-uninitialized)
-target_no_warning(${MODULE} -Wno-deprecated-declarations)
-target_no_warning(${MODULE} -WMSVC-no-translation-unit-is-empty)
-target_no_warning(${MODULE} -WMSVC-no-nonstandard-extension-used)
-target_no_warning(${MODULE} -WMSVC-no-assignment-within-conditional-expression)
-target_no_warning(${MODULE} -WMSVC-no-hides-previous)
-target_no_warning(${MODULE} -WMSVC-no-undefined-assuming-extern)
-target_no_warning(${MODULE} -WMSVC-named-type-definition-in-parentheses)
-target_no_warning(${MODULE} -WMSVC-no-different-enum-types)
+#target_no_warning(fluidsynth -Wunused-const-variable=0)
+target_no_warning(fluidsynth -Wno-deprecated)
+target_no_warning(fluidsynth -Wno-unused-parameter)
+target_no_warning(fluidsynth -Wno-unused-variable)
+target_no_warning(fluidsynth -Wno-type-limits)
+target_no_warning(fluidsynth -Wno-unknown-pragmas)
+target_no_warning(fluidsynth -Wno-conversion)
+target_no_warning(fluidsynth -Wno-uninitialized)
+target_no_warning(fluidsynth -Wno-deprecated-declarations)
+target_no_warning(fluidsynth -WMSVC-no-translation-unit-is-empty)
+target_no_warning(fluidsynth -WMSVC-no-nonstandard-extension-used)
+target_no_warning(fluidsynth -WMSVC-no-assignment-within-conditional-expression)
+target_no_warning(fluidsynth -WMSVC-no-hides-previous)
+target_no_warning(fluidsynth -WMSVC-no-undefined-assuming-extern)
+target_no_warning(fluidsynth -WMSVC-named-type-definition-in-parentheses)
+target_no_warning(fluidsynth -WMSVC-no-different-enum-types)
diff --git a/src/framework/audio/thirdparty/lame/CMakeLists.txt b/src/framework/audio/thirdparty/lame/CMakeLists.txt
index 9f8d46a89f9d9..4eaf9cbd36be9 100644
--- a/src/framework/audio/thirdparty/lame/CMakeLists.txt
+++ b/src/framework/audio/thirdparty/lame/CMakeLists.txt
@@ -1,38 +1,36 @@
-declare_thirdparty_module(lame)
+muse_create_thirdparty_module(lame)
include(GetPlatformInfo)
include(GetCompilerInfo)
set(LAME_DIR ${CMAKE_CURRENT_SOURCE_DIR})
-list(APPEND LAME_DEFS
- -DHAVE_STDINT_H
- -DHAVE_MPGLIB
- -DDECODE_ON_THE_FLY
- -DUSE_FAST_LOG
- -DTAKEHIRO_IEEE754_HACK)
+target_compile_definitions(lame PRIVATE
+ HAVE_STDINT_H
+ HAVE_MPGLIB
+ DECODE_ON_THE_FLY
+ USE_FAST_LOG
+ TAKEHIRO_IEEE754_HACK
+)
if(CC_IS_MSVC)
- list(APPEND LAME_DEFS
- -DUSE_LAYER_2
- -DHAVE_CONFIG_H
- -D_CRT_SECURE_NO_WARNINGS
- -D_CRT_SECURE_NO_DEPRECATED
- -DTAKEHIRO_IEEE754_HACK)
+ target_compile_definitions(lame PRIVATE
+ USE_LAYER_2
+ HAVE_CONFIG_H
+ _CRT_SECURE_NO_WARNINGS
+ _CRT_SECURE_NO_DEPRECATED
+ )
configure_file(${LAME_DIR}/configMS.h ${CMAKE_CURRENT_BINARY_DIR}/config.h @ONLY)
else()
- list(APPEND LAME_DEFS
- -DSTDC_HEADERS)
+ target_compile_definitions(lame PRIVATE STDC_HEADERS)
if(NOT ieee754_float32_t)
- list(APPEND LAME_DEFS
- -Dieee754_float32_t=float)
+ target_compile_definitions(lame PRIVATE
+ ieee754_float32_t=float
+ )
endif()
endif()
-set(MODULE_DEF
- ${LAME_DEFS})
-
aux_source_directory(${LAME_DIR}/libmp3lame SOURCE_LIB)
aux_source_directory(${LAME_DIR}/libmp3lame/vector/ SOURCE_LIB)
aux_source_directory(${LAME_DIR}/mpglib SOURCE_LIB)
@@ -43,42 +41,37 @@ if(OS_IS_WIN)
${LAME_DIR}/Dll/BladeMP3EncDLL.h)
endif()
-set (MODULE_INCLUDE
- ${LAME_DIR}/include
- ${LAME_DIR}/libmp3lame
- ${LAME_DIR}/mpglib
- ${LAME_DIR}
- ${CMAKE_CURRENT_BINARY_DIR}
- )
+target_sources(lame PRIVATE ${SOURCE_LIB})
-set (MODULE_SRC
- ${SOURCE_LIB}
+target_include_directories(lame
+ PUBLIC
+ ${LAME_DIR}/include
+ PRIVATE
+ ${LAME_DIR}/libmp3lame
+ ${LAME_DIR}/mpglib
+ ${LAME_DIR}
+ ${CMAKE_CURRENT_BINARY_DIR}
)
-set(MODULE_USE_UNITY OFF)
-set(MODULE_USE_COVERAGE OFF)
-
-setup_module()
-
-#target_no_warning(${MODULE} -Wunused-const-variable=0)
-target_no_warning(${MODULE} -Wno-unused-parameter)
-target_no_warning(${MODULE} -Wno-unused-variable)
-target_no_warning(${MODULE} -Wno-type-limits)
-target_no_warning(${MODULE} -Wno-unknown-pragmas)
-target_no_warning(${MODULE} -Wno-conversion)
-target_no_warning(${MODULE} -Wno-uninitialized)
-target_no_warning(${MODULE} -Wno-shift-negative-value)
-target_no_warning(${MODULE} -Wno-implicit-fallthrough)
-target_no_warning(${MODULE} -Wno-empty-body)
-target_no_warning(${MODULE} -Wno-attributes)
-target_no_warning(${MODULE} -Wc-no-absolute-value)
-target_no_warning(${MODULE} -Wc-no-tautological-pointer-compare)
-target_no_warning(${MODULE} -Wc-no-array-parameter)
-target_no_warning(${MODULE} -Wno-unused-but-set-variable)
-target_no_warning(${MODULE} -WMSVC-no-translation-unit-is-empty)
-target_no_warning(${MODULE} -WMSVC-no-nonstandard-extension-used)
-target_no_warning(${MODULE} -WMSVC-no-assignment-within-conditional-expression)
-target_no_warning(${MODULE} -WMSVC-no-hides-previous)
-target_no_warning(${MODULE} -WMSVC-no-undefined-assuming-extern)
-target_no_warning(${MODULE} -WMSVC-named-type-definition-in-parentheses)
-target_no_warning(${MODULE} -WMSVC-no-benign-redefinition)
+#target_no_warning(lame -Wunused-const-variable=0)
+target_no_warning(lame -Wno-unused-parameter)
+target_no_warning(lame -Wno-unused-variable)
+target_no_warning(lame -Wno-type-limits)
+target_no_warning(lame -Wno-unknown-pragmas)
+target_no_warning(lame -Wno-conversion)
+target_no_warning(lame -Wno-uninitialized)
+target_no_warning(lame -Wno-shift-negative-value)
+target_no_warning(lame -Wno-implicit-fallthrough)
+target_no_warning(lame -Wno-empty-body)
+target_no_warning(lame -Wno-attributes)
+target_no_warning(lame -Wc-no-absolute-value)
+target_no_warning(lame -Wc-no-tautological-pointer-compare)
+target_no_warning(lame -Wc-no-array-parameter)
+target_no_warning(lame -Wno-unused-but-set-variable)
+target_no_warning(lame -WMSVC-no-translation-unit-is-empty)
+target_no_warning(lame -WMSVC-no-nonstandard-extension-used)
+target_no_warning(lame -WMSVC-no-assignment-within-conditional-expression)
+target_no_warning(lame -WMSVC-no-hides-previous)
+target_no_warning(lame -WMSVC-no-undefined-assuming-extern)
+target_no_warning(lame -WMSVC-named-type-definition-in-parentheses)
+target_no_warning(lame -WMSVC-no-benign-redefinition)
diff --git a/src/framework/audio/thirdparty/opusenc/CMakeLists.txt b/src/framework/audio/thirdparty/opusenc/CMakeLists.txt
index d21c631d2bb85..d60a85fc09d3f 100644
--- a/src/framework/audio/thirdparty/opusenc/CMakeLists.txt
+++ b/src/framework/audio/thirdparty/opusenc/CMakeLists.txt
@@ -1,4 +1,4 @@
-declare_thirdparty_module(opusenc)
+muse_create_thirdparty_module(opusenc)
include(GetPlatformInfo)
include(GetCompilerInfo)
@@ -14,43 +14,42 @@ aux_source_directory(${OPUSENC_DIR}/src SOURCE_LIB)
configure_file(${OPUSENC_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
-set(MODULE_DEF
- -DOUTSIDE_SPEEX
- -DRANDOM_PREFIX=opusenc_prefix)
-
-set(MODULE_INCLUDE
- ${OPUSENC_DIR}/include
- ${OPUSENC_DIR}/src
- ${OPUSENC_DIR}
- ${OPUS_INCLUDE_DIRS}
- )
-
-set(MODULE_SRC
+target_sources(opusenc PRIVATE
${SOURCE_LIB}
- )
-
-set(MODULE_LINK ${OPUS_LIBRARIES})
-
-set(MODULE_USE_UNITY OFF)
-set(MODULE_USE_COVERAGE OFF)
-
-setup_module()
-
-target_no_warning(${MODULE} -Wno-unused-parameter)
-target_no_warning(${MODULE} -Wno-unused-variable)
-target_no_warning(${MODULE} -Wno-type-limits)
-target_no_warning(${MODULE} -Wno-unknown-pragmas)
-target_no_warning(${MODULE} -Wno-conversion)
-target_no_warning(${MODULE} -Wno-uninitialized)
-target_no_warning(${MODULE} -Wno-shift-negative-value)
-target_no_warning(${MODULE} -Wno-implicit-fallthrough)
-target_no_warning(${MODULE} -Wno-empty-body)
-target_no_warning(${MODULE} -Wno-attributes)
-target_no_warning(${MODULE} -Wno-sign-compare)
-target_no_warning(${MODULE} -Wno-restrict)
-target_no_warning(${MODULE} -WMSVC-no-translation-unit-is-empty)
-target_no_warning(${MODULE} -WMSVC-no-nonstandard-extension-used)
-target_no_warning(${MODULE} -WMSVC-no-assignment-within-conditional-expression)
-target_no_warning(${MODULE} -WMSVC-no-hides-previous)
-target_no_warning(${MODULE} -WMSVC-no-undefined-assuming-extern)
-target_no_warning(${MODULE} -WMSVC-named-type-definition-in-parentheses)
+ ${CMAKE_CURRENT_BINARY_DIR}/config.h
+)
+
+target_compile_definitions(opusenc PRIVATE
+ OUTSIDE_SPEEX
+ RANDOM_PREFIX=opusenc_prefix
+)
+
+target_include_directories(opusenc
+ PUBLIC
+ ${OPUSENC_DIR}/include
+ ${OPUS_INCLUDE_DIRS}
+ PRIVATE
+ ${OPUSENC_DIR}/src
+ ${OPUSENC_DIR}
+)
+
+target_link_libraries(opusenc PRIVATE ${OPUS_LIBRARIES})
+
+target_no_warning(opusenc -Wno-unused-parameter)
+target_no_warning(opusenc -Wno-unused-variable)
+target_no_warning(opusenc -Wno-type-limits)
+target_no_warning(opusenc -Wno-unknown-pragmas)
+target_no_warning(opusenc -Wno-conversion)
+target_no_warning(opusenc -Wno-uninitialized)
+target_no_warning(opusenc -Wno-shift-negative-value)
+target_no_warning(opusenc -Wno-implicit-fallthrough)
+target_no_warning(opusenc -Wno-empty-body)
+target_no_warning(opusenc -Wno-attributes)
+target_no_warning(opusenc -Wno-sign-compare)
+target_no_warning(opusenc -Wno-restrict)
+target_no_warning(opusenc -WMSVC-no-translation-unit-is-empty)
+target_no_warning(opusenc -WMSVC-no-nonstandard-extension-used)
+target_no_warning(opusenc -WMSVC-no-assignment-within-conditional-expression)
+target_no_warning(opusenc -WMSVC-no-hides-previous)
+target_no_warning(opusenc -WMSVC-no-undefined-assuming-extern)
+target_no_warning(opusenc -WMSVC-named-type-definition-in-parentheses)
diff --git a/src/framework/learn/CMakeLists.txt b/src/framework/learn/CMakeLists.txt
index 83c5e3d5a0d06..f3ef52980a9cb 100644
--- a/src/framework/learn/CMakeLists.txt
+++ b/src/framework/learn/CMakeLists.txt
@@ -18,29 +18,22 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-declare_module(muse_learn)
-set(MODULE_ALIAS muse::learn)
+muse_create_module(muse_learn ALIAS muse::learn)
-set(MODULE_QRC learn.qrc)
-
-set(MODULE_QML_IMPORT ${CMAKE_CURRENT_LIST_DIR}/qml)
-
-set(MODULE_SRC
- ${CMAKE_CURRENT_LIST_DIR}/learnmodule.cpp
- ${CMAKE_CURRENT_LIST_DIR}/learnmodule.h
- ${CMAKE_CURRENT_LIST_DIR}/learnerrors.h
- ${CMAKE_CURRENT_LIST_DIR}/ilearnconfiguration.h
- ${CMAKE_CURRENT_LIST_DIR}/ilearnservice.h
- ${CMAKE_CURRENT_LIST_DIR}/internal/learnconfiguration.cpp
- ${CMAKE_CURRENT_LIST_DIR}/internal/learnconfiguration.h
- ${CMAKE_CURRENT_LIST_DIR}/internal/learnservice.cpp
- ${CMAKE_CURRENT_LIST_DIR}/internal/learnservice.h
- ${CMAKE_CURRENT_LIST_DIR}/view/learnpagemodel.cpp
- ${CMAKE_CURRENT_LIST_DIR}/view/learnpagemodel.h
- )
+target_sources(muse_learn PRIVATE
+ learnmodule.cpp
+ learnmodule.h
+ learnerrors.h
+ ilearnconfiguration.h
+ ilearnservice.h
+ internal/learnconfiguration.cpp
+ internal/learnconfiguration.h
+ internal/learnservice.cpp
+ internal/learnservice.h
+)
if (QT_SUPPORT)
- list(APPEND MODULE_LINK Qt::Concurrent Qt::Network Qt::Qml)
+ target_link_libraries(muse_learn PRIVATE Qt::Concurrent Qt::Network Qt::Qml)
endif()
-setup_module()
+add_subdirectory(qml/Muse/Learn)
diff --git a/src/framework/learn/learn.qrc b/src/framework/learn/learn.qrc
deleted file mode 100644
index 6f8ec1f913d08..0000000000000
--- a/src/framework/learn/learn.qrc
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
- qml/Muse/Learn/LearnPage.qml
- qml/Muse/Learn/qmldir
- qml/Muse/Learn/internal/Playlist.qml
- qml/Muse/Learn/internal/PlaylistItem.qml
- qml/Muse/Learn/internal/ClassesPage.qml
- qml/Muse/Learn/resources/marc_sabatella.JPG
-
-
diff --git a/src/framework/learn/learnmodule.cpp b/src/framework/learn/learnmodule.cpp
index de6013bc22396..9f4e1d83e68db 100644
--- a/src/framework/learn/learnmodule.cpp
+++ b/src/framework/learn/learnmodule.cpp
@@ -28,16 +28,9 @@
#include "internal/learnconfiguration.h"
#include "internal/learnservice.h"
-#include "view/learnpagemodel.h"
-
using namespace muse::learn;
using namespace muse::modularity;
-static void learn_init_qrc()
-{
- Q_INIT_RESOURCE(learn);
-}
-
std::string LearnModule::moduleName() const
{
return "learn";
@@ -52,16 +45,6 @@ void LearnModule::registerExports()
ioc()->registerExport(moduleName(), m_learnService);
}
-void LearnModule::registerResources()
-{
- learn_init_qrc();
-}
-
-void LearnModule::registerUiTypes()
-{
- qmlRegisterType("Muse.Learn", 1, 0, "LearnPageModel");
-}
-
void LearnModule::onInit(const IApplication::RunMode&)
{
m_learnConfiguration->init();
diff --git a/src/framework/learn/learnmodule.h b/src/framework/learn/learnmodule.h
index 246366f34abcc..401d75d083800 100644
--- a/src/framework/learn/learnmodule.h
+++ b/src/framework/learn/learnmodule.h
@@ -19,8 +19,8 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-#ifndef MUSE_LEARN_LEARNMODULE_H
-#define MUSE_LEARN_LEARNMODULE_H
+
+#pragma once
#include
@@ -34,8 +34,6 @@ class LearnModule : public modularity::IModuleSetup
public:
std::string moduleName() const override;
void registerExports() override;
- void registerResources() override;
- void registerUiTypes() override;
void onInit(const IApplication::RunMode& mode) override;
void onDelayedInit() override;
@@ -44,5 +42,3 @@ class LearnModule : public modularity::IModuleSetup
std::shared_ptr m_learnService;
};
}
-
-#endif // MUSE_LEARN_LEARNMODULE_H
diff --git a/src/framework/learn/qml/Muse/Learn/CMakeLists.txt b/src/framework/learn/qml/Muse/Learn/CMakeLists.txt
new file mode 100644
index 0000000000000..544140cb74411
--- /dev/null
+++ b/src/framework/learn/qml/Muse/Learn/CMakeLists.txt
@@ -0,0 +1,36 @@
+# SPDX-License-Identifier: GPL-3.0-only
+# MuseScore-CLA-applies
+#
+# MuseScore
+# Music Composition & Notation
+#
+# Copyright (C) 2025 MuseScore Limited and others
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 3 as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+muse_create_qml_module(muse_learn_qml ALIAS muse::learn_qml FOR muse_learn)
+
+qt_add_qml_module(muse_learn_qml
+ URI Muse.Learn
+ VERSION 1.0
+ SOURCES
+ learnpagemodel.cpp
+ learnpagemodel.h
+ QML_FILES
+ LearnPage.qml
+ internal/ClassesPage.qml
+ internal/Playlist.qml
+ internal/PlaylistItem.qml
+ RESOURCES
+ resources/marc_sabatella.jpg
+)
diff --git a/src/framework/learn/qml/Muse/Learn/LearnPage.qml b/src/framework/learn/qml/Muse/Learn/LearnPage.qml
index 2280cf2fe1318..54def3802dec5 100644
--- a/src/framework/learn/qml/Muse/Learn/LearnPage.qml
+++ b/src/framework/learn/qml/Muse/Learn/LearnPage.qml
@@ -25,7 +25,7 @@ import QtQuick.Layouts 1.15
import Muse.Ui 1.0
import Muse.UiComponents 1.0
-import Muse.Learn 1.0
+import Muse.Learn
import "internal"
diff --git a/src/framework/learn/qml/Muse/Learn/internal/Playlist.qml b/src/framework/learn/qml/Muse/Learn/internal/Playlist.qml
index 371cd225d81ed..99c402c559237 100644
--- a/src/framework/learn/qml/Muse/Learn/internal/Playlist.qml
+++ b/src/framework/learn/qml/Muse/Learn/internal/Playlist.qml
@@ -25,7 +25,7 @@ import QtQuick.Controls 2.15
import Muse.Ui 1.0
import Muse.UiComponents 1.0
-import Muse.Learn 1.0
+import Muse.Learn
FocusScope {
id: root
diff --git a/src/framework/learn/view/learnpagemodel.cpp b/src/framework/learn/qml/Muse/Learn/learnpagemodel.cpp
similarity index 98%
rename from src/framework/learn/view/learnpagemodel.cpp
rename to src/framework/learn/qml/Muse/Learn/learnpagemodel.cpp
index 13d66e9519a00..9597afc1055e0 100644
--- a/src/framework/learn/view/learnpagemodel.cpp
+++ b/src/framework/learn/qml/Muse/Learn/learnpagemodel.cpp
@@ -93,7 +93,7 @@ QVariantMap LearnPageModel::classesAuthor() const
"and other related courses and services to help you create your best music. "
"Take advantage of this opportunity to learn MuseScore from one of its most recognized experts!\n\n"
"(Note: Mastering MuseScore is available in English only)");
- author["avatarUrl"] = "qrc:/qml/Muse/Learn/resources/marc_sabatella.JPG";
+ author["avatarUrl"] = "qrc:/qt/qml/Muse/Learn/resources/marc_sabatella.jpg";
author["organizationName"] = muse::qtrc("learn", "Mastering MuseScore");
author["organizationUrl"] = "https://www.masteringmusescore.com/musescore4";
diff --git a/src/framework/learn/view/learnpagemodel.h b/src/framework/learn/qml/Muse/Learn/learnpagemodel.h
similarity index 95%
rename from src/framework/learn/view/learnpagemodel.h
rename to src/framework/learn/qml/Muse/Learn/learnpagemodel.h
index 0e1240f960e20..33d3ff6573abf 100644
--- a/src/framework/learn/view/learnpagemodel.h
+++ b/src/framework/learn/qml/Muse/Learn/learnpagemodel.h
@@ -19,8 +19,10 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-#ifndef MUSE_LEARN_LEARNPAGEMODEL_H
-#define MUSE_LEARN_LEARNPAGEMODEL_H
+
+#pragma once
+
+#include
#include
#include
@@ -35,6 +37,7 @@ namespace muse::learn {
class LearnPageModel : public QObject, public Injectable, public async::Asyncable
{
Q_OBJECT
+ QML_ELEMENT;
Q_PROPERTY(QVariantList startedPlaylist READ startedPlaylist NOTIFY startedPlaylistChanged)
Q_PROPERTY(QVariantList advancedPlaylist READ advancedPlaylist NOTIFY advancedPlaylistChanged)
@@ -72,5 +75,3 @@ private slots:
QString m_searchText;
};
}
-
-#endif // MUSE_LEARN_LEARNPAGEMODEL_H
diff --git a/src/framework/learn/qml/Muse/Learn/qmldir b/src/framework/learn/qml/Muse/Learn/qmldir
deleted file mode 100644
index cb6b6652c914d..0000000000000
--- a/src/framework/learn/qml/Muse/Learn/qmldir
+++ /dev/null
@@ -1,2 +0,0 @@
-module Muse.Learn
-LearnPage 1.0 LearnPage.qml
diff --git a/src/framework/learn/qml/Muse/Learn/resources/marc_sabatella.JPG b/src/framework/learn/qml/Muse/Learn/resources/marc_sabatella.jpg
similarity index 100%
rename from src/framework/learn/qml/Muse/Learn/resources/marc_sabatella.JPG
rename to src/framework/learn/qml/Muse/Learn/resources/marc_sabatella.jpg
diff --git a/src/framework/stubs/learn/CMakeLists.txt b/src/framework/stubs/learn/CMakeLists.txt
index 059c76d9b5d94..e1fbc4e2e097a 100644
--- a/src/framework/stubs/learn/CMakeLists.txt
+++ b/src/framework/stubs/learn/CMakeLists.txt
@@ -18,17 +18,11 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-declare_module(muse_learn)
-set(MODULE_ALIAS muse::learn)
+muse_create_module(muse_learn ALIAS muse::learn STUB)
-set(MODULE_QRC learn.qrc)
+target_sources(muse_learn PRIVATE
+ learnmodule.cpp
+ learnmodule.h
+)
-set(MODULE_QML_IMPORT ${CMAKE_CURRENT_LIST_DIR}/qml)
-
-set(MODULE_SRC
- ${CMAKE_CURRENT_LIST_DIR}/learnmodule.cpp
- ${CMAKE_CURRENT_LIST_DIR}/learnmodule.h
- )
-
-set(MODULE_IS_STUB ON)
-setup_module()
+add_subdirectory(qml/Muse/Learn)
diff --git a/src/framework/stubs/learn/learn.qrc b/src/framework/stubs/learn/learn.qrc
deleted file mode 100644
index 9a9632618ded0..0000000000000
--- a/src/framework/stubs/learn/learn.qrc
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- qml/Muse/Learn/LearnPage.qml
- qml/Muse/Learn/qmldir
-
-
diff --git a/src/framework/stubs/learn/learnmodule.cpp b/src/framework/stubs/learn/learnmodule.cpp
index 084ef1864634d..d80bc3fa9a561 100644
--- a/src/framework/stubs/learn/learnmodule.cpp
+++ b/src/framework/stubs/learn/learnmodule.cpp
@@ -21,21 +21,9 @@
*/
#include "learnmodule.h"
-#include
-
using namespace muse::learn;
-static void learn_init_qrc()
-{
- Q_INIT_RESOURCE(learn);
-}
-
std::string LearnModule::moduleName() const
{
return "learn_stub";
}
-
-void LearnModule::registerResources()
-{
- learn_init_qrc();
-}
diff --git a/src/framework/stubs/learn/learnmodule.h b/src/framework/stubs/learn/learnmodule.h
index e213287032385..f32f36b09f702 100644
--- a/src/framework/stubs/learn/learnmodule.h
+++ b/src/framework/stubs/learn/learnmodule.h
@@ -19,8 +19,8 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-#ifndef MUSE_LEARN_LEARNMODULE_H
-#define MUSE_LEARN_LEARNMODULE_H
+
+#pragma once
#include "modularity/imodulesetup.h"
@@ -29,8 +29,5 @@ class LearnModule : public modularity::IModuleSetup
{
public:
std::string moduleName() const override;
- void registerResources() override;
};
}
-
-#endif // MUSE_LEARN_LEARNMODULE_H
diff --git a/src/framework/stubs/learn/qml/Muse/Learn/CMakeLists.txt b/src/framework/stubs/learn/qml/Muse/Learn/CMakeLists.txt
new file mode 100644
index 0000000000000..d16f934c27ed1
--- /dev/null
+++ b/src/framework/stubs/learn/qml/Muse/Learn/CMakeLists.txt
@@ -0,0 +1,28 @@
+# SPDX-License-Identifier: GPL-3.0-only
+# MuseScore-CLA-applies
+#
+# MuseScore
+# Music Composition & Notation
+#
+# Copyright (C) 2025 MuseScore Limited and others
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 3 as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+muse_create_qml_module(muse_learn_qml ALIAS muse::learn_qml FOR muse_learn STUB)
+
+qt_add_qml_module(muse_learn_qml
+ URI Muse.Learn
+ VERSION 1.0
+ QML_FILES
+ LearnPage.qml
+)
diff --git a/src/framework/stubs/learn/qml/Muse/Learn/qmldir b/src/framework/stubs/learn/qml/Muse/Learn/qmldir
deleted file mode 100644
index cb6b6652c914d..0000000000000
--- a/src/framework/stubs/learn/qml/Muse/Learn/qmldir
+++ /dev/null
@@ -1,2 +0,0 @@
-module Muse.Learn
-LearnPage 1.0 LearnPage.qml
diff --git a/src/framework/vst/CMakeLists.txt b/src/framework/vst/CMakeLists.txt
index 15c5834534ed0..6c712046a768c 100644
--- a/src/framework/vst/CMakeLists.txt
+++ b/src/framework/vst/CMakeLists.txt
@@ -101,7 +101,7 @@ set(MODULE_INCLUDE
)
set(MODULE_LINK
- vst_sdk_3
+ vst3sdk
)
if (QT_SUPPORT)
diff --git a/src/framework/vst/sdk/CMakeLists.txt b/src/framework/vst/sdk/CMakeLists.txt
index 2ccb876cd25ff..3f84330182950 100644
--- a/src/framework/vst/sdk/CMakeLists.txt
+++ b/src/framework/vst/sdk/CMakeLists.txt
@@ -18,7 +18,7 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-declare_thirdparty_module(vst_sdk_3)
+muse_create_thirdparty_module(vst3sdk)
if(MUSE_MODULE_VST_VST3_SDK_PATH)
set(VST3_SDK_PATH ${MUSE_MODULE_VST_VST3_SDK_PATH})
@@ -51,13 +51,11 @@ include(GetCompilerInfo)
include(GetBuildType)
if (BUILD_IS_DEBUG)
- set(MODULE_DEF -DDEVELOPMENT)
+ target_compile_definitions(vst3sdk PRIVATE DEVELOPMENT)
else()
- set(MODULE_DEF -DRELEASE)
+ target_compile_definitions(vst3sdk PRIVATE RELEASE)
endif()
-set(MODULE_USE_UNITY OFF)
-
if (OS_IS_WIN)
set(PLATFORM_SRC
${VST3_SDK_PATH}/public.sdk/source/vst/hosting/module_win32.cpp
@@ -173,7 +171,7 @@ set(VST_SDK_HOSTING_SRC
${VST3_SDK_PATH}/public.sdk/source/vst/hosting/plugprovider.h
)
-set(MODULE_SRC
+target_sources(vst3sdk PRIVATE
${VST_BASE_SRC}
${VST_PLUGIN_INTERFACES_SRC}
${VST_SDK_COMMON_SRC}
@@ -181,14 +179,12 @@ set(MODULE_SRC
${PLATFORM_SRC}
)
-set(MODULE_INCLUDE
+target_include_directories(vst3sdk PUBLIC
${VST3_SDK_PATH}
)
-setup_module()
-
-target_no_warning(${MODULE} -w)
+target_no_warning(vst3sdk -w)
if (CC_IS_CLANG)
- set_property(TARGET ${MODULE} APPEND_STRING PROPERTY COMPILE_FLAGS "-fobjc-arc")
+ target_compile_options(vst3sdk PRIVATE -fobjc-arc)
endif()
diff --git a/src/preferences/CMakeLists.txt b/src/preferences/CMakeLists.txt
index 26b7ae8ec0aa8..b37fec97221d7 100644
--- a/src/preferences/CMakeLists.txt
+++ b/src/preferences/CMakeLists.txt
@@ -18,8 +18,7 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-declare_module(preferences)
-setup_module()
+muse_create_module(preferences)
target_sources(preferences PRIVATE
preferencesmodule.cpp
diff --git a/src/preferences/qml/MuseScore/Preferences/CMakeLists.txt b/src/preferences/qml/MuseScore/Preferences/CMakeLists.txt
index 2809569bffe28..a59aed4c3cabd 100644
--- a/src/preferences/qml/MuseScore/Preferences/CMakeLists.txt
+++ b/src/preferences/qml/MuseScore/Preferences/CMakeLists.txt
@@ -18,10 +18,9 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-declare_module(preferences_qml)
-setup_module()
+muse_create_qml_module(preferences_qml FOR preferences)
-target_link_libraries(preferences_qml PRIVATE preferences Qt::Core5Compat)
+target_link_libraries(preferences_qml PRIVATE Qt::Core5Compat)
qt_add_qml_module(preferences_qml
URI MuseScore.Preferences
diff --git a/thirdparty/beatroot/CMakeLists.txt b/thirdparty/beatroot/CMakeLists.txt
index 0cecf577f0675..5b1b4a06e32e7 100644
--- a/thirdparty/beatroot/CMakeLists.txt
+++ b/thirdparty/beatroot/CMakeLists.txt
@@ -1,6 +1,6 @@
-declare_thirdparty_module(beatroot)
+muse_create_thirdparty_module(beatroot)
-set(MODULE_SRC
+target_sources(beatroot PRIVATE
${CMAKE_CURRENT_LIST_DIR}/Agent.cpp
${CMAKE_CURRENT_LIST_DIR}/Agent.h
${CMAKE_CURRENT_LIST_DIR}/AgentList.cpp
@@ -12,9 +12,5 @@ set(MODULE_SRC
${CMAKE_CURRENT_LIST_DIR}/Induction.h
)
-set(MODULE_USE_COVERAGE OFF)
-
-setup_module()
-
-target_no_warning(${MODULE} -Wno-conversion)
-target_no_warning(${MODULE} -Wno-unused-but-set-variable)
+target_no_warning(beatroot -Wno-conversion)
+target_no_warning(beatroot -Wno-unused-but-set-variable)
diff --git a/thirdparty/rtf2html/CMakeLists.txt b/thirdparty/rtf2html/CMakeLists.txt
index 7c785b47f6b91..fa4bfa35a340f 100644
--- a/thirdparty/rtf2html/CMakeLists.txt
+++ b/thirdparty/rtf2html/CMakeLists.txt
@@ -18,11 +18,9 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-declare_thirdparty_module(rtf2html)
+muse_create_thirdparty_module(rtf2html)
-set(MODULE_USE_QT ON)
-
-set(MODULE_SRC
+target_sources(rtf2html PRIVATE
common.h
config.h
dbg_iter.h
@@ -36,9 +34,7 @@ set(MODULE_SRC
rtf_tools.h
)
-set(MODULE_LINK Qt::Core)
-
-setup_module()
+target_link_libraries(rtf2html PRIVATE Qt::Core)
-target_no_warning(${MODULE} -Wno-conversion)
-target_no_warning(${MODULE} -Wno-deprecated-declarations)
+target_no_warning(rtf2html -Wno-conversion)
+target_no_warning(rtf2html -Wno-deprecated-declarations)