# Licensed to the Apache Software Foundation (ASF) under one
#
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

cmake_minimum_required(VERSION 2.6)
project(nifi-minifi-cpp)
set(PROJECT_NAME "nifi-minifi-cpp")
set(PROJECT_VERSION_MAJOR 0)
set(PROJECT_VERSION_MINOR 2)
set(PROJECT_VERSION_PATCH 0)
option(test "Build all tests." ON)

#### Establish Project Configuration ####
# Enable usage of the VERSION specifier
# https://cmake.org/cmake/help/v3.0/policy/CMP0048.html#policy:CMP0048
IF(POLICY CMP0048)
  CMAKE_POLICY(SET CMP0048 OLD)
ENDIF(POLICY CMP0048)

include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11 " COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x " COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
elseif(COMPILER_SUPPORTS_CXX0X)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
        message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Enable asan in DEBUG for compatibility with civet
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address")

# Search for threads
find_package(Threads REQUIRED)

# Set the right openssl root path
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(OPENSSL_ROOT_DIR "/usr/local/opt/openssl/")
else()
set(OPENSSL_ROOT_DIR "/usr/lib/x86_64-linux-gnu")
endif()

# Include OpenSSL
find_package (OpenSSL REQUIRED)
if (OPENSSL_FOUND)
	include_directories(${OPENSSL_INCLUDE_DIR})
else ()
    message( FATAL_ERROR "OpenSSL was not found. Please install OpenSSL" )
endif (OPENSSL_FOUND)

# Provide custom modules for the project
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

# Include LevelDB
find_package (Leveldb REQUIRED)
find_package(CURL REQUIRED)
if (LEVELDB_FOUND)
        include_directories(${LEVELDB_INCLUDE_DIRS})
else ()
    message( FATAL_ERROR "LevelDB was not found. Please install LevelDB" )
endif (LEVELDB_FOUND)
find_package(UUID REQUIRED)
file(GLOB SPD_SOURCES "include/spdlog/*")



include(ExternalProject)

# Setup Jsoncpp as an external project
set(JSONCPP_LIB_DIR "${CMAKE_CURRENT_BINARY_DIR}/jsoncpp")

externalproject_add(jsoncpp_project
        SOURCE_DIR ${CMAKE_SOURCE_DIR}/thirdparty/jsoncpp
        CMAKE_ARGS
        "-G${CMAKE_GENERATOR}"
        "-DCMAKE_INSTALL_LIBDIR=${JSONCPP_LIB_DIR}/lib"
        "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
        "-DCMAKE_INSTALL_PREFIX=${JSONCPP_LIB_DIR}"
        )

set(prefix "lib")
set(suffix ".a")
set(JSONCPP_LIB "${JSONCPP_LIB_DIR}/lib/${prefix}jsoncpp${suffix}")

set(CIVETWEB_ENABLE_CXX ON CACHE BOOL "Enable civet C++ library")
add_subdirectory(thirdparty/yaml-cpp-yaml-cpp-0.5.3)
add_subdirectory(thirdparty/civetweb-1.9.1)
add_subdirectory(libminifi)
add_subdirectory(main)


