Repository: nifi-minifi-cpp
Updated Branches:
  refs/heads/master c1101f46d -> 45e6d5165


MINIFI-215: IOS port, add OPENSSL_SUPPORT/YAML_SUPPORT/LEVELDB_SUPPORT into 
cmake

This closes #67.

Signed-off-by: Aldrin Piri <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/commit/45e6d516
Tree: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/tree/45e6d516
Diff: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/diff/45e6d516

Branch: refs/heads/master
Commit: 45e6d5165d7b3dcaa1a1364f44b1f860592f0fcd
Parents: c1101f4
Author: Bin Qiu <[email protected]>
Authored: Thu Mar 9 11:46:19 2017 -0800
Committer: Aldrin Piri <[email protected]>
Committed: Fri Mar 24 11:00:18 2017 -0400

----------------------------------------------------------------------
 LICENSE                              |  31 +++++
 cmake/iOS.cmake                      | 208 ++++++++++++++++++++++++++++++
 examples/iOSPort/iOSPortREADME.md    |   8 ++
 libminifi/CMakeLists.txt             |  18 ++-
 libminifi/cmake/iOS.cmake            | 208 ++++++++++++++++++++++++++++++
 libminifi/include/FlowController.h   |   7 +-
 libminifi/include/Repository.h       |  24 ++++
 libminifi/include/io/SocketFactory.h |   4 +
 libminifi/include/io/TLSSocket.h     |   4 +-
 libminifi/src/FlowController.cpp     |   5 +-
 libminifi/src/FlowFileRepository.cpp |   2 +
 libminifi/src/Repository.cpp         |   2 +
 libminifi/src/io/TLSSocket.cpp       |   3 +-
 13 files changed, 516 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/45e6d516/LICENSE
