project(MultiMC_logic) include (UnitTest) set(CORE_SOURCES # LOGIC - Base classes and infrastructure BaseInstaller.h BaseInstaller.cpp BaseVersionList.h BaseVersionList.cpp InstanceCreationTask.h InstanceCreationTask.cpp InstanceCopyTask.h InstanceCopyTask.cpp InstanceImportTask.h InstanceImportTask.cpp InstanceList.h InstanceList.cpp LoggedProcess.h LoggedProcess.cpp MessageLevel.cpp MessageLevel.h BaseInstanceProvider.h FolderInstanceProvider.h FolderInstanceProvider.cpp BaseVersion.h BaseInstance.h BaseInstance.cpp NullInstance.h MMCZip.h MMCZip.cpp MMCStrings.h MMCStrings.cpp # Prefix tree where node names are strings between separators SeparatorPrefixTree.h # WARNING: globals live here Env.h Env.cpp # JSON parsing helpers Json.h Json.cpp FileSystem.h FileSystem.cpp Exception.h # RW lock protected map RWStorage.h # A variable that has an implicit default value and keeps track of changes DefaultVariable.h # a smart pointer wrapper intended for safer use with Qt signal/slot mechanisms QObjectPtr.h # Compression support GZip.h GZip.cpp # Command line parameter parsing Commandline.h Commandline.cpp # Version number string support Version.h Version.cpp # A Recursive file system watcher RecursiveFileSystemWatcher.h RecursiveFileSystemWatcher.cpp ) add_unit_test(FileSystem SOURCES FileSystem_test.cpp LIBS MultiMC_logic DATA testdata ) add_unit_test(GZip SOURCES GZip_test.cpp LIBS MultiMC_logic ) set(PATHMATCHER_SOURCES # Path matchers pathmatcher/FSTreeMatcher.h pathmatcher/IPathMatcher.h pathmatcher/MultiMatcher.h pathmatcher/RegexpMatcher.h ) set(NET_SOURCES # network stuffs net/ByteArraySink.h net/ChecksumValidator.h net/Download.cpp net/Download.h net/FileSink.cpp net/FileSink.h net/HttpMetaCache.cpp net/HttpMetaCache.h net/MetaCacheSink.cpp net/MetaCacheSink.h net/NetAction.h net/NetJob.cpp net/NetJob.h net/PasteUpload.cpp net/PasteUpload.h net/Sink.h net/URLConstants.cpp net/URLConstants.h net/Validator.h ) # Game launch logic set(LAUNCH_SOURCES launch/steps/PostLaunchCommand.cpp launch/steps/PostLaunchCommand.h launch/steps/PreLaunchCommand.cpp launch/steps/PreLaunchCommand.h launch/steps/TextPrint.cpp launch/steps/TextPrint.h launch/steps/Update.cpp launch/steps/Update.h launch/LaunchStep.cpp launch/LaunchStep.h launch/LaunchTask.cpp launch/LaunchTask.h launch/LogModel.cpp launch/LogModel.h ) # Old update system set(UPDATE_SOURCES updater/GoUpdate.h updater/GoUpdate.cpp updater/UpdateChecker.h updater/UpdateChecker.cpp updater/DownloadTask.h updater/DownloadTask.cpp ) add_unit_test(UpdateChecker SOURCES updater/UpdateChecker_test.cpp LIBS MultiMC_logic DATA updater/testdata ) add_unit_test(DownloadTask SOURCES updater/DownloadTask_test.cpp LIBS MultiMC_logic DATA updater/testdata ) # Rarely used notifications set(NOTIFICATIONS_SOURCES # Notifications - short warning messages notifications/NotificationChecker.h notifications/NotificationChecker.cpp ) # Backend for the news bar... there's usually no news. set(NEWS_SOURCES # News System news/NewsChecker.h news/NewsChecker.cpp news/NewsEntry.h news/NewsEntry.cpp ) # Icon interface set(ICONS_SOURCES # News System icons/IIconList.h icons/IIconList.cpp ) # Minecraft services status checker set(STATUS_SOURCES # Status system status/StatusChecker.h status/StatusChecker.cpp ) # Support for Minecraft instances and launch set(MINECRAFT_SOURCES # Minecraft support minecraft/auth/AuthSession.h minecraft/auth/AuthSession.cpp minecraft/auth/MojangAccountList.h minecraft/auth/MojangAccountList.cpp minecraft/auth/MojangAccount.h minecraft/auth/MojangAccount.cpp minecraft/auth/YggdrasilTask.h minecraft/auth/YggdrasilTask.cpp minecraft/auth/flows/AuthenticateTask.h minecraft/auth/flows/AuthenticateTask.cpp minecraft/auth/flows/RefreshTask.cpp minecraft/auth/flows/RefreshTask.cpp minecraft/auth/flows/ValidateTask.h minecraft/auth/flows/ValidateTask.cpp minecraft/onesix/OneSixUpdate.h minecraft/onesix/OneSixUpdate.cpp minecraft/onesix/OneSixInstance.h minecraft/onesix/OneSixInstance.cpp minecraft/onesix/OneSixProfileStrategy.cpp minecraft/onesix/OneSixProfileStrategy.h minecraft/onesix/OneSixVersionFormat.cpp minecraft/onesix/OneSixVersionFormat.h minecraft/onesix/update/AssetUpdateTask.h minecraft/onesix/update/AssetUpdateTask.cpp minecraft/onesix/update/FMLLibrariesTask.cpp minecraft/onesix/update/FMLLibrariesTask.h minecraft/onesix/update/FoldersTask.cpp minecraft/onesix/update/FoldersTask.h minecraft/onesix/update/LibrariesTask.cpp minecraft/onesix/update/LibrariesTask.h minecraft/launch/CreateServerResourcePacksFolder.cpp minecraft/launch/CreateServerResourcePacksFolder.h minecraft/launch/ModMinecraftJar.cpp minecraft/launch/ModMinecraftJar.h minecraft/launch/DirectJavaLaunch.cpp minecraft/launch/DirectJavaLaunch.h minecraft/launch/ExtractNatives.cpp minecraft/launch/ExtractNatives.h minecraft/launch/LauncherPartLaunch.cpp minecraft/launch/LauncherPartLaunch.h minecraft/launch/PrintInstanceInfo.cpp minecraft/launch/PrintInstanceInfo.h minecraft/legacy/LegacyModList.h minecraft/legacy/LegacyModList.cpp minecraft/legacy/LegacyUpdate.h minecraft/legacy/LegacyUpdate.cpp minecraft/legacy/LegacyInstance.h minecraft/legacy/LegacyInstance.cpp minecraft/legacy/LwjglVersionList.h minecraft/legacy/LwjglVersionList.cpp minecraft/GradleSpecifier.h minecraft/MinecraftProfile.cpp minecraft/MinecraftProfile.h minecraft/MojangVersionFormat.cpp minecraft/MojangVersionFormat.h minecraft/JarMod.h minecraft/MinecraftInstance.cpp minecraft/MinecraftInstance.h minecraft/MinecraftVersion.cpp minecraft/MinecraftVersion.h minecraft/MinecraftVersionList.cpp minecraft/MinecraftVersionList.h minecraft/Rule.cpp minecraft/Rule.h minecraft/OpSys.cpp minecraft/OpSys.h minecraft/ParseUtils.cpp minecraft/ParseUtils.h minecraft/ProfileUtils.cpp minecraft/ProfileUtils.h minecraft/ProfileStrategy.h minecraft/Library.cpp minecraft/Library.h minecraft/MojangDownloadInfo.h minecraft/VersionBuildError.h minecraft/VersionFile.cpp minecraft/VersionFile.h minecraft/ProfilePatch.h minecraft/VersionFilterData.h minecraft/VersionFilterData.cpp minecraft/Mod.h minecraft/Mod.cpp minecraft/ModList.h minecraft/ModList.cpp minecraft/World.h minecraft/World.cpp minecraft/WorldList.h minecraft/WorldList.cpp # FTB minecraft/ftb/OneSixFTBInstance.h minecraft/ftb/OneSixFTBInstance.cpp minecraft/ftb/LegacyFTBInstance.h minecraft/ftb/LegacyFTBInstance.cpp minecraft/ftb/FTBProfileStrategy.h minecraft/ftb/FTBProfileStrategy.cpp minecraft/ftb/FTBInstanceProvider.cpp minecraft/ftb/FTBInstanceProvider.h minecraft/ftb/FTBPlugin.h minecraft/ftb/FTBPlugin.cpp # Assets minecraft/AssetsUtils.h minecraft/AssetsUtils.cpp # Forge and all things forge related minecraft/forge/ForgeVersion.h minecraft/forge/ForgeVersion.cpp minecraft/forge/ForgeVersionList.h minecraft/forge/ForgeVersionList.cpp minecraft/forge/ForgeXzDownload.h minecraft/forge/ForgeXzDownload.cpp minecraft/forge/LegacyForge.h minecraft/forge/LegacyForge.cpp minecraft/forge/ForgeInstaller.h minecraft/forge/ForgeInstaller.cpp # Liteloader and related things minecraft/liteloader/LiteLoaderInstaller.h minecraft/liteloader/LiteLoaderInstaller.cpp minecraft/liteloader/LiteLoaderVersionList.h minecraft/liteloader/LiteLoaderVersionList.cpp minecraft/SkinUpload.cpp minecraft/SkinUpload.h ) add_unit_test(GradleSpecifier SOURCES minecraft/GradleSpecifier_test.cpp LIBS MultiMC_logic ) add_unit_test(MojangVersionFormat SOURCES minecraft/MojangVersionFormat_test.cpp LIBS MultiMC_logic DATA minecraft/testdata ) add_unit_test(Library SOURCES minecraft/Library_test.cpp LIBS MultiMC_logic ) # FIXME: shares data with FileSystem test add_unit_test(ModList SOURCES minecraft/ModList_test.cpp DATA testdata LIBS MultiMC_logic ) add_unit_test(ParseUtils SOURCES minecraft/ParseUtils_test.cpp LIBS MultiMC_logic ) # the screenshots feature set(SCREENSHOTS_SOURCES screenshots/Screenshot.h screenshots/ImgurUpload.h screenshots/ImgurUpload.cpp screenshots/ImgurAlbumCreation.h screenshots/ImgurAlbumCreation.cpp ) set(TASKS_SOURCES # Tasks tasks/Task.h tasks/Task.cpp tasks/ThreadTask.h tasks/ThreadTask.cpp tasks/SequentialTask.h tasks/SequentialTask.cpp ) set(SETTINGS_SOURCES # Settings settings/INIFile.cpp settings/INIFile.h settings/INISettingsObject.cpp settings/INISettingsObject.h settings/OverrideSetting.cpp settings/OverrideSetting.h settings/PassthroughSetting.cpp settings/PassthroughSetting.h settings/Setting.cpp settings/Setting.h settings/SettingsObject.cpp settings/SettingsObject.h ) add_unit_test(INIFile SOURCES settings/INIFile_test.cpp LIBS MultiMC_logic ) set(JAVA_SOURCES # Java related code java/launch/CheckJava.cpp java/launch/CheckJava.h java/JavaChecker.h java/JavaChecker.cpp java/JavaCheckerJob.h java/JavaCheckerJob.cpp java/JavaInstall.h java/JavaInstall.cpp java/JavaInstallList.h java/JavaInstallList.cpp java/JavaUtils.h java/JavaUtils.cpp java/JavaVersion.h java/JavaVersion.cpp ) add_unit_test(JavaVersion SOURCES java/JavaVersion_test.cpp LIBS MultiMC_logic ) set(TRANSLATIONS_SOURCES # Translations trans/TranslationDownloader.h trans/TranslationDownloader.cpp ) set(TOOLS_SOURCES # Tools tools/BaseExternalTool.cpp tools/BaseExternalTool.h tools/BaseProfiler.cpp tools/BaseProfiler.h tools/JProfiler.cpp tools/JProfiler.h tools/JVisualVM.cpp tools/JVisualVM.h tools/MCEditTool.cpp tools/MCEditTool.h ) set(WONKO_SOURCES # Wonko wonko/tasks/BaseWonkoEntityRemoteLoadTask.cpp wonko/tasks/BaseWonkoEntityRemoteLoadTask.h wonko/tasks/BaseWonkoEntityLocalLoadTask.cpp wonko/tasks/BaseWonkoEntityLocalLoadTask.h wonko/format/WonkoFormatV1.cpp wonko/format/WonkoFormatV1.h wonko/format/WonkoFormat.cpp wonko/format/WonkoFormat.h wonko/BaseWonkoEntity.cpp wonko/BaseWonkoEntity.h wonko/WonkoVersionList.cpp wonko/WonkoVersionList.h wonko/WonkoVersion.cpp wonko/WonkoVersion.h wonko/WonkoIndex.cpp wonko/WonkoIndex.h wonko/WonkoUtil.cpp wonko/WonkoUtil.h wonko/WonkoReference.cpp wonko/WonkoReference.h ) add_unit_test(WonkoIndex SOURCES wonko/WonkoIndex_test.cpp LIBS MultiMC_logic ) ################################ COMPILE ################################ # we need zlib find_package(ZLIB REQUIRED) set(LOGIC_SOURCES ${CORE_SOURCES} ${PATHMATCHER_SOURCES} ${NET_SOURCES} ${LAUNCH_SOURCES} ${UPDATE_SOURCES} ${NOTIFICATIONS_SOURCES} ${NEWS_SOURCES} ${STATUS_SOURCES} ${MINECRAFT_SOURCES} ${SCREENSHOTS_SOURCES} ${TASKS_SOURCES} ${SETTINGS_SOURCES} ${JAVA_SOURCES} ${TRANSLATIONS_SOURCES} ${TOOLS_SOURCES} ${WONKO_SOURCES} ${ICONS_SOURCES} ) add_library(MultiMC_logic SHARED ${LOGIC_SOURCES}) set_target_properties(MultiMC_logic PROPERTIES CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN 1) generate_export_header(MultiMC_logic) # Link target_link_libraries(MultiMC_logic xz-embedded unpack200 ${QUAZIP_LIBRARIES} nbt++ ${ZLIB_LIBRARIES}) qt5_use_modules(MultiMC_logic Core Xml Network Concurrent) add_dependencies(MultiMC_logic QuaZIP) # Mark and export headers target_include_directories(MultiMC_logic PUBLIC "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}" PRIVATE "${ZLIB_INCLUDE_DIRS}")