# Generate source assembly
set(ASSEMBLY_BASE_NAME "${CMAKE_PROJECT_NAME}-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
set(CPACK_SOURCE_GENERATOR "TGZ")
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${ASSEMBLY_BASE_NAME}-source")
set(CPACK_SOURCE_IGNORE_FILES "/docs/generated/;/build/;~$;${CPACK_SOURCE_IGNORE_FILES};${CMAKE_SOURCE_DIR}/.git/;${CMAKE_SOURCE_DIR}/.idea/;${CMAKE_SOURCE_DIR}/cmake-build-debug/")

# Generate binary assembly
install(FILES conf/minifi.properties conf/config.yml
        DESTINATION conf
        COMPONENT bin)

install(PROGRAMS bin/minifi.sh
        DESTINATION bin
        COMPONENT bin)

install(FILES LICENSE README.md NOTICE
        DESTINATION .
        COMPONENT bin)

set(CPACK_GENERATOR "TGZ")
set(CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY 1)
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Apache NiFi MiNiFi C++ version ${VERSION}")
set(CPACK_PACKAGE_VENDOR "Apache NiFi")
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
set(CPACK_PACKAGE_FILE_NAME "${ASSEMBLY_BASE_NAME}")
set(CPACK_BINARY_TGZ, "ON")

set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
set(CPACK_COMPONENTS_ALL bin)

include(CPack)

enable_testing(test)
    file(GLOB LIBMINIFI_TEST_SOURCES "libminifi/test/unit/*.cpp")
    add_executable(tests ${LIBMINIFI_TEST_SOURCES} ${SPD_SOURCES})
    target_include_directories(tests PRIVATE BEFORE "thirdparty/catch")
    target_include_directories(tests PRIVATE BEFORE "thirdparty/yaml-cpp-yaml-cpp-0.5.3/include")
    target_include_directories(tests PRIVATE BEFORE "thirdparty/jsoncpp/include")
    target_include_directories(tests PRIVATE BEFORE ${LEVELDB_INCLUDE_DIRS})
    target_include_directories(tests PRIVATE BEFORE "include")
    target_include_directories(tests PRIVATE BEFORE "libminifi/include/")
    target_include_directories(tests PRIVATE BEFORE "libminifi/include/core")
    target_include_directories(tests PRIVATE BEFORE "libminifi/include/core/repository")
    target_include_directories(tests PRIVATE BEFORE "libminifi/include/core/yaml")
    target_include_directories(tests PRIVATE BEFORE "libminifi/include/io")
    target_include_directories(tests PRIVATE BEFORE "libminifi/include/utils")
    target_include_directories(tests PRIVATE BEFORE "libminifi/include/processors")
    target_include_directories(tests PRIVATE BEFORE "libminifi/include/provenance")
    target_link_libraries(tests ${CMAKE_THREAD_LIBS_INIT} ${UUID_LIBRARIES} ${LEVELDB_LIBRARIES} ${OPENSSL_LIBRARIES} minifi yaml-cpp c-library civetweb-cpp ${JSON_CPP_LIB})
    if (CURL_FOUND)
        target_include_directories(tests PRIVATE BEFORE ${CURL_INCLUDE_DIRS})
                target_link_libraries(tests ${CURL_LIBRARIES})
        endif(CURL_FOUND)
    add_test(NAME LibMinifiTests COMMAND tests)
    
     
    file(GLOB LIBMINIFI_TEST_CS "libminifi/test/HttpGetIntegrationTest.cpp")
    add_executable(testHttpGet ${LIBMINIFI_TEST_CS} ${SPD_SOURCES})
    target_include_directories(testHttpGet PRIVATE BEFORE "thirdparty/catch")
    target_include_directories(testHttpGet PRIVATE BEFORE "thirdparty/yaml-cpp-yaml-cpp-0.5.3/include")
    target_include_directories(testHttpGet PRIVATE BEFORE ${LEVELDB_INCLUDE_DIRS})
    target_include_directories(testHttpGet PRIVATE BEFORE "include")
    target_include_directories(testHttpGet PRIVATE BEFORE "libminifi/include/")
    target_include_directories(testHttpGet PRIVATE BEFORE "libminifi/include/core")
    target_include_directories(testHttpGet PRIVATE BEFORE "libminifi/include/core/controller")
    target_include_directories(testHttpGet PRIVATE BEFORE "libminifi/include/core/repository")
    target_include_directories(testHttpGet PRIVATE BEFORE "libminifi/include/io")
    target_include_directories(testHttpGet PRIVATE BEFORE "libminifi/include/utils")
    target_include_directories(testHttpGet PRIVATE BEFORE "libminifi/include/processors")
    target_include_directories(testHttpGet PRIVATE BEFORE "libminifi/include/provenance")
    target_link_libraries(testHttpGet ${CMAKE_THREAD_LIBS_INIT} ${UUID_LIBRARIES} ${LEVELDB_LIBRARIES} ${OPENSSL_LIBRARIES} minifi yaml-cpp c-library civetweb-cpp ${JSON_CPP_LIB})
    if (CURL_FOUND)
        target_include_directories(testHttpGet PRIVATE BEFORE ${CURL_INCLUDE_DIRS})
                target_link_libraries(testHttpGet ${CURL_LIBRARIES})
        endif(CURL_FOUND)
    add_test(NAME testHttpGet COMMAND testHttpGet "${CMAKE_SOURCE_DIR}/libminifi/test/unit/resource/TestHTTPGet.yml")
    
    file(GLOB LIBMINIFI_TEST_CS "libminifi/test/HttpPostIntegrationTest.cpp")
    add_executable(testHttpPost ${LIBMINIFI_TEST_CS} ${SPD_SOURCES})
    target_include_directories(testHttpPost PRIVATE BEFORE "thirdparty/catch")
    target_include_directories(testHttpPost PRIVATE BEFORE "thirdparty/yaml-cpp-yaml-cpp-0.5.3/include")
    target_include_directories(testHttpPost PRIVATE BEFORE ${LEVELDB_INCLUDE_DIRS})
    target_include_directories(testHttpPost PRIVATE BEFORE "include")
    target_include_directories(testHttpPost PRIVATE BEFORE "libminifi/include/")
    target_include_directories(testHttpPost PRIVATE BEFORE "libminifi/include/core")
    target_include_directories(testHttpPost PRIVATE BEFORE "libminifi/include/core/controller")
    target_include_directories(testHttpPost PRIVATE BEFORE "libminifi/include/core/repository")
    target_include_directories(testHttpPost PRIVATE BEFORE "libminifi/include/io")
    target_include_directories(testHttpPost PRIVATE BEFORE "libminifi/include/utils")
    target_include_directories(testHttpPost PRIVATE BEFORE "libminifi/include/processors")
    target_include_directories(testHttpPost PRIVATE BEFORE "libminifi/include/provenance")
    target_link_libraries(testHttpPost ${CMAKE_THREAD_LIBS_INIT} ${UUID_LIBRARIES} ${LEVELDB_LIBRARIES} ${OPENSSL_LIBRARIES} minifi yaml-cpp c-library civetweb-cpp ${JSON_CPP_LIB})
    if (CURL_FOUND)
        target_include_directories(testHttpPost PRIVATE BEFORE ${CURL_INCLUDE_DIRS})
    	target_link_libraries(testHttpPost ${CURL_LIBRARIES})
    endif(CURL_FOUND)
    add_test(NAME testHttpPost COMMAND testHttpPost "${CMAKE_SOURCE_DIR}/libminifi/test/unit/resource/TestHTTPPost.yml")
    
    
    file(GLOB LIBMINIFI_TEST_EXECUTE_PROCESS "libminifi/test/TestExecuteProcess.cpp")
    add_executable(testExecuteProcess ${LIBMINIFI_TEST_EXECUTE_PROCESS} ${SPD_SOURCES})
    target_include_directories(testExecuteProcess PRIVATE BEFORE "thirdparty/yaml-cpp-yaml-cpp-0.5.3/include")
    target_include_directories(testExecuteProcess PRIVATE BEFORE ${LEVELDB_INCLUDE_DIRS})
    target_include_directories(testExecuteProcess PRIVATE BEFORE "include")
    target_include_directories(testExecuteProcess PRIVATE BEFORE "libminifi/include/")
    target_include_directories(testExecuteProcess PRIVATE BEFORE "libminifi/include/core")
    target_include_directories(testExecuteProcess PRIVATE BEFORE "libminifi/include/core/repository")
    target_include_directories(testExecuteProcess PRIVATE BEFORE "libminifi/include/core/yaml")
    target_include_directories(testExecuteProcess PRIVATE BEFORE "libminifi/include/io")
    target_include_directories(testExecuteProcess PRIVATE BEFORE "libminifi/include/utils")
    target_include_directories(testExecuteProcess PRIVATE BEFORE "libminifi/include/processors")
    target_include_directories(testExecuteProcess PRIVATE BEFORE "libminifi/include/provenance")
    if (CURL_FOUND)
        target_include_directories(testExecuteProcess PRIVATE BEFORE ${CURL_INCLUDE_DIRS})
    	target_link_libraries(testExecuteProcess ${CURL_LIBRARIES})
    endif(CURL_FOUND)
    target_link_libraries(testExecuteProcess ${CMAKE_THREAD_LIBS_INIT} ${UUID_LIBRARIES} ${LEVELDB_LIBRARIES} ${OPENSSL_LIBRARIES} minifi yaml-cpp c-library civetweb-cpp ${JSON_CPP_LIB})
    add_test(NAME ExecuteProcess COMMAND testExecuteProcess)
    
    file(GLOB LIBMINIFI_TEST_SOCKETS "libminifi/test/SocketTests.cpp")
    add_executable(testSockets ${LIBMINIFI_TEST_SOCKETS} ${SPD_SOURCES})
    target_include_directories(testSockets PRIVATE BEFORE "thirdparty/catch")
    target_include_directories(testSockets PRIVATE BEFORE "thirdparty/yaml-cpp-yaml-cpp-0.5.3/include")
    target_include_directories(testSockets PRIVATE BEFORE ${LEVELDB_INCLUDE_DIRS})
    target_include_directories(testSockets PRIVATE BEFORE "include")
    target_include_directories(testSockets PRIVATE BEFORE "libminifi/include/")
    target_include_directories(testSockets PRIVATE BEFORE "libminifi/include/core")
    target_include_directories(testSockets PRIVATE BEFORE "libminifi/include/core/repository")
    target_include_directories(testSockets PRIVATE BEFORE "libminifi/include/io")
    target_include_directories(testSockets PRIVATE BEFORE "libminifi/include/utils")
    target_include_directories(testSockets PRIVATE BEFORE "libminifi/include/processors")
    target_include_directories(testSockets PRIVATE BEFORE "libminifi/include/provenance")
    if (CURL_FOUND)
        target_include_directories(testSockets PRIVATE BEFORE ${CURL_INCLUDE_DIRS})
    	target_link_libraries(testSockets ${CURL_LIBRARIES})
    endif(CURL_FOUND)
    target_link_libraries(testSockets ${CMAKE_THREAD_LIBS_INIT} ${UUID_LIBRARIES} ${LEVELDB_LIBRARIES} ${OPENSSL_LIBRARIES} minifi yaml-cpp c-library civetweb-cpp ${JSON_CPP_LIB})
    add_test(NAME TestSockets COMMAND testSockets)
    
    file(GLOB LIBMINIFI_TEST_PROCESSORS "libminifi/test/ProcessorTests.cpp")
    add_executable(testProcessors ${LIBMINIFI_TEST_PROCESSORS} ${SPD_SOURCES})
    target_include_directories(testProcessors PRIVATE BEFORE "thirdparty/catch")
    target_include_directories(testProcessors PRIVATE BEFORE "thirdparty/yaml-cpp-yaml-cpp-0.5.3/include")
    target_include_directories(testProcessors PRIVATE BEFORE "thirdparty/jsoncpp/include")
    target_include_directories(testProcessors PRIVATE BEFORE ${LEVELDB_INCLUDE_DIRS})
    target_include_directories(testProcessors PRIVATE BEFORE "include")
    target_include_directories(testProcessors PRIVATE BEFORE "libminifi/include/")
    target_include_directories(testProcessors PRIVATE BEFORE "libminifi/include/core")
    target_include_directories(testProcessors PRIVATE BEFORE "libminifi/include/core/repository")
    target_include_directories(testProcessors PRIVATE BEFORE "libminifi/include/io")
    target_include_directories(testProcessors PRIVATE BEFORE "libminifi/include/utils")
    target_include_directories(testProcessors PRIVATE BEFORE "libminifi/include/processors")
    target_include_directories(testProcessors PRIVATE BEFORE "libminifi/include/core/reporting")
    target_include_directories(testProcessors PRIVATE BEFORE "libminifi/include/provenance")
    if (CURL_FOUND)
        target_include_directories(testProcessors PRIVATE BEFORE ${CURL_INCLUDE_DIRS})
    	target_link_libraries(testProcessors ${CURL_LIBRARIES})
    endif(CURL_FOUND)
    target_link_libraries(testProcessors ${CMAKE_THREAD_LIBS_INIT} ${UUID_LIBRARIES} ${LEVELDB_LIBRARIES} ${OPENSSL_LIBRARIES} minifi yaml-cpp c-library civetweb-cpp ${JSON_CPP_LIB})
    add_test(NAME TestProcessors COMMAND testProcessors)
    

# Create a custom build target called "docker" that will invoke DockerBuild.sh and create the NiFi-MiNiFi-CPP Docker image
add_custom_target(
    docker
    COMMAND ${CMAKE_SOURCE_DIR}/docker/DockerBuild.sh 1000 1000 ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} minificppsource ${CMAKE_SOURCE_DIR}
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docker/)

