get_target_property (QtCore_location Qt6::Core LOCATION)
get_filename_component (QtCore_location ${QtCore_location} PATH)
list (APPEND fixup_library_dirs ${QtCore_location})

if (APPLE OR WIN32)
  # install rules for including 3rd party libs such as Qt

  # install a qt.conf file
  install (CODE "
        get_filename_component (the_qt_conf \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${WSJT_QT_CONF_DESTINATION}/qt.conf\" REALPATH)
        file (WRITE \"\${the_qt_conf}\"
\"[Paths]
\")
"
    #COMPONENT runtime
    )

  # if a system Qt is used (e.g. installed in /usr/lib/), it will not be included in the installation
  set (fixup_exe "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/${CMAKE_PROJECT_NAME}${CMAKE_EXECUTABLE_SUFFIX}")

  #get_filename_component (hamlib_lib_dir ${Hamlib_LIBRARIES} PATH)

  if (APPLE)
    # install required Qt plugins
    install (
      DIRECTORY
      ${QT_PLUGINS_DIR}/platforms
      ${QT_PLUGINS_DIR}/audio
      ${QT_PLUGINS_DIR}/accessible
      ${QT_PLUGINS_DIR}/imageformats
      ${QT_PLUGINS_DIR}/styles
      DESTINATION ${WSJT_PLUGIN_DESTINATION}
      CONFIGURATIONS Release MinSizeRel RelWithDebInfo
      #COMPONENT runtime
      FILES_MATCHING PATTERN "*${CMAKE_SHARED_LIBRARY_SUFFIX}"
      PATTERN "*minimal*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
      PATTERN "*offscreen*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
      PATTERN "*quick*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
      PATTERN "*webgl*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
      PATTERN "*_debug${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
      PATTERN "*${CMAKE_SHARED_LIBRARY_SUFFIX}.dSYM" EXCLUDE
      )
    install (
      FILES
      ${QT_PLUGINS_DIR}/sqldrivers/libqsqlite${CMAKE_SHARED_LIBRARY_SUFFIX}
      DESTINATION ${WSJT_PLUGIN_DESTINATION}/sqldrivers
      CONFIGURATIONS Release MinSizeRel RelWithDebInfo
      #COMPONENT runtime
      )
    # install (
    # 	DIRECTORY
    # 	${QT_PLUGINS_DIR}/platforms
    # 	${QT_PLUGINS_DIR}/audio
    #         ${QT_PLUGINS_DIR}/accessible
    # 	DESTINATION ${WSJT_PLUGIN_DESTINATION}
    # 	CONFIGURATIONS Debug
    # 	#COMPONENT runtime
    # 	FILES_MATCHING PATTERN "*_debug${CMAKE_SHARED_LIBRARY_SUFFIX}"
    # 	PATTERN "*minimal*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
    # 	PATTERN "*offscreen*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
    # 	PATTERN "*quick*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
    # 	)

    # add plugins path for Mac Bundle
    install (CODE "
          get_filename_component (the_qt_conf \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${WSJT_QT_CONF_DESTINATION}/qt.conf\" REALPATH)
          file (APPEND \"\${the_qt_conf}\"
\"Plugins = PlugIns
\")
"
      #COMPONENT runtime
      )
  endif (APPLE)

  if (WIN32)
    # DLL directories
    get_filename_component (hamlib_lib_dir ${Hamlib_LIBRARY} PATH)
    list (APPEND fixup_library_dirs ${hamlib_lib_dir}/../bin)

    get_filename_component (usb_lib_dir ${Usb_LIBRARY} PATH)
    list (APPEND fixup_library_dirs ${usb_lib_dir})

    get_filename_component (portaudio_lib_dir ${Portaudio_LIBRARY} PATH)
    list (APPEND fixup_library_dirs ${portaudio_lib_dir}/../bin)

    get_filename_component (fftw_lib_dir ${FFTW3F_LIBRARY} PATH)
    list (APPEND fixup_library_dirs ${fftw_lib_dir})

    # install required Qt plugins
    install (
      DIRECTORY
      ${QT_PLUGINS_DIR}/platforms
      ${QT_PLUGINS_DIR}/styles
      ${QT_PLUGINS_DIR}/accessible
      ${QT_PLUGINS_DIR}/audio
      ${QT_PLUGINS_DIR}/imageformats
      DESTINATION ${WSJT_PLUGIN_DESTINATION}
      CONFIGURATIONS Release MinSizeRel RelWithDebInfo
      #COMPONENT runtime
      FILES_MATCHING PATTERN "*${CMAKE_SHARED_LIBRARY_SUFFIX}"
      PATTERN "*minimal*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
      PATTERN "*offscreen*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
      PATTERN "*quick*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
      PATTERN "*d${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
      )
    install (
      FILES
      ${QT_PLUGINS_DIR}/sqldrivers/qsqlite${CMAKE_SHARED_LIBRARY_SUFFIX}
      DESTINATION ${WSJT_PLUGIN_DESTINATION}/sqldrivers
      CONFIGURATIONS Release MinSizeRel RelWithDebInfo
      #COMPONENT runtime
      )
    # install (
    # 	DIRECTORY
    # 	${QT_PLUGINS_DIR}/platforms
    # 	${QT_PLUGINS_DIR}/accessible
    # 	${QT_PLUGINS_DIR}/audio
    # 	DESTINATION ${WSJT_PLUGIN_DESTINATION}
    # 	CONFIGURATIONS Debug
    # 	#COMPONENT runtime
    # 	FILES_MATCHING PATTERN "*d${CMAKE_SHARED_LIBRARY_SUFFIX}"
    # 	PATTERN "*minimal*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
    # 	PATTERN "*offscreen*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
    # 	PATTERN "*quick*${CMAKE_SHARED_LIBRARY_SUFFIX}" EXCLUDE
    # 	)

    # add paths for WIN32
    file (RELATIVE_PATH _plugins_path "${CMAKE_INSTALL_PREFIX}/${WSJT_QT_CONF_DESTINATION}" "${CMAKE_INSTALL_PREFIX}/${WSJT_PLUGIN_DESTINATION}")
    install (CODE "
        get_filename_component (the_qt_conf \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${WSJT_QT_CONF_DESTINATION}/qt.conf\" REALPATH)
        file (APPEND \"\${the_qt_conf}\"
\"Plugins = ${_plugins_path}
\")
"
      #COMPONENT runtime
      )

    set (gp_tool "objdump")	# we want MinGW tool - not MSVC (See GetPrerequisites.cmake)
  endif (WIN32)

# --- 1) Discover msys-2.0.dll (dynamic, no hard-coding) ---
find_file(MSYS_DLL
  NAMES msys-2.0.dll
  PATHS
    "${JTSDK_TOOLS_ROOT}/msys64/usr/bin"
    $ENV{MSYS_ROOT}/usr/bin
    $ENV{MSYS2_PATH}/usr/bin
  NO_DEFAULT_PATH
)

if (MSYS_DLL AND NOT MSYS_DLL STREQUAL "MSYS_DLL-NOTFOUND")
  message(STATUS "Found msys-2.0.dll at: ${MSYS_DLL}")
else()
  message(WARNING "msys-2.0.dll not found under JTSDK tools; MAP65 may not run without it")
  message(STATUS "JTSDK_TOOLS_ROOT is: ${JTSDK_TOOLS_ROOT}")
endif()

# --- 2) Install msys-2.0.dll explicitly into bin (belt-and-suspenders) ---
# This uses the discovered absolute path; no hard-coded directories.
if (MSYS_DLL AND NOT MSYS_DLL STREQUAL "MSYS_DLL-NOTFOUND")
  install(FILES "${MSYS_DLL}" DESTINATION ${CMAKE_INSTALL_BINDIR})
  message(STATUS "msys-2.0.dll copied explicitly to ${CMAKE_INSTALL_BINDIR}")
endif()

# --- 3) Help fixup_bundle resolve names, and include msys bin in search dirs ---
# Map the bare name to the discovered absolute path for get_prerequisites/verify_app
set(GP_ITEM_GLOBAL_MAP "msys-2.0.dll=${MSYS_DLL}")

# Ensure BundleUtilities searches the MSYS bin dir and the final bundle bin dir
list(APPEND fixup_library_dirs
  "${JTSDK_TOOLS_ROOT}/msys64/usr/bin"
)

# --- 4) Run fixup_bundle and suppress verification error on msys-2.0.dll ---
INSTALL (CODE "
    get_filename_component (the_path \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${WSJT_PLUGIN_DESTINATION}\" REALPATH)
    file (GLOB_RECURSE QTPLUGINS \"\${the_path}/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")

    include (BundleUtilities)
    set (BU_CHMOD_BUNDLE_ITEMS ON)
    set (GP_ITEM_GLOBAL_MAP \"${GP_ITEM_GLOBAL_MAP}\")
    set (gp_tool ${gp_tool})
    get_filename_component (the_exe ${fixup_exe} REALPATH)

    if (\"${MSYS_DLL}\" STREQUAL \"MSYS_DLL-NOTFOUND\" OR \"${MSYS_DLL}\" STREQUAL \"\")
      set(extra_libs \"\")
      message(STATUS \"Skipping msys-2.0.dll: not found\")
    else()
      set(extra_libs \"${MSYS_DLL}\")
      message(STATUS \"Including msys-2.0.dll in fixup_bundle: ${MSYS_DLL}\")
    endif()

    set(ignore_items \"msys-2.0.dll\")
    fixup_bundle (\"\${the_exe}\" \"\${QTPLUGINS};\${extra_libs}\" \"${fixup_library_dirs}\" IGNORE_ITEM \${ignore_items})

    # Explicit copy fallback
    if (EXISTS \"${MSYS_DLL}\")
      set(_bundle_bin \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}\")
      if (EXISTS \"\${_bundle_bin}\")
        file(COPY \"${MSYS_DLL}\" DESTINATION \"\${_bundle_bin}\")
        message(STATUS \"msys-2.0.dll copied explicitly to \${_bundle_bin}\")
      endif()
    endif()
"
)
endif (APPLE OR WIN32)