----------------------------------------------------------------------
diff --git a/LICENSE b/LICENSE
index 21c5a40..aed894b 100644
--- a/LICENSE
+++ b/LICENSE
@@ -448,3 +448,34 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
+
+This product includes source from 'ios-cmake' 
(https://code.google.com/archive/p/ios-cmake/).
+The source is available under a 3-Clause BSD License.
+
+    Copyright (c) 2014 Andrew Fischer
+
+       Redistribution and use in source and binary forms, with or without
+       modification, are permitted provided that the following conditions
+       are met:
+       1. Redistributions of source code must retain the above copyright
+          notice, and the entire permission notice in its entirety,
+          including the disclaimer of warranties.
+       2. Redistributions in binary form must reproduce the above copyright
+          notice, this list of conditions and the following disclaimer in the
+          documentation and/or other materials provided with the distribution.
+       3. The name of the author may not be used to endorse or promote
+          products derived from this software without specific prior
+          written permission.
+
+       THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+       WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+       OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+       WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+       LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+       CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+       OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+       BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+       LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+       (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+       USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+       DAMAGE.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/45e6d516/cmake/iOS.cmake
----------------------------------------------------------------------
diff --git a/cmake/iOS.cmake b/cmake/iOS.cmake
new file mode 100644
index 0000000..57b82f9
--- /dev/null
+++ b/cmake/iOS.cmake
@@ -0,0 +1,208 @@
+# This file is based off of the Platform/Darwin.cmake and 
Platform/UnixPaths.cmake
+# files which are included with CMake 2.8.4
+# It has been altered for iOS development
+
+# Options:
+#
+# IOS_PLATFORM = OS (default) or SIMULATOR or SIMULATOR64
+#   This decides if SDKS will be selected from the iPhoneOS.platform or 
iPhoneSimulator.platform folders
+#   OS - the default, used to build for iPhone and iPad physical devices, 
which have an arm arch.
+#   SIMULATOR - used to build for the Simulator platforms, which have an x86 
arch.
+#
+# CMAKE_IOS_DEVELOPER_ROOT = automatic(default) or /path/to/platform/Developer 
folder
+#   By default this location is automatcially chosen based on the IOS_PLATFORM 
value above.
+#   If set manually, it will override the default location and force the user 
of a particular Developer Platform
+#
+# CMAKE_IOS_SDK_ROOT = automatic(default) or 
/path/to/platform/Developer/SDKs/SDK folder
+#   By default this location is automatcially chosen based on the 
CMAKE_IOS_DEVELOPER_ROOT value.
+#   In this case it will always be the most up-to-date SDK found in the 
CMAKE_IOS_DEVELOPER_ROOT path.
+#   If set manually, this will force the use of a specific SDK version
+
+# Macros:
+#
+# set_xcode_property (TARGET XCODE_PROPERTY XCODE_VALUE)
+#  A convenience macro for setting xcode specific properties on targets
+#  example: set_xcode_property (myioslib IPHONEOS_DEPLOYMENT_TARGET "3.1")
+#
+# find_host_package (PROGRAM ARGS)
+#  A macro used to find executable programs on the host system, not within the 
iOS environment.
+#  Thanks to the android-cmake project for providing the command
+
+# Standard settings
+set (CMAKE_SYSTEM_NAME Darwin)
+set (CMAKE_SYSTEM_VERSION 1)
+set (UNIX True)
+set (APPLE True)
+set (IOS True)
+
+# Required as of cmake 2.8.10
+set (CMAKE_OSX_DEPLOYMENT_TARGET "" CACHE STRING "Force unset of the 
deployment target for iOS" FORCE)
+
+# Determine the cmake host system version so we know where to find the iOS SDKs
+find_program (CMAKE_UNAME uname /bin /usr/bin /usr/local/bin)
+if (CMAKE_UNAME)
+       exec_program(uname ARGS -r OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION)
+       string (REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\1" 
DARWIN_MAJOR_VERSION "${CMAKE_HOST_SYSTEM_VERSION}")
+endif (CMAKE_UNAME)
+
+# Force the compilers to gcc for iOS
+include (CMakeForceCompiler)
+CMAKE_FORCE_C_COMPILER (/usr/bin/gcc Apple)
+CMAKE_FORCE_CXX_COMPILER (/usr/bin/g++ Apple)
+set(CMAKE_AR ar CACHE FILEPATH "" FORCE)
+
+# Skip the platform compiler checks for cross compiling
+set (CMAKE_CXX_COMPILER_WORKS TRUE)
+set (CMAKE_C_COMPILER_WORKS TRUE)
+
+# All iOS/Darwin specific settings - some may be redundant
+set (CMAKE_SHARED_LIBRARY_PREFIX "lib")
+set (CMAKE_SHARED_LIBRARY_SUFFIX ".dylib")
+set (CMAKE_SHARED_MODULE_PREFIX "lib")
+set (CMAKE_SHARED_MODULE_SUFFIX ".so")
+set (CMAKE_MODULE_EXISTS 1)
+set (CMAKE_DL_LIBS "")
+
+set (CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ")
+set (CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ")
+set (CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG 
"${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}")
+set (CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}")
+
+# Hidden visibilty is required for cxx on iOS 
+set (CMAKE_C_FLAGS_INIT "")
+set (CMAKE_CXX_FLAGS_INIT "-fvisibility=hidden -fvisibility-inlines-hidden")
+
+set (CMAKE_C_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}")
+set (CMAKE_CXX_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}")
+
+set (CMAKE_PLATFORM_HAS_INSTALLNAME 1)
+set (CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib 
-headerpad_max_install_names")
+set (CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -headerpad_max_install_names")
+set (CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,")
+set (CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,")
+set (CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a")
+
+# hack: if a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old 
build tree
+# (where install_name_tool was hardcoded) and where CMAKE_INSTALL_NAME_TOOL 
isn't in the cache
+# and still cmake didn't fail in CMakeFindBinUtils.cmake (because it isn't 
rerun)
+# hardcode CMAKE_INSTALL_NAME_TOOL here to install_name_tool, so it behaves as 
it did before, Alex
+if (NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
+       find_program(CMAKE_INSTALL_NAME_TOOL install_name_tool)
+endif (NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
+
+# Setup iOS platform unless specified manually with IOS_PLATFORM
+if (NOT DEFINED IOS_PLATFORM)
+       set (IOS_PLATFORM "OS")
+endif (NOT DEFINED IOS_PLATFORM)
+set (IOS_PLATFORM ${IOS_PLATFORM} CACHE STRING "Type of iOS Platform")
+
+# Setup building for arm64 or not
+if (NOT DEFINED BUILD_ARM64)
+    set (BUILD_ARM64 true)
+endif (NOT DEFINED BUILD_ARM64)
+set (BUILD_ARM64 ${BUILD_ARM64} CACHE STRING "Build arm64 arch or not")
+
+# Check the platform selection and setup for developer root
+if (${IOS_PLATFORM} STREQUAL "OS")
+       set (IOS_PLATFORM_LOCATION "iPhoneOS.platform")
+
+       # This causes the installers to properly locate the output libraries
+       set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos")
+elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR")
+    set (SIMULATOR true)
+       set (IOS_PLATFORM_LOCATION "iPhoneSimulator.platform")
+
+       # This causes the installers to properly locate the output libraries
+       set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphonesimulator")
+elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR64")
+    set (SIMULATOR true)
+       set (IOS_PLATFORM_LOCATION "iPhoneSimulator.platform")
+
+       # This causes the installers to properly locate the output libraries
+       set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphonesimulator")
+else (${IOS_PLATFORM} STREQUAL "OS")
+       message (FATAL_ERROR "Unsupported IOS_PLATFORM value selected. Please 
choose OS or SIMULATOR")
+endif (${IOS_PLATFORM} STREQUAL "OS")
+
+# Setup iOS developer location unless specified manually with 
CMAKE_IOS_DEVELOPER_ROOT
+# Note Xcode 4.3 changed the installation location, choose the most recent one 
available
+exec_program(/usr/bin/xcode-select ARGS -print-path OUTPUT_VARIABLE 
CMAKE_XCODE_DEVELOPER_DIR)
+set (XCODE_POST_43_ROOT 
"${CMAKE_XCODE_DEVELOPER_DIR}/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
+set (XCODE_PRE_43_ROOT 
"/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
+if (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
+       if (EXISTS ${XCODE_POST_43_ROOT})
+               set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_POST_43_ROOT})
+       elseif(EXISTS ${XCODE_PRE_43_ROOT})
+               set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_PRE_43_ROOT})
+       endif (EXISTS ${XCODE_POST_43_ROOT})
+endif (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
+set (CMAKE_IOS_DEVELOPER_ROOT ${CMAKE_IOS_DEVELOPER_ROOT} CACHE PATH "Location 
of iOS Platform")
+
+# Find and use the most recent iOS sdk unless specified manually with 
CMAKE_IOS_SDK_ROOT
+if (NOT DEFINED CMAKE_IOS_SDK_ROOT)
+       file (GLOB _CMAKE_IOS_SDKS "${CMAKE_IOS_DEVELOPER_ROOT}/SDKs/*")
+       if (_CMAKE_IOS_SDKS) 
+               list (SORT _CMAKE_IOS_SDKS)
+               list (REVERSE _CMAKE_IOS_SDKS)
+               list (GET _CMAKE_IOS_SDKS 0 CMAKE_IOS_SDK_ROOT)
+       else (_CMAKE_IOS_SDKS)
+               message (FATAL_ERROR "No iOS SDK's found in default search path 
${CMAKE_IOS_DEVELOPER_ROOT}. Manually set CMAKE_IOS_SDK_ROOT or install the iOS 
SDK.")
+       endif (_CMAKE_IOS_SDKS)
+       message (STATUS "Toolchain using default iOS SDK: 
${CMAKE_IOS_SDK_ROOT}")
+endif (NOT DEFINED CMAKE_IOS_SDK_ROOT)
+set (CMAKE_IOS_SDK_ROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Location of the 
selected iOS SDK")
+
+# Set the sysroot default to the most recent SDK
+set (CMAKE_OSX_SYSROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Sysroot used for iOS 
support")
+
+# set the architecture for iOS 
+if (${IOS_PLATFORM} STREQUAL "OS")
+    set (IOS_ARCH armv7 armv7s arm64)
+elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR")
+    set (IOS_ARCH i386)
+elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR64")
+    set (IOS_ARCH x86_64)
+endif (${IOS_PLATFORM} STREQUAL "OS")
+
+set (CMAKE_OSX_ARCHITECTURES ${IOS_ARCH} CACHE string  "Build architecture for 
iOS")
+
+# Set the find root to the iOS developer roots and to user defined paths
+set (CMAKE_FIND_ROOT_PATH ${CMAKE_IOS_DEVELOPER_ROOT} ${CMAKE_IOS_SDK_ROOT} 
${CMAKE_PREFIX_PATH} CACHE string  "iOS find search path root")
+
+# default to searching for frameworks first
+set (CMAKE_FIND_FRAMEWORK FIRST)
+
+# set up the default search directories for frameworks
+set (CMAKE_SYSTEM_FRAMEWORK_PATH
+       ${CMAKE_IOS_SDK_ROOT}/System/Library/Frameworks
+       ${CMAKE_IOS_SDK_ROOT}/System/Library/PrivateFrameworks
+       ${CMAKE_IOS_SDK_ROOT}/Developer/Library/Frameworks
+)
+
+# only search the iOS sdks, not the remainder of the host filesystem
+set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
+set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+
+
+# This little macro lets you set any XCode specific property
+macro (set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE)
+       set_property (TARGET ${TARGET} PROPERTY 
XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE})
+endmacro (set_xcode_property)
+
+
+# This macro lets you find executable programs on the host system
+macro (find_host_package)
+       set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+       set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
+       set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
+       set (IOS FALSE)
+
+       find_package(${ARGN})
+
+       set (IOS TRUE)
+       set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
+       set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+       set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+endmacro (find_host_package)
+

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/45e6d516/examples/iOSPort/iOSPortREADME.md
----------------------------------------------------------------------
diff --git a/examples/iOSPort/iOSPortREADME.md 
b/examples/iOSPort/iOSPortREADME.md
new file mode 100644
index 0000000..3631b05
--- /dev/null
+++ b/examples/iOSPort/iOSPortREADME.md
@@ -0,0 +1,8 @@
+1) Install XCode
+2) Build libminfi.a
+cd libminifi, mkdir lib, cd lib
+cmake -DCMAKE_TOOLCHAIN_FILE=../../cmake/iOS.cmake -DIOS_PLATFORM=SIMULATOR64 
..
+make
+after that it will create libminifi.a for Xcode Simulator
+3) Create a XCode iphone simulator project, in build stage add link library 
for libminfi.a
+4) In IOS project file, you can call MiNiFi APIs list in libminifi/include  

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/45e6d516/libminifi/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/libminifi/CMakeLists.txt b/libminifi/CMakeLists.txt
index d80d63b..69975ad 100644
--- a/libminifi/CMakeLists.txt
+++ b/libminifi/CMakeLists.txt
@@ -36,6 +36,14 @@ ENDIF(POLICY CMP0048)
 set(CMAKE_CXX_STANDARD 11)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
+IF (IOS)
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fobjc-abi-version=2 -fobjc-arc 
-std=gnu++11 -stdlib=libc++ -isysroot ${CMAKE_OSX_SYSROOT} -DIOS")
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fobjc-abi-version=2 -fobjc-arc -isysroot 
${CMAKE_OSX_SYSROOT} -DIOS")
+ELSE ()
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DLEVELDB_SUPPORT -DOPENSSL_SUPPORT 
-DYAML_SUPPORT")
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DLEVELDB_SUPPORT -DOPENSSL_SUPPORT 
-DYAML_SUPPORT")
+ENDIF()
+
 include(CheckCXXCompilerFlag)
 CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
 CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
@@ -60,14 +68,15 @@ file(GLOB SPD_SOURCES "../include/spdlog/*")
 add_library(spdlog STATIC ${SPD_SOURCES})
 add_library(minifi STATIC ${SOURCES})
 
-# Include Boost System
-find_package(Boost COMPONENTS system REQUIRED)
-target_link_libraries(minifi ${Boost_SYSTEM_LIBRARY})
 find_package(ZLIB REQUIRED)
-
 include_directories(${ZLIB_INCLUDE_DIRS})
 target_link_libraries (minifi ${ZLIB_LIBRARIES})
 
+if (NOT IOS)
+# Include Boost System
+find_package(Boost COMPONENTS system REQUIRED)
+target_link_libraries(minifi ${Boost_SYSTEM_LIBRARY})
+
 # Include LevelDB
 find_package (Leveldb REQUIRED)
 if (LEVELDB_FOUND)
@@ -85,3 +94,4 @@ if (OPENSSL_FOUND)
 else ()
     message( FATAL_ERROR "OpenSSL was not found. Please install OpenSSL" )
 endif (OPENSSL_FOUND)
+endif ()

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/45e6d516/libminifi/cmake/iOS.cmake
----------------------------------------------------------------------
diff --git a/libminifi/cmake/iOS.cmake b/libminifi/cmake/iOS.cmake
new file mode 100644
index 0000000..57b82f9
--- /dev/null
+++ b/libminifi/cmake/iOS.cmake
@@ -0,0 +1,208 @@
+# This file is based off of the Platform/Darwin.cmake and 
Platform/UnixPaths.cmake
+# files which are included with CMake 2.8.4
+# It has been altered for iOS development
+
+# Options:
+#
+# IOS_PLATFORM = OS (default) or SIMULATOR or SIMULATOR64
+#   This decides if SDKS will be selected from the iPhoneOS.platform or 
iPhoneSimulator.platform folders
+#   OS - the default, used to build for iPhone and iPad physical devices, 
which have an arm arch.
+#   SIMULATOR - used to build for the Simulator platforms, which have an x86 
arch.
+#
+# CMAKE_IOS_DEVELOPER_ROOT = automatic(default) or /path/to/platform/Developer 
folder
+#   By default this location is automatcially chosen based on the IOS_PLATFORM 
value above.
+#   If set manually, it will override the default location and force the user 
of a particular Developer Platform
+#
+# CMAKE_IOS_SDK_ROOT = automatic(default) or 
/path/to/platform/Developer/SDKs/SDK folder
+#   By default this location is automatcially chosen based on the 
CMAKE_IOS_DEVELOPER_ROOT value.
+#   In this case it will always be the most up-to-date SDK found in the 
CMAKE_IOS_DEVELOPER_ROOT path.
+#   If set manually, this will force the use of a specific SDK version
+
+# Macros:
+#
+# set_xcode_property (TARGET XCODE_PROPERTY XCODE_VALUE)
+#  A convenience macro for setting xcode specific properties on targets
+#  example: set_xcode_property (myioslib IPHONEOS_DEPLOYMENT_TARGET "3.1")
+#
+# find_host_package (PROGRAM ARGS)
+#  A macro used to find executable programs on the host system, not within the 
iOS environment.
+#  Thanks to the android-cmake project for providing the command
+
+# Standard settings
+set (CMAKE_SYSTEM_NAME Darwin)
+set (CMAKE_SYSTEM_VERSION 1)
+set (UNIX True)
+set (APPLE True)
+set (IOS True)
+
+# Required as of cmake 2.8.10
+set (CMAKE_OSX_DEPLOYMENT_TARGET "" CACHE STRING "Force unset of the 
deployment target for iOS" FORCE)
+
+# Determine the cmake host system version so we know where to find the iOS SDKs
+find_program (CMAKE_UNAME uname /bin /usr/bin /usr/local/bin)
+if (CMAKE_UNAME)
+       exec_program(uname ARGS -r OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION)
+       string (REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\1" 
DARWIN_MAJOR_VERSION "${CMAKE_HOST_SYSTEM_VERSION}")
+endif (CMAKE_UNAME)
+
+# Force the compilers to gcc for iOS
+include (CMakeForceCompiler)
+CMAKE_FORCE_C_COMPILER (/usr/bin/gcc Apple)
+CMAKE_FORCE_CXX_COMPILER (/usr/bin/g++ Apple)
+set(CMAKE_AR ar CACHE FILEPATH "" FORCE)
+
+# Skip the platform compiler checks for cross compiling
+set (CMAKE_CXX_COMPILER_WORKS TRUE)
+set (CMAKE_C_COMPILER_WORKS TRUE)
+
+# All iOS/Darwin specific settings - some may be redundant
+set (CMAKE_SHARED_LIBRARY_PREFIX "lib")
+set (CMAKE_SHARED_LIBRARY_SUFFIX ".dylib")
+set (CMAKE_SHARED_MODULE_PREFIX "lib")
+set (CMAKE_SHARED_MODULE_SUFFIX ".so")
+set (CMAKE_MODULE_EXISTS 1)
+set (CMAKE_DL_LIBS "")
+
+set (CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ")
+set (CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ")
+set (CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG 
"${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}")
+set (CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}")
+
+# Hidden visibilty is required for cxx on iOS 
+set (CMAKE_C_FLAGS_INIT "")
+set (CMAKE_CXX_FLAGS_INIT "-fvisibility=hidden -fvisibility-inlines-hidden")
+
+set (CMAKE_C_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}")
+set (CMAKE_CXX_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}")
+
+set (CMAKE_PLATFORM_HAS_INSTALLNAME 1)
+set (CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib 
-headerpad_max_install_names")
+set (CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -headerpad_max_install_names")
+set (CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,")
+set (CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,")
+set (CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a")
+
+# hack: if a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old 
build tree
+# (where install_name_tool was hardcoded) and where CMAKE_INSTALL_NAME_TOOL 
isn't in the cache
+# and still cmake didn't fail in CMakeFindBinUtils.cmake (because it isn't 
rerun)
+# hardcode CMAKE_INSTALL_NAME_TOOL here to install_name_tool, so it behaves as 
it did before, Alex
+if (NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
+       find_program(CMAKE_INSTALL_NAME_TOOL install_name_tool)
+endif (NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
+
+# Setup iOS platform unless specified manually with IOS_PLATFORM
+if (NOT DEFINED IOS_PLATFORM)
+       set (IOS_PLATFORM "OS")
+endif (NOT DEFINED IOS_PLATFORM)
+set (IOS_PLATFORM ${IOS_PLATFORM} CACHE STRING "Type of iOS Platform")
+
+# Setup building for arm64 or not
+if (NOT DEFINED BUILD_ARM64)
+    set (BUILD_ARM64 true)
+endif (NOT DEFINED BUILD_ARM64)
+set (BUILD_ARM64 ${BUILD_ARM64} CACHE STRING "Build arm64 arch or not")
+
+# Check the platform selection and setup for developer root
+if (${IOS_PLATFORM} STREQUAL "OS")
+       set (IOS_PLATFORM_LOCATION "iPhoneOS.platform")
+
+       # This causes the installers to properly locate the output libraries
+       set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos")
+elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR")
+    set (SIMULATOR true)
+       set (IOS_PLATFORM_LOCATION "iPhoneSimulator.platform")
+
+       # This causes the installers to properly locate the output libraries
+       set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphonesimulator")
+elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR64")
+    set (SIMULATOR true)
+       set (IOS_PLATFORM_LOCATION "iPhoneSimulator.platform")
+
+       # This causes the installers to properly locate the output libraries
+       set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphonesimulator")
+else (${IOS_PLATFORM} STREQUAL "OS")
+       message (FATAL_ERROR "Unsupported IOS_PLATFORM value selected. Please 
choose OS or SIMULATOR")
+endif (${IOS_PLATFORM} STREQUAL "OS")
+
+# Setup iOS developer location unless specified manually with 
CMAKE_IOS_DEVELOPER_ROOT
+# Note Xcode 4.3 changed the installation location, choose the most recent one 
available
+exec_program(/usr/bin/xcode-select ARGS -print-path OUTPUT_VARIABLE 
CMAKE_XCODE_DEVELOPER_DIR)
+set (XCODE_POST_43_ROOT 
"${CMAKE_XCODE_DEVELOPER_DIR}/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
+set (XCODE_PRE_43_ROOT 
"/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
+if (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
+       if (EXISTS ${XCODE_POST_43_ROOT})
+               set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_POST_43_ROOT})
+       elseif(EXISTS ${XCODE_PRE_43_ROOT})
+               set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_PRE_43_ROOT})
+       endif (EXISTS ${XCODE_POST_43_ROOT})
+endif (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
+set (CMAKE_IOS_DEVELOPER_ROOT ${CMAKE_IOS_DEVELOPER_ROOT} CACHE PATH "Location 
of iOS Platform")
+
+# Find and use the most recent iOS sdk unless specified manually with 
CMAKE_IOS_SDK_ROOT
+if (NOT DEFINED CMAKE_IOS_SDK_ROOT)
+       file (GLOB _CMAKE_IOS_SDKS "${CMAKE_IOS_DEVELOPER_ROOT}/SDKs/*")
+       if (_CMAKE_IOS_SDKS) 
+               list (SORT _CMAKE_IOS_SDKS)
+               list (REVERSE _CMAKE_IOS_SDKS)
+               list (GET _CMAKE_IOS_SDKS 0 CMAKE_IOS_SDK_ROOT)
+       else (_CMAKE_IOS_SDKS)
+               message (FATAL_ERROR "No iOS SDK's found in default search path 
${CMAKE_IOS_DEVELOPER_ROOT}. Manually set CMAKE_IOS_SDK_ROOT or install the iOS 
SDK.")
+       endif (_CMAKE_IOS_SDKS)
+       message (STATUS "Toolchain using default iOS SDK: 
${CMAKE_IOS_SDK_ROOT}")
+endif (NOT DEFINED CMAKE_IOS_SDK_ROOT)
+set (CMAKE_IOS_SDK_ROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Location of the 
selected iOS SDK")
+
+# Set the sysroot default to the most recent SDK
+set (CMAKE_OSX_SYSROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Sysroot used for iOS 
support")
+
+# set the architecture for iOS 
+if (${IOS_PLATFORM} STREQUAL "OS")
+    set (IOS_ARCH armv7 armv7s arm64)
+elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR")
+    set (IOS_ARCH i386)
+elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR64")
+    set (IOS_ARCH x86_64)
+endif (${IOS_PLATFORM} STREQUAL "OS")
+
+set (CMAKE_OSX_ARCHITECTURES ${IOS_ARCH} CACHE string  "Build architecture for 
iOS")
+
+# Set the find root to the iOS developer roots and to user defined paths
+set (CMAKE_FIND_ROOT_PATH ${CMAKE_IOS_DEVELOPER_ROOT} ${CMAKE_IOS_SDK_ROOT} 
${CMAKE_PREFIX_PATH} CACHE string  "iOS find search path root")
+
+# default to searching for frameworks first
+set (CMAKE_FIND_FRAMEWORK FIRST)
+
+# set up the default search directories for frameworks
+set (CMAKE_SYSTEM_FRAMEWORK_PATH
+       ${CMAKE_IOS_SDK_ROOT}/System/Library/Frameworks
+       ${CMAKE_IOS_SDK_ROOT}/System/Library/PrivateFrameworks
+       ${CMAKE_IOS_SDK_ROOT}/Developer/Library/Frameworks
+)
+
+# only search the iOS sdks, not the remainder of the host filesystem
+set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
+set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+
+
+# This little macro lets you set any XCode specific property
+macro (set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE)
+       set_property (TARGET ${TARGET} PROPERTY 
XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE})
+endmacro (set_xcode_property)
+
+
+# This macro lets you find executable programs on the host system
+macro (find_host_package)
+       set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+       set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
+       set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
+       set (IOS FALSE)
+
+       find_package(${ARGN})
+
+       set (IOS TRUE)
+       set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
+       set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+       set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+endmacro (find_host_package)
+

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/45e6d516/libminifi/include/FlowController.h
----------------------------------------------------------------------
diff --git a/libminifi/include/FlowController.h 
b/libminifi/include/FlowController.h
index f63029e..9db13ff 100644
--- a/libminifi/include/FlowController.h
+++ b/libminifi/include/FlowController.h
@@ -28,8 +28,9 @@
 #include <atomic>
 #include <algorithm>
 #include <set>
+#ifdef YAML_SUPPORT
 #include "yaml-cpp/yaml.h"
-
+#endif
 #include "Configure.h"
 #include "Property.h"
 #include "Relationship.h"
@@ -56,8 +57,10 @@
 #include "ExecuteProcess.h"
 #include "AppendHostInfo.h"
 // OpenSSL related
+#ifdef OPENSSL_SUPPORT
 #include <openssl/ssl.h>
 #include <openssl/err.h>
+#endif
 
 //! Default NiFi Root Group Name
 #define DEFAULT_ROOT_GROUP_NAME ""
@@ -293,6 +296,7 @@ private:
        std::shared_ptr<Logger> logger_;
        Configure *configure_;
 
+#ifdef YAML_SUPPORT
        //! Process Processor Node YAML
        void parseProcessorNodeYaml(YAML::Node processorNode, ProcessGroup 
*parent);
        //! Process Port YAML
@@ -310,6 +314,7 @@ private:
        //! Parse Properties Node YAML for a processor
        void parsePropertiesNodeYaml(YAML::Node *propertiesNode,
                        Processor *processor);
+#endif
 
        // Prevent default copy constructor and assignment operation
        // Only support pass by reference or pointer

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/45e6d516/libminifi/include/Repository.h
----------------------------------------------------------------------
diff --git a/libminifi/include/Repository.h b/libminifi/include/Repository.h
index 8b1c3ec..55fb442 100644
--- a/libminifi/include/Repository.h
+++ b/libminifi/include/Repository.h
@@ -32,10 +32,12 @@
 #include <thread>
 #include <vector>
 
+#ifdef LEVELDB_SUPPORT
 #include "leveldb/db.h"
 #include "leveldb/options.h"
 #include "leveldb/slice.h"
 #include "leveldb/status.h"
+#endif
 #include "Configure.h"
 #include "Connection.h"
 #include "FlowFileRecord.h"
@@ -71,7 +73,9 @@ public:
                _purgePeriod = purgePeriod;
                logger_ = Logger::getLogger();
                configure_ = Configure::getConfigure();
+#ifdef LEVELDB_SUPPORT
                _db = NULL;
+#endif
                _thread = NULL;
                _running = false;
                _repoFull = false;
@@ -91,6 +95,7 @@ public:
        {
                std::string value;
 
+#ifdef LEVELDB_SUPPORT
                if (_type == PROVENANCE)
                {
                        if 
(!(configure_->get(Configure::nifi_provenance_repository_enable, value)
@@ -174,10 +179,14 @@ public:
                }
 
                return true;
+#else
+               return false;
+#endif
        }
        //! Put
        virtual bool Put(std::string key, uint8_t *buf, int bufLen)
        {
+#ifdef LEVELDB_SUPPORT
                if (!_enable)
                        return false;
                        
@@ -189,10 +198,14 @@ public:
                        return true;
                else
                        return false;
+#else
+               return false;
+#endif
        }
        //! Delete
        virtual bool Delete(std::string key)
        {
+#ifdef LEVELDB_SUPPORT
                if (!_enable)
                        return false;
                leveldb::Status status;
@@ -201,10 +214,14 @@ public:
                        return true;
                else
                        return false;
+#else
+               return false;
+#endif
        }
        //! Get
        virtual bool Get(std::string key, std::string &value)
        {
+#ifdef LEVELDB_SUPPORT
                if (!_enable)
                        return false;
                leveldb::Status status;
@@ -213,6 +230,9 @@ public:
                        return true;
                else
                        return false;
+#else
+               return false;
+#endif
        }
        //! Run function for the thread
        static void run(Repository *repo);
@@ -248,8 +268,10 @@ protected:
        int64_t _maxPartitionBytes;
        //! purge period
        uint64_t _purgePeriod;
+#ifdef LEVELDB_SUPPORT
        //! level DB database
        leveldb::DB* _db;
+#endif
        //! thread
        std::thread *_thread;
        //! whether the monitoring thread is running for the repo while it was 
enabled 
@@ -279,11 +301,13 @@ private:
        //! destroy
        void destroy()
        {
+#ifdef LEVELDB_SUPPORT
                if (_db)
                {
                        delete _db;
                        _db = NULL;
                }
+#endif
        }
        // Prevent default copy constructor and assignment operation
        // Only support pass by reference or pointer

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/45e6d516/libminifi/include/io/SocketFactory.h
----------------------------------------------------------------------
diff --git a/libminifi/include/io/SocketFactory.h 
b/libminifi/include/io/SocketFactory.h
index e7988fc..c8cbcb1 100644
--- a/libminifi/include/io/SocketFactory.h
+++ b/libminifi/include/io/SocketFactory.h
@@ -61,7 +61,11 @@ public:
        std::unique_ptr<Socket> createSocket(const std::string &host, const 
uint16_t port) {
                Socket *socket = 0;
                if (is_secure_) {
+#ifdef OPENSSL_SUPPORT
                        socket = new TLSSocket(host, port);
+#else
+                       socket = 0;
+#endif
                } else {
                        socket = new Socket(host, port);
                }

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/45e6d516/libminifi/include/io/TLSSocket.h
----------------------------------------------------------------------
diff --git a/libminifi/include/io/TLSSocket.h b/libminifi/include/io/TLSSocket.h
index 56845fe..32645ca 100644
--- a/libminifi/include/io/TLSSocket.h
+++ b/libminifi/include/io/TLSSocket.h
@@ -18,6 +18,7 @@
 #ifndef LIBMINIFI_INCLUDE_IO_TLSSOCKET_H_
 #define LIBMINIFI_INCLUDE_IO_TLSSOCKET_H_
 
+#ifdef OPENSSL_SUPPORT
 #include <cstdint>
 #include "ClientSocket.h"
 #include <atomic>
@@ -108,8 +109,8 @@ private:
        SSL_CTX *ctx;
 
        short error_value;
-
        static std::atomic<TLSContext*> context_instance;
+
        static std::mutex context_mutex;
 };
 
@@ -181,5 +182,6 @@ protected:
        SSL* ssl;
 
 };
+#endif
 
 #endif /* LIBMINIFI_INCLUDE_IO_TLSSOCKET_H_ */

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/45e6d516/libminifi/src/FlowController.cpp
----------------------------------------------------------------------
diff --git a/libminifi/src/FlowController.cpp b/libminifi/src/FlowController.cpp
index 28e35b7..eca84be 100644
--- a/libminifi/src/FlowController.cpp
+++ b/libminifi/src/FlowController.cpp
@@ -240,6 +240,7 @@ Connection 
*FlowControllerImpl::createConnection(std::string name,
        return new Connection(name, uuid);
 }
 
+#ifdef YAML_SUPPORT
 void FlowControllerImpl::parseRootProcessGroupYaml(YAML::Node rootFlowNode) {
        uuid_t uuid;
        ProcessGroup *group = NULL;
@@ -707,6 +708,7 @@ void FlowControllerImpl::parsePropertiesNodeYaml(YAML::Node 
*propertiesNode,
                }
        }
 }
+#endif /* ifdef YAML_SUPPORT */
 
 void FlowControllerImpl::load() {
     if (_running) {
@@ -715,7 +717,7 @@ void FlowControllerImpl::load() {
     if (!_initialized) {
         logger_->log_info("Load Flow Controller from file %s", 
_configurationFileName.c_str());
 
-
+#ifdef YAML_SUPPORT
                YAML::Node flow = YAML::LoadFile(_configurationFileName);
 
                YAML::Node flowControllerNode = flow["Flow Controller"];
@@ -731,6 +733,7 @@ void FlowControllerImpl::load() {
 
                // Load Flow File from Repo
                loadFlowRepo();
+#endif
 
                _initialized = true;
     }

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/45e6d516/libminifi/src/FlowFileRepository.cpp
----------------------------------------------------------------------
diff --git a/libminifi/src/FlowFileRepository.cpp 
b/libminifi/src/FlowFileRepository.cpp
index ade8dce..3388738 100644
--- a/libminifi/src/FlowFileRepository.cpp
+++ b/libminifi/src/FlowFileRepository.cpp
@@ -225,6 +225,7 @@ bool FlowFileEventRecord::DeSerialize(const uint8_t 
*buffer, const int bufferSiz
 
 void FlowFileRepository::loadFlowFileToConnections(std::map<std::string, 
Connection *> *connectionMap)
 {
+#ifdef LEVELDB_SUPPORT
        if (!_enable)
                return;
 
@@ -274,6 +275,7 @@ void 
FlowFileRepository::loadFlowFileToConnections(std::map<std::string, Connect
                                                                                
eventId.c_str());
                Delete(eventId);
        }
+#endif
 
        return;
 }

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/45e6d516/libminifi/src/Repository.cpp
----------------------------------------------------------------------
diff --git a/libminifi/src/Repository.cpp b/libminifi/src/Repository.cpp
index ffbd953..1a3c7b0 100644
--- a/libminifi/src/Repository.cpp
+++ b/libminifi/src/Repository.cpp
@@ -53,6 +53,7 @@ void Repository::stop() {
 }
 
 void Repository::run(Repository *repo) {
+#ifdef LEVELDB_SUPPORT
        // threshold for purge
        uint64_t purgeThreshold = repo->_maxPartitionBytes * 3 / 4;
        while (repo->_running) {
@@ -116,6 +117,7 @@ void Repository::run(Repository *repo) {
                else
                        repo->_repoFull = false;
        }
+#endif
        return;
 }
 

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/45e6d516/libminifi/src/io/TLSSocket.cpp
----------------------------------------------------------------------
diff --git a/libminifi/src/io/TLSSocket.cpp b/libminifi/src/io/TLSSocket.cpp
index b5fa596..1c81f6c 100644
--- a/libminifi/src/io/TLSSocket.cpp
+++ b/libminifi/src/io/TLSSocket.cpp
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
+#ifdef OPENSSL_SUPPORT
 #include "Property.h"
 #include "Configure.h"
 #include "io/TLSSocket.h"
@@ -234,3 +234,4 @@ int TLSSocket::readData(uint8_t *buf, int buflen) {
 
        return total_read;
 }
+#endif // #ifdef OPENSSL_SUPPORT

Reply via email to