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) ---
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 ---
set(GP_ITEM_GLOBAL_MAP "msys-2.0.dll=${MSYS_DLL}")

list(APPEND fixup_library_dirs
  "${JTSDK_TOOLS_ROOT}/msys64/usr/bin"
)

# ======================================================================
#   PLATFORM-SPECIFIC FIXUP_BUNDLE LOGIC
# ======================================================================

# ---------------------- WINDOWS (MSYS) ----------------------
if (WIN32)

  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()

    fixup_bundle (\"\${the_exe}\" \"\${QTPLUGINS};\${extra_libs}\" \"${fixup_library_dirs}\")

    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()
  ")

# ---------------------- macOS (Qt6 + Clang + gfortran) ----------------------
elseif(APPLE)

  # Mark GCC/Fortran runtimes as system libs so fixup_bundle ignores them
  set(_fortran_system_libs
      libgcc_s.1.1.dylib
      libgfortran.5.dylib
      libquadmath.0.dylib
  )
  set(BU_SYSTEM_LIBS ${BU_SYSTEM_LIBS} ${_fortran_system_libs})

  # Ask gfortran where its runtime lives
  if(CMAKE_Fortran_COMPILER_ID STREQUAL "GNU")
    execute_process(
        COMMAND ${CMAKE_Fortran_COMPILER} -print-file-name=libgfortran.5.dylib
        OUTPUT_VARIABLE _gfortran_path
        OUTPUT_STRIP_TRAILING_WHITESPACE
    )
    get_filename_component(_gfortran_dir "${_gfortran_path}" DIRECTORY)
    list(APPEND fixup_library_dirs "${_gfortran_dir}")
  endif()

  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}\")

    list(FILTER QTPLUGINS EXCLUDE REGEX \".*\\\\.exe\")
    list(FILTER QTPLUGINS EXCLUDE REGEX \".*\\\\.dll\")
    list(FILTER QTPLUGINS EXCLUDE REGEX \".*qthid.*\")
    list(FILTER QTPLUGINS EXCLUDE REGEX \".*rigctl.*\")

    include(BundleUtilities)
    set(BU_CHMOD_BUNDLE_ITEMS ON)

    set(fixup_library_dirs \"${fixup_library_dirs}\")

    get_filename_component(wsjt_exe \"${fixup_exe}\" REALPATH)
    fixup_bundle(
        \"\${wsjt_exe}\"
        \"\${QTPLUGINS}\"
        \"\${fixup_library_dirs}\"
    )
  ")

endif()

endif (APPLE OR WIN32)

