diff --git a/CMakeLists.txt b/CMakeLists.txt index 1c40a71e5..37e5314ec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.2.0) +cmake_minimum_required(VERSION 3.1) string(COMPARE EQUAL "${CMAKE_SOURCE_DIR}" "${CMAKE_BUILD_DIR}" IS_IN_SOURCE_BUILD) if(IS_IN_SOURCE_BUILD) @@ -10,7 +10,7 @@ if(WIN32) cmake_policy(SET CMP0020 OLD) endif() -project(Megatron) +project(MultiMC) enable_testing() ######## Set CMake options ######## @@ -19,12 +19,13 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) ######## Set module path ######## set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/") + +# Only used for test coverage set(MMC_SRC "${PROJECT_SOURCE_DIR}") set(MMC_BIN "${PROJECT_BINARY_DIR}") # Output all executables and shared libs in the main build folder, not in subfolders. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}) - if(UNIX) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}) endif() @@ -32,7 +33,10 @@ endif() set(CMAKE_JAVA_TARGET_OUTPUT_DIR ${PROJECT_BINARY_DIR}/jars) ######## Set compiler flags ######## -include(UseCXX14) +set(CMAKE_CXX_STANDARD_REQUIRED true) +set(CMAKE_C_STANDARD_REQUIRED true) +set(CMAKE_CXX_STANDARD 14) +set(CMAKE_C_STANDARD 11) include(Coverage) include(GenerateExportHeader) set(CMAKE_CXX_FLAGS " -Wall ${CMAKE_CXX_FLAGS}") @@ -44,21 +48,7 @@ include(Coverity) ################################ 3rd Party Libs ################################ # Find the required Qt parts -find_package(Qt5Core REQUIRED) -find_package(Qt5Widgets REQUIRED) -find_package(Qt5Concurrent REQUIRED) -find_package(Qt5Network REQUIRED) -find_package(Qt5Test REQUIRED) -find_package(Qt5Xml REQUIRED) - -include_directories( - ${Qt5Core_INCLUDE_DIRS} - ${Qt5Widgets_INCLUDE_DIRS} - ${Qt5Concurrent_INCLUDE_DIRS} - ${Qt5Test_INCLUDE_DIRS} - ${Qt5Network_INCLUDE_DIRS} - ${Qt5Xml_INCLUDE_DIRS} -) +find_package(Qt5 COMPONENTS Core Widgets Concurrent Network Test Xml) # The Qt5 cmake files don't provide its install paths, so ask qmake. include(QMakeQuery) @@ -97,27 +87,13 @@ else() set(QUAZIP_LIBRARIES -L"${CMAKE_BINARY_DIR}/External/Install/QuaZIP/lib" quazip) endif() -# Add the markdown parser thing -add_subdirectory(depends/hoedown) -include_directories(${HOEDOWN_INCLUDE_DIR}) +add_subdirectory(depends/hoedown) # markdown parser +add_subdirectory(depends/launcher) # java based launcher part for Minecraft +add_subdirectory(depends/javacheck) # java compatibility checker +add_subdirectory(depends/xz-embedded) # xz compression +add_subdirectory(depends/pack200) # java pack200 compression +add_subdirectory(depends/rainbow) # Qt extension for colors -# Add the java launcher and checker -add_subdirectory(depends/launcher) -add_subdirectory(depends/javacheck) - -# Add xz decompression -add_subdirectory(depends/xz-embedded) -include_directories(${XZ_INCLUDE_DIR}) - -# Add pack200 decompression -add_subdirectory(depends/pack200) -include_directories(${PACK200_INCLUDE_DIR}) - -# Add color thingy -add_subdirectory(depends/rainbow) -include_directories(${RAINBOW_INCLUDE_DIR}) - -# Add NBT library - with our preferred options set(NBT_BUILD_SHARED ON CACHE BOOL "Build NBT shared library") set(NBT_USE_ZLIB OFF CACHE BOOL "Build NBT library with zlib support") set(NBT_BUILD_TESTS OFF CACHE BOOL "Build NBT library tests") #FIXME: fix unit tests. @@ -125,26 +101,14 @@ add_subdirectory(depends/libnbtplusplus) ######## MultiMC Libs ######## -# Add the util library. -add_definitions(-DLIBUTIL_STATIC) -add_subdirectory(depends/util) -include_directories(${LIBUTIL_INCLUDE_DIR}) - -# Add the GUI -> Logic connection header -add_subdirectory(depends/LogicalGui) -include_directories(${LOGICALGUI_INCLUDE_DIR}) - -# Add the GUI -> Logic connection header -add_subdirectory(depends/iconfix) -include_directories(${ICONFIX_INCLUDE_DIR}) +add_subdirectory(depends/util) # various utility functions +add_subdirectory(depends/LogicalGui) # GUI -> Logic connection +add_subdirectory(depends/iconfix) # fork of Qt's QIcon loader include(Coverity) ############################### Built Artifacts ############################### add_subdirectory(tests) - add_subdirectory(logic) - add_subdirectory(application) - diff --git a/application/CMakeLists.txt b/application/CMakeLists.txt index 47563693a..ea5c9c068 100644 --- a/application/CMakeLists.txt +++ b/application/CMakeLists.txt @@ -1,4 +1,4 @@ -project(MultiMC-Application) +project(application) ######## Set URLs ######## set(MultiMC_NEWS_RSS_URL "http://multimc.org/rss.xml" CACHE STRING "URL to fetch MultiMC's news RSS feed from.") @@ -327,23 +327,18 @@ if(WIN32) set(MULTIMC_RCS resources/multimc.rc) endif() -# Link additional libraries -if(WIN32) - set(MultiMC_LINK_ADDITIONAL_LIBS ${MultiMC_LINK_ADDITIONAL_LIBS} Qt5::WinMain) -endif(WIN32) - -include_directories(../logic ${CMAKE_CURRENT_BINARY_DIR}/../logic) - # Qt 5 stuff qt5_wrap_ui(MULTIMC_UI ${MULTIMC_UIS}) qt5_add_resources(MULTIMC_RESOURCES ${MULTIMC_QRCS}) # Add executable add_executable(MultiMC MACOSX_BUNDLE WIN32 ${MULTIMC_SOURCES} ${MULTIMC_UI} ${MULTIMC_RESOURCES} ${MULTIMC_RCS}) -target_link_libraries(MultiMC MultiMC_logic xz-embedded unpack200 iconfix libUtil LogicalGui - ${QUAZIP_LIBRARIES} Qt5::Core Qt5::Xml Qt5::Widgets Qt5::Network Qt5::Concurrent - hoedown rainbow - ${MultiMC_LINK_ADDITIONAL_LIBS}) +target_link_libraries(MultiMC MultiMC_logic xz-embedded unpack200 iconfix MultiMC_util ${QUAZIP_LIBRARIES} hoedown rainbow) + +if(WIN32) + qt5_use_modules(MultiMC WinMain) +endif(WIN32) + ################################ INSTALLATION AND PACKAGING ################################ diff --git a/cmake/UseCXX11.cmake b/cmake/UseCXX11.cmake deleted file mode 100644 index f8afaa6e2..000000000 --- a/cmake/UseCXX11.cmake +++ /dev/null @@ -1,13 +0,0 @@ -if(__USECXX11_CMAKE__) - return() -endif() -set(__USECXX11_CMAKE__ TRUE) - -if(APPLE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -std=c++11") -elseif(UNIX) - # assume GCC, add C++0x/C++11 stuff - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") -elseif(MINGW) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") -endif() diff --git a/cmake/UseCXX14.cmake b/cmake/UseCXX14.cmake deleted file mode 100644 index 95c3dd2d7..000000000 --- a/cmake/UseCXX14.cmake +++ /dev/null @@ -1,13 +0,0 @@ -if(__USECXX14_CMAKE__) - return() -endif() -set(__USECXX14_CMAKE__ TRUE) - -if(APPLE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -std=c++1y") -elseif(UNIX) - # assume GCC, add C++0x/C++11 stuff - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14") -elseif(MINGW) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++14") -endif() diff --git a/depends/LogicalGui/CMakeLists.txt b/depends/LogicalGui/CMakeLists.txt index 9fb03a039..12665738b 100644 --- a/depends/LogicalGui/CMakeLists.txt +++ b/depends/LogicalGui/CMakeLists.txt @@ -1,7 +1,4 @@ project(LogicalGui) - -# Set the include dir path. -set(LOGICALGUI_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" PARENT_SCOPE) - add_library(LogicalGui STATIC LogicalGui.h) +target_include_directories(LogicalGui PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}") qt5_use_modules(LogicalGui Core) diff --git a/depends/classparser/CMakeLists.txt b/depends/classparser/CMakeLists.txt index 68ae7b736..a6c3fa14d 100644 --- a/depends/classparser/CMakeLists.txt +++ b/depends/classparser/CMakeLists.txt @@ -16,9 +16,8 @@ find_package(Qt5Core REQUIRED) include_directories(${Qt5Base_INCLUDE_DIRS}) set(CLASSPARSER_HEADERS -include/classparser_config.h - # Public headers +include/classparser_config.h include/javautils.h # Private headers @@ -35,14 +34,8 @@ src/javautils.cpp src/annotations.cpp ) -# Set the include dir path. -set(LIBGROUPVIEW_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include" PARENT_SCOPE) - -# Include self. -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) -include_directories(${CMAKE_BINARY_DIR}/include) - add_definitions(-DCLASSPARSER_LIBRARY) add_library(classparser SHARED ${CLASSPARSER_SOURCES} ${CLASSPARSER_HEADERS}) +target_include_directories(classparser PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include") qt5_use_modules(classparser Core) diff --git a/depends/hoedown/CMakeLists.txt b/depends/hoedown/CMakeLists.txt index b4ef8ef93..7902e734d 100644 --- a/depends/hoedown/CMakeLists.txt +++ b/depends/hoedown/CMakeLists.txt @@ -1,14 +1,14 @@ # hoedown 3.0.2 - https://github.com/hoedown/hoedown/archive/3.0.2.tar.gz -project(hoedown) +project(hoedown LANGUAGES C VERSION 3.0.2) set(HOEDOWN_SOURCES -hoedown/autolink.h -hoedown/buffer.h -hoedown/document.h -hoedown/escape.h -hoedown/html.h -hoedown/stack.h -hoedown/version.h +include/hoedown/autolink.h +include/hoedown/buffer.h +include/hoedown/document.h +include/hoedown/escape.h +include/hoedown/html.h +include/hoedown/stack.h +include/hoedown/version.h src/autolink.c src/buffer.c src/document.c @@ -20,10 +20,7 @@ src/stack.c src/version.c ) -# Set the include dir path. -set(HOEDOWN_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" PARENT_SCOPE) - # Include self. -include_directories(${CMAKE_CURRENT_SOURCE_DIR}) - add_library(hoedown STATIC ${HOEDOWN_SOURCES}) + +target_include_directories(hoedown PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) diff --git a/depends/hoedown/hoedown/autolink.h b/depends/hoedown/include/hoedown/autolink.h similarity index 100% rename from depends/hoedown/hoedown/autolink.h rename to depends/hoedown/include/hoedown/autolink.h diff --git a/depends/hoedown/hoedown/buffer.h b/depends/hoedown/include/hoedown/buffer.h similarity index 100% rename from depends/hoedown/hoedown/buffer.h rename to depends/hoedown/include/hoedown/buffer.h diff --git a/depends/hoedown/hoedown/document.h b/depends/hoedown/include/hoedown/document.h similarity index 100% rename from depends/hoedown/hoedown/document.h rename to depends/hoedown/include/hoedown/document.h diff --git a/depends/hoedown/hoedown/escape.h b/depends/hoedown/include/hoedown/escape.h similarity index 100% rename from depends/hoedown/hoedown/escape.h rename to depends/hoedown/include/hoedown/escape.h diff --git a/depends/hoedown/hoedown/html.h b/depends/hoedown/include/hoedown/html.h similarity index 100% rename from depends/hoedown/hoedown/html.h rename to depends/hoedown/include/hoedown/html.h diff --git a/depends/hoedown/hoedown/stack.h b/depends/hoedown/include/hoedown/stack.h similarity index 100% rename from depends/hoedown/hoedown/stack.h rename to depends/hoedown/include/hoedown/stack.h diff --git a/depends/hoedown/hoedown/version.h b/depends/hoedown/include/hoedown/version.h similarity index 100% rename from depends/hoedown/hoedown/version.h rename to depends/hoedown/include/hoedown/version.h diff --git a/depends/iconfix/CMakeLists.txt b/depends/iconfix/CMakeLists.txt index 53d8c28e8..4dfc39a98 100644 --- a/depends/iconfix/CMakeLists.txt +++ b/depends/iconfix/CMakeLists.txt @@ -1,12 +1,9 @@ -cmake_minimum_required(VERSION 2.8.11) +cmake_minimum_required(VERSION 3.1) project(iconfix) find_package(Qt5Core REQUIRED QUIET) find_package(Qt5Widgets REQUIRED QUIET) -include_directories(${Qt5Core_INCLUDE_DIRS}) -include_directories(${Qt5Widgets_INCLUDE_DIRS}) - set(ICONFIX_SOURCES xdgicon.h xdgicon.cpp @@ -15,6 +12,7 @@ internal/qiconloader.cpp internal/qiconloader_p.h ) -set(ICONFIX_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" PARENT_SCOPE) add_library(iconfix STATIC ${ICONFIX_SOURCES}) +target_include_directories(iconfix PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + qt5_use_modules(iconfix Core Widgets) diff --git a/depends/javacheck/CMakeLists.txt b/depends/javacheck/CMakeLists.txt index d4f29ff72..9768650ed 100644 --- a/depends/javacheck/CMakeLists.txt +++ b/depends/javacheck/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8.6) +cmake_minimum_required(VERSION 3.1) project(launcher Java) find_package(Java 1.6 REQUIRED COMPONENTS Development) diff --git a/depends/launcher/CMakeLists.txt b/depends/launcher/CMakeLists.txt index 7564161d4..b62805e01 100644 --- a/depends/launcher/CMakeLists.txt +++ b/depends/launcher/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8.6) +cmake_minimum_required(VERSION 3.1) project(launcher Java) find_package(Java 1.6 REQUIRED COMPONENTS Development) diff --git a/depends/libnbtplusplus b/depends/libnbtplusplus index 9d17b0a9b..5d0ffb50a 160000 --- a/depends/libnbtplusplus +++ b/depends/libnbtplusplus @@ -1 +1 @@ -Subproject commit 9d17b0a9b93e684a5ac6cac8f70d9a7909a877cf +Subproject commit 5d0ffb50a526173ce58ae57136bf5d79a7e1920d diff --git a/depends/pack200/CMakeLists.txt b/depends/pack200/CMakeLists.txt index 4624b483e..19a7643c4 100644 --- a/depends/pack200/CMakeLists.txt +++ b/depends/pack200/CMakeLists.txt @@ -1,24 +1,11 @@ -cmake_minimum_required(VERSION 2.6) - -if(WIN32) - # In Qt 5.1+ we have our own main() function, don't autolink to qtmain on Windows - cmake_policy(SET CMP0020 OLD) -endif() +cmake_minimum_required(VERSION 3.1) project(unpack200) +option(PACK200_BUILD_BINARY "Build a tiny utility that decompresses pack200 streams" OFF) + # Find ZLIB for quazip -# Use system zlib on unix and Qt ZLIB on Windows -if(UNIX) - find_package(ZLIB REQUIRED) -else(UNIX) - get_filename_component(ZLIB_FOUND_DIR "${Qt5Core_DIR}/../../../include/QtZlib" ABSOLUTE) - set(ZLIB_INCLUDE_DIRS ${ZLIB_FOUND_DIR} CACHE PATH "Path to ZLIB headers of Qt") - set(ZLIB_LIBRARIES "") - if(NOT EXISTS "${ZLIB_INCLUDE_DIRS}/zlib.h") - message("Please specify a valid zlib include dir") - endif(NOT EXISTS "${ZLIB_INCLUDE_DIRS}/zlib.h") -endif(UNIX) +find_package(ZLIB REQUIRED) set(PACK200_SRC include/unpack200.h @@ -41,19 +28,14 @@ set(PACK200_SRC set(CMAKE_POSITION_INDEPENDENT_CODE ON) -set(PACK200_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include" PARENT_SCOPE) -include_directories( - include - ${ZLIB_INCLUDE_DIRS} -) add_library(unpack200 STATIC ${PACK200_SRC}) +target_include_directories(unpack200 + PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include" + PRIVATE ${ZLIB_INCLUDE_DIRS}) -if(UNIX) - target_link_libraries(unpack200 ${ZLIB_LIBRARIES}) -else() - # zlib is part of Qt on windows. use it. - qt5_use_modules(unpack200 Core) +target_link_libraries(unpack200 ${ZLIB_LIBRARIES}) + +if(PACK200_BUILD_BINARY) + add_executable(anti200 anti200.cpp) + target_link_libraries(anti200 unpack200) endif() - -add_executable(anti200 anti200.cpp) -target_link_libraries(anti200 unpack200) diff --git a/depends/rainbow/CMakeLists.txt b/depends/rainbow/CMakeLists.txt index 6eeb2adc2..01342d1bd 100644 --- a/depends/rainbow/CMakeLists.txt +++ b/depends/rainbow/CMakeLists.txt @@ -1,20 +1,15 @@ -cmake_minimum_required(VERSION 2.8.11) +cmake_minimum_required(VERSION 3.1) project(rainbow) find_package(Qt5Core REQUIRED QUIET) find_package(Qt5Gui REQUIRED QUIET) -include_directories(${Qt5Core_INCLUDE_DIRS}) -include_directories(${Qt5Gui_INCLUDE_DIRS}) - set(RAINBOW_SOURCES -include/rainbow_config.h -include/rainbow.h src/rainbow.cpp ) add_definitions(-DRAINBOW_LIBRARY) -set(RAINBOW_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include" PARENT_SCOPE) add_library(rainbow SHARED ${RAINBOW_SOURCES}) +target_include_directories(rainbow PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include") qt5_use_modules(rainbow Core Gui) diff --git a/depends/util/CMakeLists.txt b/depends/util/CMakeLists.txt index 40adae7e5..e8646e1c8 100644 --- a/depends/util/CMakeLists.txt +++ b/depends/util/CMakeLists.txt @@ -1,42 +1,28 @@ -project(libUtil) +project(MultiMC_util) -include(UseCXX14) include(Coverage) # Find Qt find_package(Qt5Core REQUIRED) - -# Include Qt headers. -include_directories(${Qt5Base_INCLUDE_DIRS}) +find_package(Qt5Gui REQUIRED) set(LIBUTIL_SOURCES - include/libutil_config.h - - include/pathutils.h src/pathutils.cpp - - include/osutils.h - - include/userutils.h src/userutils.cpp - - include/cmdutils.h src/cmdutils.cpp - - include/modutils.h src/modutils.cpp + include/cmdutils.h + include/modutils.h + include/osutils.h + include/pathutils.h + include/userutils.h ) -# Set the include dir path. -set(LIBUTIL_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include" PARENT_SCOPE) - -# Static link! -add_definitions(-DLIBUTIL_STATIC) - -add_definitions(-DLIBUTIL_LIBRARY) - set(CMAKE_POSITION_INDEPENDENT_CODE ON) -add_library(libUtil STATIC ${LIBUTIL_SOURCES}) -qt5_use_modules(libUtil Core) -target_link_libraries(libUtil) +add_library(MultiMC_util STATIC ${LIBUTIL_SOURCES}) + +qt5_use_modules(MultiMC_util Core Gui) +generate_export_header(MultiMC_util) +target_include_directories(MultiMC_util PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include) +set_property(TARGET MultiMC_util PROPERTY CXX_STANDARD 14) diff --git a/depends/util/include/cmdutils.h b/depends/util/include/cmdutils.h index 56ae4edbc..8bf39eaad 100644 --- a/depends/util/include/cmdutils.h +++ b/depends/util/include/cmdutils.h @@ -25,7 +25,7 @@ #include #include -#include "libutil_config.h" +#include "multimc_util_export.h" /** * @file libutil/include/cmdutils.h @@ -42,7 +42,7 @@ namespace Commandline * @param args the argument string * @return a QStringList containing all arguments */ -LIBUTIL_EXPORT QStringList splitArgs(QString args); +MULTIMC_UTIL_EXPORT QStringList splitArgs(QString args); /** * @brief The FlagStyle enum @@ -85,7 +85,7 @@ enum Enum /** * @brief The ParsingError class */ -class LIBUTIL_EXPORT ParsingError : public std::runtime_error +class MULTIMC_UTIL_EXPORT ParsingError : public std::runtime_error { public: ParsingError(const QString &what); @@ -94,7 +94,7 @@ public: /** * @brief The Parser class */ -class LIBUTIL_EXPORT Parser +class MULTIMC_UTIL_EXPORT Parser { public: /** diff --git a/depends/util/include/libutil_config.h b/depends/util/include/libutil_config.h deleted file mode 100644 index 422001b8f..000000000 --- a/depends/util/include/libutil_config.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright 2013-2015 MultiMC Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include - -#ifdef LIBUTIL_STATIC -#define LIBUTIL_EXPORT -#else -#ifdef LIBUTIL_LIBRARY -#define LIBUTIL_EXPORT Q_DECL_EXPORT -#else -#define LIBUTIL_EXPORT Q_DECL_IMPORT -#endif -#endif diff --git a/depends/util/include/modutils.h b/depends/util/include/modutils.h index bc608f964..fde518816 100644 --- a/depends/util/include/modutils.h +++ b/depends/util/include/modutils.h @@ -3,7 +3,7 @@ #include #include -#include "libutil_config.h" +#include "multimc_util_export.h" class QUrl; @@ -107,7 +107,7 @@ private: void parse(); }; -LIBUTIL_EXPORT bool versionIsInInterval(const QString &version, const QString &interval); -LIBUTIL_EXPORT bool versionIsInInterval(const Version &version, const QString &interval); +MULTIMC_UTIL_EXPORT bool versionIsInInterval(const QString &version, const QString &interval); +MULTIMC_UTIL_EXPORT bool versionIsInInterval(const Version &version, const QString &interval); } diff --git a/depends/util/include/pathutils.h b/depends/util/include/pathutils.h index 82d55cd7b..6d52097fa 100644 --- a/depends/util/include/pathutils.h +++ b/depends/util/include/pathutils.h @@ -18,12 +18,12 @@ #include #include -#include "libutil_config.h" +#include "multimc_util_export.h" -LIBUTIL_EXPORT QString PathCombine(QString path1, QString path2); -LIBUTIL_EXPORT QString PathCombine(QString path1, QString path2, QString path3); +MULTIMC_UTIL_EXPORT QString PathCombine(QString path1, QString path2); +MULTIMC_UTIL_EXPORT QString PathCombine(QString path1, QString path2, QString path3); -LIBUTIL_EXPORT QString AbsolutePath(QString path); +MULTIMC_UTIL_EXPORT QString AbsolutePath(QString path); /** * Normalize path @@ -35,37 +35,37 @@ LIBUTIL_EXPORT QString AbsolutePath(QString path); */ QString NormalizePath(QString path); -LIBUTIL_EXPORT QString RemoveInvalidFilenameChars(QString string, QChar replaceWith = '-'); +MULTIMC_UTIL_EXPORT QString RemoveInvalidFilenameChars(QString string, QChar replaceWith = '-'); -LIBUTIL_EXPORT QString DirNameFromString(QString string, QString inDir = "."); +MULTIMC_UTIL_EXPORT QString DirNameFromString(QString string, QString inDir = "."); /** * Creates all the folders in a path for the specified path * last segment of the path is treated as a file name and is ignored! */ -LIBUTIL_EXPORT bool ensureFilePathExists(QString filenamepath); +MULTIMC_UTIL_EXPORT bool ensureFilePathExists(QString filenamepath); /** * Creates all the folders in a path for the specified path * last segment of the path is treated as a folder name and is created! */ -LIBUTIL_EXPORT bool ensureFolderPathExists(QString filenamepath); +MULTIMC_UTIL_EXPORT bool ensureFolderPathExists(QString filenamepath); /** * Copy a folder recursively */ -LIBUTIL_EXPORT bool copyPath(const QString &src, const QString &dst, bool follow_symlinks = true); +MULTIMC_UTIL_EXPORT bool copyPath(const QString &src, const QString &dst, bool follow_symlinks = true); /** * Delete a folder recursively */ -LIBUTIL_EXPORT bool deletePath(QString path); +MULTIMC_UTIL_EXPORT bool deletePath(QString path); /// Opens the given file in the default application. -LIBUTIL_EXPORT void openFileInDefaultProgram(QString filename); +MULTIMC_UTIL_EXPORT void openFileInDefaultProgram(QString filename); /// Opens the given directory in the default application. -LIBUTIL_EXPORT void openDirInDefaultProgram(QString dirpath, bool ensureExists = false); +MULTIMC_UTIL_EXPORT void openDirInDefaultProgram(QString dirpath, bool ensureExists = false); /// Checks if the a given Path contains "!" -LIBUTIL_EXPORT bool checkProblemticPathJava(QDir folder); +MULTIMC_UTIL_EXPORT bool checkProblemticPathJava(QDir folder); diff --git a/depends/util/include/userutils.h b/depends/util/include/userutils.h index 6ce08bce9..aadc112eb 100644 --- a/depends/util/include/userutils.h +++ b/depends/util/include/userutils.h @@ -2,16 +2,16 @@ #include -#include "libutil_config.h" +#include "multimc_util_export.h" namespace Util { // Get the Directory representing the User's Desktop -LIBUTIL_EXPORT QString getDesktopDir(); +MULTIMC_UTIL_EXPORT QString getDesktopDir(); // Create a shortcut at *location*, pointing to *dest* called with the arguments *args* // call it *name* and assign it the icon *icon* // return true if operation succeeded -LIBUTIL_EXPORT bool createShortCut(QString location, QString dest, QStringList args, +MULTIMC_UTIL_EXPORT bool createShortCut(QString location, QString dest, QStringList args, QString name, QString iconLocation); } diff --git a/depends/xz-embedded/CMakeLists.txt b/depends/xz-embedded/CMakeLists.txt index bc1759dcd..5f744671d 100644 --- a/depends/xz-embedded/CMakeLists.txt +++ b/depends/xz-embedded/CMakeLists.txt @@ -1,32 +1,26 @@ -cmake_minimum_required(VERSION 2.6) -project(xz-embedded) +cmake_minimum_required(VERSION 3.1) +project(xz-embedded LANGUAGES C) option(XZ_BUILD_BCJ "Build xz-embedded with BCJ support (native binary optimization)" OFF) option(XZ_BUILD_CRC64 "Build xz-embedded with CRC64 checksum support" ON) option(XZ_BUILD_MINIDEC "Build a tiny utility that decompresses xz streams" OFF) -set(CMAKE_C_FLAGS "-std=c99") - -include_directories(include) -set(XZ_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include" PARENT_SCOPE) - # See include/xz.h for manual feature configuration # tweak this list and xz.h to fit your needs set(XZ_SOURCES - include/xz.h - src/xz_config.h src/xz_crc32.c src/xz_crc64.c src/xz_dec_lzma2.c src/xz_dec_stream.c - src/xz_lzma2.h - src/xz_private.h - src/xz_stream.h # src/xz_dec_bcj.c ) -# TODO: look into what would be needed for plain old lzma - add_library(xz-embedded STATIC ${XZ_SOURCES}) -add_executable(xzminidec xzminidec.c) -target_link_libraries(xzminidec xz-embedded) +target_include_directories(xz-embedded PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include") +set_property(TARGET xz-embedded PROPERTY C_STANDARD 99) + +if(${XZ_BUILD_MINIDEC}) + add_executable(xzminidec xzminidec.c) + target_link_libraries(xzminidec xz-embedded) + set_property(TARGET xzminidec PROPERTY C_STANDARD 99) +endif() diff --git a/logic/CMakeLists.txt b/logic/CMakeLists.txt index 457e97f36..7e9ee1d13 100644 --- a/logic/CMakeLists.txt +++ b/logic/CMakeLists.txt @@ -1,4 +1,4 @@ -project(MultiMC-Logic) +project(MultiMC_logic) set(LOGIC_SOURCES # LOGIC - Base classes and infrastructure @@ -303,36 +303,18 @@ set(LOGIC_SOURCES ) ################################ COMPILE ################################ -if(WIN32) - add_definitions(-DZ_PREFIX) -endif() +# we need zlib +find_package(ZLIB REQUIRED) -# Add common library add_library(MultiMC_logic SHARED ${LOGIC_SOURCES}) - -set_target_properties(MultiMC_logic PROPERTIES - CXX_VISIBILITY_PRESET hidden - VISIBILITY_INLINES_HIDDEN 1) +set_target_properties(MultiMC_logic PROPERTIES CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN 1) generate_export_header(MultiMC_logic) -# Use system zlib on unix and Qt ZLIB on Windows -if(UNIX) - find_package(ZLIB REQUIRED) -else(UNIX) - get_filename_component(ZLIB_FOUND_DIR "${Qt5Core_DIR}/../../../include/QtZlib" ABSOLUTE) - set(ZLIB_INCLUDE_DIRS ${ZLIB_FOUND_DIR} CACHE PATH "Path to ZLIB headers of Qt") - set(ZLIB_LIBRARIES "") - if(NOT EXISTS "${ZLIB_INCLUDE_DIRS}/zlib.h") - message("Please specify a valid zlib include dir") - endif(NOT EXISTS "${ZLIB_INCLUDE_DIRS}/zlib.h") -endif(UNIX) - # Link -target_link_libraries(MultiMC_logic xz-embedded unpack200 iconfix libUtil LogicalGui ${QUAZIP_LIBRARIES} nbt++ - Qt5::Core Qt5::Xml Qt5::Widgets Qt5::Network Qt5::Concurrent - ${ZLIB_LIBRARIES} ${MultiMC_LINK_ADDITIONAL_LIBS}) - +target_link_libraries(MultiMC_logic xz-embedded unpack200 iconfix MultiMC_util LogicalGui ${QUAZIP_LIBRARIES} nbt++ ${ZLIB_LIBRARIES}) +qt5_use_modules(MultiMC_logic Core Xml Widgets Network Concurrent) add_dependencies(MultiMC_logic QuaZIP) -include_directories(${CMAKE_CURRENT_BINARY_DIR}) +# Mark and export headers +target_include_directories(MultiMC_logic PUBLIC "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}" PRIVATE "${ZLIB_INCLUDE_DIRS}") diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 31537c751..a09eb66a9 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,21 +1,18 @@ # run the unit tests with `make test` find_package(Qt5 COMPONENTS Test Core Network) -include_directories(../logic ${CMAKE_CURRENT_BINARY_DIR}/../logic) -include_directories(../depends/util/include/) - unset(MultiMC_TESTS) macro(add_unit_test name) unset(srcs) foreach(arg ${testname} ${ARGN}) list(APPEND srcs ${CMAKE_CURRENT_SOURCE_DIR}/${arg}) - if(WIN32) - list(APPEND srcs ${CMAKE_CURRENT_SOURCE_DIR}/test.rc) - endif() + if(WIN32) + list(APPEND srcs ${CMAKE_CURRENT_SOURCE_DIR}/test.rc) + endif() endforeach() add_executable(tst_${name} ${srcs}) - qt5_use_modules(tst_${name} Test Core Network) target_link_libraries(tst_${name} MultiMC_logic) + qt5_use_modules(tst_${name} Test Core Network) list(APPEND MultiMC_TESTS tst_${name}) add_test(NAME ${name} COMMAND tst_${name}) endmacro()