* CMake build infrastructure The squashed commit that builds and packages releases for the SIMH simulator suite with CMake, version 3.14 or newer. See README-CMake.md for documentation.
142 lines
6.1 KiB
CMake
142 lines
6.1 KiB
CMake
#
|
|
# This module is designed to find/handle editline library
|
|
#
|
|
# Requirements:
|
|
# - CMake >= 2.8.3 (for new version of find_package_handle_standard_args)
|
|
#
|
|
# The following variables will be defined for your use:
|
|
# - EDITLINE_INCLUDE_DIRS : editline include directory
|
|
# - EDITLINE_LIBRARIES : editline libraries
|
|
# - EDITLINE_VERSION : complete version of editline (x.y)
|
|
# - EDITLINE_MAJOR_VERSION : major version of editline
|
|
# - EDITLINE_MINOR_VERSION : minor version of editline
|
|
#
|
|
# How to use:
|
|
# 1) Copy this file in the root of your project source directory
|
|
# 2) Then, tell CMake to search this non-standard module in your project directory by adding to your CMakeLists.txt:
|
|
# set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR})
|
|
# 3) Finally call find_package(EditLine) once
|
|
#
|
|
# Here is a complete sample to build an executable:
|
|
#
|
|
# set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR})
|
|
#
|
|
# find_package(EditLine REQUIRED) # Note: name is case sensitive
|
|
#
|
|
# include_directories(${EDITLINE_INCLUDE_DIRS})
|
|
# add_executable(myapp myapp.c)
|
|
# target_link_libraries(myapp ${EDITLINE_LIBRARIES})
|
|
#
|
|
|
|
|
|
#=============================================================================
|
|
# Copyright (c) 2014, julp
|
|
#
|
|
# Distributed under the OSI-approved BSD License
|
|
#
|
|
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
#=============================================================================
|
|
|
|
########## Private ##########
|
|
if(NOT DEFINED EDITLINE_PUBLIC_VAR_NS)
|
|
set(EDITLINE_PUBLIC_VAR_NS "EDITLINE")
|
|
endif(NOT DEFINED EDITLINE_PUBLIC_VAR_NS)
|
|
if(NOT DEFINED EDITLINE_PRIVATE_VAR_NS)
|
|
set(EDITLINE_PRIVATE_VAR_NS "_${EDITLINE_PUBLIC_VAR_NS}")
|
|
endif(NOT DEFINED EDITLINE_PRIVATE_VAR_NS)
|
|
|
|
function(editline_debug _VARNAME)
|
|
if(${EDITLINE_PUBLIC_VAR_NS}_DEBUG)
|
|
if(DEFINED ${EDITLINE_PUBLIC_VAR_NS}_${_VARNAME})
|
|
message("${EDITLINE_PUBLIC_VAR_NS}_${_VARNAME} = ${${EDITLINE_PUBLIC_VAR_NS}_${_VARNAME}}")
|
|
else(DEFINED ${EDITLINE_PUBLIC_VAR_NS}_${_VARNAME})
|
|
message("${EDITLINE_PUBLIC_VAR_NS}_${_VARNAME} = <UNDEFINED>")
|
|
endif()
|
|
endif()
|
|
endfunction()
|
|
|
|
# Alias all EditLine_FIND_X variables to EDITLINE_FIND_X
|
|
# Workaround for find_package: no way to force case of variable's names it creates (I don't want to change MY coding standard)
|
|
# ---
|
|
# NOTE: only prefix is considered, not full name of the variables to minimize conflicts with string(TOUPPER) for example
|
|
# EditLine_foo becomes EDITLINE_foo not EditLine_FOO as this is two different variables
|
|
set(${EDITLINE_PRIVATE_VAR_NS}_FIND_PKG_PREFIX "EditLine")
|
|
get_directory_property(${EDITLINE_PRIVATE_VAR_NS}_CURRENT_VARIABLES VARIABLES)
|
|
foreach(${EDITLINE_PRIVATE_VAR_NS}_VARNAME ${${EDITLINE_PRIVATE_VAR_NS}_CURRENT_VARIABLES})
|
|
if(${EDITLINE_PRIVATE_VAR_NS}_VARNAME MATCHES "^${${EDITLINE_PRIVATE_VAR_NS}_FIND_PKG_PREFIX}")
|
|
string(REGEX REPLACE "^${${EDITLINE_PRIVATE_VAR_NS}_FIND_PKG_PREFIX}" "${EDITLINE_PUBLIC_VAR_NS}" ${EDITLINE_PRIVATE_VAR_NS}_NORMALIZED_VARNAME ${${EDITLINE_PRIVATE_VAR_NS}_VARNAME})
|
|
set(${${EDITLINE_PRIVATE_VAR_NS}_NORMALIZED_VARNAME} ${${${EDITLINE_PRIVATE_VAR_NS}_VARNAME}})
|
|
endif()
|
|
endforeach()
|
|
|
|
########## Public ##########
|
|
find_path(
|
|
${EDITLINE_PUBLIC_VAR_NS}_INCLUDE_DIRS
|
|
NAMES histedit.h
|
|
)
|
|
|
|
if(${EDITLINE_PUBLIC_VAR_NS}_INCLUDE_DIRS)
|
|
|
|
find_library(
|
|
${EDITLINE_PUBLIC_VAR_NS}_LIBRARIES
|
|
NAMES edit
|
|
)
|
|
|
|
find_library(
|
|
${EDITLINE_PUBLIC_VAR_NS}_TERMCAP
|
|
NAMES termcap
|
|
)
|
|
|
|
# file(READ "${${EDITLINE_PUBLIC_VAR_NS}_INCLUDE_DIRS}/histedit.h" ${EDITLINE_PRIVATE_VAR_NS}_H_CONTENT)
|
|
# string(REGEX REPLACE ".*# *define +LIBEDIT_MAJOR +([0-9]+).*" "\\1" ${EDITLINE_PUBLIC_VAR_NS}_MAJOR_VERSION ${${EDITLINE_PRIVATE_VAR_NS}_H_CONTENT})
|
|
# string(REGEX REPLACE ".*# *define +LIBEDIT_MINOR +([0-9]+).*" "\\1" ${EDITLINE_PUBLIC_VAR_NS}_MINOR_VERSION ${${EDITLINE_PRIVATE_VAR_NS}_H_CONTENT})
|
|
# set(${EDITLINE_PUBLIC_VAR_NS}_VERSION "${${EDITLINE_PUBLIC_VAR_NS}_MAJOR_VERSION}.${${EDITLINE_PUBLIC_VAR_NS}_MINOR_VERSION}")
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
if(${EDITLINE_PUBLIC_VAR_NS}_FIND_REQUIRED AND NOT ${EDITLINE_PUBLIC_VAR_NS}_FIND_QUIETLY)
|
|
find_package_handle_standard_args(
|
|
${EDITLINE_PUBLIC_VAR_NS}
|
|
REQUIRED_VARS ${EDITLINE_PUBLIC_VAR_NS}_LIBRARIES ${EDITLINE_PUBLIC_VAR_NS}_INCLUDE_DIRS
|
|
# VERSION_VAR ${EDITLINE_PUBLIC_VAR_NS}_VERSION
|
|
)
|
|
else(${EDITLINE_PUBLIC_VAR_NS}_FIND_REQUIRED AND NOT ${EDITLINE_PUBLIC_VAR_NS}_FIND_QUIETLY)
|
|
find_package_handle_standard_args(${EDITLINE_PUBLIC_VAR_NS} "editline not found" ${EDITLINE_PUBLIC_VAR_NS}_LIBRARIES ${EDITLINE_PUBLIC_VAR_NS}_INCLUDE_DIRS)
|
|
endif()
|
|
|
|
else()
|
|
|
|
if(${EDITLINE_PUBLIC_VAR_NS}_FIND_REQUIRED AND NOT ${EDITLINE_PUBLIC_VAR_NS}_FIND_QUIETLY)
|
|
message(FATAL_ERROR "Could not find editline include directory")
|
|
endif(${EDITLINE_PUBLIC_VAR_NS}_FIND_REQUIRED AND NOT ${EDITLINE_PUBLIC_VAR_NS}_FIND_QUIETLY)
|
|
|
|
endif()
|
|
|
|
mark_as_advanced(
|
|
${EDITLINE_PUBLIC_VAR_NS}_INCLUDE_DIRS
|
|
${EDITLINE_PUBLIC_VAR_NS}_LIBRARIES
|
|
)
|
|
|
|
if (${EDITLINE_PUBLIC_VAR_NS}_FOUND)
|
|
add_library(Editline::Editline UNKNOWN IMPORTED)
|
|
set_target_properties(Editline::Editline PROPERTIES
|
|
INTERFACE_INCLUDE_DIRECTORIES "${${EDITLINE_PUBLIC_VAR_NS}_INCLUDE_DIRS}"
|
|
INTERFACE_COMPILE_DEFINITIONS "HAVE_EDITLINE"
|
|
INTERFACE_LINK_LIBRARIES "$<$<BOOL:${${EDITLINE_PUBLIC_VAR_NS}_TERMCAP}>:${${EDITLINE_PUBLIC_VAR_NS}_TERMCAP}>")
|
|
set_property(TARGET Editline::Editline APPEND PROPERTY
|
|
IMPORTED_LOCATION "${${EDITLINE_PUBLIC_VAR_NS}_LIBRARIES}")
|
|
endif ()
|
|
|
|
# IN (args)
|
|
editline_debug("FIND_REQUIRED")
|
|
editline_debug("FIND_QUIETLY")
|
|
editline_debug("FIND_VERSION")
|
|
# OUT
|
|
# Linking
|
|
editline_debug("INCLUDE_DIRS")
|
|
editline_debug("LIBRARIES")
|
|
editline_debug("TERMCAP")
|
|
# Version
|
|
# editline_debug("MAJOR_VERSION")
|
|
# editline_debug("MINOR_VERSION")
|
|
# editline_debug("VERSION")
|