Blame CMakeLists.txt

Packit 8fb591
cmake_minimum_required(VERSION 2.8.12)
Packit 8fb591
project(libyang C)
Packit 8fb591
Packit 8fb591
include(GNUInstallDirs)
Packit 8fb591
include(CheckSymbolExists)
Packit 8fb591
Packit 8fb591
set(LIBYANG_DESCRIPTION "libyang is YANG data modelling language parser and toolkit written (and providing API) in C.")
Packit 8fb591
Packit 8fb591
# Correct RPATH usage on OS X
Packit 8fb591
set(CMAKE_MACOSX_RPATH TRUE)
Packit 8fb591
Packit 8fb591
# set version
Packit 8fb591
set(LIBYANG_MAJOR_VERSION 0)
Packit 8fb591
set(LIBYANG_MINOR_VERSION 16)
Packit 8fb591
set(LIBYANG_MICRO_VERSION 105)
Packit 8fb591
set(LIBYANG_VERSION ${LIBYANG_MAJOR_VERSION}.${LIBYANG_MINOR_VERSION}.${LIBYANG_MICRO_VERSION})
Packit 8fb591
set(LIBYANG_SOVERSION ${LIBYANG_MAJOR_VERSION}.${LIBYANG_MINOR_VERSION})
Packit 8fb591
Packit 8fb591
# set default build type if not specified by user
Packit 8fb591
if(NOT CMAKE_BUILD_TYPE)
Packit 8fb591
    set(CMAKE_BUILD_TYPE debug)
Packit 8fb591
endif()
Packit 8fb591
Packit 8fb591
set(CMAKE_C_STANDARD 11)
Packit 8fb591
set(CMAKE_C_FLAGS         "${CMAKE_C_FLAGS} -Wall -Wextra")
Packit 8fb591
set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG")
Packit 8fb591
set(CMAKE_C_FLAGS_PACKAGE "-g -O2 -DNDEBUG")
Packit 8fb591
set(CMAKE_C_FLAGS_DEBUG   "-g -O0")
Packit 8fb591
Packit 8fb591
# options
Packit 8fb591
if((CMAKE_BUILD_TYPE STREQUAL debug) OR (CMAKE_BUILD_TYPE STREQUAL Package))
Packit 8fb591
    option(ENABLE_BUILD_TESTS "Build tests" ON)
Packit 8fb591
    option(ENABLE_VALGRIND_TESTS "Build tests with valgrind" ON)
Packit 8fb591
else()
Packit 8fb591
    option(ENABLE_BUILD_TESTS "Build tests" OFF)
Packit 8fb591
    option(ENABLE_VALGRIND_TESTS "Build tests with valgrind" OFF)
