├── .gitignore ├── install_curl.bat ├── install_leveldb.bat ├── install_jsoncpp.bat ├── install_cryptopp.bat ├── install_miniupnpc.bat ├── install_microhttpd.bat ├── install_jsonrpccpp.bat ├── README.md ├── install_deps.cmake ├── bundle_leveldb.bat ├── bundle_cryptopp.bat ├── scripts ├── build_boost.cmake ├── build_opencl-icd-loader.cmake ├── build_llvm.cmake └── helpers.cmake ├── bundle_jsoncpp.bat ├── bundle_miniupnpc.bat ├── appveyor.yml ├── snark.cmake ├── jsoncpp.cmake ├── bundle_jsonrpccpp.bat ├── bundle_curl.bat ├── bundle_microhttpd.bat ├── boost.cmake ├── main.bat ├── jsonrpc.cmake ├── cryptopp.cmake └── LICENSE /.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /cache 3 | /install 4 | /package 5 | /packages 6 | /downloads 7 | /src/ 8 | /boost/ 9 | /stamp/ 10 | /tmp/ 11 | -------------------------------------------------------------------------------- /install_curl.bat: -------------------------------------------------------------------------------- 1 | REM installing curl 2 | cmake -E copy_directory package\curl install 3 | 4 | REM zipping curl 5 | cd package 6 | if exist curl-7.4.2 cmake -E remove_directory curl-7.4.2 7 | cmake -E rename curl curl-7.4.2 8 | tar -zcvf curl-7.4.2.tar.gz curl-7.4.2 9 | cd .. 10 | 11 | -------------------------------------------------------------------------------- /install_leveldb.bat: -------------------------------------------------------------------------------- 1 | REM installing leveldb 2 | cmake -E copy_directory package\leveldb install 3 | 4 | REM zipping leveldb 5 | cd package 6 | if exist leveldb-1.2 cmake -E remove_directory leveldb-1.2 7 | cmake -E rename leveldb leveldb-1.2 8 | tar -zcvf leveldb-1.2.tar.gz leveldb-1.2 9 | cd .. 10 | 11 | -------------------------------------------------------------------------------- /install_jsoncpp.bat: -------------------------------------------------------------------------------- 1 | REM installing jsoncpp 2 | cmake -E copy_directory package\jsoncpp install 3 | 4 | REM zipping jsoncpp 5 | cd package 6 | if exist jsoncpp-1.6.2 cmake -E remove_directory jsoncpp-1.6.2 7 | cmake -E rename jsoncpp jsoncpp-1.6.2 8 | tar -zcvf jsoncpp-1.6.2.tar.gz jsoncpp-1.6.2 9 | cd .. 10 | 11 | -------------------------------------------------------------------------------- /install_cryptopp.bat: -------------------------------------------------------------------------------- 1 | REM installing cryptopp 2 | cmake -E copy_directory package\cryptopp install 3 | 4 | REM zipping cryptopp 5 | cd package 6 | if exist cryptopp-5.6.2 cmake -E remove_directory cryptopp-5.6.2 7 | cmake -E rename cryptopp cryptopp-5.6.2 8 | tar -zcvf cryptopp-5.6.2.tar.gz cryptopp-5.6.2 9 | cd .. 10 | 11 | -------------------------------------------------------------------------------- /install_miniupnpc.bat: -------------------------------------------------------------------------------- 1 | REM installing miniupnpc 2 | cmake -E copy_directory package\miniupnpc install 3 | 4 | REM zipping miniupnpc 5 | cd package 6 | if exist miniupnpc-1.9 cmake -E remove_directory miniupnpc-1.9 7 | cmake -E rename miniupnpc miniupnpc-1.9 8 | tar -zcvf miniupnpc-1.9.tar.gz miniupnpc-1.9 9 | cd .. 10 | 11 | -------------------------------------------------------------------------------- /install_microhttpd.bat: -------------------------------------------------------------------------------- 1 | REM installing microhttpd 2 | cmake -E copy_directory package\microhttpd install 3 | 4 | REM zipping microhttpd 5 | cd package 6 | if exist microhttpd-0.9.2 cmake -E remove_directory microhttpd-0.9.2 7 | cmake -E rename microhttpd microhttpd-0.9.2 8 | tar -zcvf microhttpd-0.9.2.tar.gz microhttpd-0.9.2 9 | cd .. 10 | 11 | -------------------------------------------------------------------------------- /install_jsonrpccpp.bat: -------------------------------------------------------------------------------- 1 | REM installing jsonrpccpp 2 | cmake -E copy_directory package\jsonrpccpp install 3 | 4 | REM zipping jsonrpccpp 5 | cd package 6 | if exist json-rpc-cpp-0.5.0 cmake -E remove_directory json-rpc-cpp-0.5.0 7 | cmake -E rename jsonrpccpp json-rpc-cpp-0.5.0 8 | tar -zcvf json-rpc-cpp-0.5.0.tar.gz json-rpc-cpp-0.5.0 9 | cd .. 10 | 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # cpp-dependencies 2 | 3 | download, compile && prepare cpp-ethereum dependencies for windows 4 | 5 | * Win32 - Debug 6 | * Win32 - Release 7 | * x64 - Debug 8 | * x64 - Release 9 | 10 | ### Requirements 11 | 12 | * git 13 | * cmake 3.0 14 | * VisualStudio 2013 Community 15 | * tar 16 | * curl 17 | 18 | ### Run 19 | 20 | ```shell 21 | main.bat 22 | ``` 23 | -------------------------------------------------------------------------------- /install_deps.cmake: -------------------------------------------------------------------------------- 1 | include("${CMAKE_CURRENT_LIST_DIR}/scripts/helpers.cmake") 2 | 3 | set(INSTALL_DIR "${ROOT_DIR}/install") 4 | set(SERVER "https://github.com/ethereum/cpp-dependencies/releases/download/vc140/") 5 | 6 | function(download_and_install PACKAGE_NAME) 7 | download_and_unpack("${SERVER}${PACKAGE_NAME}.tar.gz" ${INSTALL_DIR}) 8 | endfunction(download_and_install) 9 | 10 | download_and_install("boost-1.61") 11 | download_and_install("curl-7.4.2") 12 | download_and_install("leveldb-1.2") 13 | download_and_install("microhttpd-0.9.2") 14 | download_and_install("miniupnpc-1.9") 15 | -------------------------------------------------------------------------------- /bundle_leveldb.bat: -------------------------------------------------------------------------------- 1 | REM packaging leveldb 2 | if not exist package\leveldb mkdir package\leveldb 3 | if not exist package\leveldb\%PLATFORM% mkdir package\leveldb\%PLATFORM% 4 | if not exist package\leveldb\%PLATFORM%lib\ mkdir package\leveldb\%PLATFORM%\lib 5 | if not exist package\leveldb\%PLATFORM%\include mkdir package\leveldb\%PLATFORM%\include 6 | 7 | cd package\leveldb\%PLATFORM% 8 | 9 | if %PLATFORM% == Win32 ( 10 | if %CONFIGURATION% == Release cmake -E copy ..\..\..\build\leveldb\win\Release\LibLevelDB.lib lib\leveldb.lib 11 | if %CONFIGURATION% == Debug cmake -E copy ..\..\..\build\leveldb\win\Debug\LibLevelDB.lib lib\leveldbd.lib 12 | ) 13 | 14 | if %PLATFORM% == x64 ( 15 | if %CONFIGURATION% == Release cmake -E copy ..\..\..\build\leveldb\win\x64\Release\LevelDB64.lib lib\leveldb.lib 16 | if %CONFIGURATION% == Debug cmake -E copy ..\..\..\build\leveldb\win\x64\Debug\LevelDB64.lib lib\leveldbd.lib 17 | ) 18 | 19 | cmake -E copy_directory ..\..\..\build\leveldb\include include 20 | cd ..\..\.. 21 | -------------------------------------------------------------------------------- /bundle_cryptopp.bat: -------------------------------------------------------------------------------- 1 | REM packaging cryptopp 2 | if not exist package\cryptopp mkdir package\cryptopp 3 | 4 | if not exist package\cryptopp\%PLATFORM% mkdir package\cryptopp\%PLATFORM% 5 | if not exist package\cryptopp\%PLATFORM%\lib mkdir package\cryptopp\%PLATFORM%\lib 6 | if not exist package\cryptopp\%PLATFORM%\include mkdir package\cryptopp\%PLATFORM%\include 7 | if not exist package\cryptopp\%PLATFORM%\include\cryptopp mkdir package\cryptopp\%PLATFORM%\include\cryptopp 8 | 9 | cd package\cryptopp\%PLATFORM% 10 | 11 | if %PLATFORM% == Win32 ( 12 | if %CONFIGURATION% == Release cmake -E copy ..\..\..\build\cryptopp\win\Release\LibCryptoPP.lib lib\cryptopp.lib 13 | if %CONFIGURATION% == Debug cmake -E copy ..\..\..\build\cryptopp\win\Debug\LibCryptoPP.lib lib\cryptoppd.lib 14 | ) 15 | 16 | if %PLATFORM% == x64 ( 17 | if %CONFIGURATION% == Release cmake -E copy ..\..\..\build\cryptopp\win\x64\Release\LibCryptoPP.lib lib\cryptopp.lib 18 | if %CONFIGURATION% == Debug cmake -E copy ..\..\..\build\cryptopp\win\x64\Debug\LibCryptoPP.lib lib\cryptoppd.lib 19 | ) 20 | 21 | xcopy ..\..\..\build\cryptopp\*.h include\cryptopp /sy 22 | cd ..\..\.. 23 | 24 | -------------------------------------------------------------------------------- /scripts/build_boost.cmake: -------------------------------------------------------------------------------- 1 | include("${CMAKE_CURRENT_LIST_DIR}/helpers.cmake") 2 | 3 | prepare_package_source(boost 1.61 http://sourceforge.net/projects/boost/files/boost/1.61.0/boost_1_61_0.tar.gz) 4 | 5 | if (NOT EXISTS ${SOURCE_DIR}/b2.exe) 6 | execute_process(COMMAND bootstrap.bat WORKING_DIRECTORY ${SOURCE_DIR}) 7 | endif() 8 | 9 | execute_process(COMMAND ./b2 -j4 10 | stage --stagedir=${INSTALL_DIR}/win64 --build-dir=${BUILD_DIR} 11 | link=static 12 | runtime-link=shared 13 | variant=release 14 | threading=multi 15 | address-model=64 16 | --with-filesystem 17 | --with-system 18 | --with-thread 19 | --with-date_time 20 | --with-regex 21 | --with-test 22 | --with-program_options 23 | --with-random 24 | --with-atomic 25 | WORKING_DIRECTORY ${SOURCE_DIR}) 26 | 27 | message("Copying boost headers") 28 | file(COPY ${SOURCE_DIR}/boost DESTINATION ${INSTALL_DIR}/win64/include) 29 | 30 | create_package(${PACKAGE_NAME} ${INSTALL_DIR}) 31 | -------------------------------------------------------------------------------- /bundle_jsoncpp.bat: -------------------------------------------------------------------------------- 1 | REM packaging jsoncpp 2 | if not exist package\jsoncpp mkdir package\jsoncpp 3 | 4 | if not exist package\jsoncpp\%PLATFORM% mkdir package\jsoncpp\%PLATFORM% 5 | if not exist package\jsoncpp\%PLATFORM%\lib mkdir package\jsoncpp\%PLATFORM%\lib 6 | if not exist package\jsoncpp\%PLATFORM%\include mkdir package\jsoncpp\%PLATFORM%\include 7 | if not exist package\jsoncpp\%PLATFORM%\include\json mkdir package\jsoncpp\%PLATFORM%\include\json 8 | 9 | cd package\jsoncpp\%PLATFORM% 10 | 11 | if %PLATFORM% == Win32 ( 12 | if %CONFIGURATION% == Release cmake -E copy ..\..\..\build\jsoncpp\build\src\lib_json\Release\jsoncpp.lib lib\jsoncpp.lib 13 | if %CONFIGURATION% == Debug cmake -E copy ..\..\..\build\jsoncpp\build\src\lib_json\Debug\jsoncpp.lib lib\jsoncppd.lib 14 | ) 15 | 16 | if %PLATFORM% == x64 ( 17 | if %CONFIGURATION% == Release cmake -E copy ..\..\..\build\jsoncpp\build64\src\lib_json\Release\jsoncpp.lib lib\jsoncpp.lib 18 | if %CONFIGURATION% == Debug cmake -E copy ..\..\..\build\jsoncpp\build64\src\lib_json\Debug\jsoncpp.lib lib\jsoncppd.lib 19 | ) 20 | 21 | cmake -E copy_directory ..\..\..\build\jsoncpp\include\json include\json 22 | cd ..\..\.. 23 | 24 | -------------------------------------------------------------------------------- /bundle_miniupnpc.bat: -------------------------------------------------------------------------------- 1 | REM packaging miniupnpc 2 | if not exist package\miniupnpc mkdir package\miniupnpc 3 | 4 | if not exist package\miniupnpc\%PLATFORM% mkdir package\miniupnpc\%PLATFORM% 5 | if not exist package\miniupnpc\%PLATFORM%\lib mkdir package\miniupnpc\%PLATFORM%\lib 6 | if not exist package\miniupnpc\%PLATFORM%\include mkdir package\miniupnpc\%PLATFORM%\include 7 | if not exist package\miniupnpc\%PLATFORM%\include\miniupnpc mkdir package\miniupnpc\%PLATFORM%\include\miniupnpc 8 | 9 | cd package\miniupnpc\%PLATFORM% 10 | 11 | if %PLATFORM% == Win32 ( 12 | if %CONFIGURATION% == Release cmake -E copy ..\..\..\build\miniupnpc\miniupnpc\build\Release\miniupnpc.lib lib\miniupnpc.lib 13 | if %CONFIGURATION% == Debug cmake -E copy ..\..\..\build\miniupnpc\miniupnpc\build\Debug\miniupnpc.lib lib\miniupnpcd.lib 14 | ) 15 | 16 | if %PLATFORM% == x64 ( 17 | if %CONFIGURATION% == Release cmake -E copy ..\..\..\build\miniupnpc\miniupnpc\build64\Release\miniupnpc.lib lib\miniupnpc.lib 18 | if %CONFIGURATION% == Debug cmake -E copy ..\..\..\build\miniupnpc\miniupnpc\build64\Debug\miniupnpc.lib lib\miniupnpcd.lib 19 | ) 20 | 21 | xcopy ..\..\..\build\miniupnpc\miniupnpc\*.h include\miniupnpc /sy 22 | 23 | cd ..\..\.. 24 | 25 | -------------------------------------------------------------------------------- /scripts/build_opencl-icd-loader.cmake: -------------------------------------------------------------------------------- 1 | # This scirpt builds universal OpenCL ICD Loader that searches for OpenCL 2 | # implementations at run-time. The package also includes OpenCL headers. 3 | 4 | include("${CMAKE_CURRENT_LIST_DIR}/helpers.cmake") 5 | 6 | prepare_package_source(opencl-icd-loader 0.0 https://github.com/KhronosGroup/OpenCL-ICD-Loader/archive/master/OpenCL-ICD-Loader.tar.gz) 7 | 8 | if (NOT EXISTS ${SOURCE_DIR}/inc/CL) 9 | download_and_unpack(https://github.com/KhronosGroup/OpenCL-Headers/archive/master/OpenCL-Headers.tar.gz ${SOURCE_DIR} STATUS) 10 | file(RENAME ${SOURCE_DIR}/OpenCL-Headers-master ${SOURCE_DIR}/inc/CL) 11 | endif() 12 | 13 | execute_process(COMMAND cmake ${SOURCE_DIR} -G "Visual Studio 14 2015 Win64" 14 | WORKING_DIRECTORY ${BUILD_DIR}) 15 | 16 | execute_process(COMMAND cmake --build ${BUILD_DIR} 17 | --target OpenCL --config Release) 18 | 19 | file(COPY ${BUILD_DIR}/Release/OpenCl.lib DESTINATION ${INSTALL_DIR}/win64/lib/) 20 | file(COPY ${BUILD_DIR}/bin/Release/OpenCl.dll DESTINATION ${INSTALL_DIR}/win64/bin/) 21 | file(COPY ${SOURCE_DIR}/inc/CL DESTINATION ${INSTALL_DIR}/win64/include/) 22 | 23 | create_package(${PACKAGE_NAME} ${INSTALL_DIR}) 24 | -------------------------------------------------------------------------------- /scripts/build_llvm.cmake: -------------------------------------------------------------------------------- 1 | # This script downloads LLVM source and builds it with Visual Studio. 2 | 3 | include("${CMAKE_CURRENT_LIST_DIR}/helpers.cmake") 4 | 5 | function(build_llvm CONFIGURATION) 6 | if (CONFIGURATION STREQUAL "Release") 7 | set(ASSERTS OFF) 8 | set(CONFIG "Release") 9 | elseif (CONFIGURATION STREQUAL "Debug") 10 | set(ASSERTS ON) 11 | set(CONFIG "RelWithDebInfo") 12 | else() 13 | message(FATAL_ERROR "Wrong configuration") 14 | endif() 15 | set(INSTALL_DIR "${INSTALL_DIR}/win64/${CONFIGURATION}") 16 | 17 | execute_process(COMMAND cmake ${SOURCE_DIR} -G "Visual Studio 14 2015 Win64" 18 | -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} 19 | -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_BUILD_TOOLS=OFF 20 | -DLLVM_ENABLE_ASSERTIONS=${ASSERTS} 21 | WORKING_DIRECTORY ${BUILD_DIR}) 22 | 23 | execute_process(COMMAND cmake --build ${BUILD_DIR} 24 | --target install --config ${CONFIG}) 25 | endfunction(build_llvm) 26 | 27 | prepare_package_source(llvm 3.8.0 http://llvm.org/releases/3.8.0/llvm-3.8.0.src.tar.xz) 28 | 29 | build_llvm("Release") 30 | # build_llvm("Debug") 31 | 32 | create_package(${PACKAGE_NAME} ${INSTALL_DIR}) 33 | -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | version: 1.6.2.{build} 2 | 3 | os: Windows Server 2012 R2 4 | 5 | environment: 6 | MSBuild: "\"c:/Program Files (x86)/MSBuild/12.0/bin/msbuild.exe\"" 7 | #PLATFORM: - defined in appveyor env 8 | #CONFIGURATION: - defined in appveyor env 9 | 10 | clone_folder: c:\projects\cpp-dependencies 11 | 12 | platform: 13 | - Win32 14 | - x64 15 | 16 | #configuration: 17 | #- Debug 18 | #- Release , this will be set later 19 | 20 | build: off # temporarily 21 | 22 | # scripts to run before build 23 | #build_script: 24 | #- cmake --version 25 | #- cd c:\projects\cpp-dependencies 26 | 27 | #- set CONFIGURATION=Debug 28 | 29 | #- call build_jsoncpp.bat 30 | #- call bundle_jsoncpp.bat 31 | 32 | #- call build_microhttpd.bat 33 | #- call bundle_microhttpd.bat 34 | 35 | #- call build_curl.bat 36 | #- call bundle_curl.bat 37 | 38 | #- set CONFIGURATION=Relase 39 | 40 | #- call build_jsoncpp.bat 41 | #- call bundle_jsoncpp.bat 42 | 43 | #- call build_microhttpd.bat 44 | #- call bundle_microhttpd.bat 45 | 46 | #- call build_curl.bat 47 | #- call bundle_curl.bat 48 | 49 | #- set CONFIGURATION=Debug 50 | 51 | #- call build_jsonrpccpp.bat 52 | #- call bundle_jsonrpccpp.bat 53 | 54 | #- set CONFIGURATION=Release 55 | 56 | #- call build_jsonrpccpp.bat 57 | #- call bundle_jsonrpccpp.bat 58 | 59 | -------------------------------------------------------------------------------- /snark.cmake: -------------------------------------------------------------------------------- 1 | include(ExternalProject) 2 | include(GNUInstallDirs) 3 | 4 | ExternalProject_Add(snark-project 5 | PREFIX deps/snark 6 | # This points to a February version. 7 | DOWNLOAD_NAME snark.tar.gz 8 | URL https://github.com/scipr-lab/libsnark/archive/6b7e494c2407eb8e91ad78635788decb2d736596.tar.gz 9 | # URL_HASH SHA256=f1fddacadd2a0873f795d5614a85fecd5b6ff1d1c6e21dedc251703c54ce63aa 10 | # Keep source and archive in under source dir to avoid code duplication 11 | # for multiple build types and allow injecting the archive in isolated 12 | # builds (like Ubuntu PPA). 13 | DOWNLOAD_DIR ${CMAKE_CURRENT_LIST_DIR}/downloads 14 | SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/src/snark 15 | BUILD_IN_SOURCE 1 16 | CONFIGURE_COMMAND "" 17 | BUILD_COMMAND make 18 | NO_PROCPS=1 STATIC=1 NO_SUPERCOP=1 NO_GTEST=1 NO_DOCS=1 CURVE=ALT_BN128 19 | FEATUREFLAGS="-DBINARY_OUTPUT=1 -DMONTGOMERY_OUTPUT=1 -DNO_PT_COMPRESSION=1" 20 | lib PREFIX= install 21 | INSTALL_COMMAND "" #make install PREFIX= 22 | ) 23 | 24 | # Create snark imported library 25 | ExternalProject_Get_Property(snark-project INSTALL_DIR) 26 | add_library(snark STATIC IMPORTED) 27 | if (MSVC) 28 | set(SNARK_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/src/snark/${CMAKE_STATIC_LIBRARY_PREFIX}snark-static${CMAKE_STATIC_LIBRARY_SUFFIX}) 29 | else() 30 | set(SNARK_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/src/snark/${CMAKE_STATIC_LIBRARY_PREFIX}snark${CMAKE_STATIC_LIBRARY_SUFFIX}) 31 | endif() 32 | set(SNARK_INCLUDE_DIR ${INSTALL_DIR}/include ${INSTALL_DIR}/include/libsnark) 33 | file(MAKE_DIRECTORY ${SNARK_INCLUDE_DIR}) # Must exist. 34 | set_property(TARGET snark PROPERTY IMPORTED_LOCATION ${SNARK_LIBRARY}) 35 | set_property(TARGET snark PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${SNARK_INCLUDE_DIR}) 36 | add_dependencies(snark snark-project) 37 | unset(INSTALL_DIR) 38 | -------------------------------------------------------------------------------- /jsoncpp.cmake: -------------------------------------------------------------------------------- 1 | include(ExternalProject) 2 | 3 | if (${CMAKE_SYSTEM_NAME} STREQUAL "Emscripten") 4 | set(JSONCPP_CMAKE_COMMAND emcmake cmake) 5 | else() 6 | set(JSONCPP_CMAKE_COMMAND ${CMAKE_COMMAND}) 7 | endif() 8 | 9 | # Disable implicit fallthrough warning in jsoncpp for gcc >= 7 until the upstream handles it properly 10 | if (("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.0) 11 | set(JSONCCP_EXTRA_FLAGS -Wno-implicit-fallthrough) 12 | else() 13 | set(JSONCCP_EXTRA_FLAGS "") 14 | endif() 15 | 16 | ExternalProject_Add(jsoncpp-project 17 | PREFIX deps/jsoncpp 18 | DOWNLOAD_NAME jsoncpp-1.7.7.tar.gz 19 | DOWNLOAD_DIR ${CMAKE_CURRENT_LIST_DIR}/downloads 20 | URL https://github.com/open-source-parsers/jsoncpp/archive/1.7.7.tar.gz 21 | URL_HASH SHA256=087640ebcf7fbcfe8e2717a0b9528fff89c52fcf69fa2a18cc2b538008098f97 22 | CMAKE_COMMAND ${JSONCPP_CMAKE_COMMAND} 23 | CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= 24 | -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} 25 | -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} 26 | # Build static lib but suitable to be included in a shared lib. 27 | -DCMAKE_POSITION_INDEPENDENT_CODE=On 28 | -DJSONCPP_WITH_TESTS=Off 29 | -DJSONCPP_WITH_PKGCONFIG_SUPPORT=Off 30 | -DCMAKE_CXX_FLAGS=${JSONCCP_EXTRA_FLAGS} 31 | # Overwrite build and install commands to force Release build on MSVC. 32 | BUILD_COMMAND cmake --build --config Release 33 | INSTALL_COMMAND cmake --build --config Release --target install 34 | ) 35 | 36 | # Create jsoncpp imported library 37 | ExternalProject_Get_Property(jsoncpp-project INSTALL_DIR) 38 | add_library(jsoncpp STATIC IMPORTED) 39 | set(JSONCPP_LIBRARY ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}jsoncpp${CMAKE_STATIC_LIBRARY_SUFFIX}) 40 | set(JSONCPP_INCLUDE_DIR ${INSTALL_DIR}/include) 41 | file(MAKE_DIRECTORY ${JSONCPP_INCLUDE_DIR}) # Must exist. 42 | set_property(TARGET jsoncpp PROPERTY IMPORTED_LOCATION ${JSONCPP_LIBRARY}) 43 | set_property(TARGET jsoncpp PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${JSONCPP_INCLUDE_DIR}) 44 | add_dependencies(jsoncpp jsoncpp-project) 45 | unset(INSTALL_DIR) 46 | -------------------------------------------------------------------------------- /bundle_jsonrpccpp.bat: -------------------------------------------------------------------------------- 1 | REM packaging jsonrpccpp 2 | if not exist package\jsonrpccpp mkdir package\jsonrpccpp 3 | if not exist package\jsonrpccpp\%PLATFORM% mkdir package\jsonrpccpp\%PLATFORM% 4 | if not exist package\jsonrpccpp\%PLATFORM%\lib mkdir package\jsonrpccpp\%PLATFORM%\lib 5 | if not exist package\jsonrpccpp\%PLATFORM%\include mkdir package\jsonrpccpp\%PLATFORM%\include 6 | if not exist package\jsonrpccpp\%PLATFORM%\include\jsonrpccpp mkdir package\jsonrpccpp\%PLATFORM%\include\jsonrpccpp 7 | 8 | cd package\jsonrpccpp\%PLATFORM% 9 | 10 | if %PLATFORM% == Win32 ( 11 | if %CONFIGURATION% == Release ( 12 | cmake -E copy ..\..\..\build\jsonrpccpp\build\lib\Release\jsonrpccpp-common.lib lib\jsonrpccpp-common.lib 13 | cmake -E copy ..\..\..\build\jsonrpccpp\build\lib\Release\jsonrpccpp-client.lib lib\jsonrpccpp-client.lib 14 | cmake -E copy ..\..\..\build\jsonrpccpp\build\lib\Release\jsonrpccpp-server.lib lib\jsonrpccpp-server.lib 15 | ) 16 | 17 | if %CONFIGURATION% == Debug ( 18 | cmake -E copy ..\..\..\build\jsonrpccpp\build\lib\Debug\jsonrpccpp-common.lib lib\jsonrpccpp-commond.lib 19 | cmake -E copy ..\..\..\build\jsonrpccpp\build\lib\Debug\jsonrpccpp-client.lib lib\jsonrpccpp-clientd.lib 20 | cmake -E copy ..\..\..\build\jsonrpccpp\build\lib\Debug\jsonrpccpp-server.lib lib\jsonrpccpp-serverd.lib 21 | ) 22 | 23 | xcopy ..\..\..\build\jsonrpccpp\build\gen\jsonrpccpp\*.h include\jsonrpccpp /sy 24 | ) 25 | 26 | if %PLATFORM% == x64 ( 27 | if %CONFIGURATION% == Release ( 28 | cmake -E copy ..\..\..\build\jsonrpccpp\build64\lib\Release\jsonrpccpp-common.lib lib\jsonrpccpp-common.lib 29 | cmake -E copy ..\..\..\build\jsonrpccpp\build64\lib\Release\jsonrpccpp-client.lib lib\jsonrpccpp-client.lib 30 | cmake -E copy ..\..\..\build\jsonrpccpp\build64\lib\Release\jsonrpccpp-server.lib lib\jsonrpccpp-server.lib 31 | ) 32 | 33 | if %CONFIGURATION% == Debug ( 34 | cmake -E copy ..\..\..\build\jsonrpccpp\build64\lib\Debug\jsonrpccpp-common.lib lib\jsonrpccpp-commond.lib 35 | cmake -E copy ..\..\..\build\jsonrpccpp\build64\lib\Debug\jsonrpccpp-client.lib lib\jsonrpccpp-clientd.lib 36 | cmake -E copy ..\..\..\build\jsonrpccpp\build64\lib\Debug\jsonrpccpp-server.lib lib\jsonrpccpp-serverd.lib 37 | ) 38 | 39 | xcopy ..\..\..\build\jsonrpccpp\build64\gen\jsonrpccpp\*.h include\jsonrpccpp /sy 40 | ) 41 | 42 | xcopy ..\..\..\build\jsonrpccpp\src\jsonrpccpp\*.h include\jsonrpccpp /sy 43 | 44 | cd ..\..\.. 45 | 46 | -------------------------------------------------------------------------------- /bundle_curl.bat: -------------------------------------------------------------------------------- 1 | REM packaging curl 2 | if not exist package\curl mkdir package\curl 3 | 4 | if not exist package\curl\%PLATFORM% mkdir package\curl\%PLATFORM% 5 | if not exist package\curl\%PLATFORM%\lib mkdir package\curl\%PLATFORM%\lib 6 | if not exist package\curl\%PLATFORM%\bin mkdir package\curl\%PLATFORM%\bin 7 | if not exist package\curl\%PLATFORM%\include mkdir package\curl\%PLATFORM%\include 8 | if not exist package\curl\%PLATFORM%\include\curl mkdir package\curl\%PLATFORM%\include\curl 9 | 10 | cd package\curl\%PLATFORM% 11 | 12 | if %PLATFORM% == Win32 ( 13 | if %CONFIGURATION% == Release ( 14 | cmake -E copy ..\..\..\build\curl\build\lib\Release\libcurl.dll bin\libcurl.dll 15 | cmake -E copy ..\..\..\build\curl\build\lib\Release\libcurl_imp.exp lib\libcurl.exp 16 | cmake -E copy ..\..\..\build\curl\build\lib\Release\libcurl_imp.lib lib\libcurl.lib 17 | ) 18 | 19 | if %CONFIGURATION% == Debug ( 20 | cmake -E copy ..\..\..\build\curl\build\lib\Debug\libcurl.dll bin\libcurld.dll 21 | cmake -E copy ..\..\..\build\curl\build\lib\Debug\libcurl.ilk lib\libcurld.ilk 22 | cmake -E copy ..\..\..\build\curl\build\lib\Debug\libcurl.pdb lib\libcurld.pdb 23 | cmake -E copy ..\..\..\build\curl\build\lib\Debug\libcurl_imp.exp lib\libcurld.exp 24 | cmake -E copy ..\..\..\build\curl\build\lib\Debug\libcurl_imp.lib lib\libcurld.lib 25 | ) 26 | 27 | cmake -E copy ..\..\..\build\curl\build\include\curl\curlbuild.h include\curl\curlbuild.h 28 | ) 29 | 30 | if %PLATFORM% == x64 ( 31 | if %CONFIGURATION% == Release ( 32 | cmake -E copy ..\..\..\build\curl\build64\lib\Release\libcurl.dll bin\libcurl.dll 33 | cmake -E copy ..\..\..\build\curl\build64\lib\Release\libcurl_imp.exp lib\libcurl.exp 34 | cmake -E copy ..\..\..\build\curl\build64\lib\Release\libcurl_imp.lib lib\libcurl.lib 35 | ) 36 | 37 | if %CONFIGURATION% == Debug ( 38 | cmake -E copy ..\..\..\build\curl\build64\lib\Debug\libcurl.dll bin\libcurld.dll 39 | cmake -E copy ..\..\..\build\curl\build64\lib\Debug\libcurl.ilk lib\libcurld.ilk 40 | cmake -E copy ..\..\..\build\curl\build64\lib\Debug\libcurl.pdb lib\libcurld.pdb 41 | cmake -E copy ..\..\..\build\curl\build64\lib\Debug\libcurl_imp.exp lib\libcurld.exp 42 | cmake -E copy ..\..\..\build\curl\build64\lib\Debug\libcurl_imp.lib lib\libcurld.lib 43 | ) 44 | 45 | cmake -E copy ..\..\..\build\curl\build64\include\curl\curlbuild.h include\curl\curlbuild.h 46 | ) 47 | 48 | cmake -E copy_directory ..\..\..\build\curl\include\curl include\curl 49 | 50 | cd ..\..\.. 51 | 52 | -------------------------------------------------------------------------------- /bundle_microhttpd.bat: -------------------------------------------------------------------------------- 1 | REM packaging microhttpd 2 | if not exist package\microhttpd mkdir package\microhttpd 3 | if not exist package\microhttpd\%PLATFORM% mkdir package\microhttpd\%PLATFORM% 4 | if not exist package\microhttpd\%PLATFORM%\lib mkdir package\microhttpd\%PLATFORM%\lib 5 | if not exist package\microhttpd\%PLATFORM%\bin mkdir package\microhttpd\%PLATFORM%\bin 6 | if not exist package\microhttpd\%PLATFORM%\include mkdir package\microhttpd\%PLATFORM%\include 7 | 8 | cd package\microhttpd\%PLATFORM% 9 | 10 | if %PLATFORM% == Win32 ( 11 | if %CONFIGURATION% == Release ( 12 | cmake -E copy ..\..\..\build\microhttpd\w32\VS2015\Output\libmicrohttpd-dll.dll bin\libmicrohttpd-dll.dll 13 | cmake -E copy ..\..\..\build\microhttpd\w32\VS2015\Output\libmicrohttpd-dll.exp lib\libmicrohttpd-dll.exp 14 | cmake -E copy ..\..\..\build\microhttpd\w32\VS2015\Output\libmicrohttpd-dll.lib lib\libmicrohttpd-dll.lib 15 | cmake -E copy ..\..\..\build\microhttpd\w32\VS2015\Output\libmicrohttpd-dll.pdb lib\libmicrohttpd-dll.pdb 16 | ) 17 | 18 | if %CONFIGURATION% == Debug ( 19 | cmake -E copy ..\..\..\build\microhttpd\w32\VS2015\Output\libmicrohttpd-dll_d.dll bin\libmicrohttpd-dll_d.dll 20 | cmake -E copy ..\..\..\build\microhttpd\w32\VS2015\Output\libmicrohttpd-dll_d.exp lib\libmicrohttpd-dll_d.exp 21 | cmake -E copy ..\..\..\build\microhttpd\w32\VS2015\Output\libmicrohttpd-dll_d.ilk lib\libmicrohttpd-dll_d.ilk 22 | cmake -E copy ..\..\..\build\microhttpd\w32\VS2015\Output\libmicrohttpd-dll_d.lib lib\libmicrohttpd-dll_d.lib 23 | cmake -E copy ..\..\..\build\microhttpd\w32\VS2015\Output\libmicrohttpd-dll_d.pdb lib\libmicrohttpd-dll_d.pdb 24 | ) 25 | 26 | cmake -E copy ..\..\..\build\microhttpd\w32\VS2015\Output\microhttpd.h include\microhttpd.h 27 | ) 28 | 29 | if %PLATFORM% == x64 ( 30 | if %CONFIGURATION% == Release ( 31 | cmake -E copy ..\..\..\build\microhttpd\w32\VS2015\Output\x64\libmicrohttpd-dll.dll bin\libmicrohttpd-dll.dll 32 | cmake -E copy ..\..\..\build\microhttpd\w32\VS2015\Output\x64\libmicrohttpd-dll.exp lib\libmicrohttpd-dll.exp 33 | cmake -E copy ..\..\..\build\microhttpd\w32\VS2015\Output\x64\libmicrohttpd-dll.lib lib\libmicrohttpd-dll.lib 34 | cmake -E copy ..\..\..\build\microhttpd\w32\VS2015\Output\x64\libmicrohttpd-dll.pdb lib\libmicrohttpd-dll.pdb 35 | ) 36 | 37 | if %CONFIGURATION% == Debug ( 38 | cmake -E copy ..\..\..\build\microhttpd\w32\VS2015\Output\x64\libmicrohttpd-dll_d.dll bin\libmicrohttpd-dll_d.dll 39 | cmake -E copy ..\..\..\build\microhttpd\w32\VS2015\Output\x64\libmicrohttpd-dll_d.exp lib\libmicrohttpd-dll_d.exp 40 | cmake -E copy ..\..\..\build\microhttpd\w32\VS2015\Output\x64\libmicrohttpd-dll_d.ilk lib\libmicrohttpd-dll_d.ilk 41 | cmake -E copy ..\..\..\build\microhttpd\w32\VS2015\Output\x64\libmicrohttpd-dll_d.lib lib\libmicrohttpd-dll_d.lib 42 | cmake -E copy ..\..\..\build\microhttpd\w32\VS2015\Output\x64\libmicrohttpd-dll_d.pdb lib\libmicrohttpd-dll_d.pdb 43 | ) 44 | 45 | cmake -E copy ..\..\..\build\microhttpd\w32\VS2015\Output\x64\microhttpd.h include\microhttpd.h 46 | ) 47 | 48 | cd ..\..\.. 49 | -------------------------------------------------------------------------------- /scripts/helpers.cmake: -------------------------------------------------------------------------------- 1 | get_filename_component(ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE) 2 | 3 | set(CACHE_DIR "${ROOT_DIR}/cache") 4 | set(PACKAGES_DIR "${ROOT_DIR}/packages") 5 | 6 | function(download URL DST_FILE STATUS) 7 | set(TMP_FILE "${DST_FILE}.part") 8 | 9 | get_filename_component(FILE_NAME ${DST_FILE} NAME) 10 | if (NOT EXISTS ${DST_FILE}) 11 | message("Downloading ${FILE_NAME}") 12 | file(DOWNLOAD ${URL} ${TMP_FILE} SHOW_PROGRESS STATUS DOWNLOAD_STATUS) 13 | list(GET DOWNLOAD_STATUS 0 STATUS_CODE) 14 | if (STATUS_CODE EQUAL 0) 15 | file(RENAME ${TMP_FILE} ${DST_FILE}) 16 | else() 17 | file(REMOVE ${TMP_FILE}) 18 | list(GET DOWNLOAD_STATUS 1 ERROR_MSG) 19 | 20 | message("ERROR! Downloading '${FILE_NAME}' failed.") 21 | message(STATUS "URL: ${URL}") 22 | message(STATUS "Error: ${STATUS_CODE} ${ERROR_MSG}") 23 | set(STATUS FALSE PARENT_SCOPE) 24 | return() 25 | endif() 26 | else() 27 | message("Using cached ${FILE_NAME}") 28 | endif() 29 | set(STATUS TRUE PARENT_SCOPE) 30 | endfunction(download) 31 | 32 | function(download_and_unpack PACKAGE_URL DST_DIR) 33 | get_filename_component(FILE_NAME ${PACKAGE_URL} NAME) 34 | 35 | set(DST_FILE "${CACHE_DIR}/${FILE_NAME}") 36 | set(TMP_FILE "${DST_FILE}.part") 37 | 38 | file(MAKE_DIRECTORY ${CACHE_DIR}) 39 | file(MAKE_DIRECTORY ${DST_DIR}) 40 | 41 | download(${PACKAGE_URL} ${DST_FILE} STATUS) 42 | 43 | if (STATUS) 44 | message("Unpacking ${FILE_NAME} to ${DST_DIR}") 45 | execute_process(COMMAND ${CMAKE_COMMAND} -E tar -xf ${DST_FILE} 46 | WORKING_DIRECTORY ${DST_DIR}) 47 | endif() 48 | endfunction(download_and_unpack) 49 | 50 | # Packs installed package binaries and headers into an archive. 51 | function(create_package NAME DIR) 52 | message("Creating package ${NAME}") 53 | file(MAKE_DIRECTORY ${PACKAGES_DIR}) 54 | 55 | # To create an archive without addicional top level directory 56 | # (like package-X.Y.Z) we need to know all top level files/dirs. 57 | # Usually it is just "win64" dir. 58 | file(GLOB TOP_FILES RELATIVE ${DIR} "${DIR}/*") 59 | 60 | set(PACKAGE_FILE "${PACKAGES_DIR}/${NAME}.tar.gz") 61 | execute_process(COMMAND ${CMAKE_COMMAND} -E 62 | tar -czf ${PACKAGE_FILE} ${TOP_FILES} 63 | WORKING_DIRECTORY ${DIR}) 64 | endfunction(create_package) 65 | 66 | # Downloads the source code of the package and unpacks it to dedicated 'src' 67 | # dir. Also creates 'build' and 'install' dir to be used by a build script. 68 | function(prepare_package_source NAME VERSION URL) 69 | set(PACKAGE_NAME "${NAME}-${VERSION}") 70 | 71 | set(PACKAGE_DIR "${CACHE_DIR}/${PACKAGE_NAME}") 72 | set(SOURCE_DIR "${PACKAGE_DIR}/src") 73 | set(BUILD_DIR "${PACKAGE_DIR}/build") 74 | set(INSTALL_DIR "${PACKAGE_DIR}/install") 75 | 76 | if (NOT EXISTS ${SOURCE_DIR}) 77 | download_and_unpack(${URL} ${PACKAGE_DIR} STATUS) 78 | file(GLOB ORIG_SOURCE_DIR_NAME "${PACKAGE_DIR}/*") 79 | file(RENAME ${ORIG_SOURCE_DIR_NAME} ${SOURCE_DIR}) 80 | endif() 81 | 82 | file(MAKE_DIRECTORY ${BUILD_DIR}) 83 | file(MAKE_DIRECTORY ${INSTALL_DIR}) 84 | 85 | # Export names and dirs to be used by a package-specific build script. 86 | set(PACKAGE_NAME ${PACKAGE_NAME} PARENT_SCOPE) 87 | set(SOURCE_DIR ${SOURCE_DIR} PARENT_SCOPE) 88 | set(BUILD_DIR ${BUILD_DIR} PARENT_SCOPE) 89 | set(INSTALL_DIR ${INSTALL_DIR} PARENT_SCOPE) 90 | endfunction() 91 | -------------------------------------------------------------------------------- /boost.cmake: -------------------------------------------------------------------------------- 1 | include(ExternalProject) 2 | include(GNUInstallDirs) 3 | 4 | set(BOOST_CXXFLAGS "") 5 | if (WIN32) 6 | set(BOOST_BOOTSTRAP_COMMAND bootstrap.bat) 7 | set(BOOST_BUILD_TOOL b2.exe) 8 | set(BOOST_LIBRARY_SUFFIX -vc140-mt-1_63.lib) 9 | else() 10 | set(BOOST_BOOTSTRAP_COMMAND ./bootstrap.sh) 11 | set(BOOST_BUILD_TOOL ./b2) 12 | set(BOOST_LIBRARY_SUFFIX .a) 13 | if (${BUILD_SHARED_LIBS}) 14 | set(BOOST_CXXFLAGS "cxxflags=-fPIC") 15 | endif() 16 | endif() 17 | 18 | ExternalProject_Add(boost-project 19 | PREFIX deps/boost 20 | URL https://sourceforge.net/projects/boost/files/boost/1.63.0/boost_1_63_0.tar.gz/download 21 | URL_HASH SHA256=fe34a4e119798e10b8cc9e565b3b0284e9fd3977ec8a1b19586ad1dec397088b 22 | DOWNLOAD_DIR ${CMAKE_CURRENT_LIST_DIR}/downloads 23 | SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/boost 24 | STAMP_DIR ${CMAKE_CURRENT_LIST_DIR}/tmp/boost 25 | TMP_DIR ${CMAKE_CURRENT_LIST_DIR}/tmp/boost 26 | BUILD_IN_SOURCE 1 27 | CONFIGURE_COMMAND ${BOOST_BOOTSTRAP_COMMAND} 28 | BUILD_COMMAND ${BOOST_BUILD_TOOL} stage 29 | ${BOOST_CXXFLAGS} 30 | threading=multi 31 | link=static 32 | variant=release 33 | address-model=64 34 | -d0 35 | --with-chrono 36 | --with-date_time 37 | --with-filesystem 38 | --with-random 39 | --with-regex 40 | --with-test 41 | --with-thread 42 | INSTALL_COMMAND "" 43 | ) 44 | 45 | set(BOOST_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/boost) 46 | set(BOOST_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/boost/stage/lib) 47 | 48 | add_library(boost::chrono STATIC IMPORTED) 49 | set_property(TARGET boost::chrono PROPERTY IMPORTED_LOCATION ${BOOST_LIB_DIR}/libboost_chrono${BOOST_LIBRARY_SUFFIX}) 50 | add_dependencies(boost::chrono boost-project) 51 | 52 | add_library(boost::date_time STATIC IMPORTED) 53 | set_property(TARGET boost::date_time PROPERTY IMPORTED_LOCATION ${BOOST_LIB_DIR}/libboost_date_time${BOOST_LIBRARY_SUFFIX}) 54 | add_dependencies(boost::date_time boost-project) 55 | 56 | add_library(boost::regex STATIC IMPORTED) 57 | set_property(TARGET boost::regex PROPERTY IMPORTED_LOCATION ${BOOST_LIB_DIR}/libboost_regex${BOOST_LIBRARY_SUFFIX}) 58 | add_dependencies(boost::regex boost-project) 59 | 60 | add_library(boost::system STATIC IMPORTED) 61 | set_property(TARGET boost::system PROPERTY IMPORTED_LOCATION ${BOOST_LIB_DIR}/libboost_system${BOOST_LIBRARY_SUFFIX}) 62 | add_dependencies(boost::system boost-project) 63 | 64 | add_library(boost::filesystem STATIC IMPORTED) 65 | set_property(TARGET boost::filesystem PROPERTY IMPORTED_LOCATION ${BOOST_LIB_DIR}/libboost_filesystem${BOOST_LIBRARY_SUFFIX}) 66 | set_property(TARGET boost::filesystem PROPERTY INTERFACE_LINK_LIBRARIES boost::system) 67 | add_dependencies(boost::filesystem boost-project) 68 | 69 | add_library(boost::random STATIC IMPORTED) 70 | set_property(TARGET boost::random PROPERTY IMPORTED_LOCATION ${BOOST_LIB_DIR}/libboost_random${BOOST_LIBRARY_SUFFIX}) 71 | add_dependencies(boost::random boost-project) 72 | 73 | add_library(boost::unit_test_framework STATIC IMPORTED) 74 | set_property(TARGET boost::unit_test_framework PROPERTY IMPORTED_LOCATION ${BOOST_LIB_DIR}/libboost_unit_test_framework${BOOST_LIBRARY_SUFFIX}) 75 | add_dependencies(boost::unit_test_framework boost-project) 76 | 77 | add_library(boost::thread STATIC IMPORTED) 78 | set_property(TARGET boost::thread PROPERTY IMPORTED_LOCATION ${BOOST_LIB_DIR}/libboost_thread${BOOST_LIBRARY_SUFFIX}) 79 | set_property(TARGET boost::thread PROPERTY INTERFACE_LINK_LIBRARIES boost::chrono boost::date_time boost::regex) 80 | add_dependencies(boost::thread boost-project) 81 | -------------------------------------------------------------------------------- /main.bat: -------------------------------------------------------------------------------- 1 | REM call vcvarsall 2 | call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" 3 | 4 | REM add MSBuild to env variable 5 | set MSBuild="c:/Program Files (x86)/MSBuild/14.0/bin/msbuild.exe" 6 | 7 | REM add vcvars32.bat to PATH 8 | @set PATH=c:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin;%PATH% 9 | 10 | REM create build, package && install directory 11 | if not exist build mkdir build 12 | if not exist package mkdir package 13 | if not exist install mkdir install 14 | 15 | rem =========================================================================== 16 | rem Layer 0 is Boost. 17 | rem Absolutely everything depends on Boost, whether they use it or not, 18 | rem because of EthDependencies.cmake in webthree-helper, which does an 19 | rem unconditional find_module() for boost, irrespective of what is being built. 20 | 21 | rem =========================================================================== 22 | rem Layer 1 are the external libraries. Do any of these themselves depend on 23 | rem Boost? I think that the majority or indeed all of them *might not*, and 24 | rem that if we fixed up the CMake code so that the unconditional Boost 25 | rem dependency could be skipped then we could improve the build ordering here. 26 | 27 | call :setup x64 Debug & call build_cryptopp.bat & call bundle_cryptopp.bat || goto :error 28 | call :setup x64 Release & call build_cryptopp.bat & call bundle_cryptopp.bat || goto :error 29 | call install_cryptopp.bat || goto :error 30 | 31 | call :setup x64 Debug & call build_curl.bat & call bundle_curl.bat || goto :error 32 | call :setup x64 Release & call build_curl.bat & call bundle_curl.bat || goto :error 33 | call install_curl.bat || goto :error 34 | 35 | rem Is GMP not used for Windows? 36 | 37 | call :setup x64 Debug & call build_jsoncpp.bat & call bundle_jsoncpp.bat || goto :error 38 | call :setup x64 Release & call build_jsoncpp.bat & call bundle_jsoncpp.bat || goto :error 39 | call install_jsoncpp.bat || goto :error 40 | 41 | call :setup x64 Debug & call build_leveldb.bat & call bundle_leveldb.bat || goto :error 42 | call :setup x64 Release & call build_leveldb.bat & call bundle_leveldb.bat || goto :error 43 | call install_leveldb.bat || goto :error 44 | 45 | rem libscrypt needs building for crosseth. Why don't we need it here? 46 | 47 | call :setup x64 Debug & call build_microhttpd.bat & call bundle_microhttpd.bat || goto :error 48 | call :setup x64 Release & call build_microhttpd.bat & call bundle_microhttpd.bat || goto :error 49 | call install_microhttpd.bat || goto :error 50 | 51 | rem We don't build libminiupnpc for crosseth, so I'll have to guess on its layering for now. 52 | call :setup x64 Debug & call build_miniupnpc.bat & call bundle_miniupnpc.bat || goto :error 53 | call :setup x64 Release & call build_miniupnpc.bat & call bundle_miniupnpc.bat || goto :error 54 | call install_miniupnpc.bat || goto :error 55 | 56 | rem =========================================================================== 57 | rem Layer 2 comprises secp256k1 and libjson-rpc-cpp (which are external 58 | rem libraries which depend on Layer 1 external libraries) 59 | 60 | call :setup x64 Debug & call build_jsonrpccpp.bat & call bundle_jsonrpccpp.bat || goto :error 61 | call :setup x64 Release & call build_jsonrpccpp.bat & call bundle_jsonrpccpp.bat || goto :error 62 | call install_jsonrpccpp.bat || goto :error 63 | 64 | rem secp256k1 needs building for crosseth. Why don't we need it here? 65 | 66 | 67 | goto :EOF 68 | 69 | :setup 70 | set PLATFORM=%1 71 | set CONFIGURATION=%2 72 | 73 | goto :EOF 74 | 75 | :error 76 | echo Failed with error %errorlevel% 77 | exit /b %errorlevel% 78 | 79 | :EOF 80 | -------------------------------------------------------------------------------- /jsonrpc.cmake: -------------------------------------------------------------------------------- 1 | if (NOT TARGET jsoncpp-project) 2 | # Include jsoncpp dependency if not included yet. 3 | include(${CMAKE_CURRENT_LIST_DIR}/jsoncpp.cmake) 4 | endif() 5 | 6 | # HTTP client from JSON RPC CPP requires curl library. It can find it itself, 7 | # but we need to know the libcurl location for static linking. 8 | find_package(CURL REQUIRED) 9 | 10 | # HTTP server from JSON RPC CPP requires microhttpd library. It can find it itself, 11 | # but we need to know the MHD location for static linking. 12 | find_package(MHD REQUIRED) 13 | 14 | set(CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= 15 | -DCMAKE_BUILD_TYPE=Release 16 | # Build static lib but suitable to be included in a shared lib. 17 | -DCMAKE_POSITION_INDEPENDENT_CODE=On 18 | -DBUILD_STATIC_LIBS=On 19 | -DBUILD_SHARED_LIBS=Off 20 | -DUNIX_DOMAIN_SOCKET_SERVER=Off 21 | -DUNIX_DOMAIN_SOCKET_CLIENT=Off 22 | -DHTTP_SERVER=On 23 | -DHTTP_CLIENT=On 24 | -DCOMPILE_TESTS=Off 25 | -DCOMPILE_STUBGEN=Off 26 | -DCOMPILE_EXAMPLES=Off 27 | # Point to jsoncpp library. 28 | -DJSONCPP_INCLUDE_DIR=${JSONCPP_INCLUDE_DIR} 29 | # Select jsoncpp include prefix: or 30 | -DJSONCPP_INCLUDE_PREFIX=json 31 | -DJSONCPP_LIBRARY=${JSONCPP_LIBRARY} 32 | -DCURL_INCLUDE_DIR=${CURL_INCLUDE_DIR} 33 | -DCURL_LIBRARY=${CURL_LIBRARY} 34 | -DMHD_INCLUDE_DIR=${MHD_INCLUDE_DIR} 35 | -DMHD_LIBRARY=${MHD_LIBRARY}) 36 | 37 | if (WIN32) 38 | # For Windows we have to provide also locations for debug libraries. 39 | set(CMAKE_ARGS ${CMAKE_ARGS} 40 | -DJSONCPP_LIBRARY_DEBUG=${JSONCPP_LIBRARY} 41 | -DCURL_LIBRARY_DEBUG=${CURL_LIBRARY} 42 | -DMHD_LIBRARY_DEBUG=${MHD_LIBRARY}) 43 | endif() 44 | 45 | ExternalProject_Add(jsonrpc-project 46 | PREFIX deps/jsonrpc 47 | URL https://github.com/cinemast/libjson-rpc-cpp/archive/v0.7.0.tar.gz 48 | URL_HASH SHA256=669c2259909f11a8c196923a910f9a16a8225ecc14e6c30e2bcb712bab9097eb 49 | # On Windows it tries to install this dir. Create it to prevent failure. 50 | PATCH_COMMAND cmake -E make_directory /win32-deps/include 51 | CMAKE_ARGS ${CMAKE_ARGS} 52 | # Overwtire build and install commands to force Release build on MSVC. 53 | BUILD_COMMAND cmake --build --config Release 54 | INSTALL_COMMAND cmake --build --config Release --target install 55 | ) 56 | 57 | add_dependencies(jsonrpc-project jsoncpp-project) 58 | 59 | # Create jsonrpc imported libraries 60 | if (WIN32) 61 | # On Windows CMAKE_INSTALL_PREFIX is ignored and installs to dist dir. 62 | ExternalProject_Get_Property(jsonrpc-project BINARY_DIR) 63 | set(INSTALL_DIR ${BINARY_DIR}/dist) 64 | else() 65 | ExternalProject_Get_Property(jsonrpc-project INSTALL_DIR) 66 | endif() 67 | set(JSONRPC_INCLUDE_DIR ${INSTALL_DIR}/include) 68 | file(MAKE_DIRECTORY ${JSONRPC_INCLUDE_DIR}) # Must exist. 69 | 70 | add_library(jsonrpc::common STATIC IMPORTED) 71 | set_property(TARGET jsonrpc::common PROPERTY IMPORTED_LOCATION ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}jsonrpccpp-common${CMAKE_STATIC_LIBRARY_SUFFIX}) 72 | set_property(TARGET jsonrpc::common PROPERTY INTERFACE_LINK_LIBRARIES jsoncpp) 73 | set_property(TARGET jsonrpc::common PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${JSONRPC_INCLUDE_DIR} ${JSONCPP_INCLUDE_DIR}) 74 | add_dependencies(jsonrpc::common jsonrpc-project) 75 | 76 | add_library(jsonrpc::client STATIC IMPORTED) 77 | set_property(TARGET jsonrpc::client PROPERTY IMPORTED_LOCATION ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}jsonrpccpp-client${CMAKE_STATIC_LIBRARY_SUFFIX}) 78 | set_property(TARGET jsonrpc::client PROPERTY INTERFACE_LINK_LIBRARIES jsonrpc::common ${CURL_LIBRARY}) 79 | set_property(TARGET jsonrpc::client PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${CURL_INCLUDE_DIR}) 80 | add_dependencies(jsonrpc::client jsonrpc-project) 81 | 82 | add_library(jsonrpc::server STATIC IMPORTED) 83 | set_property(TARGET jsonrpc::server PROPERTY IMPORTED_LOCATION ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}jsonrpccpp-server${CMAKE_STATIC_LIBRARY_SUFFIX}) 84 | set_property(TARGET jsonrpc::server PROPERTY INTERFACE_LINK_LIBRARIES jsonrpc::common ${MHD_LIBRARY}) 85 | set_property(TARGET jsonrpc::server PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${MHD_INCLUDE_DIR}) 86 | add_dependencies(jsonrpc::server jsonrpc-project) 87 | 88 | unset(INSTALL_DIR) 89 | unset(CMAKE_ARGS) 90 | -------------------------------------------------------------------------------- /cryptopp.cmake: -------------------------------------------------------------------------------- 1 | include(ExternalProject) 2 | include(GNUInstallDirs) 3 | 4 | # Support Emscripten builds by overwritting CMAKE_COMMAND. 5 | if (${CMAKE_SYSTEM_NAME} STREQUAL "Emscripten") 6 | set(CRYPTOPP_CMAKE_COMMAND emcmake cmake) 7 | else() 8 | set(CRYPTOPP_CMAKE_COMMAND ${CMAKE_COMMAND}) 9 | endif() 10 | 11 | ExternalProject_Add(cryptopp-project 12 | PREFIX deps/cryptopp 13 | # This points to unreleased version 5.6.5+ but contains very small 14 | # warning fix: 15 | # https://github.com/weidai11/cryptopp/commit/903b8feaa70199eb39a313b32a71268745ddb600 16 | DOWNLOAD_NAME CRYPTOPP_bccc6443.tar.gz 17 | URL https://github.com/weidai11/cryptopp/archive/bccc6443c4d4d611066c2de4c17109380cf97704.tar.gz 18 | URL_HASH SHA256=f1fddacadd2a0873f795d5614a85fecd5b6ff1d1c6e21dedc251703c54ce63aa 19 | # Keep source and archive in under source dir to avoid code duplication 20 | # for multiple build types and allow injecting the archive in isolated 21 | # builds (like Ubuntu PPA). 22 | DOWNLOAD_DIR ${CMAKE_CURRENT_LIST_DIR}/src 23 | SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/src/cryptopp 24 | PATCH_COMMAND cmake -E remove 25 | 3way.cpp 26 | adler32.cpp 27 | # algebra.cpp 28 | # algparam.cpp 29 | arc4.cpp 30 | # asn.cpp 31 | authenc.cpp 32 | base32.cpp 33 | base64.cpp 34 | # basecode.cpp 35 | bench1.cpp 36 | bench2.cpp 37 | bfinit.cpp 38 | blake2.cpp 39 | blowfish.cpp 40 | blumshub.cpp 41 | camellia.cpp 42 | cast.cpp 43 | casts.cpp 44 | cbcmac.cpp 45 | ccm.cpp 46 | chacha.cpp 47 | channels.cpp 48 | cmac.cpp 49 | # cpu.cpp 50 | crc.cpp 51 | # cryptlib.cpp 52 | datatest.cpp 53 | default.cpp 54 | des.cpp 55 | dessp.cpp 56 | dh2.cpp 57 | dh.cpp 58 | # dll.cpp 59 | dlltest.cpp 60 | # dsa.cpp 61 | eax.cpp 62 | # ec2n.cpp 63 | # eccrypto.cpp 64 | # ecp.cpp 65 | elgamal.cpp 66 | emsa2.cpp 67 | # eprecomp.cpp 68 | esign.cpp 69 | files.cpp 70 | # filters.cpp 71 | # fips140.cpp 72 | fipsalgt.cpp 73 | fipstest.cpp 74 | gcm.cpp 75 | gf2_32.cpp 76 | gf256.cpp 77 | # gf2n.cpp 78 | # gfpcrypt.cpp 79 | gost.cpp 80 | gzip.cpp 81 | # hex.cpp 82 | # hmac.cpp 83 | # hrtimer.cpp 84 | ida.cpp 85 | idea.cpp 86 | # integer.cpp 87 | # iterhash.cpp 88 | # keccak.cpp 89 | luc.cpp 90 | mars.cpp 91 | marss.cpp 92 | md2.cpp 93 | md4.cpp 94 | md5.cpp 95 | # misc.cpp 96 | # modes.cpp 97 | # mqueue.cpp 98 | mqv.cpp 99 | # nbtheory.cpp 100 | network.cpp 101 | # oaep.cpp 102 | # osrng.cpp 103 | panama.cpp 104 | pch.cpp 105 | pkcspad.cpp 106 | poly1305.cpp 107 | # polynomi.cpp 108 | pssr.cpp 109 | # pubkey.cpp 110 | # queue.cpp 111 | rabin.cpp 112 | # randpool.cpp 113 | rc2.cpp 114 | rc5.cpp 115 | rc6.cpp 116 | rdrand.cpp 117 | # rdtables.cpp 118 | regtest.cpp 119 | # rijndael.cpp 120 | ripemd.cpp 121 | # rng.cpp 122 | rsa.cpp 123 | rw.cpp 124 | safer.cpp 125 | salsa.cpp 126 | seal.cpp 127 | seed.cpp 128 | serpent.cpp 129 | sha3.cpp 130 | shacal2.cpp 131 | # sha.cpp 132 | sharkbox.cpp 133 | shark.cpp 134 | simple.cpp 135 | skipjack.cpp 136 | socketft.cpp 137 | sosemanuk.cpp 138 | square.cpp 139 | squaretb.cpp 140 | # strciphr.cpp 141 | tea.cpp 142 | test.cpp 143 | tftables.cpp 144 | tiger.cpp 145 | tigertab.cpp 146 | trdlocal.cpp 147 | ttmac.cpp 148 | twofish.cpp 149 | validat0.cpp 150 | validat1.cpp 151 | validat2.cpp 152 | validat3.cpp 153 | vmac.cpp 154 | wait.cpp 155 | wake.cpp 156 | whrlpool.cpp 157 | # winpipes.cpp 158 | xtr.cpp 159 | xtrcrypt.cpp 160 | zdeflate.cpp 161 | zinflate.cpp 162 | zlib.cpp 163 | CMAKE_COMMAND ${CRYPTOPP_CMAKE_COMMAND} 164 | CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= 165 | -DCMAKE_BUILD_TYPE=Release 166 | # Build static lib but suitable to be included in a shared lib. 167 | -DCMAKE_POSITION_INDEPENDENT_CODE=On 168 | -DBUILD_SHARED=Off 169 | -DBUILD_TESTING=Off 170 | # Overwtire build and install commands to force Release build on MSVC. 171 | BUILD_COMMAND cmake --build --config Release 172 | INSTALL_COMMAND cmake --build --config Release --target install 173 | ) 174 | 175 | # Create cryptopp imported library 176 | ExternalProject_Get_Property(cryptopp-project INSTALL_DIR) 177 | add_library(cryptopp STATIC IMPORTED) 178 | if (MSVC) 179 | set(CRYPTOPP_LIBRARY ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}cryptopp-static${CMAKE_STATIC_LIBRARY_SUFFIX}) 180 | else() 181 | set(CRYPTOPP_LIBRARY ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}cryptopp${CMAKE_STATIC_LIBRARY_SUFFIX}) 182 | endif() 183 | set(CRYPTOPP_INCLUDE_DIR ${INSTALL_DIR}/include) 184 | file(MAKE_DIRECTORY ${CRYPTOPP_INCLUDE_DIR}) # Must exist. 185 | set_property(TARGET cryptopp PROPERTY IMPORTED_LOCATION ${CRYPTOPP_LIBRARY}) 186 | set_property(TARGET cryptopp PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${CRYPTOPP_INCLUDE_DIR}) 187 | add_dependencies(cryptopp cryptopp-project) 188 | unset(INSTALL_DIR) 189 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Version 3, 29 June 2007 2 | 3 | Copyright (C) 2007 Free Software Foundation, Inc. 4 | Everyone is permitted to copy and distribute verbatim copies 5 | of this license document, but changing it is not allowed. 6 | 7 | Preamble 8 | 9 | The GNU General Public License is a free, copyleft license for 10 | software and other kinds of works. 11 | 12 | The licenses for most software and other practical works are designed 13 | to take away your freedom to share and change the works. By contrast, 14 | the GNU General Public License is intended to guarantee your freedom to 15 | share and change all versions of a program--to make sure it remains free 16 | software for all its users. We, the Free Software Foundation, use the 17 | GNU General Public License for most of our software; it applies also to 18 | any other work released this way by its authors. You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | them if you wish), that you receive source code or can get it if you 25 | want it, that you can change the software or use pieces of it in new 26 | free programs, and that you know you can do these things. 27 | 28 | To protect your rights, we need to prevent others from denying you 29 | these rights or asking you to surrender the rights. Therefore, you have 30 | certain responsibilities if you distribute copies of the software, or if 31 | you modify it: responsibilities to respect the freedom of others. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must pass on to the recipients the same 35 | freedoms that you received. You must make sure that they, too, receive 36 | or can get the source code. And you must show them these terms so they 37 | know their rights. 38 | 39 | Developers that use the GNU GPL protect your rights with two steps: 40 | (1) assert copyright on the software, and (2) offer you this License 41 | giving you legal permission to copy, distribute and/or modify it. 42 | 43 | For the developers' and authors' protection, the GPL clearly explains 44 | that there is no warranty for this free software. For both users' and 45 | authors' sake, the GPL requires that modified versions be marked as 46 | changed, so that their problems will not be attributed erroneously to 47 | authors of previous versions. 48 | 49 | Some devices are designed to deny users access to install or run 50 | modified versions of the software inside them, although the manufacturer 51 | can do so. This is fundamentally incompatible with the aim of 52 | protecting users' freedom to change the software. The systematic 53 | pattern of such abuse occurs in the area of products for individuals to 54 | use, which is precisely where it is most unacceptable. Therefore, we 55 | have designed this version of the GPL to prohibit the practice for those 56 | products. If such problems arise substantially in other domains, we 57 | stand ready to extend this provision to those domains in future versions 58 | of the GPL, as needed to protect the freedom of users. 59 | 60 | Finally, every program is threatened constantly by software patents. 61 | States should not allow patents to restrict development and use of 62 | software on general-purpose computers, but in those that do, we wish to 63 | avoid the special danger that patents applied to a free program could 64 | make it effectively proprietary. To prevent this, the GPL assures that 65 | patents cannot be used to render the program non-free. 66 | 67 | The precise terms and conditions for copying, distribution and 68 | modification follow. 69 | 70 | TERMS AND CONDITIONS 71 | 72 | 0. Definitions. 73 | 74 | "This License" refers to version 3 of the GNU General Public License. 75 | 76 | "Copyright" also means copyright-like laws that apply to other kinds of 77 | works, such as semiconductor masks. 78 | 79 | "The Program" refers to any copyrightable work licensed under this 80 | License. Each licensee is addressed as "you". "Licensees" and 81 | "recipients" may be individuals or organizations. 82 | 83 | To "modify" a work means to copy from or adapt all or part of the work 84 | in a fashion requiring copyright permission, other than the making of an 85 | exact copy. The resulting work is called a "modified version" of the 86 | earlier work or a work "based on" the earlier work. 87 | 88 | A "covered work" means either the unmodified Program or a work based 89 | on the Program. 90 | 91 | To "propagate" a work means to do anything with it that, without 92 | permission, would make you directly or secondarily liable for 93 | infringement under applicable copyright law, except executing it on a 94 | computer or modifying a private copy. Propagation includes copying, 95 | distribution (with or without modification), making available to the 96 | public, and in some countries other activities as well. 97 | 98 | To "convey" a work means any kind of propagation that enables other 99 | parties to make or receive copies. Mere interaction with a user through 100 | a computer network, with no transfer of a copy, is not conveying. 101 | 102 | An interactive user interface displays "Appropriate Legal Notices" 103 | to the extent that it includes a convenient and prominently visible 104 | feature that (1) displays an appropriate copyright notice, and (2) 105 | tells the user that there is no warranty for the work (except to the 106 | extent that warranties are provided), that licensees may convey the 107 | work under this License, and how to view a copy of this License. If 108 | the interface presents a list of user commands or options, such as a 109 | menu, a prominent item in the list meets this criterion. 110 | 111 | 1. Source Code. 112 | 113 | The "source code" for a work means the preferred form of the work 114 | for making modifications to it. "Object code" means any non-source 115 | form of a work. 116 | 117 | A "Standard Interface" means an interface that either is an official 118 | standard defined by a recognized standards body, or, in the case of 119 | interfaces specified for a particular programming language, one that 120 | is widely used among developers working in that language. 121 | 122 | The "System Libraries" of an executable work include anything, other 123 | than the work as a whole, that (a) is included in the normal form of 124 | packaging a Major Component, but which is not part of that Major 125 | Component, and (b) serves only to enable use of the work with that 126 | Major Component, or to implement a Standard Interface for which an 127 | implementation is available to the public in source code form. A 128 | "Major Component", in this context, means a major essential component 129 | (kernel, window system, and so on) of the specific operating system 130 | (if any) on which the executable work runs, or a compiler used to 131 | produce the work, or an object code interpreter used to run it. 132 | 133 | The "Corresponding Source" for a work in object code form means all 134 | the source code needed to generate, install, and (for an executable 135 | work) run the object code and to modify the work, including scripts to 136 | control those activities. However, it does not include the work's 137 | System Libraries, or general-purpose tools or generally available free 138 | programs which are used unmodified in performing those activities but 139 | which are not part of the work. For example, Corresponding Source 140 | includes interface definition files associated with source files for 141 | the work, and the source code for shared libraries and dynamically 142 | linked subprograms that the work is specifically designed to require, 143 | such as by intimate data communication or control flow between those 144 | subprograms and other parts of the work. 145 | 146 | The Corresponding Source need not include anything that users 147 | can regenerate automatically from other parts of the Corresponding 148 | Source. 149 | 150 | The Corresponding Source for a work in source code form is that 151 | same work. 152 | 153 | 2. Basic Permissions. 154 | 155 | All rights granted under this License are granted for the term of 156 | copyright on the Program, and are irrevocable provided the stated 157 | conditions are met. This License explicitly affirms your unlimited 158 | permission to run the unmodified Program. The output from running a 159 | covered work is covered by this License only if the output, given its 160 | content, constitutes a covered work. This License acknowledges your 161 | rights of fair use or other equivalent, as provided by copyright law. 162 | 163 | You may make, run and propagate covered works that you do not 164 | convey, without conditions so long as your license otherwise remains 165 | in force. You may convey covered works to others for the sole purpose 166 | of having them make modifications exclusively for you, or provide you 167 | with facilities for running those works, provided that you comply with 168 | the terms of this License in conveying all material for which you do 169 | not control copyright. Those thus making or running the covered works 170 | for you must do so exclusively on your behalf, under your direction 171 | and control, on terms that prohibit them from making any copies of 172 | your copyrighted material outside their relationship with you. 173 | 174 | Conveying under any other circumstances is permitted solely under 175 | the conditions stated below. Sublicensing is not allowed; section 10 176 | makes it unnecessary. 177 | 178 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 179 | 180 | No covered work shall be deemed part of an effective technological 181 | measure under any applicable law fulfilling obligations under article 182 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 183 | similar laws prohibiting or restricting circumvention of such 184 | measures. 185 | 186 | When you convey a covered work, you waive any legal power to forbid 187 | circumvention of technological measures to the extent such circumvention 188 | is effected by exercising rights under this License with respect to 189 | the covered work, and you disclaim any intention to limit operation or 190 | modification of the work as a means of enforcing, against the work's 191 | users, your or third parties' legal rights to forbid circumvention of 192 | technological measures. 193 | 194 | 4. Conveying Verbatim Copies. 195 | 196 | You may convey verbatim copies of the Program's source code as you 197 | receive it, in any medium, provided that you conspicuously and 198 | appropriately publish on each copy an appropriate copyright notice; 199 | keep intact all notices stating that this License and any 200 | non-permissive terms added in accord with section 7 apply to the code; 201 | keep intact all notices of the absence of any warranty; and give all 202 | recipients a copy of this License along with the Program. 203 | 204 | You may charge any price or no price for each copy that you convey, 205 | and you may offer support or warranty protection for a fee. 206 | 207 | 5. Conveying Modified Source Versions. 208 | 209 | You may convey a work based on the Program, or the modifications to 210 | produce it from the Program, in the form of source code under the 211 | terms of section 4, provided that you also meet all of these conditions: 212 | 213 | a) The work must carry prominent notices stating that you modified 214 | it, and giving a relevant date. 215 | 216 | b) The work must carry prominent notices stating that it is 217 | released under this License and any conditions added under section 218 | 7. This requirement modifies the requirement in section 4 to 219 | "keep intact all notices". 220 | 221 | c) You must license the entire work, as a whole, under this 222 | License to anyone who comes into possession of a copy. This 223 | License will therefore apply, along with any applicable section 7 224 | additional terms, to the whole of the work, and all its parts, 225 | regardless of how they are packaged. This License gives no 226 | permission to license the work in any other way, but it does not 227 | invalidate such permission if you have separately received it. 228 | 229 | d) If the work has interactive user interfaces, each must display 230 | Appropriate Legal Notices; however, if the Program has interactive 231 | interfaces that do not display Appropriate Legal Notices, your 232 | work need not make them do so. 233 | 234 | A compilation of a covered work with other separate and independent 235 | works, which are not by their nature extensions of the covered work, 236 | and which are not combined with it such as to form a larger program, 237 | in or on a volume of a storage or distribution medium, is called an 238 | "aggregate" if the compilation and its resulting copyright are not 239 | used to limit the access or legal rights of the compilation's users 240 | beyond what the individual works permit. Inclusion of a covered work 241 | in an aggregate does not cause this License to apply to the other 242 | parts of the aggregate. 243 | 244 | 6. Conveying Non-Source Forms. 245 | 246 | You may convey a covered work in object code form under the terms 247 | of sections 4 and 5, provided that you also convey the 248 | machine-readable Corresponding Source under the terms of this License, 249 | in one of these ways: 250 | 251 | a) Convey the object code in, or embodied in, a physical product 252 | (including a physical distribution medium), accompanied by the 253 | Corresponding Source fixed on a durable physical medium 254 | customarily used for software interchange. 255 | 256 | b) Convey the object code in, or embodied in, a physical product 257 | (including a physical distribution medium), accompanied by a 258 | written offer, valid for at least three years and valid for as 259 | long as you offer spare parts or customer support for that product 260 | model, to give anyone who possesses the object code either (1) a 261 | copy of the Corresponding Source for all the software in the 262 | product that is covered by this License, on a durable physical 263 | medium customarily used for software interchange, for a price no 264 | more than your reasonable cost of physically performing this 265 | conveying of source, or (2) access to copy the 266 | Corresponding Source from a network server at no charge. 267 | 268 | c) Convey individual copies of the object code with a copy of the 269 | written offer to provide the Corresponding Source. This 270 | alternative is allowed only occasionally and noncommercially, and 271 | only if you received the object code with such an offer, in accord 272 | with subsection 6b. 273 | 274 | d) Convey the object code by offering access from a designated 275 | place (gratis or for a charge), and offer equivalent access to the 276 | Corresponding Source in the same way through the same place at no 277 | further charge. You need not require recipients to copy the 278 | Corresponding Source along with the object code. If the place to 279 | copy the object code is a network server, the Corresponding Source 280 | may be on a different server (operated by you or a third party) 281 | that supports equivalent copying facilities, provided you maintain 282 | clear directions next to the object code saying where to find the 283 | Corresponding Source. Regardless of what server hosts the 284 | Corresponding Source, you remain obligated to ensure that it is 285 | available for as long as needed to satisfy these requirements. 286 | 287 | e) Convey the object code using peer-to-peer transmission, provided 288 | you inform other peers where the object code and Corresponding 289 | Source of the work are being offered to the general public at no 290 | charge under subsection 6d. 291 | 292 | A separable portion of the object code, whose source code is excluded 293 | from the Corresponding Source as a System Library, need not be 294 | included in conveying the object code work. 295 | 296 | A "User Product" is either (1) a "consumer product", which means any 297 | tangible personal property which is normally used for personal, family, 298 | or household purposes, or (2) anything designed or sold for incorporation 299 | into a dwelling. In determining whether a product is a consumer product, 300 | doubtful cases shall be resolved in favor of coverage. For a particular 301 | product received by a particular user, "normally used" refers to a 302 | typical or common use of that class of product, regardless of the status 303 | of the particular user or of the way in which the particular user 304 | actually uses, or expects or is expected to use, the product. A product 305 | is a consumer product regardless of whether the product has substantial 306 | commercial, industrial or non-consumer uses, unless such uses represent 307 | the only significant mode of use of the product. 308 | 309 | "Installation Information" for a User Product means any methods, 310 | procedures, authorization keys, or other information required to install 311 | and execute modified versions of a covered work in that User Product from 312 | a modified version of its Corresponding Source. The information must 313 | suffice to ensure that the continued functioning of the modified object 314 | code is in no case prevented or interfered with solely because 315 | modification has been made. 316 | 317 | If you convey an object code work under this section in, or with, or 318 | specifically for use in, a User Product, and the conveying occurs as 319 | part of a transaction in which the right of possession and use of the 320 | User Product is transferred to the recipient in perpetuity or for a 321 | fixed term (regardless of how the transaction is characterized), the 322 | Corresponding Source conveyed under this section must be accompanied 323 | by the Installation Information. But this requirement does not apply 324 | if neither you nor any third party retains the ability to install 325 | modified object code on the User Product (for example, the work has 326 | been installed in ROM). 327 | 328 | The requirement to provide Installation Information does not include a 329 | requirement to continue to provide support service, warranty, or updates 330 | for a work that has been modified or installed by the recipient, or for 331 | the User Product in which it has been modified or installed. Access to a 332 | network may be denied when the modification itself materially and 333 | adversely affects the operation of the network or violates the rules and 334 | protocols for communication across the network. 335 | 336 | Corresponding Source conveyed, and Installation Information provided, 337 | in accord with this section must be in a format that is publicly 338 | documented (and with an implementation available to the public in 339 | source code form), and must require no special password or key for 340 | unpacking, reading or copying. 341 | 342 | 7. Additional Terms. 343 | 344 | "Additional permissions" are terms that supplement the terms of this 345 | License by making exceptions from one or more of its conditions. 346 | Additional permissions that are applicable to the entire Program shall 347 | be treated as though they were included in this License, to the extent 348 | that they are valid under applicable law. If additional permissions 349 | apply only to part of the Program, that part may be used separately 350 | under those permissions, but the entire Program remains governed by 351 | this License without regard to the additional permissions. 352 | 353 | When you convey a copy of a covered work, you may at your option 354 | remove any additional permissions from that copy, or from any part of 355 | it. (Additional permissions may be written to require their own 356 | removal in certain cases when you modify the work.) You may place 357 | additional permissions on material, added by you to a covered work, 358 | for which you have or can give appropriate copyright permission. 359 | 360 | Notwithstanding any other provision of this License, for material you 361 | add to a covered work, you may (if authorized by the copyright holders of 362 | that material) supplement the terms of this License with terms: 363 | 364 | a) Disclaiming warranty or limiting liability differently from the 365 | terms of sections 15 and 16 of this License; or 366 | 367 | b) Requiring preservation of specified reasonable legal notices or 368 | author attributions in that material or in the Appropriate Legal 369 | Notices displayed by works containing it; or 370 | 371 | c) Prohibiting misrepresentation of the origin of that material, or 372 | requiring that modified versions of such material be marked in 373 | reasonable ways as different from the original version; or 374 | 375 | d) Limiting the use for publicity purposes of names of licensors or 376 | authors of the material; or 377 | 378 | e) Declining to grant rights under trademark law for use of some 379 | trade names, trademarks, or service marks; or 380 | 381 | f) Requiring indemnification of licensors and authors of that 382 | material by anyone who conveys the material (or modified versions of 383 | it) with contractual assumptions of liability to the recipient, for 384 | any liability that these contractual assumptions directly impose on 385 | those licensors and authors. 386 | 387 | All other non-permissive additional terms are considered "further 388 | restrictions" within the meaning of section 10. If the Program as you 389 | received it, or any part of it, contains a notice stating that it is 390 | governed by this License along with a term that is a further 391 | restriction, you may remove that term. If a license document contains 392 | a further restriction but permits relicensing or conveying under this 393 | License, you may add to a covered work material governed by the terms 394 | of that license document, provided that the further restriction does 395 | not survive such relicensing or conveying. 396 | 397 | If you add terms to a covered work in accord with this section, you 398 | must place, in the relevant source files, a statement of the 399 | additional terms that apply to those files, or a notice indicating 400 | where to find the applicable terms. 401 | 402 | Additional terms, permissive or non-permissive, may be stated in the 403 | form of a separately written license, or stated as exceptions; 404 | the above requirements apply either way. 405 | 406 | 8. Termination. 407 | 408 | You may not propagate or modify a covered work except as expressly 409 | provided under this License. Any attempt otherwise to propagate or 410 | modify it is void, and will automatically terminate your rights under 411 | this License (including any patent licenses granted under the third 412 | paragraph of section 11). 413 | 414 | However, if you cease all violation of this License, then your 415 | license from a particular copyright holder is reinstated (a) 416 | provisionally, unless and until the copyright holder explicitly and 417 | finally terminates your license, and (b) permanently, if the copyright 418 | holder fails to notify you of the violation by some reasonable means 419 | prior to 60 days after the cessation. 420 | 421 | Moreover, your license from a particular copyright holder is 422 | reinstated permanently if the copyright holder notifies you of the 423 | violation by some reasonable means, this is the first time you have 424 | received notice of violation of this License (for any work) from that 425 | copyright holder, and you cure the violation prior to 30 days after 426 | your receipt of the notice. 427 | 428 | Termination of your rights under this section does not terminate the 429 | licenses of parties who have received copies or rights from you under 430 | this License. If your rights have been terminated and not permanently 431 | reinstated, you do not qualify to receive new licenses for the same 432 | material under section 10. 433 | 434 | 9. Acceptance Not Required for Having Copies. 435 | 436 | You are not required to accept this License in order to receive or 437 | run a copy of the Program. Ancillary propagation of a covered work 438 | occurring solely as a consequence of using peer-to-peer transmission 439 | to receive a copy likewise does not require acceptance. However, 440 | nothing other than this License grants you permission to propagate or 441 | modify any covered work. These actions infringe copyright if you do 442 | not accept this License. Therefore, by modifying or propagating a 443 | covered work, you indicate your acceptance of this License to do so. 444 | 445 | 10. Automatic Licensing of Downstream Recipients. 446 | 447 | Each time you convey a covered work, the recipient automatically 448 | receives a license from the original licensors, to run, modify and 449 | propagate that work, subject to this License. You are not responsible 450 | for enforcing compliance by third parties with this License. 451 | 452 | An "entity transaction" is a transaction transferring control of an 453 | organization, or substantially all assets of one, or subdividing an 454 | organization, or merging organizations. If propagation of a covered 455 | work results from an entity transaction, each party to that 456 | transaction who receives a copy of the work also receives whatever 457 | licenses to the work the party's predecessor in interest had or could 458 | give under the previous paragraph, plus a right to possession of the 459 | Corresponding Source of the work from the predecessor in interest, if 460 | the predecessor has it or can get it with reasonable efforts. 461 | 462 | You may not impose any further restrictions on the exercise of the 463 | rights granted or affirmed under this License. For example, you may 464 | not impose a license fee, royalty, or other charge for exercise of 465 | rights granted under this License, and you may not initiate litigation 466 | (including a cross-claim or counterclaim in a lawsuit) alleging that 467 | any patent claim is infringed by making, using, selling, offering for 468 | sale, or importing the Program or any portion of it. 469 | 470 | 11. Patents. 471 | 472 | A "contributor" is a copyright holder who authorizes use under this 473 | License of the Program or a work on which the Program is based. The 474 | work thus licensed is called the contributor's "contributor version". 475 | 476 | A contributor's "essential patent claims" are all patent claims 477 | owned or controlled by the contributor, whether already acquired or 478 | hereafter acquired, that would be infringed by some manner, permitted 479 | by this License, of making, using, or selling its contributor version, 480 | but do not include claims that would be infringed only as a 481 | consequence of further modification of the contributor version. For 482 | purposes of this definition, "control" includes the right to grant 483 | patent sublicenses in a manner consistent with the requirements of 484 | this License. 485 | 486 | Each contributor grants you a non-exclusive, worldwide, royalty-free 487 | patent license under the contributor's essential patent claims, to 488 | make, use, sell, offer for sale, import and otherwise run, modify and 489 | propagate the contents of its contributor version. 490 | 491 | In the following three paragraphs, a "patent license" is any express 492 | agreement or commitment, however denominated, not to enforce a patent 493 | (such as an express permission to practice a patent or covenant not to 494 | sue for patent infringement). To "grant" such a patent license to a 495 | party means to make such an agreement or commitment not to enforce a 496 | patent against the party. 497 | 498 | If you convey a covered work, knowingly relying on a patent license, 499 | and the Corresponding Source of the work is not available for anyone 500 | to copy, free of charge and under the terms of this License, through a 501 | publicly available network server or other readily accessible means, 502 | then you must either (1) cause the Corresponding Source to be so 503 | available, or (2) arrange to deprive yourself of the benefit of the 504 | patent license for this particular work, or (3) arrange, in a manner 505 | consistent with the requirements of this License, to extend the patent 506 | license to downstream recipients. "Knowingly relying" means you have 507 | actual knowledge that, but for the patent license, your conveying the 508 | covered work in a country, or your recipient's use of the covered work 509 | in a country, would infringe one or more identifiable patents in that 510 | country that you have reason to believe are valid. 511 | 512 | If, pursuant to or in connection with a single transaction or 513 | arrangement, you convey, or propagate by procuring conveyance of, a 514 | covered work, and grant a patent license to some of the parties 515 | receiving the covered work authorizing them to use, propagate, modify 516 | or convey a specific copy of the covered work, then the patent license 517 | you grant is automatically extended to all recipients of the covered 518 | work and works based on it. 519 | 520 | A patent license is "discriminatory" if it does not include within 521 | the scope of its coverage, prohibits the exercise of, or is 522 | conditioned on the non-exercise of one or more of the rights that are 523 | specifically granted under this License. You may not convey a covered 524 | work if you are a party to an arrangement with a third party that is 525 | in the business of distributing software, under which you make payment 526 | to the third party based on the extent of your activity of conveying 527 | the work, and under which the third party grants, to any of the 528 | parties who would receive the covered work from you, a discriminatory 529 | patent license (a) in connection with copies of the covered work 530 | conveyed by you (or copies made from those copies), or (b) primarily 531 | for and in connection with specific products or compilations that 532 | contain the covered work, unless you entered into that arrangement, 533 | or that patent license was granted, prior to 28 March 2007. 534 | 535 | Nothing in this License shall be construed as excluding or limiting 536 | any implied license or other defenses to infringement that may 537 | otherwise be available to you under applicable patent law. 538 | 539 | 12. No Surrender of Others' Freedom. 540 | 541 | If conditions are imposed on you (whether by court order, agreement or 542 | otherwise) that contradict the conditions of this License, they do not 543 | excuse you from the conditions of this License. If you cannot convey a 544 | covered work so as to satisfy simultaneously your obligations under this 545 | License and any other pertinent obligations, then as a consequence you may 546 | not convey it at all. For example, if you agree to terms that obligate you 547 | to collect a royalty for further conveying from those to whom you convey 548 | the Program, the only way you could satisfy both those terms and this 549 | License would be to refrain entirely from conveying the Program. 550 | 551 | 13. Use with the GNU Affero General Public License. 552 | 553 | Notwithstanding any other provision of this License, you have 554 | permission to link or combine any covered work with a work licensed 555 | under version 3 of the GNU Affero General Public License into a single 556 | combined work, and to convey the resulting work. The terms of this 557 | License will continue to apply to the part which is the covered work, 558 | but the special requirements of the GNU Affero General Public License, 559 | section 13, concerning interaction through a network will apply to the 560 | combination as such. 561 | 562 | 14. Revised Versions of this License. 563 | 564 | The Free Software Foundation may publish revised and/or new versions of 565 | the GNU General Public License from time to time. Such new versions will 566 | be similar in spirit to the present version, but may differ in detail to 567 | address new problems or concerns. 568 | 569 | Each version is given a distinguishing version number. If the 570 | Program specifies that a certain numbered version of the GNU General 571 | Public License "or any later version" applies to it, you have the 572 | option of following the terms and conditions either of that numbered 573 | version or of any later version published by the Free Software 574 | Foundation. If the Program does not specify a version number of the 575 | GNU General Public License, you may choose any version ever published 576 | by the Free Software Foundation. 577 | 578 | If the Program specifies that a proxy can decide which future 579 | versions of the GNU General Public License can be used, that proxy's 580 | public statement of acceptance of a version permanently authorizes you 581 | to choose that version for the Program. 582 | 583 | Later license versions may give you additional or different 584 | permissions. However, no additional obligations are imposed on any 585 | author or copyright holder as a result of your choosing to follow a 586 | later version. 587 | 588 | 15. Disclaimer of Warranty. 589 | 590 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 591 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 592 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 593 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 594 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 595 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 596 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 597 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 598 | 599 | 16. Limitation of Liability. 600 | 601 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 602 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 603 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 604 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 605 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 606 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 607 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 608 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 609 | SUCH DAMAGES. 610 | 611 | 17. Interpretation of Sections 15 and 16. 612 | 613 | If the disclaimer of warranty and limitation of liability provided 614 | above cannot be given local legal effect according to their terms, 615 | reviewing courts shall apply local law that most closely approximates 616 | an absolute waiver of all civil liability in connection with the 617 | Program, unless a warranty or assumption of liability accompanies a 618 | copy of the Program in return for a fee. 619 | 620 | END OF TERMS AND CONDITIONS 621 | 622 | How to Apply These Terms to Your New Programs 623 | 624 | If you develop a new program, and you want it to be of the greatest 625 | possible use to the public, the best way to achieve this is to make it 626 | free software which everyone can redistribute and change under these terms. 627 | 628 | To do so, attach the following notices to the program. It is safest 629 | to attach them to the start of each source file to most effectively 630 | state the exclusion of warranty; and each file should have at least 631 | the "copyright" line and a pointer to where the full notice is found. 632 | 633 | 634 | Copyright (C) 635 | 636 | This program is free software: you can redistribute it and/or modify 637 | it under the terms of the GNU General Public License as published by 638 | the Free Software Foundation, either version 3 of the License, or 639 | (at your option) any later version. 640 | 641 | This program is distributed in the hope that it will be useful, 642 | but WITHOUT ANY WARRANTY; without even the implied warranty of 643 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 644 | GNU General Public License for more details. 645 | 646 | You should have received a copy of the GNU General Public License 647 | along with this program. If not, see . 648 | 649 | Also add information on how to contact you by electronic and paper mail. 650 | 651 | If the program does terminal interaction, make it output a short 652 | notice like this when it starts in an interactive mode: 653 | 654 | Copyright (C) 655 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 656 | This is free software, and you are welcome to redistribute it 657 | under certain conditions; type `show c' for details. 658 | 659 | The hypothetical commands `show w' and `show c' should show the appropriate 660 | parts of the General Public License. Of course, your program's commands 661 | might be different; for a GUI interface, you would use an "about box". 662 | 663 | You should also get your employer (if you work as a programmer) or school, 664 | if any, to sign a "copyright disclaimer" for the program, if necessary. 665 | For more information on this, and how to apply and follow the GNU GPL, see 666 | . 667 | 668 | The GNU General Public License does not permit incorporating your program 669 | into proprietary programs. If your program is a subroutine library, you 670 | may consider it more useful to permit linking proprietary applications with 671 | the library. If this is what you want to do, use the GNU Lesser General 672 | Public License instead of this License. But first, please read 673 | . 674 | --------------------------------------------------------------------------------