From ccdbda748c7bc3c43e15da3e6a41243edbfd29be Mon Sep 17 00:00:00 2001 From: Russel Waters Date: Tue, 20 Oct 2020 10:04:56 -0700 Subject: [PATCH] add test network to build artifacts for non DB tags (#3000) * add test network to build artifacts for non DB tags different installation defaults for different networks update debian package, will create user(nanocurrency) and service for each network * rename variable for continuity --- .github/workflows/test_network_artifacts.yml | 93 ++++++++++++++++++++ CMakeLists.txt | 78 +++++++++++----- Info.plist.in | 2 +- ci/actions/deploy.sh | 2 + ci/actions/linux/deploy-docker.sh | 6 +- ci/actions/windows/build.ps1 | 5 +- ci/build-deploy.sh | 4 +- debian-control/postinst.in | 22 +++++ debian-control/postrm.in | 10 +++ etc/systemd/nanocurrency-beta.service | 4 +- etc/systemd/nanocurrency-test.service | 13 +++ etc/systemd/nanocurrency.service | 4 +- nano/ipc_flatbuffers_lib/CMakeLists.txt | 2 +- 13 files changed, 213 insertions(+), 32 deletions(-) create mode 100644 .github/workflows/test_network_artifacts.yml create mode 100644 debian-control/postinst.in create mode 100644 debian-control/postrm.in create mode 100644 etc/systemd/nanocurrency-test.service diff --git a/.github/workflows/test_network_artifacts.yml b/.github/workflows/test_network_artifacts.yml new file mode 100644 index 000000000..e425271c0 --- /dev/null +++ b/.github/workflows/test_network_artifacts.yml @@ -0,0 +1,93 @@ +name: TestNetwork + +on: + push: + tags-ignore: + - '*DB*' +env: + artifact: 1 + TEST: 1 + +jobs: + osx_job: + runs-on: macOS-latest + env: + BOOST_ROOT: /tmp/boost + steps: + - uses: actions/checkout@722adc6 + - uses: chrislennon/action-aws-cli@f0f8671 + - name: tag + run: echo "::set-env name=TAG::`git describe --tags $GITHUB_SHA`" + - name: Checkout Submodules + run: git submodule update --init --recursive + - name: Fetch Deps + run: ci/actions/osx/install_deps.sh + - name: Build Artifact + run: TRAVIS_TAG=${TAG} ci/build-deploy.sh "/tmp/qt/lib/cmake/Qt5"; + - name: Deploy Artifact + run: ci/actions/deploy.sh + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: us-east-2 + + linux_job: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@722adc6 + - uses: chrislennon/action-aws-cli@f0f8671 + - name: tag + run: echo "::set-env name=TAG::`git describe --tags $GITHUB_SHA`" + - name: Checkout Submodules + run: git submodule update --init --recursive + - name: Fetch Deps + run: ci/actions/linux/install_deps.sh + - name: Build Artifact + run: docker run -e TEST -v ${GITHUB_WORKSPACE}:/workspace nanocurrency/nano-env:gcc /bin/bash -c "cd /workspace && TRAVIS_TAG=${TAG} ci/build-deploy.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" + - name: Deploy Artifact + run: ci/actions/deploy.sh + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: us-east-2 + + linux_docker_job: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@722adc6 + - uses: chrislennon/action-aws-cli@f0f8671 + - name: tag + run: echo "::set-env name=TAG::`git describe --tags $GITHUB_SHA`" + - name: Checkout Submodules + run: git submodule update --init --recursive + - name: Fetch Deps + run: ci/actions/linux/install_deps.sh + - name: Deploy Docker (nanocurrency/nano) + run: TRAVIS_TAG=${TAG} ci/actions/linux/deploy-docker.sh + env: + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + + windows_job: + runs-on: windows-latest + steps: + - uses: actions/checkout@722adc6 + - uses: chrislennon/action-aws-cli@f0f8671 + - name: tag + run: | + $TRAVIS_TAG=git describe --tags $GITHUB_SHA + echo "::set-env name=TAG::$TRAVIS_TAG" + - name: Checkout Submodules + run: git submodule update --init --recursive + - name: Fetch Deps + run: ci/actions/windows/install_deps.ps1 + - name: Build Artifact + run: ci/actions/windows/build.ps1 + env: + CSC_LINK: ${{ secrets.CSC_LINK }} + CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} + - name: Deploy Artifact + run: ci/actions/windows/deploy.ps1 + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: us-east-2 \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index e763c2510..ef6ccc1e6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -95,6 +95,27 @@ option(ENABLE_AVX2 "Enable AVX2 optimizations" OFF) SET (ACTIVE_NETWORK nano_live_network CACHE STRING "Selects which network parameters are used") set_property (CACHE ACTIVE_NETWORK PROPERTY STRINGS nano_dev_network nano_beta_network nano_live_network nano_test_network) +set (CPACK_PACKAGE_NAME "nano-node" CACHE STRING "" FORCE) +set (CPACK_NSIS_PACKAGE_NAME "Nano" CACHE STRING "" FORCE) +set (CPACK_PACKAGE_INSTALL_DIRECTORY "nanocurrency" CACHE STRING "" FORCE) +set (NANO_SERVICE "nanocurrency.service") +set (NANO_PREFIX "") +if ("${ACTIVE_NETWORK}" MATCHES "nano_beta_network") + project("nano-node-beta") + set (CPACK_PACKAGE_NAME "nano-node-beta" CACHE STRING "" FORCE) + set (CPACK_NSIS_PACKAGE_NAME "Nano-Beta" CACHE STRING "" FORCE) + set (CPACK_PACKAGE_INSTALL_DIRECTORY "nanocurrency-beta" CACHE STRING "" FORCE) + set (NANO_SERVICE "nanocurrency-beta.service") + set (NANO_PREFIX "Beta") +elseif ("${ACTIVE_NETWORK}" MATCHES "nano_test_network") + project("nano-node-test") + set (CPACK_PACKAGE_NAME "nano-node-test" CACHE STRING "" FORCE) + set (CPACK_NSIS_PACKAGE_NAME "Nano-Test" CACHE STRING "" FORCE) + set (CPACK_PACKAGE_INSTALL_DIRECTORY "nanocurrency-test" CACHE STRING "" FORCE) + set (NANO_SERVICE "nanocurrency-test.service") + set (NANO_PREFIX "Test") +endif() +set (NANO_OSX_PACKAGE_NAME ${CPACK_NSIS_PACKAGE_NAME} CACHE STRING "" FORCE) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE) @@ -548,32 +569,32 @@ if (NANO_GUI OR RAIBLOCKS_GUI) if (APPLE) set (CPACK_GENERATOR "DragNDrop") CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/Info.plist.in ${CMAKE_SOURCE_DIR}/Info.plist @ONLY) - install (TARGETS nano_wallet DESTINATION Nano.app/Contents/MacOS) - install (TARGETS nano_node DESTINATION Nano.app/Contents/MacOS) - install (TARGETS nano_rpc DESTINATION Nano.app/Contents/MacOS) - install (FILES Info.plist DESTINATION Nano.app/Contents) - install (FILES qt.conf DESTINATION Nano.app/Contents/Resources) - install (DIRECTORY ${Qt5_DIR}/../../QtCore.framework DESTINATION Nano.app/Contents/Frameworks) - install (DIRECTORY ${Qt5_DIR}/../../QtDBus.framework DESTINATION Nano.app/Contents/Frameworks) - install (DIRECTORY ${Qt5_DIR}/../../QtGui.framework DESTINATION Nano.app/Contents/Frameworks) - install (DIRECTORY ${Qt5_DIR}/../../QtPrintSupport.framework DESTINATION Nano.app/Contents/Frameworks) - install (DIRECTORY ${Qt5_DIR}/../../QtTest.framework DESTINATION Nano.app/Contents/Frameworks) - install (DIRECTORY ${Qt5_DIR}/../../QtWidgets.framework DESTINATION Nano.app/Contents/Frameworks) - install (FILES "${Qt5_DIR}/../../../plugins/platforms/libqcocoa.dylib" DESTINATION Nano.app/Contents/PlugIns/platforms) + install (TARGETS nano_wallet DESTINATION ${NANO_OSX_PACKAGE_NAME}.app/Contents/MacOS) + install (TARGETS nano_node DESTINATION ${NANO_OSX_PACKAGE_NAME}.app/Contents/MacOS) + install (TARGETS nano_rpc DESTINATION ${NANO_OSX_PACKAGE_NAME}.app/Contents/MacOS) + install (FILES Info.plist DESTINATION ${NANO_OSX_PACKAGE_NAME}.app/Contents) + install (FILES qt.conf DESTINATION ${NANO_OSX_PACKAGE_NAME}.app/Contents/Resources) + install (DIRECTORY ${Qt5_DIR}/../../QtCore.framework DESTINATION ${NANO_OSX_PACKAGE_NAME}.app/Contents/Frameworks) + install (DIRECTORY ${Qt5_DIR}/../../QtDBus.framework DESTINATION ${NANO_OSX_PACKAGE_NAME}.app/Contents/Frameworks) + install (DIRECTORY ${Qt5_DIR}/../../QtGui.framework DESTINATION ${NANO_OSX_PACKAGE_NAME}.app/Contents/Frameworks) + install (DIRECTORY ${Qt5_DIR}/../../QtPrintSupport.framework DESTINATION ${NANO_OSX_PACKAGE_NAME}.app/Contents/Frameworks) + install (DIRECTORY ${Qt5_DIR}/../../QtTest.framework DESTINATION ${NANO_OSX_PACKAGE_NAME}.app/Contents/Frameworks) + install (DIRECTORY ${Qt5_DIR}/../../QtWidgets.framework DESTINATION ${NANO_OSX_PACKAGE_NAME}.app/Contents/Frameworks) + install (FILES "${Qt5_DIR}/../../../plugins/platforms/libqcocoa.dylib" DESTINATION ${NANO_OSX_PACKAGE_NAME}.app/Contents/PlugIns/platforms) if (NANO_SHARED_BOOST) foreach(boost_lib IN LISTS Boost_LIBRARIES) string(REGEX MATCH "(.+/.*boost_[^-]+)" boost_lib_name ${boost_lib}) set (boost_dll "${CMAKE_MATCH_1}") if (${boost_dll} MATCHES "boost") - install (FILES ${boost_dll} DESTINATION Nano.app/Contents/boost/lib) + install (FILES ${boost_dll} DESTINATION ${NANO_OSX_PACKAGE_NAME}.app/Contents/boost/lib) endif() endforeach(boost_lib) endif() if (NANO_POW_SERVER) - install (TARGETS nano_pow_server DESTINATION Nano.app/Contents/MacOS) - install (DIRECTORY ${PROJECT_SOURCE_DIR}/nano-pow-server/public DESTINATION Nano.app/Contents/MacOS) + install (TARGETS nano_pow_server DESTINATION ${NANO_OSX_PACKAGE_NAME}.app/Contents/MacOS) + install (DIRECTORY ${PROJECT_SOURCE_DIR}/nano-pow-server/public DESTINATION ${NANO_OSX_PACKAGE_NAME}.app/Contents/MacOS) endif() - install (FILES Nano.icns DESTINATION Nano.app/Contents/Resources) + install (FILES Nano.icns DESTINATION ${NANO_OSX_PACKAGE_NAME}.app/Contents/Resources) elseif (WIN32) if ("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") set (WIN_REDIST vc_redist.x64.exe) @@ -581,14 +602,11 @@ if (NANO_GUI OR RAIBLOCKS_GUI) set (WIN_REDIST vc_redist.x86.exe) endif () set (CPACK_NSIS_EXTRA_INSTALL_COMMANDS "ExecWait '\\\"$INSTDIR\\\\${WIN_REDIST}\\\" /quiet /norestart' - WriteRegDWORD HKLM 'SYSTEM\\\\CurrentControlSet\\\\Services\\\\EventLog\\\\Nano\\\\Nano' 'TypesSupported' '0x7' - WriteRegStr HKLM 'SYSTEM\\\\CurrentControlSet\\\\Services\\\\EventLog\\\\Nano\\\\Nano' 'EventMessageFile' '$INSTDIR\\\\nano_wallet.exe'") - set (CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "DeleteRegKey HKLM 'SYSTEM\\\\CurrentControlSet\\\\Services\\\\EventLog\\\\Nano'") - set (CPACK_PACKAGE_INSTALL_DIRECTORY "nanocurrency") + WriteRegDWORD HKLM 'SYSTEM\\\\CurrentControlSet\\\\Services\\\\EventLog\\\\Nano\\\\Nano${NANO_PREFIX}' 'TypesSupported' '0x7' + WriteRegStr HKLM 'SYSTEM\\\\CurrentControlSet\\\\Services\\\\EventLog\\\\Nano\\\\Nano${NANO_PREFIX}' 'EventMessageFile' '$INSTDIR\\\\nano_wallet.exe'") + set (CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "DeleteRegKey HKLM 'SYSTEM\\\\CurrentControlSet\\\\Services\\\\EventLog\\\\Nano${NANO_PREFIX}'") set (CPACK_NSIS_MUI_ICON ${CMAKE_SOURCE_DIR}/Nano.ico) - set (CPACK_NSIS_DISPLAY_NAME "Nano") - set (CPACK_PACKAGE_NAME "nano-node") - set (CPACK_NSIS_PACKAGE_NAME "Nano") + set (CPACK_NSIS_DISPLAY_NAME "Nano${NANO_PREFIX}") set (CPACK_NSIS_URL_INFO_ABOUT "https://nano.org") set (CPACK_NSIS_CONTACT "info@nano.org") set (CPACK_NSIS_MENU_LINKS "nano_wallet.exe" "Nano Wallet" "https://nano.org" "Nano website") @@ -645,6 +663,20 @@ if (NANO_GUI OR RAIBLOCKS_GUI) install (TARGETS nano_pow_server DESTINATION ./bin) install (DIRECTORY ${PROJECT_SOURCE_DIR}/nano-pow-server/public DESTINATION ./bin) endif () + set(DEBIAN_POSTINST postinst.in) + set(DEBIAN_POSTRM postrm.in) + + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/debian-control/${DEBIAN_POSTINST} + ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/postinst) + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/debian-control/${DEBIAN_POSTRM} + ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/postrm) + file(COPY ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/postinst + ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/postrm + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/debian-control/. + FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ + GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + install (FILES etc/systemd/${NANO_SERVICE} DESTINATION ./extras/systemd/.) + set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_BINARY_DIR}/debian-control/postinst;${CMAKE_CURRENT_BINARY_DIR}/debian-control/postrm") endif () endif () diff --git a/Info.plist.in b/Info.plist.in index 37e5d9dfd..db9feed25 100644 --- a/Info.plist.in +++ b/Info.plist.in @@ -9,7 +9,7 @@ CFBundleExecutable nano_wallet CFBundleName - Nano + @NANO_OSX_PACKAGE_NAME@ CFBundleInfoDictionaryVersion 6.0 CFBundleIconFile diff --git a/ci/actions/deploy.sh b/ci/actions/deploy.sh index d2bebef21..a7bc35be4 100755 --- a/ci/actions/deploy.sh +++ b/ci/actions/deploy.sh @@ -7,6 +7,8 @@ OS=`uname` if [[ "${BETA-0}" -eq 1 ]]; then BUILD="beta" +elif [[ "${TEST-0}" -eq 1 ]]; then + BUILD="test" else BUILD="live" fi diff --git a/ci/actions/linux/deploy-docker.sh b/ci/actions/linux/deploy-docker.sh index c1f08625f..777ec6191 100755 --- a/ci/actions/linux/deploy-docker.sh +++ b/ci/actions/linux/deploy-docker.sh @@ -17,7 +17,7 @@ if [ -n "$DOCKER_PASSWORD" ]; then tags=() if [ -n "$TRAVIS_TAG" ]; then tags+=("$TRAVIS_TAG" latest) - if [[ "$GITHUB_WORKFLOW" = "Beta" ]]; then + if [[ "$GITHUB_WORKFLOW" = "Beta" || "$GITHUB_WORKFLOW" = "TestNetwork" ]]; then tags+=(latest-including-rc) fi elif [ -n "$TRAVIS_BRANCH" ]; then @@ -32,6 +32,10 @@ if [ -n "$DOCKER_PASSWORD" ]; then echo "Beta" network_tag_suffix="-beta" network="beta" + elif [[ "$GITHUB_WORKFLOW" = "TestNetwork" ]]; then + echo "Test" + network_tag_suffix="-test" + network="test" else echo "Nothing to deploy" exit 1 diff --git a/ci/actions/windows/build.ps1 b/ci/actions/windows/build.ps1 index 42f50290c..89eceb92b 100644 --- a/ci/actions/windows/build.ps1 +++ b/ci/actions/windows/build.ps1 @@ -1,13 +1,16 @@ $ErrorActionPreference = "Continue" if (${env:artifact} -eq 1) { + $env:BUILD_TYPE = "Release" if ( ${env:BETA} -eq 1 ) { $env:NETWORK_CFG = "beta" $env:BUILD_TYPE = "RelWithDebInfo" } + elseif(${env:TEST} -eq 1) { + $env:NETWORK_CFG= "test" + } else { $env:NETWORK_CFG = "live" - $env:BUILD_TYPE = "Release" } $env:NANO_SHARED_BOOST = "ON" $env:ROCKS_LIB = '-DROCKSDB_LIBRARIES="c:\vcpkg\installed\x64-windows-static\lib\rocksdb.lib"' diff --git a/ci/build-deploy.sh b/ci/build-deploy.sh index 634c66813..bf32bc10a 100755 --- a/ci/build-deploy.sh +++ b/ci/build-deploy.sh @@ -10,13 +10,15 @@ OS=`uname` mkdir build pushd build +CONFIGURATION="Release" if [[ "${BETA:-0}" -eq 1 ]]; then NETWORK_CFG="beta" CONFIGURATION="RelWithDebInfo" +elif [[ "${TEST:-0}" -eq 1 ]]; then + NETWORK_CFG="test" else NETWORK_CFG="live" - CONFIGURATION="Release" fi cmake \ diff --git a/debian-control/postinst.in b/debian-control/postinst.in new file mode 100644 index 000000000..5360b8cb0 --- /dev/null +++ b/debian-control/postinst.in @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +set +e + +useradd -r nanocurrency +groupadd -r nanocurrency + +mkdir -p /var/nanocurrency/Nano +mkdir -p /var/nanocurrency/NanoBeta +mkdir -p /var/nanocurrency/NanoTest +chown -R nanocurrency: /var/nanocurrency + +systemctl stop ${NANO_SERVICE} 2>/dev/null +systemctl disable ${NANO_SERVICE} 2>/dev/null +cp ${CMAKE_INSTALL_PREFIX}/extras/systemd/${NANO_SERVICE} /etc/systemd/system/${NANO_SERVICE} +systemctl daemon-reload +systemctl enable ${NANO_SERVICE} +systemctl start ${NANO_SERVICE} +sleep 1 +systemctl --no-pager status ${NANO_SERVICE} + +set -e \ No newline at end of file diff --git a/debian-control/postrm.in b/debian-control/postrm.in new file mode 100644 index 000000000..04f6dd16d --- /dev/null +++ b/debian-control/postrm.in @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +set +e + +systemctl stop ${NANO_SERVICE} 2>/dev/null +systemctl disable ${NANO_SERVICE} 2>/dev/null +rm -rf /etc/systemd/system/${NANO_SERVICE} +systemctl daemon-reload + +set -e \ No newline at end of file diff --git a/etc/systemd/nanocurrency-beta.service b/etc/systemd/nanocurrency-beta.service index a1a9bc1fc..90dac2b4e 100644 --- a/etc/systemd/nanocurrency-beta.service +++ b/etc/systemd/nanocurrency-beta.service @@ -1,12 +1,12 @@ [Unit] -Description=Nano Daemon beta network +Description=Nano Beta Network Daemon After=network.target [Service] Type=simple User=nanocurrency WorkingDirectory=/var/nanocurrency/NanoBeta -ExecStart=/usr/bin/nano_node-beta --daemon +ExecStart=/usr/bin/nano_node --daemon --network=beta --data_path=/var/nanocurrency/NanoBeta Restart=on-failure [Install] diff --git a/etc/systemd/nanocurrency-test.service b/etc/systemd/nanocurrency-test.service new file mode 100644 index 000000000..11b9e3a7f --- /dev/null +++ b/etc/systemd/nanocurrency-test.service @@ -0,0 +1,13 @@ +[Unit] +Description=Nano Test Network Daemon +After=network.target + +[Service] +Type=simple +User=nanocurrency +WorkingDirectory=/var/nanocurrency/NanoTest +ExecStart=/usr/bin/nano_node --daemon --network=test --data_path=/var/nanocurrency/NanoTest +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/etc/systemd/nanocurrency.service b/etc/systemd/nanocurrency.service index f36fa91c8..01879f219 100644 --- a/etc/systemd/nanocurrency.service +++ b/etc/systemd/nanocurrency.service @@ -1,12 +1,12 @@ [Unit] -Description=Nano Daemon live network +Description=Nano Live Network Daemon After=network.target [Service] Type=simple User=nanocurrency WorkingDirectory=/var/nanocurrency/Nano -ExecStart=/usr/bin/nano_node --daemon +ExecStart=/usr/bin/nano_node --daemon --data_path=/var/nanocurrency/Nano Restart=on-failure [Install] diff --git a/nano/ipc_flatbuffers_lib/CMakeLists.txt b/nano/ipc_flatbuffers_lib/CMakeLists.txt index b4b5a6e5a..93a75cab7 100644 --- a/nano/ipc_flatbuffers_lib/CMakeLists.txt +++ b/nano/ipc_flatbuffers_lib/CMakeLists.txt @@ -24,7 +24,7 @@ add_subdirectory(../../flatbuffers ${CMAKE_CURRENT_BINARY_DIR}/flatbuffers-build # we currently only use one, to avoid include-file issues with certain language bindings. file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/generated/flatbuffers) if (APPLE) - install (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../api/flatbuffers/ DESTINATION Nano.app/Contents/MacOS/api/flatbuffers) + install (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../api/flatbuffers/ DESTINATION ${NANO_OSX_PACKAGE_NAME}.app/Contents/MacOS/api/flatbuffers) elseif(LINUX) install (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../api/flatbuffers/ DESTINATION ./bin/api/flatbuffers) else()