Packit 8fb591
endif()
Packit 8fb591
option(ENABLE_CALLGRIND_TESTS "Build performance tests to be run with callgrind" OFF)
Packit 8fb591
Packit 8fb591
option(ENABLE_CACHE "Enable data caching for schemas and hash tables for data (time-efficient at the cost of increased space-complexity)" ON)
Packit 8fb591
option(ENABLE_LATEST_REVISIONS "Enable reusing of latest revisions of schemas" ON)
Packit 8fb591
option(ENABLE_LYD_PRIV "Add a private pointer also to struct lyd_node (data node structure), just like in struct lys_node, for arbitrary user data" OFF)
Packit 8fb591
set(PLUGINS_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/libyang" CACHE STRING "Directory with libyang plugins (extensions and user types)")
Packit 8fb591
Packit 8fb591
if(ENABLE_CACHE)
Packit 8fb591
    set(LY_ENABLED_CACHE 1)
Packit 8fb591
endif()
Packit 8fb591
if(ENABLE_LATEST_REVISIONS)
Packit 8fb591
    set(LY_ENABLED_LATEST_REVISIONS 1)
Packit 8fb591
endif()
Packit 8fb591
if(ENABLE_LYD_PRIV)
Packit 8fb591
    set(LY_ENABLED_LYD_PRIV 1)
Packit 8fb591
endif()
Packit 8fb591
Packit 8fb591
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
Packit 8fb591
    set(COMPILER_UNUSED_ATTR "UNUSED_ ## x __attribute__((__unused__))")
Packit 8fb591
    set(COMPILER_PACKED_ATTR "__attribute__((__packed__))")
Packit 8fb591
elseif(CMAKE_C_COMPILER_ID STREQUAL "Clang")
Packit 8fb591
    # require at least clang 3.0
Packit 8fb591
    if (CMAKE_C_COMPILER_VERSION VERSION_LESS 3.0)
Packit 8fb591
        message(FATAL_ERROR "Clang version must be at least 3.0!")
Packit 8fb591
    endif()
Packit 8fb591
    set(COMPILER_UNUSED_ATTR "UNUSED_ ## x __attribute__((__unused__))")
Packit 8fb591
    set(COMPILER_PACKED_ATTR "__attribute__((__packed__))")
Packit 8fb591
else()
Packit 8fb591
    message(WARNING "You are using an unknown compiler, it must support C11 standard \"_Generic\" statement or the \"__builtin_types_compatible_p\" built-in function.")
Packit 8fb591
    set(COMPILER_UNUSED_ATTR "UNUSED_ ## x")
Packit 8fb591
    set(COMPILER_PACKED_ATTR "")
Packit 8fb591
endif()
Packit 8fb591
Packit 8fb591
include_directories(${PROJECT_BINARY_DIR}/src ${PROJECT_SOURCE_DIR}/src)
Packit 8fb591
configure_file(${PROJECT_SOURCE_DIR}/src/libyang.h.in ${PROJECT_BINARY_DIR}/src/libyang.h @ONLY)
Packit 8fb591
configure_file(${PROJECT_SOURCE_DIR}/src/common.h.in ${PROJECT_BINARY_DIR}/src/common.h @ONLY)
Packit 8fb591
Packit 8fb591
set(EXTENSIONS_PLUGINS_DIR_MACRO "${PLUGINS_DIR}/extensions")
Packit 8fb591
set(USER_TYPES_PLUGINS_DIR_MACRO "${PLUGINS_DIR}/user_types")
Packit 8fb591
Packit 8fb591
# include custom Modules
Packit 8fb591
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMakeModules/")
Packit 8fb591
Packit 8fb591
# setup bindings
Packit 8fb591
set(GEN_LANGUAGE_BINDINGS 0 CACHE BOOL "Enable language bindings generation.")
Packit 8fb591
set(GEN_CPP_BINDINGS 1 CACHE BOOL "Enable C++ bindings.")
Packit 8fb591
# Python bindings depend on C++ bindings because of SWIG
Packit 8fb591
set(GEN_PYTHON_BINDINGS 1 CACHE BOOL "Enable Python bindings.")
Packit 8fb591
set(GEN_PYTHON_VERSION "3" CACHE STRING "Python version")
Packit 8fb591
set(GEN_JAVASCRIPT_BINDINGS 0 CACHE BOOL "Enable JavaScript bindings.")
Packit 8fb591
set(GEN_JAVA_BINDINGS 0 CACHE BOOL "Enable Java bindings.")
Packit 8fb591
Packit 8fb591
find_package(FLEX)
Packit 8fb591
find_package(BISON)
Packit 8fb591
find_program(DEB_BUILDER NAMES debuild)
Packit 8fb591
find_program(RPM_BUILDER NAMES rpmbuild)
Packit 8fb591
find_program(SED_TOOL NAMES sed)
Packit 8fb591
Packit 8fb591
if(NOT BISON_FOUND)
Packit 8fb591
    message(WARNING "Missing Bison.\nYou won't be able to generate source codes from changed flex/bison files.\nCompiling libyang should still works fine.")
Packit 8fb591
elseif (NOT FLEX_FOUND)
Packit 8fb591
    message(WARNING "Missing Flex.\nYou won't be able to generate source codes from changed flex/bison files.\nCompiling libyang should still works fine.")
Packit 8fb591
else()
Packit 8fb591
    if (BISON_VERSION VERSION_LESS 3)
Packit 8fb591
        set(EMPTYDIR "")
Packit 8fb591
    else ()
Packit 8fb591
        set(EMPTYDIR "%empty")
Packit 8fb591
    endif()
Packit 8fb591
    configure_file(${PROJECT_SOURCE_DIR}/src/yang.y.in ${PROJECT_BINARY_DIR}/src/yang.y)
Packit 8fb591
    add_custom_target(bison
Packit 8fb591
        WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/src
Packit 8fb591
        COMMAND bison -l -o parser_yang_bis.c --defines=parser_yang_bis.h ${PROJECT_BINARY_DIR}/src/yang.y
Packit 8fb591
        COMMAND flex -8 -L -o parser_yang_lex.c --header-file=parser_yang_lex.h yang.l
Packit 8fb591
        COMMAND ${SED_TOOL} -i 's/int yychar\;/int yychar\;\\nchar *s = NULL, *tmp_s = NULL, *ext_name = NULL\;\\nstruct lys_module *trg = NULL\;\\nstruct lys_node *tpdf_parent = NULL, *data_node = NULL\;\\nstruct lys_ext_instance_complex *ext_instance = NULL\;\\nint is_ext_instance\;\\nvoid *actual = NULL\;\\nenum yytokentype backup_type, actual_type = MODULE_KEYWORD\;\\nint64_t cnt_val = 0\;\\nint is_value = 0\;\\nvoid *yang_type = NULL\;/' parser_yang_bis.c
Packit 8fb591
    )
Packit 8fb591
endif()
Packit 8fb591
Packit 8fb591
if (NOT DEFINED ENV{TRAVIS_BRANCH})
Packit 8fb591
    execute_process(COMMAND "git" "rev-parse" "--abbrev-ref" "HEAD"
Packit 8fb591
                    OUTPUT_VARIABLE GIT_BRANCH
Packit 8fb591
                    OUTPUT_STRIP_TRAILING_WHITESPACE
Packit 8fb591
                    ERROR_QUIET
Packit 8fb591
                )
Packit 8fb591
    if (NOT GIT_BRANCH)
Packit 8fb591
        set(ENV{TRAVIS_BRANCH} "master")
Packit 8fb591
    else()
Packit 8fb591
        if (GIT_BRANCH MATCHES "master|devel")
Packit 8fb591
            set(ENV{TRAVIS_BRANCH} ${GIT_BRANCH})
Packit 8fb591
        else()
Packit 8fb591
            set(ENV{TRAVIS_BRANCH} "master")
Packit 8fb591
        endif()
Packit 8fb591
    endif()
Packit 8fb591
    set(GIT_BRANCH $ENV{TRAVIS_BRANCH})
Packit 8fb591
endif()
Packit 8fb591
Packit 8fb591
if ($ENV{TRAVIS_BRANCH} STREQUAL "master")
Packit 8fb591
    set(PACKAGE_NAME "libyang")
Packit 8fb591
    set(PACKAGE_PART_NAME "")
Packit 8fb591
    set(BRANCH "master")
Packit 8fb591
    set(BUILD_TYPE "Package")
Packit 8fb591
    set(CONFLICT_PACKAGE_NAME "libyang-experimental")
Packit 8fb591
else ()
Packit 8fb591
    set(PACKAGE_NAME "libyang-experimental")
Packit 8fb591
    set(PACKAGE_PART_NAME "-experimental")
Packit 8fb591
    set(BRANCH "devel")
Packit 8fb591
    set(BUILD_TYPE "debug")
Packit 8fb591
    set(CONFLICT_PACKAGE_NAME "libyang")
Packit 8fb591
endif()
Packit 8fb591
# change version in config files
Packit 8fb591
configure_file(${PROJECT_SOURCE_DIR}/packages/libyang.spec.in ${PROJECT_BINARY_DIR}/build-packages/libyang.spec)
Packit 8fb591
configure_file(${PROJECT_SOURCE_DIR}/packages/libyang.dsc.in ${PROJECT_BINARY_DIR}/build-packages/libyang.dsc)
Packit 8fb591
configure_file(${PROJECT_SOURCE_DIR}/packages/debian.control.in ${PROJECT_BINARY_DIR}/build-packages/debian.control @ONLY)
Packit 8fb591
configure_file(${PROJECT_SOURCE_DIR}/packages/debian.rules.in ${PROJECT_BINARY_DIR}/build-packages/debian.rules)
Packit 8fb591
Packit 8fb591
if (NOT DEB_BUILDER)
Packit 8fb591
    message(WARNING "Missing tools (devscripts, debhelper package) for building deb package.\nYou won't be able to generate deb package from source code.\nCompiling libyang should still works fine.")
Packit 8fb591
else ()
Packit 8fb591
    # target for local build deb package
Packit 8fb591
    add_custom_target(build-deb
Packit 8fb591
                      WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
Packit 8fb591
                      COMMAND build-packages/local-deb.sh
Packit 8fb591
    )
Packit 8fb591
    configure_file(${PROJECT_SOURCE_DIR}/packages/local-deb.sh.in ${PROJECT_BINARY_DIR}/build-packages/local-deb.sh @ONLY)
Packit 8fb591
endif()
Packit 8fb591
Packit 8fb591
if (NOT RPM_BUILDER)
Packit 8fb591
    message(WARNING "Missing tools (rpm package) for building rpm package. \nYou won't be able to generate rpm package from source code.\nCompiling libyang should still works fine.")
Packit 8fb591
else ()
Packit 8fb591
    # target for local build rpm package
Packit 8fb591
    string(REPLACE ${PROJECT_SOURCE_DIR} "." EXCLUDE_BUILD_DIR ${PROJECT_BINARY_DIR})
Packit 8fb591
    add_custom_target(build-rpm
Packit 8fb591
                      WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
Packit 8fb591
                      COMMAND build-packages/local-rpm.sh
Packit 8fb591
    )
Packit 8fb591
    configure_file(${PROJECT_SOURCE_DIR}/packages/local-rpm.sh.in ${PROJECT_BINARY_DIR}/build-packages/local-rpm.sh @ONLY)
Packit 8fb591
endif()
Packit 8fb591
Packit 8fb591
# by default build shared library
Packit 8fb591
# static build requires static libpcre library
Packit 8fb591
option(ENABLE_STATIC "Build static (.a) library" OFF)
Packit 8fb591
Packit 8fb591
# check the supported platform
Packit 8fb591
if(NOT UNIX)
Packit 8fb591
    message(FATAL_ERROR "Only *nix like systems are supported.")
Packit 8fb591
endif()
Packit 8fb591
Packit 8fb591
set(libsrc
Packit 8fb591
    src/common.c
Packit 8fb591
    src/context.c
Packit 8fb591
    src/log.c
Packit 8fb591
    src/hash_table.c
Packit 8fb591
    src/resolve.c
Packit 8fb591
    src/validation.c
Packit 8fb591
    src/xml.c
Packit 8fb591
    src/parser.c
Packit 8fb591
    src/parser_yin.c
Packit 8fb591
    src/parser_xml.c
Packit 8fb591
    src/parser_json.c
Packit 8fb591
    src/parser_lyb.c
Packit 8fb591
    src/parser_yang_bis.c
Packit 8fb591
    src/parser_yang_lex.c
Packit 8fb591
    src/parser_yang.c
Packit 8fb591
    src/tree_schema.c
Packit 8fb591
    src/tree_data.c
Packit 8fb591
    src/plugins.c
Packit 8fb591
    src/printer.c
Packit 8fb591
    src/xpath.c
Packit 8fb591
    src/printer_yang.c
Packit 8fb591
    src/printer_yin.c
Packit 8fb591
    src/printer_json_schema.c
Packit 8fb591
    src/printer_xml.c
Packit 8fb591
    src/printer_tree.c
Packit 8fb591
    src/printer_info.c
Packit 8fb591
    src/printer_json.c
Packit 8fb591
    src/printer_lyb.c
Packit 8fb591
    src/yang_types.c)
Packit 8fb591
Packit 8fb591
set(lintsrc
Packit 8fb591
    tools/lint/main.c
Packit 8fb591
    tools/lint/main_ni.c
Packit 8fb591
    tools/lint/commands.c
Packit 8fb591
    tools/lint/completion.c
Packit 8fb591
    tools/lint/configuration.c
Packit 8fb591
    linenoise/linenoise.c)
Packit 8fb591
Packit 8fb591
set(resrc
Packit 8fb591
    tools/re/main.c)
Packit 8fb591
Packit 8fb591
set(yang2yinsrc
Packit 8fb591
    tools/yang2yin/main.c)
Packit 8fb591
Packit 8fb591
set(headers
Packit 8fb591
    src/tree_schema.h
Packit 8fb591
    src/tree_data.h
Packit 8fb591
    src/extensions.h
Packit 8fb591
    src/user_types.h
Packit 8fb591
    src/xml.h
Packit 8fb591
    src/dict.h)
Packit 8fb591
Packit 8fb591
check_symbol_exists(vdprintf "stdio.h;stdarg.h" HAVE_VDPRINTF)
Packit 8fb591
if(HAVE_VDPRINTF)
Packit 8fb591
    add_definitions(-DHAVE_VDPRINTF)
Packit 8fb591
endif(HAVE_VDPRINTF)
Packit 8fb591
Packit 8fb591
# create static libyang library
Packit 8fb591
if(ENABLE_STATIC)
Packit 8fb591
    add_definitions(-DSTATIC)
Packit 8fb591
    set(CMAKE_EXE_LINKER_FLAGS -static)
Packit 8fb591
    set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
Packit 8fb591
    set(CMAKE_EXE_LINK_DYNAMIC_C_FLAGS)       # remove -Wl,-Bdynamic
Packit 8fb591
    set(CMAKE_EXE_LINK_DYNAMIC_CXX_FLAGS)
Packit 8fb591
    add_library(yang STATIC ${libsrc})
Packit 8fb591
else()
Packit 8fb591
    set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
Packit 8fb591
    add_library(yangobj OBJECT ${libsrc})
Packit 8fb591
    add_library(yang SHARED $<TARGET_OBJECTS:yangobj>)
Packit 8fb591
Packit 8fb591
    #only for tests with visible internal symbols
Packit 8fb591
    add_library(yangobj_tests OBJECT ${libsrc})
Packit 8fb591
Packit 8fb591
    #link dl
Packit 8fb591
    target_link_libraries(yang ${CMAKE_DL_LIBS})
Packit 8fb591
Packit 8fb591
    set_target_properties(yangobj PROPERTIES COMPILE_FLAGS "-fvisibility=hidden")
Packit 8fb591
endif(ENABLE_STATIC)
Packit 8fb591
Packit 8fb591
set_target_properties(yang PROPERTIES VERSION ${LIBYANG_VERSION} SOVERSION ${LIBYANG_SOVERSION})
Packit 8fb591
Packit 8fb591
# link math
Packit 8fb591
target_link_libraries(yang m)
Packit 8fb591
Packit 8fb591
# find pthreads
Packit 8fb591
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
Packit 8fb591
find_package(Threads REQUIRED)
Packit 8fb591
if(ENABLE_STATIC)
Packit 8fb591
    target_link_libraries(yang -Wl,--whole-archive ${CMAKE_THREAD_LIBS_INIT} -Wl,--no-whole-archive)
Packit 8fb591
else()
Packit 8fb591
    target_link_libraries(yang ${CMAKE_THREAD_LIBS_INIT})
Packit 8fb591
endif(ENABLE_STATIC)
Packit 8fb591
Packit 8fb591
# find PCRE library
Packit 8fb591
unset(PCRE_LIBRARY CACHE)
Packit 8fb591
find_package(PCRE REQUIRED)
Packit 8fb591
include_directories(${PCRE_INCLUDE_DIRS})
Packit 8fb591
target_link_libraries(yang ${PCRE_LIBRARIES})
Packit 8fb591
Packit 8fb591
install(TARGETS yang DESTINATION ${CMAKE_INSTALL_LIBDIR})
Packit 8fb591
install(FILES ${headers} ${PROJECT_BINARY_DIR}/src/libyang.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libyang)
Packit 8fb591
Packit 8fb591
find_package(PkgConfig)
Packit 8fb591
if(PKG_CONFIG_FOUND)
Packit 8fb591
    # generate and install pkg-config file
Packit 8fb591
    configure_file("libyang.pc.in" "libyang.pc" @ONLY)
Packit 8fb591
    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libyang.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
Packit 8fb591
    # check that pkg-config includes the used path
Packit 8fb591
    execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable pc_path pkg-config RESULT_VARIABLE RETURN OUTPUT_VARIABLE PC_PATH ERROR_QUIET)