# Create a custom build target that will run the linter.
add_custom_target(
    linter
    COMMAND ${CMAKE_SOURCE_DIR}/thirdparty/google-styleguide/run_linter.sh ${CMAKE_SOURCE_DIR}/libminifi/include/ ${CMAKE_SOURCE_DIR}/libminifi/src/ )


FIND_PACKAGE(Doxygen)

if(DOXYGEN_FOUND)
if(EXISTS ${DOXYGEN_EXECUTABLE})

MESSAGE("Creating API Documentation ${DOXYGEN_EXECUTABLE}")
SET(DOXYGEN_INPUT "../docs/Doxyfile")
SET(DOXYGEN_OUTPUT "../docs")

ADD_CUSTOM_COMMAND(
  OUTPUT ${DOXYGEN_OUTPUT}
  COMMAND ${CMAKE_COMMAND} -E echo_append "Building LibMiNiFi API Documentation..."
  COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_INPUT}
  COMMAND ${CMAKE_COMMAND} -E echo "Done."
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  DEPENDS ${DOXYGEN_INPUT}
  )

ADD_CUSTOM_TARGET(docs ${DOXYGEN_EXECUTABLE} ${DOXYGEN_INPUT})
else()
ADD_CUSTOM_TARGET(docs echo "Doxygen binary does not exist. Cannot create documentation... Please install Doxygen or verify correct installation.")
endif()
else()
ADD_CUSTOM_TARGET(docs echo "Doxygen does not exist. Please install it. Cannot create documentation...")
endif(DOXYGEN_FOUND)
