1#.rst:
2# FindLibEdit
3# -----------
4#
5# Find libedit library and headers
6#
7# The module defines the following variables:
8#
9# ::
10#
11#   LibEdit_FOUND          - true if libedit was found
12#   LibEdit_INCLUDE_DIRS   - include search path
13#   LibEdit_LIBRARIES      - libraries to link
14#   LibEdit_VERSION_STRING - version number
15
16find_package(PkgConfig QUIET)
17pkg_check_modules(PC_LIBEDIT QUIET libedit)
18
19find_path(LibEdit_INCLUDE_DIRS NAMES histedit.h HINTS ${PC_LIBEDIT_INCLUDE_DIRS})
20find_library(LibEdit_LIBRARIES NAMES edit HINTS ${PC_LIBEDIT_LIBRARY_DIRS})
21
22include(CheckIncludeFile)
23if(LibEdit_INCLUDE_DIRS AND EXISTS "${LibEdit_INCLUDE_DIRS}/histedit.h")
24  include(CMakePushCheckState)
25  cmake_push_check_state()
26  list(APPEND CMAKE_REQUIRED_INCLUDES ${LibEdit_INCLUDE_DIRS})
27  list(APPEND CMAKE_REQUIRED_LIBRARIES ${LibEdit_LIBRARIES})
28  check_include_file(histedit.h HAVE_HISTEDIT_H)
29  cmake_pop_check_state()
30  if (HAVE_HISTEDIT_H)
31    file(STRINGS "${LibEdit_INCLUDE_DIRS}/histedit.h"
32          libedit_major_version_str
33          REGEX "^#define[ \t]+LIBEDIT_MAJOR[ \t]+[0-9]+")
34    string(REGEX REPLACE "^#define[ \t]+LIBEDIT_MAJOR[ \t]+([0-9]+)" "\\1"
35            libedit_major_version "${libedit_major_version_str}")
36
37    file(STRINGS "${LibEdit_INCLUDE_DIRS}/histedit.h"
38          libedit_minor_version_str
39          REGEX "^#define[ \t]+LIBEDIT_MINOR[ \t]+[0-9]+")
40    string(REGEX REPLACE "^#define[ \t]+LIBEDIT_MINOR[ \t]+([0-9]+)" "\\1"
41            libedit_minor_version "${libedit_minor_version_str}")
42
43    set(LibEdit_VERSION_STRING "${libedit_major_version}.${libedit_minor_version}")
44  else()
45    set(LibEdit_INCLUDE_DIRS "")
46    set(LibEdit_LIBRARIES "")
47  endif()
48endif()
49
50include(FindPackageHandleStandardArgs)
51find_package_handle_standard_args(LibEdit
52                                  FOUND_VAR
53                                    LibEdit_FOUND
54                                  REQUIRED_VARS
55                                    LibEdit_INCLUDE_DIRS
56                                    LibEdit_LIBRARIES
57                                  VERSION_VAR
58                                    LibEdit_VERSION_STRING)
59mark_as_advanced(LibEdit_INCLUDE_DIRS LibEdit_LIBRARIES)
60
61if (LibEdit_FOUND AND NOT TARGET LibEdit::LibEdit)
62  add_library(LibEdit::LibEdit UNKNOWN IMPORTED)
63  set_target_properties(LibEdit::LibEdit PROPERTIES
64                        IMPORTED_LOCATION ${LibEdit_LIBRARIES}
65                        INTERFACE_INCLUDE_DIRECTORIES ${LibEdit_INCLUDE_DIRS})
66endif()
67