aboutsummaryrefslogtreecommitdiff
path: root/third-party/cmake/LibvtermCMakeLists.txt
blob: 72183e4b4cc5468b52f8bc542b92e32345f36a6b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
cmake_minimum_required(VERSION 2.8.11)
project(libvterm LANGUAGES C)

include(GNUInstallDirs)
find_package(Perl REQUIRED)

if(MSVC)
  add_definitions(/W3 -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE)
else()
  add_definitions(-Wall -std=c99)
endif()

# Generate includes from tables
file(GLOB TBL_FILES ${CMAKE_SOURCE_DIR}/src/encoding/*.tbl)
set(TBL_FILES_HEADERS)
foreach(file ${TBL_FILES})
  get_filename_component(basename ${file} NAME_WE)
  set(tname encoding/${basename}.inc)
  add_custom_command(OUTPUT
    COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/encoding/
    COMMAND ${PERL_EXECUTABLE} -CSD ${CMAKE_SOURCE_DIR}/tbl2inc_c.pl ${file} > ${CMAKE_BINARY_DIR}/${tname}
    COMMENT "Generating ${tname}"
    OUTPUT ${CMAKE_BINARY_DIR}/${tname}
    )
  list(APPEND TBL_FILES_HEADERS ${tname})
endforeach()

include_directories(${CMAKE_SOURCE_DIR}/include)
include_directories(${CMAKE_BINARY_DIR})

file(GLOB VTERM_SOURCES ${CMAKE_SOURCE_DIR}/src/*.c)
add_library(vterm ${VTERM_SOURCES} ${TBL_FILES_HEADERS})
install(TARGETS vterm ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})

add_library(vterm-shared SHARED ${VTERM_SOURCES} ${TBL_FILES_HEADERS})
set_target_properties(vterm-shared PROPERTIES
  OUTPUT_NAME vterm
  SOVERSION 0)
install(TARGETS vterm-shared
  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})

install(FILES include/vterm.h include/vterm_keycodes.h
  DESTINATION include)

if(NOT WIN32)
  file(GLOB BIN_SOURCES ${CMAKE_SOURCE_DIR}/bin/*.c)
  foreach(EXE_C ${BIN_SOURCES})
    get_filename_component(target_name ${EXE_C} NAME_WE)
    add_executable(${target_name} ${EXE_C})
    target_link_libraries(${target_name} vterm)
    install(TARGETS ${target_name} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
  endforeach()
endif()

# Tests
add_executable(harness EXCLUDE_FROM_ALL t/harness.c)
target_link_libraries(harness vterm)
set_target_properties(harness PROPERTIES
  # run-test.pl expects to find the harness in t/.libs/
  RUNTIME_OUTPUT_DIRECTORY t/.libs)

file(GLOB TESTFILES ${CMAKE_SOURCE_DIR}/t/*.test)
add_custom_target(check)
foreach(testfile ${TESTFILES})
  get_filename_component(target_name ${testfile} NAME_WE)
  add_custom_target(${target_name}
    COMMAND ${PERL_EXECUTABLE} ${CMAKE_SOURCE_DIR}/t/run-test.pl ${testfile}
    COMMENT "**${target_name} **"
    DEPENDS harness)
  add_dependencies(check ${target_name})
endforeach()