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:
Bill Somerville
2016-04-06 17:10:46 +00:00
parent 8004a969db
commit db51f0e9a8
3 changed files with 84 additions and 53 deletions
+53 -30
View File
@@ -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)