diff --git a/third-party/CMakeLists.txt b/third-party/CMakeLists.txt index 7087ff1..7c5f6c7 100644 --- a/third-party/CMakeLists.txt +++ b/third-party/CMakeLists.txt @@ -30,19 +30,24 @@ endif() set(ARCHIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${FTDI_ARCHIVE}") set(TEMP_DIR "${CMAKE_CURRENT_SOURCE_DIR}/temp_extract") -set(NEED_DOWNLOAD FALSE) -if(NOT EXISTS "${DEBUG_LIB}" OR NOT EXISTS "${RELEASE_LIB}") - set(NEED_DOWNLOAD TRUE) +set(DOWNLOAD_SUCCESS FALSE) + +if(EXISTS "${ARCHIVE_PATH}") + execute_process( + COMMAND ${CMAKE_COMMAND} -E tar tf "${ARCHIVE_PATH}" + RESULT_VARIABLE TAR_RESULT OUTPUT_QUIET ERROR_QUIET) + if(TAR_RESULT EQUAL 0) + set(DOWNLOAD_SUCCESS TRUE) + message(STATUS "FTDI: using existing archive at ${ARCHIVE_PATH}") + else() + file(REMOVE "${ARCHIVE_PATH}") + endif() endif() -if(NEED_DOWNLOAD) +if(NOT DOWNLOAD_SUCCESS) set(RETRY_COUNT 0) - set(DOWNLOAD_SUCCESS FALSE) while(RETRY_COUNT LESS 3) math(EXPR RETRY_COUNT "${RETRY_COUNT} + 1") - if(EXISTS "${ARCHIVE_PATH}") - file(REMOVE "${ARCHIVE_PATH}") - endif() file(DOWNLOAD "${FTDI_URL}" "${ARCHIVE_PATH}" SHOW_PROGRESS STATUS DOWNLOAD_STATUS TIMEOUT 300) list(GET DOWNLOAD_STATUS 0 DOWNLOAD_ERROR_CODE) if(DOWNLOAD_ERROR_CODE EQUAL 0 AND EXISTS "${ARCHIVE_PATH}") @@ -65,63 +70,63 @@ if(NEED_DOWNLOAD) " ${ARCHIVE_PATH}\n" "Then re-run cmake.") endif() - - file(REMOVE_RECURSE "${TEMP_DIR}") - file(MAKE_DIRECTORY "${TEMP_DIR}") - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf "${ARCHIVE_PATH}" WORKING_DIRECTORY "${TEMP_DIR}") - - if(WIN32) - file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/lib") - file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/lib") - file(GLOB SOURCE_LIB "${TEMP_DIR}/${FTDI_ZIP_LIB_GLOB}") +endif() - file(GLOB SOURCE_DLL "${TEMP_DIR}/${FTDI_ZIP_DLL_GLOB}") - if(SOURCE_DLL) - file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/bin") - file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/bin") - file(COPY "${SOURCE_DLL}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/bin") - get_filename_component(SOURCE_DLL_NAME "${SOURCE_DLL}" NAME) - if(NOT SOURCE_DLL_NAME STREQUAL "ftd2xx.dll") - file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/bin/${SOURCE_DLL_NAME}" "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/bin/ftd2xx.dll") - endif() - file(COPY "${SOURCE_DLL}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/bin") - if(NOT SOURCE_DLL_NAME STREQUAL "ftd2xx.dll") - file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/bin/${SOURCE_DLL_NAME}" "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/bin/ftd2xx.dll") - endif() - endif() +file(REMOVE_RECURSE "${TEMP_DIR}") +file(MAKE_DIRECTORY "${TEMP_DIR}") +execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf "${ARCHIVE_PATH}" WORKING_DIRECTORY "${TEMP_DIR}") - if(NOT SOURCE_LIB AND FTDI_WIN_ARCH STREQUAL "x64") - file(GLOB SOURCE_LIB "${TEMP_DIR}/Static/amd64/ftd2xx.lib") - endif() - if(NOT SOURCE_LIB) - message(FATAL_ERROR - "FTDI ${FTDI_WIN_ARCH} lib not found in the downloaded CDM package.\n" - "Manually download '${FTDI_ARCHIVE}' from:\n" - " ${FTDI_URL}\n" - "Place the downloaded file at:\n" - " ${ARCHIVE_PATH}\n" - "Then re-run cmake.") +if(WIN32) + file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/lib") + file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/lib") + file(GLOB SOURCE_LIB "${TEMP_DIR}/${FTDI_ZIP_LIB_GLOB}") + + file(GLOB SOURCE_DLL "${TEMP_DIR}/${FTDI_ZIP_DLL_GLOB}") + if(SOURCE_DLL) + file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/bin") + file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/bin") + file(COPY "${SOURCE_DLL}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/bin") + get_filename_component(SOURCE_DLL_NAME "${SOURCE_DLL}" NAME) + if(NOT SOURCE_DLL_NAME STREQUAL "ftd2xx.dll") + file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/bin/${SOURCE_DLL_NAME}" "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/bin/ftd2xx.dll") endif() - file(COPY "${SOURCE_LIB}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/lib") - file(COPY "${SOURCE_LIB}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/lib") - get_filename_component(SOURCE_LIB_NAME "${SOURCE_LIB}" NAME) - if(NOT SOURCE_LIB_NAME STREQUAL "ftd2xx.lib") - file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/lib/${SOURCE_LIB_NAME}" "${DEBUG_LIB}") - file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/lib/${SOURCE_LIB_NAME}" "${RELEASE_LIB}") + file(COPY "${SOURCE_DLL}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/bin") + if(NOT SOURCE_DLL_NAME STREQUAL "ftd2xx.dll") + file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/bin/${SOURCE_DLL_NAME}" "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/bin/ftd2xx.dll") endif() - else() - file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/Linux/Debug/lib") - file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/Linux/Release/lib") - file(GLOB SOURCE_LIB "${TEMP_DIR}/*/libftd2xx-static.a") - file(COPY "${SOURCE_LIB}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/Linux/Debug/lib") - file(COPY "${SOURCE_LIB}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/Linux/Release/lib") - file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/Linux/Debug/lib/libftd2xx-static.a" "${DEBUG_LIB}") - file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/Linux/Release/lib/libftd2xx-static.a" "${RELEASE_LIB}") endif() - - file(REMOVE_RECURSE "${TEMP_DIR}") + + if(NOT SOURCE_LIB AND FTDI_WIN_ARCH STREQUAL "x64") + file(GLOB SOURCE_LIB "${TEMP_DIR}/Static/amd64/ftd2xx.lib") + endif() + if(NOT SOURCE_LIB) + message(FATAL_ERROR + "FTDI ${FTDI_WIN_ARCH} lib not found in the downloaded CDM package.\n" + "Manually download '${FTDI_ARCHIVE}' from:\n" + " ${FTDI_URL}\n" + "Place the downloaded file at:\n" + " ${ARCHIVE_PATH}\n" + "Then re-run cmake.") + endif() + file(COPY "${SOURCE_LIB}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/lib") + file(COPY "${SOURCE_LIB}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/lib") + get_filename_component(SOURCE_LIB_NAME "${SOURCE_LIB}" NAME) + if(NOT SOURCE_LIB_NAME STREQUAL "ftd2xx.lib") + file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/lib/${SOURCE_LIB_NAME}" "${DEBUG_LIB}") + file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/lib/${SOURCE_LIB_NAME}" "${RELEASE_LIB}") + endif() +else() + file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/Linux/Debug/lib") + file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/__Builds/Linux/Release/lib") + file(GLOB SOURCE_LIB "${TEMP_DIR}/*/libftd2xx-static.a") + file(COPY "${SOURCE_LIB}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/Linux/Debug/lib") + file(COPY "${SOURCE_LIB}" DESTINATION "${CMAKE_SOURCE_DIR}/__Builds/Linux/Release/lib") + file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/Linux/Debug/lib/libftd2xx-static.a" "${DEBUG_LIB}") + file(RENAME "${CMAKE_SOURCE_DIR}/__Builds/Linux/Release/lib/libftd2xx-static.a" "${RELEASE_LIB}") endif() +file(REMOVE_RECURSE "${TEMP_DIR}") + if(WIN32) add_library(ftd2xx_debug STATIC IMPORTED GLOBAL) add_library(ftd2xx_release STATIC IMPORTED GLOBAL) @@ -136,9 +141,9 @@ else() ) endif() -if(WIN32 AND DEFINED ENV{QTDIR}) - set(QT_BIN_DIR "$ENV{QTDIR}/bin") - set(QT_PLUGINS_DIR "$ENV{QTDIR}/plugins") +if(WIN32 AND DEFINED ENV{QTBIN}) + set(QT_BIN_DIR "$ENV{QTBIN}") + set(QT_PLUGINS_DIR "$ENV{QTBIN}/../plugins") set(DEBUG_BIN_DIR "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Debug/bin") set(RELEASE_BIN_DIR "${CMAKE_SOURCE_DIR}/__Builds/${FTDI_WIN_ARCH}/Release/bin")