diff --git a/.gitignore b/.gitignore index 04fc697..bb70665 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,5 @@ CMakeFiles/ cmake_install.cmake build/ *.cbp +.DS_Store +CMakeUserPresets.json diff --git a/CMakeLists.txt b/CMakeLists.txt index 806c160..9e5f750 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,11 +1,11 @@ cmake_minimum_required(VERSION 3.18.0 FATAL_ERROR) project (lgogdownloader LANGUAGES C CXX VERSION 3.18) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/") +list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/") option(USE_QT_GUI "Build with Qt GUI login support" OFF) if(USE_QT_GUI) - add_definitions(-DUSE_QT_GUI_LOGIN=1) + add_compile_definitions(USE_QT_GUI_LOGIN=1) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) endif(USE_QT_GUI) @@ -20,7 +20,7 @@ find_package(Boost iostreams OPTIONAL_COMPONENTS system - ) +) find_package(CURL 7.55.0 REQUIRED) find_package(Jsoncpp REQUIRED) find_package(Tinyxml2 REQUIRED) @@ -29,7 +29,7 @@ find_package(Threads REQUIRED) find_package(ZLIB REQUIRED) find_package(Tidy REQUIRED) -file(GLOB SRC_FILES +set(SRC_FILES main.cpp src/website.cpp src/downloader.cpp @@ -40,7 +40,7 @@ file(GLOB SRC_FILES src/gamedetails.cpp src/galaxyapi.cpp src/ziputil.cpp - ) +) if(USE_QT_GUI) set(QT Qt6) @@ -50,7 +50,7 @@ if(USE_QT_GUI) find_package(Qt5 REQUIRED COMPONENTS Widgets WebEngineWidgets CONFIG) endif() - file(GLOB QT_GUI_SRC_FILES + set(QT_GUI_SRC_FILES src/gui_login.cpp ) list(APPEND SRC_FILES ${QT_GUI_SRC_FILES}) @@ -58,18 +58,18 @@ endif(USE_QT_GUI) set(GIT_CHECKOUT FALSE) -if(EXISTS ${PROJECT_SOURCE_DIR}/.git) - if(NOT EXISTS ${PROJECT_SOURCE_DIR}/.git/shallow) +if(EXISTS "${PROJECT_SOURCE_DIR}/.git") + if(NOT EXISTS "${PROJECT_SOURCE_DIR}/.git/shallow") find_package(Git) if(GIT_FOUND) set(GIT_CHECKOUT TRUE) else(GIT_FOUND) message(WARNING "Git executable not found") endif(GIT_FOUND) - else(NOT EXISTS ${PROJECT_SOURCE_DIR}/.git/shallow) + else(NOT EXISTS "${PROJECT_SOURCE_DIR}/.git/shallow") message(STATUS "Shallow Git clone detected, not attempting to retrieve version info") - endif(NOT EXISTS ${PROJECT_SOURCE_DIR}/.git/shallow) -endif(EXISTS ${PROJECT_SOURCE_DIR}/.git) + endif(NOT EXISTS "${PROJECT_SOURCE_DIR}/.git/shallow") +endif(EXISTS "${PROJECT_SOURCE_DIR}/.git") if(GIT_CHECKOUT) execute_process(COMMAND ${GIT_EXECUTABLE} diff --shortstat @@ -87,63 +87,84 @@ if(GIT_CHECKOUT) endif(GIT_SHORTSTAT) if(GIT_DIRTY) - set(PROJECT_VERSION_MINOR ${PROJECT_VERSION_MINOR}M) + set(PROJECT_VERSION_MINOR "${PROJECT_VERSION_MINOR}M") endif(GIT_DIRTY) set(PROJECT_VERSION_PATCH ${GIT_REV_PARSE}) - set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}) + set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") endif(GIT_CHECKOUT) set(VERSION_NUMBER ${PROJECT_VERSION}) set(VERSION_STRING "LGOGDownloader ${VERSION_NUMBER}") set(DEFAULT_USER_AGENT "LGOGDownloader/${VERSION_NUMBER} (${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_PROCESSOR})") -add_definitions(-D_FILE_OFFSET_BITS=64 -DVERSION_NUMBER="${VERSION_NUMBER}" -DVERSION_STRING="${VERSION_STRING}" -DDEFAULT_USER_AGENT="${DEFAULT_USER_AGENT}") +add_compile_definitions(_FILE_OFFSET_BITS=64 VERSION_NUMBER="${VERSION_NUMBER}" VERSION_STRING="${VERSION_STRING}" DEFAULT_USER_AGENT="${DEFAULT_USER_AGENT}") add_executable (${PROJECT_NAME} ${SRC_FILES}) -target_include_directories(${PROJECT_NAME} - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include - PRIVATE ${Boost_INCLUDE_DIRS} - PRIVATE ${CURL_INCLUDE_DIRS} - PRIVATE ${OAuth_INCLUDE_DIRS} - PRIVATE ${Jsoncpp_INCLUDE_DIRS} - PRIVATE ${Tinyxml2_INCLUDE_DIRS} - PRIVATE ${Rhash_INCLUDE_DIRS} - PRIVATE ${ZLIB_INCLUDE_DIRS} - PRIVATE ${Tidy_INCLUDE_DIRS} - ) +target_include_directories(${PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/include +) + +target_link_libraries(${PROJECT_NAME} PRIVATE + Boost::boost + Boost::date_time + Boost::filesystem + Boost::iostreams + Boost::program_options + Boost::regex + CURL::libcurl + Threads::Threads + ZLIB::ZLIB +) + +if(TARGET JsonCpp::JsonCpp) + target_link_libraries(${PROJECT_NAME} PRIVATE JsonCpp::JsonCpp) +else() + target_include_directories(${PROJECT_NAME} PRIVATE ${Jsoncpp_INCLUDE_DIRS}) + target_link_libraries(${PROJECT_NAME} PRIVATE ${Jsoncpp_LIBRARIES}) +endif() -target_link_libraries(${PROJECT_NAME} - PRIVATE ${Boost_LIBRARIES} - PRIVATE ${CURL_LIBRARIES} - PRIVATE ${OAuth_LIBRARIES} - PRIVATE ${Jsoncpp_LIBRARIES} - PRIVATE ${Tinyxml2_LIBRARIES} - PRIVATE ${Rhash_LIBRARIES} - PRIVATE ${CMAKE_THREAD_LIBS_INIT} - PRIVATE ${ZLIB_LIBRARIES} - PRIVATE ${Tidy_LIBRARIES} - ) +if(TARGET tinyxml2::tinyxml2) + target_link_libraries(${PROJECT_NAME} PRIVATE tinyxml2::tinyxml2) +else() + target_include_directories(${PROJECT_NAME} PRIVATE ${Tinyxml2_INCLUDE_DIRS}) + target_link_libraries(${PROJECT_NAME} PRIVATE ${Tinyxml2_LIBRARIES}) +endif() + +if(TARGET LibRHash::LibRHash) + target_link_libraries(${PROJECT_NAME} PRIVATE LibRHash::LibRHash) +else() + target_include_directories(${PROJECT_NAME} PRIVATE ${Rhash_INCLUDE_DIRS}) + target_link_libraries(${PROJECT_NAME} PRIVATE ${Rhash_LIBRARIES}) +endif() + +if(TARGET tidy-html5::tidy-html5) + target_link_libraries(${PROJECT_NAME} PRIVATE tidy-html5::tidy-html5) +else() + target_include_directories(${PROJECT_NAME} PRIVATE ${Tidy_INCLUDE_DIRS}) + target_link_libraries(${PROJECT_NAME} PRIVATE ${Tidy_LIBRARIES}) +endif() # Check if libatomic is needed in order to use std::atomic, and add # it to the list of JavaScriptCore libraries. -file(WRITE ${CMAKE_BINARY_DIR}/test_atomic.cpp +set(testAtomicPath "${CMAKE_BINARY_DIR}/test_atomic.cpp") +file(WRITE ${testAtomicPath} "#include \n" "int main() { std::atomic i(0); i++; return 0; }\n") -try_compile(ATOMIC_BUILD_SUCCEEDED ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/test_atomic.cpp) +try_compile(ATOMIC_BUILD_SUCCEEDED ${CMAKE_BINARY_DIR} ${testAtomicPath}) if (NOT ATOMIC_BUILD_SUCCEEDED) target_link_libraries(${PROJECT_NAME} PRIVATE -latomic ) endif () -file(REMOVE ${CMAKE_BINARY_DIR}/test_atomic.cpp) +file(REMOVE ${testAtomicPath}) if(USE_QT_GUI) - target_link_libraries(${PROJECT_NAME} - PRIVATE ${QT}::Widgets - PRIVATE ${QT}::WebEngineWidgets + target_link_libraries(${PROJECT_NAME} PRIVATE + ${QT}::Widgets + ${QT}::WebEngineWidgets ) endif(USE_QT_GUI) @@ -168,5 +189,5 @@ endif() set(INSTALL_BIN_DIR bin CACHE PATH "Installation directory for executables") set(INSTALL_SHARE_DIR share CACHE PATH "Installation directory for resource files") -install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}${CMAKE_EXECUTABLE_SUFFIX} DESTINATION ${INSTALL_BIN_DIR}) +install(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}${CMAKE_EXECUTABLE_SUFFIX}" DESTINATION ${INSTALL_BIN_DIR}) add_subdirectory(man)