mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2026-08-12 22:43:46 -04:00
Adjust CMake Hamlib finder for latest version
Hamlib now used libusb-1.0 and since that is available on Windows we can now build with it across platforms. This change allows for that if the custom USB backends are configured in Hamlib. As it looks like Hamlib v3.1 will be suitable for WSJT-X this change also puts in place what is needed to link to a Hamlib SO/DLL/DYLIB when required. This is switched on by not defining the CMake variable hamlib_STATIC. This could be used on Windows and Mac but Linux still must have Hamlib statically linked due to repository versions being too old. For now Hamlib remains statically linked for consistency across platforms. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6581 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
@@ -1,59 +1,82 @@
|
||||
# - Try to find hamlib
|
||||
#
|
||||
# Once done, this will define:
|
||||
#
|
||||
# hamlib_FOUND - system has Hamlib-2
|
||||
# hamlib_INCLUDE_DIRS - the Hamlib-2 include directories
|
||||
# hamlib_LIBRARIES - link these to use Hamlib-2
|
||||
# hamlib_STATIC_FOUND - system has Hamlib-2 static archive
|
||||
# hamlib_STATIC_LIBRARIES - link these to use Hamlib-2 static archive
|
||||
# hamlib_FOUND - system has Hamlib
|
||||
# hamlib_INCLUDE_DIRS - the Hamlib include directories
|
||||
# hamlib_LIBRARIES - link these to use Hamlib
|
||||
# hamlib_LIBRARY_DIRS - required shared/dynamic libraries are here
|
||||
#
|
||||
# If hamlib_STATIC is TRUE then static linking will be assumed
|
||||
#
|
||||
|
||||
include (LibFindMacros)
|
||||
|
||||
set (hamlib_LIBRARY_DIRS)
|
||||
|
||||
# pkg-config?
|
||||
find_path (__hamlib_pc_path NAMES hamlib.pc
|
||||
PATH_SUFFIXES lib/pkgconfig
|
||||
)
|
||||
)
|
||||
if (__hamlib_pc_path)
|
||||
set (ENV{PKG_CONFIG_PATH} "${__hamlib_pc_path}" "$ENV{PKG_CONFIG_PATH}")
|
||||
unset (__hamlib_pc_path CACHE)
|
||||
endif ()
|
||||
message (STATUS "ENV{PKG_CONFIG_PATH} $ENV{PKG_CONFIG_PATH}")
|
||||
|
||||
# Use pkg-config to get hints about paths, libs and, flags
|
||||
unset (__pkg_config_checked_hamlib CACHE)
|
||||
# pkg_config will fail on Windows if the Hamlib USB backends are
|
||||
# configured since libusb-1.0 does not ship with a pkg_config file on
|
||||
# Windows, that's OK because we fix it up below
|
||||
libfind_pkg_check_modules (PC_HAMLIB hamlib)
|
||||
|
||||
if (NOT PC_HAMLIB_STATIC_LIBRARIES)
|
||||
if (WIN32)
|
||||
set (PC_HAMLIB_STATIC_LIBRARIES hamlib ws2_32)
|
||||
if (NOT PC_HAMLIB_FOUND)
|
||||
# The headers
|
||||
find_path (hamlib_INCLUDEDIR hamlib/rig.h)
|
||||
# The libraries
|
||||
if (hamlib_STATIC)
|
||||
libfind_library (hamlib libhamlib.a)
|
||||
else ()
|
||||
set (PC_HAMLIB_STATIC_LIBRARIES hamlib m dl usb)
|
||||
libfind_library (hamlib hamlib)
|
||||
endif ()
|
||||
if (WIN32)
|
||||
set (hamlib_EXTRA_LIBRARIES ws2_32)
|
||||
else ()
|
||||
set (hamlib_EXTRA_LIBRARIES m dl)
|
||||
endif ()
|
||||
|
||||
# libusb-1.0 has no pkg-config file on Windows so we have to find it
|
||||
# ourselves
|
||||
find_library (LIBUSB NAMES usb-1.0 PATH_SUFFIXES MinGW32/dll)
|
||||
if (LIBUSB)
|
||||
set (hamlib_EXTRA_LIBRARIES ${LIBUSB} ${hamlib_EXTRA_LIBRARIES})
|
||||
get_filename_component (hamlib_libusb_path ${LIBUSB} PATH)
|
||||
set (hamlib_LIBRARY_DIRS ${hamlib_LIBRARY_DIRS} ${hamlib_libusb_path})
|
||||
endif (LIBUSB)
|
||||
set (hamlib_PROCESS_INCLUDES hamlib_INCLUDEDIR)
|
||||
set (hamlib_PROCESS_LIBS hamlib_LIBRARY hamlib_EXTRA_LIBRARIES)
|
||||
else ()
|
||||
if (hamlib_STATIC)
|
||||
set (hamlib_PROCESS_INCLUDES PC_HAMLIB_STATIC_INCLUDE_DIRS)
|
||||
set (hamlib_PROCESS_LIBS PC_HAMLIB_STATIC_LDFLAGS)
|
||||
set (hamlib_LIBRARY_DIRS ${PC_HAMLIB_STATIC_LIBRARY_DIRS})
|
||||
else ()
|
||||
set (hamlib_PROCESS_INCLUDES PC_HAMLIB_INCLUDE_DIRS)
|
||||
set (hamlib_PROCESS_LIBS PC_HAMLIB_LDFLAGS)
|
||||
set (hamlib_LIBRARY_DIRS ${PC_HAMLIB_LIBRARY_DIRS})
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
# The libraries
|
||||
libfind_library (hamlib hamlib)
|
||||
libfind_library (hamlib_STATIC libhamlib.a)
|
||||
|
||||
find_path (hamlib_INCLUDE_DIR hamlib/rig.h)
|
||||
|
||||
# Set the include dir variables and the libraries and let libfind_process do the rest
|
||||
set (hamlib_PROCESS_INCLUDES hamlib_INCLUDE_DIR)
|
||||
set (hamlib_PROCESS_LIBS hamlib_LIBRARY)
|
||||
libfind_process (hamlib)
|
||||
|
||||
set (hamlib_STATIC_PROCESS_INCLUDES hamlib_STATIC_INCLUDE_DIR)
|
||||
set (hamlib_STATIC_PROCESS_LIBS hamlib_STATIC_LIBRARY PC_HAMLIB_STATIC_LIBRARIES)
|
||||
libfind_process (hamlib_STATIC)
|
||||
|
||||
# make sure we return a full path for the library we return
|
||||
if (hamlib_FOUND)
|
||||
list (REMOVE_ITEM hamlib_LIBRARIES hamlib)
|
||||
if (hamlib_STATIC_LIBRARIES)
|
||||
list (REMOVE_ITEM hamlib_STATIC_LIBRARIES hamlib)
|
||||
if (WIN32)
|
||||
find_path (hamlib_dll_path libhamlib-2.dll)
|
||||
if (hamlib_dll_path)
|
||||
set (hamlib_LIBRARY_DIRS ${hamlib_LIBRARY_DIRS} ${hamlib_dll_path})
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
# Handle the QUIETLY and REQUIRED arguments and set HAMLIB_FOUND to
|
||||
# TRUE if all listed variables are TRUE
|
||||
include (FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args (hamlib DEFAULT_MSG hamlib_INCLUDE_DIRS hamlib_LIBRARY hamlib_LIBRARIES)
|
||||
find_package_handle_standard_args (hamlib DEFAULT_MSG hamlib_INCLUDE_DIRS hamlib_LIBRARIES hamlib_LIBRARY_DIRS)
|
||||
|
||||
Reference in New Issue
Block a user