File: CMakeLists.txt

package info (click to toggle)
jsonnet 0.20.0%2Bds-3.1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 16,776 kB
  • sloc: cpp: 23,318; python: 1,788; javascript: 1,003; ansic: 885; sh: 745; makefile: 194; java: 140
file content (108 lines) | stat: -rw-r--r-- 3,583 bytes parent folder | download | duplicates (2)
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# libjsonnet

# Remember to update Bazel and Makefile builds when updating this list!
set(LIBJSONNET_HEADERS
    ast.h
    desugarer.h
    formatter.h
    lexer.h
    ../include/libjsonnet.h
    ../include/libjsonnet_fmt.h
    parser.h
    pass.h
    state.h
    static_analysis.h
    static_error.h
    string_utils.h
    unicode.h
    vm.h)

set(LIBJSONNET_SOURCE
    desugarer.cpp
    formatter.cpp
    lexer.cpp
    libjsonnet.cpp
    parser.cpp
    pass.cpp
    static_analysis.cpp
    string_utils.cpp
    vm.cpp)

add_library(libjsonnet SHARED ${LIBJSONNET_HEADERS} ${LIBJSONNET_SOURCE})
add_dependencies(libjsonnet md5 stdlib)
target_link_libraries(libjsonnet md5 nlohmann_json::nlohmann_json ryml)

file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/../include/libjsonnet.h JSONNET_VERSION_DEF
     REGEX "[#]define[ \t]+LIB_JSONNET_VERSION[ \t]+")
string(REGEX REPLACE ".*\"v([^\"]+)\".*" "\\1" JSONNET_VERSION ${JSONNET_VERSION_DEF})
message("Extracted Jsonnet version: " ${JSONNET_VERSION})


# CMake prepends CMAKE_SHARED_LIBRARY_PREFIX to shared libraries, so without
# this step the output would be |liblibjsonnet|.
set_target_properties(libjsonnet PROPERTIES OUTPUT_NAME jsonnet
	VERSION     "${JSONNET_VERSION}"
	SOVERSION   "0"
	PUBLIC_HEADER "${LIB_HEADER}")
install(TARGETS libjsonnet
	LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
	ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
	PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
target_include_directories(libjsonnet INTERFACE
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>)

if (BUILD_STATIC_LIBS)
    # Static library for jsonnet command-line tool.
    add_library(libjsonnet_static STATIC ${LIBJSONNET_SOURCE})
    add_dependencies(libjsonnet_static md5 stdlib)
    target_link_libraries(libjsonnet_static md5 nlohmann_json::nlohmann_json ryml)
    set_target_properties(libjsonnet_static PROPERTIES OUTPUT_NAME jsonnet)
    install(TARGETS libjsonnet_static DESTINATION "${CMAKE_INSTALL_LIBDIR}")
    target_include_directories(libjsonnet_static INTERFACE
      $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>)
endif()

if (BUILD_SHARED_BINARIES OR NOT BUILD_STATIC_LIBS)
    add_library(libjsonnet_for_binaries ALIAS libjsonnet)
else()
    add_library(libjsonnet_for_binaries ALIAS libjsonnet_static)
endif()

# Tests

function(add_test_executable test_name)
    if (EXISTS ${CMAKE_CURRENT_LIST_DIR}/${test_name}.cpp)
        set(TEST_EXT cpp)
    else()
        set(TEST_EXT c)
    endif()
    add_executable(${test_name} ${test_name}.${TEST_EXT})

    add_dependencies(${test_name} libjsonnet_for_binaries GTest::Main)
    target_link_libraries(
        ${test_name} GTest::GTest GTest::Main libjsonnet_for_binaries)
endfunction()

if (BUILD_TESTS)
    add_test_executable(lexer_test)
    add_test(lexer_test ${GLOBAL_OUTPUT_PATH}/lexer_test)

    add_test_executable(parser_test)
    add_test(parser_test ${GLOBAL_OUTPUT_PATH}/parser_test)

    add_test_executable(libjsonnet_test)
    add_test(libjsonnet_test ${GLOBAL_OUTPUT_PATH}/libjsonnet_test)

    add_test_executable(libjsonnet_test_file)
    add_test(libjsonnet_test_file
        ${GLOBAL_OUTPUT_PATH}/libjsonnet_test_file
        ${CMAKE_CURRENT_SOURCE_DIR}/../test_suite/object.jsonnet)

    set(TEST_SNIPPET "std.assertEqual(({ x: 1, y: self.x } { x: 2 }).y, 2)")
    add_test_executable(libjsonnet_test_snippet)
    add_test(libjsonnet_test_snippet
        ${GLOBAL_OUTPUT_PATH}/libjsonnet_test_snippet ${TEST_SNIPPET})

    add_test(jsonnet_test_snippet
        ${GLOBAL_OUTPUT_PATH}/jsonnet -e ${TEST_SNIPPET})
endif()