Packit 8fb591
    if(RETURN EQUAL 0)
Packit 8fb591
	string(STRIP "${PC_PATH}" PC_PATH)
Packit 8fb591
	set(PC_PATH "${PC_PATH}:$ENV{PKG_CONFIG_PATH}")
Packit 8fb591
        string(REGEX MATCH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/pkgconfig" SUBSTR "${PC_PATH}")
Packit 8fb591
        string(LENGTH "${SUBSTR}" SUBSTR_LEN)
Packit 8fb591
        if(SUBSTR_LEN EQUAL 0)
Packit 8fb591
            message(WARNING "pkg-config will not detect the new package after installation, adjust PKG_CONFIG_PATH using \"export PKG_CONFIG_PATH=\${PKG_CONFIG_PATH}:${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/pkgconfig\".")
Packit 8fb591
        endif()
Packit 8fb591
    endif()
Packit 8fb591
endif()
Packit 8fb591
Packit 8fb591
# generate doxygen documentation for libyang API
Packit 8fb591
find_package(Doxygen)
Packit 8fb591
if(DOXYGEN_FOUND)
Packit 8fb591
    find_program(DOT_PATH dot PATH_SUFFIXES graphviz2.38/bin graphviz/bin)
Packit 8fb591
    if(DOT_PATH)
Packit 8fb591
        set(HAVE_DOT "YES")
Packit 8fb591
    else()
Packit 8fb591
        set(HAVE_DOT "NO")
Packit 8fb591
        message(AUTHOR_WARNING "Doxygen: to generate UML diagrams please install graphviz")
Packit 8fb591
    endif()
Packit 8fb591
    add_custom_target(doc
Packit 8fb591
            COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile
Packit 8fb591
            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
Packit 8fb591
    configure_file(Doxyfile.in Doxyfile)
Packit 8fb591
endif()
Packit 8fb591
Packit 8fb591
# clean cmake cache
Packit 8fb591
add_custom_target(cclean
Packit 8fb591
        COMMAND make clean
Packit 8fb591
        COMMAND find . -iname '*cmake*' -not -name CMakeLists.txt -not -path './CMakeModules*' -exec rm -rf {} +
Packit 8fb591
        COMMAND rm -rf Makefile Doxyfile
Packit 8fb591
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
Packit 8fb591
Packit 8fb591
# YANG extensions plugins
Packit 8fb591
set(EXTENSIONS_LIST "nacm" "metadata" "yangdata")
Packit 8fb591
# if the tests are enabled, build libyang_ext_test
Packit 8fb591
if(ENABLE_BUILD_TESTS)
Packit 8fb591
    find_package(CMocka 1.0.0)
Packit 8fb591
    if(CMOCKA_FOUND AND CMAKE_BUILD_TYPE MATCHES debug)
Packit 8fb591
        list(APPEND EXTENSIONS_LIST "libyang_ext_test")
Packit 8fb591
    endif(CMOCKA_FOUND AND CMAKE_BUILD_TYPE MATCHES debug)
Packit 8fb591
endif(ENABLE_BUILD_TESTS)
Packit 8fb591
Packit 8fb591
if(ENABLE_STATIC)
Packit 8fb591
    set(EXTENSIONS_LIST_SIZE " 0 ")
Packit 8fb591
    set(ITEM 0)
Packit 8fb591
    foreach(EXTENSION ${EXTENSIONS_LIST})
Packit 8fb591
        add_library(${EXTENSION} STATIC "src/extensions/${EXTENSION}.c")
Packit 8fb591
        target_link_libraries(yang ${EXTENSION})
Packit 8fb591
        set(EXTENSIONS_LIST_SIZE "${EXTENSIONS_LIST_SIZE} + lyext_size(${EXTENSION})")
Packit 8fb591
        set(EXTERN_EXTENSIONS_LIST "${EXTERN_EXTENSIONS_LIST}extern struct lyext_plugin_list ${EXTENSION}[];\n")
Packit 8fb591
        set(MEMCPY_EXTENSIONS_LIST "${MEMCPY_EXTENSIONS_LIST}    lyext_add(plugin, count, ${EXTENSION});\n")
Packit 8fb591
        set(STATIC_LOADED_PLUGINS "${STATIC_LOADED_PLUGINS} \"${EXTENSION}\",")
Packit 8fb591
        MATH(EXPR ITEM "${ITEM}+1")
Packit 8fb591
    endforeach()
Packit 8fb591
else()
Packit 8fb591
    add_subdirectory(src/extensions)
Packit 8fb591
endif(ENABLE_STATIC)
Packit 8fb591
Packit 8fb591
# YANG user types plugins ("user_ipv4" is just an example, not installed by default)
Packit 8fb591
set(USER_TYPE_LIST "user_date_and_time")
Packit 8fb591
if(ENABLE_STATIC)
Packit 8fb591
    set(USER_TYPE_LIST_SIZE " 0 ")
Packit 8fb591
    foreach(USER_TYPE ${USER_TYPE_LIST})
Packit 8fb591
        add_library(${USER_TYPE} STATIC "src/user_types/${USER_TYPE}.c")
Packit 8fb591
        target_link_libraries(yang ${USER_TYPE})
Packit 8fb591
        set(USER_TYPE_LIST_SIZE "${USER_TYPE_LIST_SIZE} + lytype_size(${USER_TYPE})")
Packit 8fb591
        set(EXTERN_USER_TYPE_LIST "${EXTERN_USER_TYPE_LIST}extern struct lytype_plugin_list ${USER_TYPE}[];\n")
Packit 8fb591
        set(MEMCPY_USER_TYPE_LIST "${MEMCPY_USER_TYPE_LIST}    lytype_add(plugin, count, ${USER_TYPE});\n")
Packit 8fb591
        set(STATIC_LOADED_PLUGINS "${STATIC_LOADED_PLUGINS} \"${USER_TYPE}\",")
Packit 8fb591
        MATH(EXPR ITEM "${ITEM}+1")
Packit 8fb591
    endforeach()
Packit 8fb591
    set(STATIC_LOADED_PLUGINS_COUNT "${ITEM}")
Packit 8fb591
else()
Packit 8fb591
    add_subdirectory(src/user_types)
Packit 8fb591
endif(ENABLE_STATIC)
Packit 8fb591
Packit 8fb591
configure_file(${PROJECT_SOURCE_DIR}/src/plugin_config.h.in ${PROJECT_BINARY_DIR}/src/plugin_config.h)
Packit 8fb591
Packit 8fb591
# yanglint
Packit 8fb591
add_executable(yanglint ${lintsrc})
Packit 8fb591
target_link_libraries(yanglint yang)
Packit 8fb591
install(TARGETS yanglint DESTINATION ${CMAKE_INSTALL_BINDIR})
Packit 8fb591
install(FILES ${PROJECT_SOURCE_DIR}/tools/lint/yanglint.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
Packit 8fb591
Packit 8fb591
#yangre
Packit 8fb591
add_executable(yangre ${resrc})
Packit 8fb591
target_link_libraries(yangre yang)
Packit 8fb591
install(TARGETS yangre DESTINATION ${CMAKE_INSTALL_BINDIR})
Packit 8fb591
install(FILES ${PROJECT_SOURCE_DIR}/tools/re/yangre.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
Packit 8fb591
Packit 8fb591
# yang2yin
Packit 8fb591
add_executable(yang2yin ${yang2yinsrc})
Packit 8fb591
Packit 8fb591
# uninstall
Packit 8fb591
add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_MODULE_PATH}/uninstall.cmake")
Packit 8fb591
Packit 8fb591
if(ENABLE_VALGRIND_TESTS)
Packit 8fb591
    set(ENABLE_BUILD_TESTS ON)
Packit 8fb591
endif()
Packit 8fb591
Packit 8fb591
if(ENABLE_BUILD_TESTS)
Packit 8fb591
    if(CMOCKA_FOUND)
Packit 8fb591
        enable_testing()
Packit 8fb591
        add_subdirectory(tests)
Packit 8fb591
    else(CMOCKA_FOUND)
Packit 8fb591
        message(STATUS "Disabling tests because of missing CMocka")
Packit 8fb591
        set(ENABLE_BUILD_TESTS NO)
Packit 8fb591
    endif(CMOCKA_FOUND)
Packit 8fb591
endif(ENABLE_BUILD_TESTS)
Packit 8fb591
Packit 8fb591
if(GEN_LANGUAGE_BINDINGS AND GEN_CPP_BINDINGS)
Packit 8fb591
    add_subdirectory(swig)
Packit 8fb591
endif()