Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,5 @@ CMakeFiles/
cmake_install.cmake
build/
*.cbp
.DS_Store
CMakeUserPresets.json
107 changes: 64 additions & 43 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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)
Expand All @@ -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)
Expand All @@ -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
Expand All @@ -40,7 +40,7 @@ file(GLOB SRC_FILES
src/gamedetails.cpp
src/galaxyapi.cpp
src/ziputil.cpp
)
)

if(USE_QT_GUI)
set(QT Qt6)
Expand All @@ -50,26 +50,26 @@ 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})
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
Expand All @@ -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 <atomic>\n"
"int main() { std::atomic<int64_t> 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)

Expand All @@ -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)