forked from such-gitea/wownero
Compare commits
395 Commits
wow_1140_1
...
release-v0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
56dea1b584 | ||
|
|
0ececcd9a1 | ||
|
|
6f9bb2b2ee | ||
|
|
de5e3660d9 | ||
|
|
7bc2142590 | ||
|
|
8adea0a034 | ||
|
|
58d006566b | ||
|
|
3263067b97 | ||
|
|
6cf896f8ab | ||
|
|
caae62e2ce | ||
|
|
4865345889 | ||
|
|
8b56a44adc | ||
|
|
d1623175b2 | ||
|
|
0edab6407f | ||
|
|
7008314cb0 | ||
|
|
35d15f2626 | ||
|
|
47b543b591 | ||
|
|
398a21019c | ||
|
|
fc915d3e0f | ||
|
|
b1e005b3c8 | ||
|
|
d4a5778dd6 | ||
|
|
cce5708153 | ||
|
|
0a97b3784d | ||
|
|
a8790e240c | ||
|
|
c929c2a6bb | ||
|
|
741adad93a | ||
|
|
73b17fcb62 | ||
|
|
f3ee225f29 | ||
|
|
f165101429 | ||
|
|
d2554341b1 | ||
|
|
c1632fb30c | ||
|
|
17cd68f865 | ||
|
|
5c6eb96036 | ||
|
|
b67c96af71 | ||
|
|
88fd5fb494 | ||
|
|
5c3195dac9 | ||
|
|
8386c6df2c | ||
|
|
9d952da3a0 | ||
|
|
2320fb5549 | ||
|
|
b40a81c694 | ||
|
|
308a8f69ad | ||
|
|
b491ff61c5 | ||
|
|
bb0ac27a4a | ||
|
|
835caf3722 | ||
|
|
9021fe99b1 | ||
|
|
bbd251c48f | ||
|
|
00c6056e98 | ||
|
|
47f7cf68ae | ||
|
|
c4bdd5699c | ||
|
|
7e6b4601c3 | ||
|
|
d4f07b40de | ||
|
|
1bbfeb325c | ||
|
|
dc1e56d815 | ||
|
|
332ac6a03a | ||
|
|
ae255e3857 | ||
|
|
7cf07e9319 | ||
|
|
d904ea08a1 | ||
|
|
0da1f14aaf | ||
|
|
583eaf3ccb | ||
|
|
ee45ef2c9e | ||
|
|
7ba6d69196 | ||
|
|
83e5d6a829 | ||
|
|
a09d5ea211 | ||
|
|
2998b929d5 | ||
|
|
44e0f9eebf | ||
|
|
00bf0b5ef0 | ||
|
|
d1176c5ef5 | ||
|
|
cbf07f01ba | ||
|
|
9c828a281b | ||
|
|
a5253e2fb4 | ||
|
|
ff3a667a90 | ||
|
|
a3a84378eb | ||
|
|
202d568676 | ||
|
|
47aa3f296d | ||
|
|
6bdd11abe2 | ||
|
|
6486269929 | ||
|
|
bbf58ddc85 | ||
|
|
94b038e4f7 | ||
|
|
deeb0cdd82 | ||
|
|
2964c22866 | ||
|
|
458155e5c8 | ||
|
|
bbf769360d | ||
|
|
8700e3cfb0 | ||
|
|
f7ab91fecb | ||
|
|
d63549a314 | ||
|
|
9b9522614e | ||
|
|
46c05eb988 | ||
|
|
baaf0f90f1 | ||
|
|
58a260bfe4 | ||
|
|
927f044e40 | ||
|
|
df364242a9 | ||
|
|
86f56d1463 | ||
|
|
1fe0fbdf64 | ||
|
|
7280d63a48 | ||
|
|
5244b6fe5c | ||
|
|
427e74cb46 | ||
|
|
dfe5f94145 | ||
|
|
d55544036b | ||
|
|
30531812de | ||
|
|
40ef32a937 | ||
|
|
82c224ffa8 | ||
|
|
177148468a | ||
|
|
6177e8e062 | ||
|
|
3da82f51bc | ||
|
|
d430c95579 | ||
|
|
506526267f | ||
|
|
1cad162642 | ||
|
|
b4d1c57bd1 | ||
|
|
7c470609f1 | ||
|
|
1f3b9f3547 | ||
|
|
90bf824624 | ||
|
|
541dcb0de4 | ||
|
|
869b084d2c | ||
|
|
fe9989d6df | ||
|
|
02b0bf7997 | ||
|
|
8990b433aa | ||
|
|
2288961711 | ||
|
|
c579994530 | ||
|
|
5a0de0115d | ||
|
|
1959297a1e | ||
|
|
d11f4fb80d | ||
|
|
320c45144d | ||
|
|
c0f02c85b5 | ||
|
|
993a55246e | ||
|
|
c2c5d584d1 | ||
|
|
37f9a97b0a | ||
|
|
ad56d914f3 | ||
|
|
67571e7ba5 | ||
|
|
33adb9b1dc | ||
|
|
ec6b93e4ca | ||
|
|
1c18b27021 | ||
|
|
8bbef9d942 | ||
|
|
7605881b73 | ||
|
|
c7a227b3bf | ||
|
|
a42e49f1d7 | ||
|
|
84df545d7f | ||
|
|
e1c3d0cc76 | ||
|
|
40573dd79c | ||
|
|
1f8b0ddc83 | ||
|
|
ec5530a86a | ||
|
|
bc48be0cdd | ||
|
|
f4a2968a51 | ||
|
|
545b09eaf7 | ||
|
|
4c2efffdc5 | ||
|
|
95cf3bebbe | ||
|
|
9f192fd188 | ||
|
|
0e61004d0b | ||
|
|
b101ac4f7b | ||
|
|
0c681083ca | ||
|
|
7b3269b8ae | ||
|
|
b6c3926287 | ||
|
|
f58de1e817 | ||
|
|
4a55d6eaea | ||
|
|
1611b65221 | ||
|
|
f95fcd6d62 | ||
|
|
79271b91ac | ||
|
|
b97b6380b3 | ||
|
|
d28a29a760 | ||
|
|
bc41700866 | ||
|
|
db83f0a62d | ||
|
|
6d24a6f94b | ||
|
|
483396faca | ||
|
|
bda4b3f8bb | ||
|
|
ba9b3220f7 | ||
|
|
9aa886beda | ||
|
|
92f54b0e29 | ||
|
|
b694d58cc8 | ||
|
|
3450ae0fa7 | ||
|
|
f9e44f8ed9 | ||
|
|
1f912c75f1 | ||
|
|
f76ad13b41 | ||
|
|
f2e3fabc32 | ||
|
|
f6e53ad33c | ||
|
|
2c959a9b21 | ||
|
|
328b7be391 | ||
|
|
61289dcbad | ||
|
|
7b59d05935 | ||
|
|
ee8e58f909 | ||
|
|
ed5d4ccd1a | ||
|
|
d78da837ae | ||
|
|
a486cae407 | ||
|
|
1772c8593a | ||
|
|
9a4f1f0134 | ||
|
|
58f28cadf8 | ||
|
|
40530b294e | ||
|
|
424bfdc8d7 | ||
|
|
1ce04b7574 | ||
|
|
3a1ad04234 | ||
|
|
fc8726f1c3 | ||
|
|
8c331a6d26 | ||
|
|
2daf54deeb | ||
|
|
41662ebcc7 | ||
|
|
e389101cb2 | ||
|
|
076b7e1076 | ||
|
|
0429cabefd | ||
|
|
b323d90f67 | ||
|
|
47b42f8b01 | ||
|
|
223429f0fd | ||
|
|
280e1a64bd | ||
|
|
43a124979a | ||
|
|
e5ac16b077 | ||
|
|
bea06d1a32 | ||
|
|
e93058b41c | ||
|
|
8fb50b738f | ||
|
|
9e9cd108a3 | ||
|
|
fbdc30966b | ||
|
|
ed366efb8c | ||
|
|
afa669656b | ||
|
|
e70d80e820 | ||
|
|
5e180c73f8 | ||
|
|
d099dba9e1 | ||
|
|
04abe99f81 | ||
|
|
9c2f09df51 | ||
|
|
505fde2e09 | ||
|
|
009feaca79 | ||
|
|
7ce841cc2f | ||
|
|
4e2b279a94 | ||
|
|
b85169a5b6 | ||
|
|
082e0a1bef | ||
|
|
85d2ae4ad7 | ||
|
|
233a1ead22 | ||
|
|
1380b70e74 | ||
|
|
8e64b61663 | ||
|
|
1d3874dabf | ||
|
|
740085271b | ||
|
|
81e3926304 | ||
|
|
e04ae088e8 | ||
|
|
f6896d9974 | ||
|
|
f6dbb967f8 | ||
|
|
06b0f9e870 | ||
|
|
0a7efa45f7 | ||
|
|
db26776a35 | ||
|
|
f40cf1a859 | ||
|
|
b1538bff31 | ||
|
|
e2c39f6b59 | ||
|
|
f12b277d20 | ||
|
|
107eec4dca | ||
|
|
de742b5c82 | ||
|
|
0d219ccdcd | ||
|
|
2cab7ec917 | ||
|
|
e0cf1ecadd | ||
|
|
bfecf19ce9 | ||
|
|
95568639e0 | ||
|
|
bcddce70e6 | ||
|
|
bd56771996 | ||
|
|
a87a19c570 | ||
|
|
3380458d2e | ||
|
|
0dac3afc22 | ||
|
|
dca353c574 | ||
|
|
8195a444ee | ||
|
|
b2dd94bcc0 | ||
|
|
65c69fb67e | ||
|
|
410c6e5b48 | ||
|
|
9e96873f87 | ||
|
|
5e2e003cfb | ||
|
|
fd9019b37d | ||
|
|
ccaa666cf9 | ||
|
|
ca7f0249eb | ||
|
|
4602c2674f | ||
|
|
49cf41a61d | ||
|
|
22a4cb0609 | ||
|
|
15e029ac6d | ||
|
|
f6687c3ed8 | ||
|
|
aa6850c71d | ||
|
|
e18cb33e08 | ||
|
|
f1cdcba95e | ||
|
|
ed273a88d2 | ||
|
|
c79fe98b71 | ||
|
|
e05a17f1ea | ||
|
|
9205bba38a | ||
|
|
9bde29cb23 | ||
|
|
b25c9ee183 | ||
|
|
252e834800 | ||
|
|
ace614612b | ||
|
|
23edf8901f | ||
|
|
91de2f812f | ||
|
|
2a1a208b2b | ||
|
|
df688e0ec5 | ||
|
|
770c0189d0 | ||
|
|
38ef5f8b51 | ||
|
|
aabe3eedb8 | ||
|
|
ffe9d8821a | ||
|
|
7f33e07da3 | ||
|
|
13184bc41e | ||
|
|
d6074be56b | ||
|
|
41cb11b211 | ||
|
|
96405bcaa0 | ||
|
|
86c63b8e15 | ||
|
|
fac173d831 | ||
|
|
9ccd84b271 | ||
|
|
cc9dd7a64a | ||
|
|
80b673dcad | ||
|
|
e452e57a39 | ||
|
|
f24c970f96 | ||
|
|
bab5bbfc19 | ||
|
|
20ef37bbca | ||
|
|
40070a661f | ||
|
|
00dd93971a | ||
|
|
fa958d4b4b | ||
|
|
ede213f65c | ||
|
|
6f859e4328 | ||
|
|
4980d3c0c9 | ||
|
|
e8e2bd5212 | ||
|
|
2ade8dfb02 | ||
|
|
2e336347ec | ||
|
|
af6febaa83 | ||
|
|
715754d7fd | ||
|
|
bb8c0f62be | ||
|
|
16b2022991 | ||
|
|
409bf2d642 | ||
|
|
333c7edeb9 | ||
|
|
78011db913 | ||
|
|
ec439a9376 | ||
|
|
6d8498be1f | ||
|
|
b085e11b52 | ||
|
|
123c0d7d4c | ||
|
|
a48658017b | ||
|
|
8636599654 | ||
|
|
31b31effc2 | ||
|
|
57a1bcb6b9 | ||
|
|
fde2a31964 | ||
|
|
2b16afedf9 | ||
|
|
3384b0f0f4 | ||
|
|
44b3c9bd55 | ||
|
|
f09edc9fad | ||
|
|
6fec5f9fdc | ||
|
|
4b89d877d7 | ||
|
|
c0e22ebcca | ||
|
|
76817605bd | ||
|
|
e2b72da4ed | ||
|
|
c677421594 | ||
|
|
1e20d705e7 | ||
|
|
9e1f8bfaa3 | ||
|
|
c7b66d3d8c | ||
|
|
80dc5d2110 | ||
|
|
9670c917d1 | ||
|
|
d003f07c59 | ||
|
|
df9d59caff | ||
|
|
e962216678 | ||
|
|
5ef4bf05c5 | ||
|
|
e561a0c329 | ||
|
|
0299d36e76 | ||
|
|
26dc764ab0 | ||
|
|
fe427170b9 | ||
|
|
41b95ad40e | ||
|
|
7d0505c85d | ||
|
|
96370488c0 | ||
|
|
9dc67af187 | ||
|
|
bc4d53bece | ||
|
|
41a66bf05b | ||
|
|
3edef51d70 | ||
|
|
4a9794e033 | ||
|
|
a9e2993258 | ||
|
|
5b8afd43ac | ||
|
|
9ae9f6ada6 | ||
|
|
a4feeb4238 | ||
|
|
e89f33634d | ||
|
|
dd527d9369 | ||
|
|
1e792c3e26 | ||
|
|
3c7d7bc324 | ||
|
|
51a4cc0fad | ||
|
|
7bd9b62db6 | ||
|
|
178c11f4a4 | ||
|
|
5eeeec39f6 | ||
|
|
91a61fea55 | ||
|
|
8daba22f92 | ||
|
|
d481410bff | ||
|
|
58f6607382 | ||
|
|
2897c269de | ||
|
|
cdf9ecfd0f | ||
|
|
66100f2fa4 | ||
|
|
d400b4d360 | ||
|
|
4c6ff21cc6 | ||
|
|
2012cbe9b5 | ||
|
|
7090121b13 | ||
|
|
9fce7614c1 | ||
|
|
35e205cc13 | ||
|
|
892500549a | ||
|
|
0f3ff8ce2c | ||
|
|
da5de484f2 | ||
|
|
4c0545cc41 | ||
|
|
a71e4dabe8 | ||
|
|
8ff2cc751d | ||
|
|
c29890c2c0 | ||
|
|
32bd639b4b | ||
|
|
202b6519a3 | ||
|
|
4396ff8501 | ||
|
|
68118645e6 | ||
|
|
8ce0cfc73a | ||
|
|
d27f86041c | ||
|
|
5e7dbe01b0 | ||
|
|
fb21032a7d | ||
|
|
c31780678e | ||
|
|
c1e16fdffa | ||
|
|
d4d1afd688 |
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -6,3 +6,6 @@
|
|||||||
path = external/miniupnp
|
path = external/miniupnp
|
||||||
url = https://github.com/monero-project/miniupnp
|
url = https://github.com/monero-project/miniupnp
|
||||||
branch = monero
|
branch = monero
|
||||||
|
[submodule "external/rapidjson"]
|
||||||
|
path = external/rapidjson
|
||||||
|
url = https://github.com/Tencent/rapidjson
|
||||||
|
|||||||
63
.travis.yml
Normal file
63
.travis.yml
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
sudo: required
|
||||||
|
dist: trusty
|
||||||
|
os: linux
|
||||||
|
language: minimal
|
||||||
|
cache:
|
||||||
|
directories:
|
||||||
|
- contrib/depends/built
|
||||||
|
- contrib/depends/sdk-sources
|
||||||
|
- $HOME/.ccache
|
||||||
|
env:
|
||||||
|
global:
|
||||||
|
- MAKEJOBS=-j3
|
||||||
|
- RUN_TESTS=false
|
||||||
|
- BOOST_TEST_RANDOM=1$TRAVIS_BUILD_ID
|
||||||
|
- CCACHE_SIZE=100M
|
||||||
|
- CCACHE_TEMPDIR=/tmp/.ccache-temp
|
||||||
|
- CCACHE_COMPRESS=1
|
||||||
|
- CCACHE_DIR=$HOME/.ccache
|
||||||
|
- BASE_OUTDIR=$TRAVIS_BUILD_DIR/out
|
||||||
|
- SDK_URL=https://bitcoincore.org/depends-sources/sdks
|
||||||
|
- PYTHON_DEBUG=1
|
||||||
|
- WINEDEBUG=fixme-all
|
||||||
|
- DOCKER_PACKAGES="build-essential libtool cmake autotools-dev automake pkg-config bsdmainutils curl git ca-certificates ccache"
|
||||||
|
matrix:
|
||||||
|
# ARM v7
|
||||||
|
- HOST=arm-linux-gnueabihf PACKAGES="g++-arm-linux-gnueabihf"
|
||||||
|
# ARM v8
|
||||||
|
- HOST=aarch64-linux-gnu PACKAGES="g++-aarch64-linux-gnu"
|
||||||
|
# i686 Linux
|
||||||
|
- HOST=i686-pc-linux-gnu PACKAGES="cmake g++-multilib bc python3-zmq" RUN_TESTS=true
|
||||||
|
# Win64
|
||||||
|
- HOST=x86_64-w64-mingw32 PACKAGES="cmake python3 nsis g++-mingw-w64-x86-64 wine-binfmt wine64 bc" RUN_TESTS=true
|
||||||
|
# x86_64 Linux
|
||||||
|
- HOST=x86_64-unknown-linux-gnu PACKAGES="cmake python3-zmq protobuf-compiler libdbus-1-dev libharfbuzz-dev libprotobuf-dev" RUN_TESTS=true
|
||||||
|
# Cross-Mac
|
||||||
|
- HOST=x86_64-apple-darwin11 PACKAGES="cmake imagemagick libcap-dev librsvg2-bin libz-dev libbz2-dev libtiff-tools python-dev python3-setuptools-git" OSX_SDK=10.11
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- export PATH=$(echo $PATH | tr ':' "\n" | sed '/\/opt\/python/d' | tr "\n" ":" | sed "s|::|:|g")
|
||||||
|
install:
|
||||||
|
- env | grep -E '^(CCACHE_|WINEDEBUG|DISPLAY|BOOST_TEST_RANDOM|CONFIG_SHELL)' | tee /tmp/env
|
||||||
|
- if [[ $HOST = *-mingw32 ]]; then DOCKER_ADMIN="--cap-add SYS_ADMIN"; fi
|
||||||
|
- DOCKER_ID=$(docker run $DOCKER_ADMIN -idt --mount type=bind,src=$TRAVIS_BUILD_DIR,dst=$TRAVIS_BUILD_DIR --mount type=bind,src=$CCACHE_DIR,dst=$CCACHE_DIR -w $TRAVIS_BUILD_DIR --env-file /tmp/env ubuntu:18.04)
|
||||||
|
- DOCKER_EXEC="docker exec $DOCKER_ID"
|
||||||
|
- if [ -n "$DPKG_ADD_ARCH" ]; then $DOCKER_EXEC dpkg --add-architecture "$DPKG_ADD_ARCH" ; fi
|
||||||
|
- travis_retry $DOCKER_EXEC apt-get update
|
||||||
|
- travis_retry $DOCKER_EXEC apt-get install --no-install-recommends --no-upgrade -qq $PACKAGES $DOCKER_PACKAGES
|
||||||
|
before_script:
|
||||||
|
- mkdir -p contrib/depends/SDKs contrib/depends/sdk-sources
|
||||||
|
- if [ -n "$OSX_SDK" -a ! -f contrib/depends/sdk-sources/MacOSX${OSX_SDK}.sdk.tar.gz ]; then curl --location --fail $SDK_URL/MacOSX${OSX_SDK}.sdk.tar.gz -o contrib/depends/sdk-sources/MacOSX${OSX_SDK}.sdk.tar.gz; fi
|
||||||
|
- if [ -n "$OSX_SDK" -a -f contrib/depends/sdk-sources/MacOSX${OSX_SDK}.sdk.tar.gz ]; then tar -C contrib/depends/SDKs -xf contrib/depends/sdk-sources/MacOSX${OSX_SDK}.sdk.tar.gz; fi
|
||||||
|
- if [[ $HOST = *-mingw32 ]]; then $DOCKER_EXEC bash -c "update-alternatives --set $HOST-g++ \$(which $HOST-g++-posix)"; fi
|
||||||
|
- if [ -z "$NO_DEPENDS" ]; then $DOCKER_EXEC bash -c "CONFIG_SHELL= make $MAKEJOBS -C contrib/depends HOST=$HOST $DEP_OPTS"; fi
|
||||||
|
script:
|
||||||
|
- git submodule init && git submodule update
|
||||||
|
- export TRAVIS_COMMIT_LOG=`git log --format=fuller -1`
|
||||||
|
- OUTDIR=$BASE_OUTDIR/$TRAVIS_PULL_REQUEST/$TRAVIS_JOB_NUMBER-$HOST
|
||||||
|
- if [ -z "$NO_DEPENDS" ]; then $DOCKER_EXEC ccache --max-size=$CCACHE_SIZE; fi
|
||||||
|
- $DOCKER_EXEC bash -c "mkdir build && cd build && cmake -DCMAKE_TOOLCHAIN_FILE=$TRAVIS_BUILD_DIR/contrib/depends/$HOST/share/toolchain.cmake .. && make $MAKEJOBS"
|
||||||
|
- export LD_LIBRARY_PATH=$TRAVIS_BUILD_DIR/contrib/depends/$HOST/lib
|
||||||
|
after_script:
|
||||||
|
- echo $TRAVIS_COMMIT_RANGE
|
||||||
|
- echo $TRAVIS_COMMIT_LOG
|
||||||
@@ -153,6 +153,15 @@ else()
|
|||||||
message(STATUS "Building without build tag")
|
message(STATUS "Building without build tag")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Update and init submodules by default
|
||||||
|
if(NOT MANUAL_SUBMODULES)
|
||||||
|
find_package(Git)
|
||||||
|
if(GIT_FOUND)
|
||||||
|
message(STATUS "Initializing submodules")
|
||||||
|
execute_process(COMMAND git "submodule" "update" "--init" "--recursive" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
set(CMAKE_C_FLAGS_RELEASE "-DNDEBUG ${OPT_FLAGS_RELEASE}")
|
set(CMAKE_C_FLAGS_RELEASE "-DNDEBUG ${OPT_FLAGS_RELEASE}")
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${OPT_FLAGS_RELEASE}")
|
set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${OPT_FLAGS_RELEASE}")
|
||||||
|
|
||||||
@@ -236,7 +245,7 @@ endif()
|
|||||||
# elseif(CMAKE_SYSTEM_NAME MATCHES ".*BSDI.*")
|
# elseif(CMAKE_SYSTEM_NAME MATCHES ".*BSDI.*")
|
||||||
# set(BSDI TRUE)
|
# set(BSDI TRUE)
|
||||||
|
|
||||||
include_directories(external/easylogging++ src contrib/epee/include external)
|
include_directories(external/rapidjson/include external/easylogging++ src contrib/epee/include external)
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
include_directories(SYSTEM /usr/include/malloc)
|
include_directories(SYSTEM /usr/include/malloc)
|
||||||
@@ -357,6 +366,9 @@ add_definitions("-DBLOCKCHAIN_DB=${BLOCKCHAIN_DB}")
|
|||||||
if (APPLE)
|
if (APPLE)
|
||||||
set(DEFAULT_STACK_TRACE OFF)
|
set(DEFAULT_STACK_TRACE OFF)
|
||||||
set(LIBUNWIND_LIBRARIES "")
|
set(LIBUNWIND_LIBRARIES "")
|
||||||
|
elseif (DEPENDS AND NOT LINUX)
|
||||||
|
set(DEFAULT_STACK_TRACE OFF)
|
||||||
|
set(LIBUNWIND_LIBRARIES "")
|
||||||
elseif(CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT MINGW)
|
elseif(CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT MINGW)
|
||||||
set(DEFAULT_STACK_TRACE ON)
|
set(DEFAULT_STACK_TRACE ON)
|
||||||
set(STACK_TRACE_LIB "easylogging++") # for diag output only
|
set(STACK_TRACE_LIB "easylogging++") # for diag output only
|
||||||
@@ -395,6 +407,7 @@ if (CMAKE_SYSTEM_NAME MATCHES "(SunOS|Solaris)")
|
|||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (APPLE AND NOT IOS)
|
if (APPLE AND NOT IOS)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=x86-64 -fvisibility=default")
|
||||||
if (NOT OpenSSL_DIR)
|
if (NOT OpenSSL_DIR)
|
||||||
EXECUTE_PROCESS(COMMAND brew --prefix openssl
|
EXECUTE_PROCESS(COMMAND brew --prefix openssl
|
||||||
OUTPUT_VARIABLE OPENSSL_ROOT_DIR
|
OUTPUT_VARIABLE OPENSSL_ROOT_DIR
|
||||||
@@ -421,13 +434,16 @@ add_definition_if_function_found(strptime HAVE_STRPTIME)
|
|||||||
add_definitions(-DAUTO_INITIALIZE_EASYLOGGINGPP)
|
add_definitions(-DAUTO_INITIALIZE_EASYLOGGINGPP)
|
||||||
|
|
||||||
# Generate header for embedded translations
|
# Generate header for embedded translations
|
||||||
|
# Generate header for embedded translations, use target toolchain if depends, otherwise use the
|
||||||
|
# lrelease and lupdate binaries from the host
|
||||||
include(ExternalProject)
|
include(ExternalProject)
|
||||||
ExternalProject_Add(generate_translations_header
|
ExternalProject_Add(generate_translations_header
|
||||||
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/translations"
|
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/translations"
|
||||||
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/translations"
|
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/translations"
|
||||||
|
STAMP_DIR ${LRELEASE_PATH}
|
||||||
|
CMAKE_ARGS -DLRELEASE_PATH=${LRELEASE_PATH}
|
||||||
INSTALL_COMMAND cmake -E echo "")
|
INSTALL_COMMAND cmake -E echo "")
|
||||||
include_directories("${CMAKE_CURRENT_BINARY_DIR}/translations")
|
include_directories("${CMAKE_CURRENT_BINARY_DIR}/translations")
|
||||||
|
|
||||||
add_subdirectory(external)
|
add_subdirectory(external)
|
||||||
|
|
||||||
# Final setup for libunbound
|
# Final setup for libunbound
|
||||||
@@ -452,9 +468,12 @@ link_directories(${LIBUNWIND_LIBRARY_DIRS})
|
|||||||
|
|
||||||
# Final setup for libpcsc
|
# Final setup for libpcsc
|
||||||
if (PCSC_FOUND)
|
if (PCSC_FOUND)
|
||||||
|
message(STATUS "Using PCSC include dir at ${PCSC_INCLUDE_DIR}")
|
||||||
add_definitions(-DHAVE_PCSC)
|
add_definitions(-DHAVE_PCSC)
|
||||||
include_directories(${PCSC_INCLUDE_DIR})
|
include_directories(${PCSC_INCLUDE_DIR})
|
||||||
link_directories(${LIBPCSC_LIBRARY_DIRS})
|
link_directories(${LIBPCSC_LIBRARY_DIRS})
|
||||||
|
else (PCSC_FOUND)
|
||||||
|
message(STATUS "Could not find PCSC")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
@@ -469,7 +488,11 @@ if(MSVC)
|
|||||||
include_directories(SYSTEM src/platform/msc)
|
include_directories(SYSTEM src/platform/msc)
|
||||||
else()
|
else()
|
||||||
include(TestCXXAcceptsFlag)
|
include(TestCXXAcceptsFlag)
|
||||||
set(ARCH native CACHE STRING "CPU to build for: -march value or 'default' to not pass -march at all")
|
if (NOT ARM6)
|
||||||
|
if(NOT DEPENDS OR DEPENDS AND NOT ARM)
|
||||||
|
set(ARCH native CACHE STRING "CPU to build for: -march value or 'default' to not pass -march at all")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
message(STATUS "Building on ${CMAKE_SYSTEM_PROCESSOR} for ${ARCH}")
|
message(STATUS "Building on ${CMAKE_SYSTEM_PROCESSOR} for ${ARCH}")
|
||||||
if(ARCH STREQUAL "default")
|
if(ARCH STREQUAL "default")
|
||||||
set(ARCH_FLAG "")
|
set(ARCH_FLAG "")
|
||||||
@@ -480,6 +503,17 @@ else()
|
|||||||
set(ARCH_FLAG "-march=armv8")
|
set(ARCH_FLAG "-march=armv8")
|
||||||
else()
|
else()
|
||||||
set(ARCH_FLAG "-march=${ARCH}")
|
set(ARCH_FLAG "-march=${ARCH}")
|
||||||
|
if(ARCH STREQUAL "native")
|
||||||
|
check_c_compiler_flag(-march=native CC_SUPPORTS_MARCH_NATIVE)
|
||||||
|
if (NOT CC_SUPPORTS_MARCH_NATIVE)
|
||||||
|
check_c_compiler_flag(-mtune=native CC_SUPPORTS_MTUNE_NATIVE)
|
||||||
|
if (CC_SUPPORTS_MTUNE_NATIVE)
|
||||||
|
set(ARCH_FLAG "-mtune=${ARCH}")
|
||||||
|
else()
|
||||||
|
set(ARCH_FLAG "")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
set(WARNINGS "-Wall -Wextra -Wpointer-arith -Wundef -Wvla -Wwrite-strings -Wno-error=extra -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-unused-variable -Wno-error=unused-variable -Wno-error=undef -Wno-error=uninitialized")
|
set(WARNINGS "-Wall -Wextra -Wpointer-arith -Wundef -Wvla -Wwrite-strings -Wno-error=extra -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-unused-variable -Wno-error=unused-variable -Wno-error=undef -Wno-error=uninitialized")
|
||||||
if(NOT MINGW)
|
if(NOT MINGW)
|
||||||
@@ -545,10 +579,15 @@ else()
|
|||||||
add_cxx_flag_if_supported(-Wformat-security CXX_SECURITY_FLAGS)
|
add_cxx_flag_if_supported(-Wformat-security CXX_SECURITY_FLAGS)
|
||||||
|
|
||||||
# -fstack-protector
|
# -fstack-protector
|
||||||
add_c_flag_if_supported(-fstack-protector C_SECURITY_FLAGS)
|
if (NOT WIN32)
|
||||||
add_cxx_flag_if_supported(-fstack-protector CXX_SECURITY_FLAGS)
|
add_c_flag_if_supported(-fstack-protector C_SECURITY_FLAGS)
|
||||||
add_c_flag_if_supported(-fstack-protector-strong C_SECURITY_FLAGS)
|
add_cxx_flag_if_supported(-fstack-protector CXX_SECURITY_FLAGS)
|
||||||
add_cxx_flag_if_supported(-fstack-protector-strong CXX_SECURITY_FLAGS)
|
add_c_flag_if_supported(-fstack-protector-strong C_SECURITY_FLAGS)
|
||||||
|
add_cxx_flag_if_supported(-fstack-protector-strong CXX_SECURITY_FLAGS)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_c_flag_if_supported(-mmitigate-rop C_SECURITY_FLAGS)
|
||||||
|
add_cxx_flag_if_supported(-mmitigate-rop CXX_SECURITY_FLAGS)
|
||||||
|
|
||||||
# linker
|
# linker
|
||||||
if (NOT WIN32)
|
if (NOT WIN32)
|
||||||
@@ -648,6 +687,10 @@ else()
|
|||||||
message(STATUS "Selecting VFP for ARMv6")
|
message(STATUS "Selecting VFP for ARMv6")
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=vfp")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=vfp")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=vfp")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=vfp")
|
||||||
|
if(DEPENDS)
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -marm")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -marm")
|
||||||
|
endif()
|
||||||
endif(ARM6)
|
endif(ARM6)
|
||||||
|
|
||||||
if(ARM7)
|
if(ARM7)
|
||||||
@@ -702,7 +745,7 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGTEST_HAS_TR1_TUPLE=0")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -DGTEST_HAS_TR1_TUPLE=0")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(DEBUG_FLAGS "-g3")
|
set(DEBUG_FLAGS "-g3")
|
||||||
@@ -791,8 +834,13 @@ endif()
|
|||||||
|
|
||||||
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
|
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
|
||||||
if(MINGW)
|
if(MINGW)
|
||||||
set(EXTRA_LIBRARIES mswsock;ws2_32;iphlpapi)
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wa,-mbig-obj")
|
||||||
set(ICU_LIBRARIES ${Boost_LOCALE_LIBRARY} icuio icuin icuuc icudt icutu iconv)
|
set(EXTRA_LIBRARIES mswsock;ws2_32;iphlpapi;crypt32)
|
||||||
|
if(DEPENDS)
|
||||||
|
set(ICU_LIBRARIES ${Boost_LOCALE_LIBRARY} sicuio sicuin sicuuc sicudt sicutu iconv)
|
||||||
|
else()
|
||||||
|
set(ICU_LIBRARIES ${Boost_LOCALE_LIBRARY} icuio icuin icuuc icudt icutu iconv)
|
||||||
|
endif()
|
||||||
elseif(APPLE OR OPENBSD OR ANDROID)
|
elseif(APPLE OR OPENBSD OR ANDROID)
|
||||||
set(EXTRA_LIBRARIES "")
|
set(EXTRA_LIBRARIES "")
|
||||||
elseif(FREEBSD)
|
elseif(FREEBSD)
|
||||||
@@ -802,7 +850,7 @@ elseif(DRAGONFLY)
|
|||||||
set(EXTRA_LIBRARIES execinfo ${COMPAT})
|
set(EXTRA_LIBRARIES execinfo ${COMPAT})
|
||||||
elseif(CMAKE_SYSTEM_NAME MATCHES "(SunOS|Solaris)")
|
elseif(CMAKE_SYSTEM_NAME MATCHES "(SunOS|Solaris)")
|
||||||
set(EXTRA_LIBRARIES socket nsl resolv)
|
set(EXTRA_LIBRARIES socket nsl resolv)
|
||||||
elseif(NOT MSVC)
|
elseif(NOT MSVC AND NOT DEPENDS)
|
||||||
find_library(RT rt)
|
find_library(RT rt)
|
||||||
set(EXTRA_LIBRARIES ${RT})
|
set(EXTRA_LIBRARIES ${RT})
|
||||||
endif()
|
endif()
|
||||||
@@ -824,6 +872,7 @@ endif()
|
|||||||
|
|
||||||
if(ANDROID)
|
if(ANDROID)
|
||||||
set(ATOMIC libatomic.a)
|
set(ATOMIC libatomic.a)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=user-defined-warnings")
|
||||||
endif()
|
endif()
|
||||||
if(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND ARCH_WIDTH EQUAL "32" AND NOT IOS AND NOT FREEBSD)
|
if(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND ARCH_WIDTH EQUAL "32" AND NOT IOS AND NOT FREEBSD)
|
||||||
find_library(ATOMIC atomic)
|
find_library(ATOMIC atomic)
|
||||||
|
|||||||
75
Dockerfile
75
Dockerfile
@@ -3,7 +3,8 @@
|
|||||||
# builder stage
|
# builder stage
|
||||||
FROM ubuntu:16.04 as builder
|
FROM ubuntu:16.04 as builder
|
||||||
|
|
||||||
RUN apt-get update && \
|
RUN set -ex && \
|
||||||
|
apt-get update && \
|
||||||
apt-get --no-install-recommends --yes install \
|
apt-get --no-install-recommends --yes install \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
cmake \
|
cmake \
|
||||||
@@ -16,16 +17,31 @@ RUN apt-get update && \
|
|||||||
curl \
|
curl \
|
||||||
libtool-bin \
|
libtool-bin \
|
||||||
autoconf \
|
autoconf \
|
||||||
automake
|
automake \
|
||||||
|
bzip2
|
||||||
|
|
||||||
WORKDIR /usr/local
|
WORKDIR /usr/local
|
||||||
|
|
||||||
|
#Cmake
|
||||||
|
ARG CMAKE_VERSION=3.11.4
|
||||||
|
ARG CMAKE_VERSION_DOT=v3.11
|
||||||
|
ARG CMAKE_HASH=8f864e9f78917de3e1483e256270daabc4a321741592c5b36af028e72bff87f5
|
||||||
|
RUN set -ex \
|
||||||
|
&& curl -s -O https://cmake.org/files/${CMAKE_VERSION_DOT}/cmake-${CMAKE_VERSION}.tar.gz \
|
||||||
|
&& echo "${CMAKE_HASH} cmake-${CMAKE_VERSION}.tar.gz" | sha256sum -c \
|
||||||
|
&& tar -xzf cmake-${CMAKE_VERSION}.tar.gz \
|
||||||
|
&& cd cmake-${CMAKE_VERSION} \
|
||||||
|
&& ./configure \
|
||||||
|
&& make \
|
||||||
|
&& make install
|
||||||
|
|
||||||
## Boost
|
## Boost
|
||||||
ARG BOOST_VERSION=1_66_0
|
ARG BOOST_VERSION=1_67_0
|
||||||
ARG BOOST_VERSION_DOT=1.66.0
|
ARG BOOST_VERSION_DOT=1.67.0
|
||||||
ARG BOOST_HASH=5721818253e6a0989583192f96782c4a98eb6204965316df9f5ad75819225ca9
|
ARG BOOST_HASH=2684c972994ee57fc5632e03bf044746f6eb45d4920c343937a465fd67a5adba
|
||||||
RUN curl -s -L -o boost_${BOOST_VERSION}.tar.bz2 https://dl.bintray.com/boostorg/release/${BOOST_VERSION_DOT}/source/boost_${BOOST_VERSION}.tar.bz2 \
|
RUN set -ex \
|
||||||
&& echo "${BOOST_HASH} boost_${BOOST_VERSION}.tar.bz2" | sha256sum -c \
|
&& curl -s -L -o boost_${BOOST_VERSION}.tar.bz2 https://dl.bintray.com/boostorg/release/${BOOST_VERSION_DOT}/source/boost_${BOOST_VERSION}.tar.bz2 \
|
||||||
|
&& echo "${BOOST_HASH} boost_${BOOST_VERSION}.tar.bz2" | sha256sum -c \
|
||||||
&& tar -xvf boost_${BOOST_VERSION}.tar.bz2 \
|
&& tar -xvf boost_${BOOST_VERSION}.tar.bz2 \
|
||||||
&& cd boost_${BOOST_VERSION} \
|
&& cd boost_${BOOST_VERSION} \
|
||||||
&& ./bootstrap.sh \
|
&& ./bootstrap.sh \
|
||||||
@@ -33,21 +49,24 @@ RUN curl -s -L -o boost_${BOOST_VERSION}.tar.bz2 https://dl.bintray.com/boostor
|
|||||||
ENV BOOST_ROOT /usr/local/boost_${BOOST_VERSION}
|
ENV BOOST_ROOT /usr/local/boost_${BOOST_VERSION}
|
||||||
|
|
||||||
# OpenSSL
|
# OpenSSL
|
||||||
ARG OPENSSL_VERSION=1.0.2n
|
ARG OPENSSL_VERSION=1.1.0h
|
||||||
ARG OPENSSL_HASH=370babb75f278c39e0c50e8c4e7493bc0f18db6867478341a832a982fd15a8fe
|
ARG OPENSSL_HASH=5835626cde9e99656585fc7aaa2302a73a7e1340bf8c14fd635a62c66802a517
|
||||||
RUN curl -s -O https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz \
|
RUN set -ex \
|
||||||
&& echo "${OPENSSL_HASH} openssl-${OPENSSL_VERSION}.tar.gz" | sha256sum -c \
|
&& curl -s -O https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz \
|
||||||
|
&& echo "${OPENSSL_HASH} openssl-${OPENSSL_VERSION}.tar.gz" | sha256sum -c \
|
||||||
&& tar -xzf openssl-${OPENSSL_VERSION}.tar.gz \
|
&& tar -xzf openssl-${OPENSSL_VERSION}.tar.gz \
|
||||||
&& cd openssl-${OPENSSL_VERSION} \
|
&& cd openssl-${OPENSSL_VERSION} \
|
||||||
&& ./Configure linux-x86_64 no-shared --static -fPIC \
|
&& ./Configure linux-x86_64 no-shared --static -fPIC \
|
||||||
&& make build_crypto build_ssl \
|
&& make build_generated \
|
||||||
|
&& make libcrypto.a \
|
||||||
&& make install
|
&& make install
|
||||||
ENV OPENSSL_ROOT_DIR=/usr/local/openssl-${OPENSSL_VERSION}
|
ENV OPENSSL_ROOT_DIR=/usr/local/openssl-${OPENSSL_VERSION}
|
||||||
|
|
||||||
# ZMQ
|
# ZMQ
|
||||||
ARG ZMQ_VERSION=v4.2.3
|
ARG ZMQ_VERSION=v4.2.5
|
||||||
ARG ZMQ_HASH=3226b8ebddd9c6c738ba42986822c26418a49afb
|
ARG ZMQ_HASH=d062edd8c142384792955796329baf1e5a3377cd
|
||||||
RUN git clone https://github.com/zeromq/libzmq.git -b ${ZMQ_VERSION} \
|
RUN set -ex \
|
||||||
|
&& git clone https://github.com/zeromq/libzmq.git -b ${ZMQ_VERSION} \
|
||||||
&& cd libzmq \
|
&& cd libzmq \
|
||||||
&& test `git rev-parse HEAD` = ${ZMQ_HASH} || exit 1 \
|
&& test `git rev-parse HEAD` = ${ZMQ_HASH} || exit 1 \
|
||||||
&& ./autogen.sh \
|
&& ./autogen.sh \
|
||||||
@@ -57,8 +76,10 @@ RUN git clone https://github.com/zeromq/libzmq.git -b ${ZMQ_VERSION} \
|
|||||||
&& ldconfig
|
&& ldconfig
|
||||||
|
|
||||||
# zmq.hpp
|
# zmq.hpp
|
||||||
|
ARG CPPZMQ_VERSION=v4.2.3
|
||||||
ARG CPPZMQ_HASH=6aa3ab686e916cb0e62df7fa7d12e0b13ae9fae6
|
ARG CPPZMQ_HASH=6aa3ab686e916cb0e62df7fa7d12e0b13ae9fae6
|
||||||
RUN git clone https://github.com/zeromq/cppzmq.git -b ${ZMQ_VERSION} \
|
RUN set -ex \
|
||||||
|
&& git clone https://github.com/zeromq/cppzmq.git -b ${CPPZMQ_VERSION} \
|
||||||
&& cd cppzmq \
|
&& cd cppzmq \
|
||||||
&& test `git rev-parse HEAD` = ${CPPZMQ_HASH} || exit 1 \
|
&& test `git rev-parse HEAD` = ${CPPZMQ_HASH} || exit 1 \
|
||||||
&& mv *.hpp /usr/local/include
|
&& mv *.hpp /usr/local/include
|
||||||
@@ -66,8 +87,9 @@ RUN git clone https://github.com/zeromq/cppzmq.git -b ${ZMQ_VERSION} \
|
|||||||
# Readline
|
# Readline
|
||||||
ARG READLINE_VERSION=7.0
|
ARG READLINE_VERSION=7.0
|
||||||
ARG READLINE_HASH=750d437185286f40a369e1e4f4764eda932b9459b5ec9a731628393dd3d32334
|
ARG READLINE_HASH=750d437185286f40a369e1e4f4764eda932b9459b5ec9a731628393dd3d32334
|
||||||
RUN curl -s -O https://ftp.gnu.org/gnu/readline/readline-${READLINE_VERSION}.tar.gz \
|
RUN set -ex \
|
||||||
&& echo "${READLINE_HASH} readline-${READLINE_VERSION}.tar.gz" | sha256sum -c \
|
&& curl -s -O https://ftp.gnu.org/gnu/readline/readline-${READLINE_VERSION}.tar.gz \
|
||||||
|
&& echo "${READLINE_HASH} readline-${READLINE_VERSION}.tar.gz" | sha256sum -c \
|
||||||
&& tar -xzf readline-${READLINE_VERSION}.tar.gz \
|
&& tar -xzf readline-${READLINE_VERSION}.tar.gz \
|
||||||
&& cd readline-${READLINE_VERSION} \
|
&& cd readline-${READLINE_VERSION} \
|
||||||
&& CFLAGS="-fPIC" CXXFLAGS="-fPIC" ./configure \
|
&& CFLAGS="-fPIC" CXXFLAGS="-fPIC" ./configure \
|
||||||
@@ -77,7 +99,8 @@ RUN curl -s -O https://ftp.gnu.org/gnu/readline/readline-${READLINE_VERSION}.tar
|
|||||||
# Sodium
|
# Sodium
|
||||||
ARG SODIUM_VERSION=1.0.16
|
ARG SODIUM_VERSION=1.0.16
|
||||||
ARG SODIUM_HASH=675149b9b8b66ff44152553fb3ebf9858128363d
|
ARG SODIUM_HASH=675149b9b8b66ff44152553fb3ebf9858128363d
|
||||||
RUN git clone https://github.com/jedisct1/libsodium.git -b ${SODIUM_VERSION} \
|
RUN set -ex \
|
||||||
|
&& git clone https://github.com/jedisct1/libsodium.git -b ${SODIUM_VERSION} \
|
||||||
&& cd libsodium \
|
&& cd libsodium \
|
||||||
&& test `git rev-parse HEAD` = ${SODIUM_HASH} || exit 1 \
|
&& test `git rev-parse HEAD` = ${SODIUM_HASH} || exit 1 \
|
||||||
&& ./autogen.sh \
|
&& ./autogen.sh \
|
||||||
@@ -90,13 +113,18 @@ WORKDIR /src
|
|||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
ARG NPROC
|
ARG NPROC
|
||||||
RUN rm -rf build && \
|
RUN set -ex && \
|
||||||
if [ -z "$NPROC" ];then make -j$(nproc) release-static;else make -j$NPROC release-static;fi
|
rm -rf build && \
|
||||||
|
if [ -z "$NPROC" ] ; \
|
||||||
|
then make -j$(nproc) release-static ; \
|
||||||
|
else make -j$NPROC release-static ; \
|
||||||
|
fi
|
||||||
|
|
||||||
# runtime stage
|
# runtime stage
|
||||||
FROM ubuntu:16.04
|
FROM ubuntu:16.04
|
||||||
|
|
||||||
RUN apt-get update && \
|
RUN set -ex && \
|
||||||
|
apt-get update && \
|
||||||
apt-get --no-install-recommends --yes install ca-certificates && \
|
apt-get --no-install-recommends --yes install ca-certificates && \
|
||||||
apt-get clean && \
|
apt-get clean && \
|
||||||
rm -rf /var/lib/apt
|
rm -rf /var/lib/apt
|
||||||
@@ -114,4 +142,5 @@ VOLUME /wallet
|
|||||||
EXPOSE 18080
|
EXPOSE 18080
|
||||||
EXPOSE 18081
|
EXPOSE 18081
|
||||||
|
|
||||||
ENTRYPOINT ["monerod", "--p2p-bind-ip=0.0.0.0", "--p2p-bind-port=18080", "--rpc-bind-ip=0.0.0.0", "--rpc-bind-port=18081", "--non-interactive", "--confirm-external-bind"]
|
ENTRYPOINT ["monerod", "--p2p-bind-ip=0.0.0.0", "--p2p-bind-port=18080", "--rpc-bind-ip=0.0.0.0", "--rpc-bind-port=18081", "--non-interactive", "--confirm-external-bind"]
|
||||||
|
|
||||||
|
|||||||
11
Makefile
11
Makefile
@@ -26,6 +26,8 @@
|
|||||||
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||||
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
ANDROID_STANDALONE_TOOLCHAIN_PATH ?= /usr/local/toolchain
|
||||||
|
|
||||||
all: release-all
|
all: release-all
|
||||||
|
|
||||||
cmake-debug:
|
cmake-debug:
|
||||||
@@ -62,7 +64,7 @@ release-test:
|
|||||||
|
|
||||||
release-all:
|
release-all:
|
||||||
mkdir -p build/release
|
mkdir -p build/release
|
||||||
cd build/release && cmake -D BUILD_TESTS=ON -D CMAKE_BUILD_TYPE=release ../.. && $(MAKE)
|
cd build/release && cmake -D BUILD_TESTS=OFF -D CMAKE_BUILD_TYPE=release ../.. && $(MAKE)
|
||||||
|
|
||||||
release-static:
|
release-static:
|
||||||
mkdir -p build/release
|
mkdir -p build/release
|
||||||
@@ -83,8 +85,9 @@ release-static-linux-armv7:
|
|||||||
cd build/release && cmake -D BUILD_TESTS=OFF -D ARCH="armv7-a" -D STATIC=ON -D BUILD_64=OFF -D CMAKE_BUILD_TYPE=release -D BUILD_TAG="linux-armv7" ../.. && $(MAKE)
|
cd build/release && cmake -D BUILD_TESTS=OFF -D ARCH="armv7-a" -D STATIC=ON -D BUILD_64=OFF -D CMAKE_BUILD_TYPE=release -D BUILD_TAG="linux-armv7" ../.. && $(MAKE)
|
||||||
|
|
||||||
release-static-android:
|
release-static-android:
|
||||||
mkdir -p build/release
|
mkdir -p build/release/translations
|
||||||
cd build/release && cmake -D BUILD_TESTS=OFF -D ARCH="armv7-a" -D STATIC=ON -D BUILD_64=OFF -D CMAKE_BUILD_TYPE=release -D ANDROID=true -D INSTALL_VENDORED_LIBUNBOUND=ON -D BUILD_TAG="android" ../.. && $(MAKE)
|
cd build/release/translations && cmake ../../../translations && $(MAKE)
|
||||||
|
cd build/release && CC=arm-linux-androideabi-clang CXX=arm-linux-androideabi-clang++ cmake -D BUILD_TESTS=OFF -D ARCH="armv7-a" -D STATIC=ON -D BUILD_64=OFF -D CMAKE_BUILD_TYPE=release -D ANDROID=true -D INSTALL_VENDORED_LIBUNBOUND=ON -D BUILD_TAG="android" -D CMAKE_SYSTEM_NAME="Android" -D CMAKE_ANDROID_STANDALONE_TOOLCHAIN="${ANDROID_STANDALONE_TOOLCHAIN_PATH}" -D CMAKE_ANDROID_ARM_MODE=ON -D CMAKE_ANDROID_ARCH_ABI="armeabi-v7a" ../.. && $(MAKE)
|
||||||
|
|
||||||
release-static-linux-armv8:
|
release-static-linux-armv8:
|
||||||
mkdir -p build/release
|
mkdir -p build/release
|
||||||
@@ -92,7 +95,7 @@ release-static-linux-armv8:
|
|||||||
|
|
||||||
release-static-linux-x86_64:
|
release-static-linux-x86_64:
|
||||||
mkdir -p build/release
|
mkdir -p build/release
|
||||||
cd build/release && cmake -D STATIC=ON -D ARCH="x86-64" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=release -D BUILD_TAG="linux-x64" ../.. && $(MAKE)
|
cd build/release && cmake -D BUILD_TESTS=OFF STATIC=ON -D ARCH="x86-64" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=release -D BUILD_TAG="linux-x64" ../.. && $(MAKE)
|
||||||
|
|
||||||
release-static-freebsd-x86_64:
|
release-static-freebsd-x86_64:
|
||||||
mkdir -p build/release
|
mkdir -p build/release
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
Monero daemon internationalization
|
Wownero daemon internationalization
|
||||||
==================================
|
==================================
|
||||||
|
|
||||||
The Monero command line tools can be translated in various languages. If you wish to contribute and need help/support, contact the [Monero Localization Workgroup on Taiga](https://taiga.getmonero.org/project/erciccione-monero-localization/) or come chat on `#monero-translations` (Freenode/IRC, riot/matrix, MatterMost)
|
The Wownero command line tools can be translated in various languages. If you wish to contribute and need help/support, come chat on `#wownero` (Freenode/IRC)
|
||||||
|
|
||||||
In order to use the same translation workflow as the [Monero Core GUI](https://github.com/monero-project/monero-core), they use Qt Linguist translation files. However, to avoid the dependencies on Qt this normally implies, they use a custom loader to read those files at runtime.
|
In order to use the same translation workflow as the [Wownero GUI](https://github.com/wownero/wownero-gui), they use Qt Linguist translation files. However, to avoid the dependencies on Qt this normally implies, they use a custom loader to read those files at runtime.
|
||||||
|
|
||||||
### Tools for translators
|
### Tools for translators
|
||||||
|
|
||||||
@@ -19,11 +19,11 @@ To update ts files after changing source code:
|
|||||||
|
|
||||||
To add a new language, eg Spanish (ISO code es):
|
To add a new language, eg Spanish (ISO code es):
|
||||||
|
|
||||||
cp translations/monero.ts translations/monero_es.ts
|
cp translations/wownero.ts translations/wownero_es.ts
|
||||||
|
|
||||||
To edit translations for Spanish:
|
To edit translations for Spanish:
|
||||||
|
|
||||||
linguist translations/monero_es.ts
|
linguist translations/wownero_es.ts
|
||||||
|
|
||||||
To build translations after modifying them:
|
To build translations after modifying them:
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ To build translations after modifying them:
|
|||||||
|
|
||||||
To test a translation:
|
To test a translation:
|
||||||
|
|
||||||
LANG=es ./build/release/bin/monero-wallet-cli
|
LANG=es ./build/release/bin/wownero-wallet-cli
|
||||||
|
|
||||||
To add new translatable strings in the source code:
|
To add new translatable strings in the source code:
|
||||||
|
|
||||||
|
|||||||
305
README.md
305
README.md
@@ -1,82 +1,81 @@
|
|||||||
# Monero
|
# ~~Mo~~Wownero
|
||||||
|
|
||||||
Copyright (c) 2014-2018 The Monero Project.
|
Copyright (c) 2014-2018 The Monero Project.
|
||||||
Portions Copyright (c) 2012-2013 The Cryptonote developers.
|
Portions Copyright (c) 2012-2013 The Cryptonote developers.
|
||||||
|
|
||||||
## Development resources
|
## Resources
|
||||||
|
|
||||||
- Web: [getmonero.org](https://getmonero.org)
|
- Web: [wownero.org](http://wownero.org)
|
||||||
- Forum: [forum.getmonero.org](https://forum.getmonero.org)
|
- Twitter: [@w0wn3r0](https://twitter.com/w0wn3r0)
|
||||||
- Mail: [dev@getmonero.org](mailto:dev@getmonero.org)
|
- Discord: [discord.gg/sQt74ep](https://discord.gg/sQt74ep)
|
||||||
- GitHub: [https://github.com/monero-project/monero](https://github.com/monero-project/monero)
|
- Reddit: [/r/wownero](https://www.reddit.com/r/wownero)
|
||||||
- IRC: [#monero-dev on Freenode](http://webchat.freenode.net/?randomnick=1&channels=%23monero-dev&prompt=1&uio=d4)
|
- Mail: [wownero@protonmail.com](mailto:wownero@protonmail.com)
|
||||||
|
- GitHub: [https://github.com/wownero/wownero](https://github.com/wownero/wownero)
|
||||||
|
- IRC: [#wownero on Freenode](https://kiwiirc.com/client/irc.freenode.net/?nick=suchchatter|?#wownero)
|
||||||
|
- Bitmessage Chan: wownero (`BM-2cSzWtrj2pzLva9GF1Jp2TYsnLjrnJpvba`)
|
||||||
|
|
||||||
## Vulnerability response
|
## Vulnerability response
|
||||||
|
|
||||||
- Our [Vulnerability Response Process](https://github.com/monero-project/meta/blob/master/VULNERABILITY_RESPONSE_PROCESS.md) encourages responsible disclosure
|
- TODO
|
||||||
- We are also available via [HackerOne](https://hackerone.com/monero)
|
|
||||||
|
|
||||||
|
## Announcements
|
||||||
|
|
||||||
|
You can subscribe to an [announcement listserv](https://lists.getmonero.org) to get critical announcements from the Monero core team. The announcement list can be very helpful for knowing when software updates are needed.
|
||||||
|
|
||||||
## Build
|
## Build
|
||||||
|
|
||||||
| Operating System | Processor | Status |
|
| Operating System | Processor | Status |
|
||||||
| --------------------- | -------- |--------|
|
| --------------------- | -------- |--------|
|
||||||
| Ubuntu 16.04 | i686 | [](https://build.getmonero.org/builders/monero-static-ubuntu-i686)
|
| Ubuntu 16.04 | i686 | TODO
|
||||||
| Ubuntu 16.04 | amd64 | [](https://build.getmonero.org/builders/monero-static-ubuntu-amd64)
|
| Ubuntu 16.04 | amd64 | TODO
|
||||||
| Ubuntu 16.04 | armv7 | [](https://build.getmonero.org/builders/monero-static-ubuntu-arm7)
|
| Ubuntu 16.04 | armv7 | TODO
|
||||||
| Debian Stable | armv8 | [](https://build.getmonero.org/builders/monero-static-debian-armv8)
|
| Debian Stable | armv8 | TODO
|
||||||
| OSX 10.10 | amd64 | [](https://build.getmonero.org/builders/monero-static-osx-10.10)
|
| OSX 10.10 | amd64 | TODO
|
||||||
| OSX 10.11 | amd64 | [](https://build.getmonero.org/builders/monero-static-osx-10.11)
|
| OSX 10.11 | amd64 | TODO
|
||||||
| OSX 10.12 | amd64 | [](https://build.getmonero.org/builders/monero-static-osx-10.12)
|
| OSX 10.12 | amd64 | TODO
|
||||||
| FreeBSD 11 | amd64 | [](https://build.getmonero.org/builders/monero-static-freebsd64)
|
| FreeBSD 11 | amd64 | TODO
|
||||||
| DragonFly BSD 4.6 | amd64 | [](https://build.getmonero.org/builders/monero-static-dragonflybsd-amd64)
|
| DragonFly BSD 4.6 | amd64 | TODO
|
||||||
| Windows (MSYS2/MinGW) | i686 | [](https://build.getmonero.org/builders/monero-static-win32)
|
| Windows (MSYS2/MinGW) | i686 | TODO
|
||||||
| Windows (MSYS2/MinGW) | amd64 | [](https://build.getmonero.org/builders/monero-static-win64)
|
| Windows (MSYS2/MinGW) | amd64 | TODO
|
||||||
|
|
||||||
## Coverage
|
## Coverage
|
||||||
|
|
||||||
| Type | Status |
|
| Type | Status |
|
||||||
|-----------|--------|
|
|-----------|--------|
|
||||||
| Coverity | [](https://scan.coverity.com/projects/9657/)
|
|
||||||
| Coveralls | [](https://coveralls.io/github/monero-project/monero?branch=master)
|
|
||||||
| License | [](https://opensource.org/licenses/BSD-3-Clause)
|
| License | [](https://opensource.org/licenses/BSD-3-Clause)
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
||||||
Monero is a private, secure, untraceable, decentralised digital currency. You are your bank, you control your funds, and nobody can trace your transfers unless you allow them to do so.
|
Wownero is a fork of the private cryptocurrenty Monero with two major changes: A capped emmision that disallows infinite coin creation 10x the coin for 10x the W0W; Wownero is a fairly launched coin with no premine. It's not a fork of another blockchain. With its own genesis block there is no degradation of privacy due to ring signatures using different participants for the same tx outputs on opposing forks.
|
||||||
|
|
||||||
**Privacy:** Monero uses a cryptographically sound system to allow you to send and receive funds without your transactions being easily revealed on the blockchain (the ledger of transactions that everyone has). This ensures that your purchases, receipts, and all transfers remain absolutely private by default.
|
**Privacy:** Wownero uses a cryptographically sound system to allow you to send and receive funds without your transactions being easily revealed on the blockchain (the ledger of transactions that everyone has). This ensures that your purchases, receipts, and all transfers remain absolutely private by default.
|
||||||
|
|
||||||
**Security:** Using the power of a distributed peer-to-peer consensus network, every transaction on the network is cryptographically secured. Individual wallets have a 25 word mnemonic seed that is only displayed once, and can be written down to backup the wallet. Wallet files are encrypted with a passphrase to ensure they are useless if stolen.
|
**Security:** Using the power of a distributed peer-to-peer consensus network, every transaction on the network is cryptographically secured. Individual wallets have a 25 word mnemonic seed that is only displayed once, and can be written down to backup the wallet. Wallet files are encrypted with a passphrase to ensure they are useless if stolen.
|
||||||
|
|
||||||
**Untraceability:** By taking advantage of ring signatures, a special property of a certain type of cryptography, Monero is able to ensure that transactions are not only untraceable, but have an optional measure of ambiguity that ensures that transactions cannot easily be tied back to an individual user or computer.
|
**Untraceability:** By taking advantage of ring signatures, a special property of a certain type of cryptography, Wownero is able to ensure that transactions are not only untraceable, but have an optional measure of ambiguity that ensures that transactions cannot easily be tied back to an individual user or computer.
|
||||||
|
|
||||||
## About this project
|
## About this project
|
||||||
|
|
||||||
This is the core implementation of Monero. It is open source and completely free to use without restrictions, except for those specified in the license agreement below. There are no restrictions on anyone creating an alternative implementation of Monero that uses the protocol and network in a compatible manner.
|
This is the core implementation of Wownero. It is open source and completely free to use without restrictions, except for those specified in the license agreement below. There are no restrictions on anyone creating an alternative implementation of Wownero that uses the protocol and network in a compatible manner.
|
||||||
|
|
||||||
As with many development projects, the repository on Github is considered to be the "staging" area for the latest changes. Before changes are merged into that branch on the main repository, they are tested by individual developers in their own branches, submitted as a pull request, and then subsequently tested by contributors who focus on testing and code reviews. That having been said, the repository should be carefully considered before using it in a production environment, unless there is a patch in the repository for a particular show-stopping issue you are experiencing. It is generally a better idea to use a tagged release for stability.
|
As with many development projects, the repository on Github is considered to be the "staging" area for the latest changes. Before changes are merged into that branch on the main repository, they are tested by individual developers in their own branches, submitted as a pull request, and then subsequently tested by contributors who focus on testing and code reviews. That having been said, the repository should be carefully considered before using it in a production environment, unless there is a patch in the repository for a particular show-stopping issue you are experiencing. It is generally a better idea to use a tagged release for stability.
|
||||||
|
|
||||||
**Anyone is welcome to contribute to Monero's codebase!** If you have a fix or code change, feel free to submit it as a pull request directly to the "master" branch. In cases where the change is relatively small or does not affect other parts of the codebase it may be merged in immediately by any one of the collaborators. On the other hand, if the change is particularly large or complex, it is expected that it will be discussed at length either well in advance of the pull request being submitted, or even directly on the pull request.
|
**Anyone is welcome to contribute to Wownero's codebase!** If you have a fix or code change, feel free to submit it as a pull request directly to the "master" branch. In cases where the change is relatively small or does not affect other parts of the codebase it may be merged in immediately by any one of the collaborators. On the other hand, if the change is particularly large or complex, it is expected that it will be discussed at length either well in advance of the pull request being submitted, or even directly on the pull request. All pull requests will be considered safe until the US dollar valuation of 1 Wownero equals $1000. After this valuation has been reached, more reseach will be needed to introduce experimental cryptography and/or code into the codebase.
|
||||||
|
|
||||||
## Supporting the project
|
## Supporting the project
|
||||||
|
|
||||||
Monero is a 100% community-sponsored endeavor. If you want to join our efforts, the easiest thing you can do is support the project financially. Both Monero and Bitcoin donations can be made to **donate.getmonero.org** if using a client that supports the [OpenAlias](https://openalias.org) standard. Alternatively you can send XMR to the Monero donation address via the `donate` command (type `help` in the command-line wallet for details).
|
Wownero is a 100% community-sponsored endeavor. If you want to join our efforts, the easiest thing you can do is support the project financially.
|
||||||
|
|
||||||
|
The Wownero donation address (mostly reserved for hookers and blow) is: `Wo3MWeKwtA918DU4c69hVSNgejdWFCRCuWjShRY66mJkU2Hv58eygJWDJS1MNa2Ge5M1WjUkGHuLqHkweDxwZZU42d16v94mP`
|
||||||
|
|
||||||
The Monero donation address is: `44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A` (viewkey: `f359631075708155cc3d92a32b75a7d02a5dcf27756707b47a2b31b21c389501`)
|
The Monero donation address is: `44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A` (viewkey: `f359631075708155cc3d92a32b75a7d02a5dcf27756707b47a2b31b21c389501`)
|
||||||
|
|
||||||
The Bitcoin donation address is: `1KTexdemPdxSBcG55heUuTjDRYqbC5ZL8H`
|
The Monero Bitcoin donation address is: `1KTexdemPdxSBcG55heUuTjDRYqbC5ZL8H`
|
||||||
|
|
||||||
Core development funding and/or some supporting services are also graciously provided by sponsors:
|
Core development funding and/or some supporting services are also graciously provided by sponsors:
|
||||||
|
|
||||||
[<img width="80" src="https://static.getmonero.org/images/sponsors/mymonero.png"/>](https://mymonero.com)
|
<img width="100" src="https://botw-pd.s3.amazonaws.com/styles/logo-thumbnail/s3/0024/1083/brand.gif"/><img width="100" src="https://blogvecindad.com/imagenes/2007/02/brawndo.jpg"/><img width="100" src="https://www.subscribepro.com/wp-content/uploads/2016/04/logo-depend-250x130.png"/>
|
||||||
[<img width="150" src="https://static.getmonero.org/images/sponsors/kitware.png?1"/>](http://kitware.com)
|
|
||||||
[<img width="100" src="https://static.getmonero.org/images/sponsors/dome9.png"/>](http://dome9.com)
|
|
||||||
[<img width="150" src="https://static.getmonero.org/images/sponsors/araxis.png"/>](http://araxis.com)
|
|
||||||
[<img width="150" src="https://static.getmonero.org/images/sponsors/jetbrains.png"/>](http://www.jetbrains.com/)
|
|
||||||
[<img width="150" src="https://static.getmonero.org/images/sponsors/navicat.png"/>](http://www.navicat.com/)
|
|
||||||
[<img width="150" src="https://static.getmonero.org/images/sponsors/symas.png"/>](http://www.symas.com/)
|
|
||||||
|
|
||||||
There are also several mining pools that kindly donate a portion of their fees, [a list of them can be found on our Bitcointalk post](https://bitcointalk.org/index.php?topic=583449.0).
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
@@ -88,70 +87,23 @@ If you want to help out, see [CONTRIBUTING](CONTRIBUTING.md) for a set of guidel
|
|||||||
|
|
||||||
## Scheduled software upgrades
|
## Scheduled software upgrades
|
||||||
|
|
||||||
Monero uses a fixed-schedule software upgrade (hard fork) mechanism to implement new features. This means that users of Monero (end users and service providers) should run current versions and upgrade their software on a regular schedule. Software upgrades occur during the months of April and October. The required software for these upgrades will be available prior to the scheduled date. Please check the repository prior to this date for the proper Monero software version. Below is the historical schedule and the projected schedule for the next upgrade.
|
Wownero uses a fixed-schedule mandatory software upgrade (hard fork) mechanism to implement new features. This means that users of Wownero (end users and service providers) need to run current versions and upgrade their software on a regular schedule.The required software for these upgrades will be available prior to the scheduled date. Please check the repository prior to this date for the proper Wownero software version. Below is the historical schedule and the projected schedule for the next upgrade.
|
||||||
Dates are provided in the format YYYY-MM-DD.
|
Dates are provided in the format YYYY-MM-DD.
|
||||||
|
|
||||||
|
|
||||||
| Software upgrade block height | Date | Fork version | Minimum Monero version | Recommended Monero version | Details |
|
| Software upgrade block height | Date | Fork version | Minimum Wownero version | Recommended Wownero version | Details |
|
||||||
| ------------------------------ | -----------| ----------------- | ---------------------- | -------------------------- | ---------------------------------------------------------------------------------- |
|
| ------------------------------ | -----------| ----------------- | ---------------------- | -------------------------- | ---------------------------------------------------------------------------------- |
|
||||||
| 1009827 | 2016-03-22 | v2 | v0.9.4 | v0.9.4 | Allow only >= ringsize 3, blocktime = 120 seconds, fee-free blocksize 60 kb |
|
| 1 | 2018-04-01 | v7 | v0.1.0.0 | v0.1.0.0 | Cryptonight variant 1, ringsize >= 8, sorted inputs
|
||||||
| 1141317 | 2016-09-21 | v3 | v0.9.4 | v0.10.0 | Splits coinbase into denominations |
|
| 6969 | 2018-04-24 | v8 | v0.2.0.0 | v0.2.0.0 | Bulletproofs, LWMA difficulty algorithm, ringsize >= 10, reduce unlock to 4
|
||||||
| 1220516 | 2017-01-05 | v4 | v0.10.1 | v0.10.2.1 | Allow normal and RingCT transactions |
|
| 53666 | 2018-10-06 | v9 | v0.3.0.0 | v0.3.1.3 | Cryptonight variant 2, LWMA v2, ringsize = 22, MMS
|
||||||
| 1288616 | 2017-04-15 | v5 | v0.10.3.0 | v0.10.3.1 | Adjusted minimum blocksize and fee algorithm |
|
|
||||||
| 1400000 | 2017-09-16 | v6 | v0.11.0.0 | v0.11.0.0 | Allow only RingCT transactions, allow only >= ringsize 5 |
|
|
||||||
| 1546000 | 2018-04-06 | v7 | v0.12.0.0 | v0.12.0.0 | Cryptonight variant 1, ringsize >= 7, sorted inputs
|
|
||||||
| XXXXXXX | 2018-10-XX | XX | XXXXXXXXX | XXXXXXXXX | X
|
|
||||||
|
|
||||||
X's indicate that these details have not been determined as of commit date.
|
X's indicate that these details have not been determined as of commit date.
|
||||||
|
|
||||||
## Release staging schedule and protocol
|
## Release staging schedule and protocol
|
||||||
|
|
||||||
Approximately three months prior to a scheduled software upgrade, a branch from Master will be created with the new release version tag. Pull requests that address bugs should then be made to both Master and the new release branch. Pull requests that require extensive review and testing (generally, optimizations and new features) should *not* be made to the release branch.
|
Approximately three months prior to a scheduled mandatory software upgrade, a branch from Master will be created with the new release version tag. Pull requests that address bugs should then be made to both Master and the new release branch. Pull requests that require extensive review and testing (generally, optimizations and new features) should *not* be made to the release branch.
|
||||||
|
|
||||||
## Installing Monero from a package
|
## Compiling Wownero from source
|
||||||
|
|
||||||
Packages are available for
|
|
||||||
|
|
||||||
* Ubuntu and [snap supported](https://snapcraft.io/docs/core/install) systems, via a community contributed build.
|
|
||||||
|
|
||||||
snap install monero --beta
|
|
||||||
|
|
||||||
Installing a snap is very quick. Snaps are secure. They are isolated with all of their dependencies. Snaps also auto update when a new version is released.
|
|
||||||
|
|
||||||
* Arch Linux (via [AUR](https://aur.archlinux.org/)):
|
|
||||||
- Stable release: [`monero`](https://aur.archlinux.org/packages/monero)
|
|
||||||
- Bleeding edge: [`monero-git`](https://aur.archlinux.org/packages/monero-git)
|
|
||||||
|
|
||||||
* Void Linux:
|
|
||||||
|
|
||||||
xbps-install -S monero
|
|
||||||
|
|
||||||
* GuixSD
|
|
||||||
|
|
||||||
guix package -i monero
|
|
||||||
|
|
||||||
* OS X via [Homebrew](http://brew.sh)
|
|
||||||
|
|
||||||
brew tap sammy007/cryptonight
|
|
||||||
brew install monero --build-from-source
|
|
||||||
|
|
||||||
* Docker
|
|
||||||
|
|
||||||
# Build using all available cores
|
|
||||||
docker build -t monero .
|
|
||||||
|
|
||||||
# or build using a specific number of cores (reduce RAM requirement)
|
|
||||||
docker build --build-arg NPROC=1 -t monero .
|
|
||||||
|
|
||||||
# either run in foreground
|
|
||||||
docker run -it -v /monero/chain:/root/.bitmonero -v /monero/wallet:/wallet -p 18080:18080 monero
|
|
||||||
|
|
||||||
# or in background
|
|
||||||
docker run -it -d -v /monero/chain:/root/.bitmonero -v /monero/wallet:/wallet -p 18080:18080 monero
|
|
||||||
|
|
||||||
Packaging for your favorite distribution would be a welcome contribution!
|
|
||||||
|
|
||||||
## Compiling Monero from source
|
|
||||||
|
|
||||||
### Dependencies
|
### Dependencies
|
||||||
|
|
||||||
@@ -167,14 +119,14 @@ library archives (`.a`).
|
|||||||
| Dep | Min. version | Vendored | Debian/Ubuntu pkg | Arch pkg | Fedora | Optional | Purpose |
|
| Dep | Min. version | Vendored | Debian/Ubuntu pkg | Arch pkg | Fedora | Optional | Purpose |
|
||||||
| ------------ | ------------- | -------- | ------------------ | ------------ | ----------------- | -------- | -------------- |
|
| ------------ | ------------- | -------- | ------------------ | ------------ | ----------------- | -------- | -------------- |
|
||||||
| GCC | 4.7.3 | NO | `build-essential` | `base-devel` | `gcc` | NO | |
|
| GCC | 4.7.3 | NO | `build-essential` | `base-devel` | `gcc` | NO | |
|
||||||
| CMake | 3.0.0 | NO | `cmake` | `cmake` | `cmake` | NO | |
|
| CMake | 3.5 | NO | `cmake` | `cmake` | `cmake` | NO | |
|
||||||
| pkg-config | any | NO | `pkg-config` | `base-devel` | `pkgconf` | NO | |
|
| pkg-config | any | NO | `pkg-config` | `base-devel` | `pkgconf` | NO | |
|
||||||
| Boost | 1.58 | NO | `libboost-all-dev` | `boost` | `boost-devel` | NO | C++ libraries |
|
| Boost | 1.58 | NO | `libboost-all-dev` | `boost` | `boost-devel` | NO | C++ libraries |
|
||||||
| OpenSSL | basically any | NO | `libssl-dev` | `openssl` | `openssl-devel` | NO | sha256 sum |
|
| OpenSSL | basically any | NO | `libssl-dev` | `openssl` | `openssl-devel` | NO | sha256 sum |
|
||||||
| libzmq | 3.0.0 | NO | `libzmq3-dev` | `zeromq` | `cppzmq-devel` | NO | ZeroMQ library |
|
| libzmq | 3.0.0 | NO | `libzmq3-dev` | `zeromq` | `cppzmq-devel` | NO | ZeroMQ library |
|
||||||
|
| OpenPGM | ? | NO | `libpgm-dev` | `libpgm` | `openpgm-devel` | NO | For ZeroMQ |
|
||||||
| libunbound | 1.4.16 | YES | `libunbound-dev` | `unbound` | `unbound-devel` | NO | DNS resolver |
|
| libunbound | 1.4.16 | YES | `libunbound-dev` | `unbound` | `unbound-devel` | NO | DNS resolver |
|
||||||
| libsodium | ? | NO | `libsodium-dev` | ? | `libsodium-devel` | NO | libsodium |
|
| libsodium | ? | NO | `libsodium-dev` | `libsodium` | `libsodium-devel` | NO | cryptography |
|
||||||
| libminiupnpc | 2.0 | YES | `libminiupnpc-dev` | `miniupnpc` | `miniupnpc-devel` | YES | NAT punching |
|
|
||||||
| libunwind | any | NO | `libunwind8-dev` | `libunwind` | `libunwind-devel` | YES | Stack traces |
|
| libunwind | any | NO | `libunwind8-dev` | `libunwind` | `libunwind-devel` | YES | Stack traces |
|
||||||
| liblzma | any | NO | `liblzma-dev` | `xz` | `xz-devel` | YES | For libunwind |
|
| liblzma | any | NO | `liblzma-dev` | `xz` | `xz-devel` | YES | For libunwind |
|
||||||
| libreadline | 6.3.0 | NO | `libreadline6-dev` | `readline` | `readline-devel` | YES | Input editing |
|
| libreadline | 6.3.0 | NO | `libreadline6-dev` | `readline` | `readline-devel` | YES | Input editing |
|
||||||
@@ -183,24 +135,25 @@ library archives (`.a`).
|
|||||||
| GTest | 1.5 | YES | `libgtest-dev`^ | `gtest` | `gtest-devel` | YES | Test suite |
|
| GTest | 1.5 | YES | `libgtest-dev`^ | `gtest` | `gtest-devel` | YES | Test suite |
|
||||||
| Doxygen | any | NO | `doxygen` | `doxygen` | `doxygen` | YES | Documentation |
|
| Doxygen | any | NO | `doxygen` | `doxygen` | `doxygen` | YES | Documentation |
|
||||||
| Graphviz | any | NO | `graphviz` | `graphviz` | `graphviz` | YES | Documentation |
|
| Graphviz | any | NO | `graphviz` | `graphviz` | `graphviz` | YES | Documentation |
|
||||||
|
| pcsclite | ? | NO | `libpcsclite-dev` | ? | `pcsc-lite pcsc-lite-devel` | NO | Ledger |
|
||||||
|
|
||||||
|
|
||||||
[^] On Debian/Ubuntu `libgtest-dev` only includes sources and headers. You must
|
[^] On Debian/Ubuntu `libgtest-dev` only includes sources and headers. You must
|
||||||
build the library binary manually. This can be done with the following command ```sudo apt-get install libgtest-dev && cd /usr/src/gtest && sudo cmake . && sudo make && sudo mv libg* /usr/lib/ ```
|
build the library binary manually. This can be done with the following command ```sudo apt-get install libgtest-dev && cd /usr/src/gtest && sudo cmake . && sudo make && sudo mv libg* /usr/lib/ ```
|
||||||
|
|
||||||
|
Debian / Ubuntu one liner for all dependencies
|
||||||
|
``` sudo apt update && sudo apt install build-essential cmake pkg-config libboost-all-dev libssl-dev libzmq3-dev libunbound-dev libsodium-dev libunwind8-dev liblzma-dev libreadline6-dev libldns-dev libexpat1-dev doxygen graphviz libpcsclite-dev libpgm-dev```
|
||||||
|
|
||||||
### Cloning the repository
|
### Cloning the repository
|
||||||
|
|
||||||
Clone recursively to pull-in needed submodule(s):
|
`$ git clone https://github.com/wownero/wownero`
|
||||||
|
|
||||||
`$ git clone --recursive https://github.com/monero-project/monero`
|
Submodules are fetched and updated automatically. If you wish to
|
||||||
|
do this manually, run CMake flag `-DMANUAL_SUBMODULES=ON` to opt out.
|
||||||
If you already have a repo cloned, initialize and update:
|
|
||||||
|
|
||||||
`$ cd monero && git submodule init && git submodule update`
|
|
||||||
|
|
||||||
### Build instructions
|
### Build instructions
|
||||||
|
|
||||||
Monero uses the CMake build system and a top-level [Makefile](Makefile) that
|
Wownero uses the CMake build system and a top-level [Makefile](Makefile) that
|
||||||
invokes cmake commands as needed.
|
invokes cmake commands as needed.
|
||||||
|
|
||||||
#### On Linux and OS X
|
#### On Linux and OS X
|
||||||
@@ -208,7 +161,7 @@ invokes cmake commands as needed.
|
|||||||
* Install the dependencies
|
* Install the dependencies
|
||||||
* Change to the root of the source code directory and build:
|
* Change to the root of the source code directory and build:
|
||||||
|
|
||||||
cd monero
|
cd wownero
|
||||||
make
|
make
|
||||||
|
|
||||||
*Optional*: If your machine has several cores and enough memory, enable
|
*Optional*: If your machine has several cores and enough memory, enable
|
||||||
@@ -221,9 +174,9 @@ invokes cmake commands as needed.
|
|||||||
|
|
||||||
* The resulting executables can be found in `build/release/bin`
|
* The resulting executables can be found in `build/release/bin`
|
||||||
|
|
||||||
* Add `PATH="$PATH:$HOME/monero/build/release/bin"` to `.profile`
|
* Add `PATH="$PATH:$HOME/wownero/build/release/bin"` to `.profile`
|
||||||
|
|
||||||
* Run Monero with `monerod --detach`
|
* Run Wownero with `wownerod --detach`
|
||||||
|
|
||||||
* **Optional**: build and run the test suite to verify the binaries:
|
* **Optional**: build and run the test suite to verify the binaries:
|
||||||
|
|
||||||
@@ -245,73 +198,6 @@ Dependencies need to be built with -fPIC. Static libraries usually aren't, so yo
|
|||||||
|
|
||||||
HAVE_DOT=YES doxygen Doxyfile
|
HAVE_DOT=YES doxygen Doxyfile
|
||||||
|
|
||||||
#### On the Raspberry Pi
|
|
||||||
|
|
||||||
Tested on a Raspberry Pi Zero with a clean install of minimal Raspbian Stretch (2017-09-07 or later) from https://www.raspberrypi.org/downloads/raspbian/. If you are using Raspian Jessie, [please see note in the following section](#note-for-raspbian-jessie-users).
|
|
||||||
|
|
||||||
* `apt-get update && apt-get upgrade` to install all of the latest software
|
|
||||||
|
|
||||||
* Install the dependencies for Monero from the 'Debian' column in the table above.
|
|
||||||
|
|
||||||
* Increase the system swap size:
|
|
||||||
```
|
|
||||||
sudo /etc/init.d/dphys-swapfile stop
|
|
||||||
sudo nano /etc/dphys-swapfile
|
|
||||||
CONF_SWAPSIZE=1024
|
|
||||||
sudo /etc/init.d/dphys-swapfile start
|
|
||||||
```
|
|
||||||
* Clone monero and checkout most recent release version:
|
|
||||||
```
|
|
||||||
git clone https://github.com/monero-project/monero.git
|
|
||||||
cd monero
|
|
||||||
git checkout tags/v0.11.1.0
|
|
||||||
```
|
|
||||||
* Build:
|
|
||||||
```
|
|
||||||
make release
|
|
||||||
```
|
|
||||||
* Wait 4-6 hours
|
|
||||||
|
|
||||||
* The resulting executables can be found in `build/release/bin`
|
|
||||||
|
|
||||||
* Add `PATH="$PATH:$HOME/monero/build/release/bin"` to `.profile`
|
|
||||||
|
|
||||||
* Run Monero with `monerod --detach`
|
|
||||||
|
|
||||||
* You may wish to reduce the size of the swap file after the build has finished, and delete the boost directory from your home directory
|
|
||||||
|
|
||||||
#### *Note for Raspbian Jessie users:*
|
|
||||||
|
|
||||||
If you are using the older Raspbian Jessie image, compiling Monero is a bit more complicated. The version of Boost available in the Debian Jessie repositories is too old to use with Monero, and thus you must compile a newer version yourself. The following explains the extra steps, and has been tested on a Raspberry Pi 2 with a clean install of minimal Raspbian Jessie.
|
|
||||||
|
|
||||||
* As before, `apt-get update && apt-get upgrade` to install all of the latest software, and increase the system swap size
|
|
||||||
|
|
||||||
```
|
|
||||||
sudo /etc/init.d/dphys-swapfile stop
|
|
||||||
sudo nano /etc/dphys-swapfile
|
|
||||||
CONF_SWAPSIZE=1024
|
|
||||||
sudo /etc/init.d/dphys-swapfile start
|
|
||||||
```
|
|
||||||
|
|
||||||
* Then, install the dependencies for Monero except `libunwind` and `libboost-all-dev`
|
|
||||||
|
|
||||||
* Install the latest version of boost (this may first require invoking `apt-get remove --purge libboost*` to remove a previous version if you're not using a clean install):
|
|
||||||
```
|
|
||||||
cd
|
|
||||||
wget https://sourceforge.net/projects/boost/files/boost/1.64.0/boost_1_64_0.tar.bz2
|
|
||||||
tar xvfo boost_1_64_0.tar.bz2
|
|
||||||
cd boost_1_64_0
|
|
||||||
./bootstrap.sh
|
|
||||||
sudo ./b2
|
|
||||||
```
|
|
||||||
* Wait ~8 hours
|
|
||||||
```
|
|
||||||
sudo ./bjam install
|
|
||||||
```
|
|
||||||
* Wait ~4 hours
|
|
||||||
|
|
||||||
* From here, follow the [general Raspberry Pi instructions](#on-the-raspberry-pi) from the "Clone monero and checkout most recent release version" step.
|
|
||||||
|
|
||||||
#### On Windows:
|
#### On Windows:
|
||||||
|
|
||||||
Binaries for Windows are built on Windows using the MinGW toolchain within
|
Binaries for Windows are built on Windows using the MinGW toolchain within
|
||||||
@@ -363,9 +249,7 @@ application.
|
|||||||
|
|
||||||
### On FreeBSD:
|
### On FreeBSD:
|
||||||
|
|
||||||
The project can be built from scratch by following instructions for Linux above. If you are running monero in a jail you need to add the flag: `allow.sysvipc=1` to your jail configuration, otherwise lmdb will throw the error message: `Failed to open lmdb environment: Function not implemented`.
|
The project can be built from scratch by following instructions for Linux above. If you are running wownero in a jail you need to add the flag: `allow.sysvipc=1` to your jail configuration, otherwise lmdb will throw the error message: `Failed to open lmdb environment: Function not implemented`.
|
||||||
|
|
||||||
We expect to add Monero into the ports tree in the near future, which will aid in managing installations using ports or packages.
|
|
||||||
|
|
||||||
### On OpenBSD:
|
### On OpenBSD:
|
||||||
|
|
||||||
@@ -380,7 +264,7 @@ The doxygen and graphviz packages are optional and require the xbase set.
|
|||||||
The Boost package has a bug that will prevent librpc.a from building correctly. In order to fix this, you will have to Build boost yourself from scratch. Follow the directions here (under "Building Boost"):
|
The Boost package has a bug that will prevent librpc.a from building correctly. In order to fix this, you will have to Build boost yourself from scratch. Follow the directions here (under "Building Boost"):
|
||||||
https://github.com/bitcoin/bitcoin/blob/master/doc/build-openbsd.md
|
https://github.com/bitcoin/bitcoin/blob/master/doc/build-openbsd.md
|
||||||
|
|
||||||
You will have to add the serialization, date_time, and regex modules to Boost when building as they are needed by Monero.
|
You will have to add the serialization, date_time, and regex modules to Boost when building as they are needed by Wownero.
|
||||||
|
|
||||||
To build: `env CC=egcc CXX=eg++ CPP=ecpp DEVELOPER_LOCAL_TOOLS=1 BOOST_ROOT=/path/to/the/boost/you/built make release-static-64`
|
To build: `env CC=egcc CXX=eg++ CPP=ecpp DEVELOPER_LOCAL_TOOLS=1 BOOST_ROOT=/path/to/the/boost/you/built make release-static-64`
|
||||||
|
|
||||||
@@ -455,7 +339,7 @@ cmake ..
|
|||||||
doas make install
|
doas make install
|
||||||
```
|
```
|
||||||
|
|
||||||
Build monero: `env DEVELOPER_LOCAL_TOOLS=1 BOOST_ROOT=/usr/local make release-static`
|
Build wownero: `env DEVELOPER_LOCAL_TOOLS=1 BOOST_ROOT=/usr/local make release-static`
|
||||||
|
|
||||||
### On Solaris:
|
### On Solaris:
|
||||||
|
|
||||||
@@ -468,15 +352,6 @@ The default Solaris linker can't be used, you have to install GNU ld, then run c
|
|||||||
|
|
||||||
Then you can run make as usual.
|
Then you can run make as usual.
|
||||||
|
|
||||||
### On Linux for Android (using docker):
|
|
||||||
|
|
||||||
# Build image (select android64.Dockerfile for aarch64)
|
|
||||||
cd utils/build_scripts/ && docker build -f android32.Dockerfile -t monero-android .
|
|
||||||
# Create container
|
|
||||||
docker create -it --name monero-android monero-android bash
|
|
||||||
# Get binaries
|
|
||||||
docker cp monero-android:/opt/android/monero/build/release/bin .
|
|
||||||
|
|
||||||
### Building portable statically linked binaries
|
### Building portable statically linked binaries
|
||||||
|
|
||||||
By default, in either dynamically or statically linked builds, binaries target the specific host processor on which the build happens and are not portable to other processors. Portable binaries can be built using the following targets:
|
By default, in either dynamically or statically linked builds, binaries target the specific host processor on which the build happens and are not portable to other processors. Portable binaries can be built using the following targets:
|
||||||
@@ -489,15 +364,15 @@ By default, in either dynamically or statically linked builds, binaries target t
|
|||||||
* ```make release-static-win64``` builds binaries on 64-bit Windows portable across 64-bit Windows systems
|
* ```make release-static-win64``` builds binaries on 64-bit Windows portable across 64-bit Windows systems
|
||||||
* ```make release-static-win32``` builds binaries on 64-bit or 32-bit Windows portable across 32-bit Windows systems
|
* ```make release-static-win32``` builds binaries on 64-bit or 32-bit Windows portable across 32-bit Windows systems
|
||||||
|
|
||||||
## Running monerod
|
## Running wownerod
|
||||||
|
|
||||||
The build places the binary in `bin/` sub-directory within the build directory
|
The build places the binary in `bin/` sub-directory within the build directory
|
||||||
from which cmake was invoked (repository root by default). To run in
|
from which cmake was invoked (repository root by default). To run in
|
||||||
foreground:
|
foreground:
|
||||||
|
|
||||||
./bin/monerod
|
./bin/wownerod
|
||||||
|
|
||||||
To list all available options, run `./bin/monerod --help`. Options can be
|
To list all available options, run `./bin/wownerod --help`. Options can be
|
||||||
specified either on the command line or in a configuration file passed by the
|
specified either on the command line or in a configuration file passed by the
|
||||||
`--config-file` argument. To specify an option in the configuration file, add
|
`--config-file` argument. To specify an option in the configuration file, add
|
||||||
a line with the syntax `argumentname=value`, where `argumentname` is the name
|
a line with the syntax `argumentname=value`, where `argumentname` is the name
|
||||||
@@ -505,17 +380,17 @@ of the argument without the leading dashes, for example `log-level=1`.
|
|||||||
|
|
||||||
To run in background:
|
To run in background:
|
||||||
|
|
||||||
./bin/monerod --log-file monerod.log --detach
|
./bin/wownerod --log-file wownerod.log --detach
|
||||||
|
|
||||||
To run as a systemd service, copy
|
To run as a systemd service, copy
|
||||||
[monerod.service](utils/systemd/monerod.service) to `/etc/systemd/system/` and
|
[wownerod.service](utils/systemd/wownerod.service) to `/etc/systemd/system/` and
|
||||||
[monerod.conf](utils/conf/monerod.conf) to `/etc/`. The [example
|
[wownerod.conf](utils/conf/wownerod.conf) to `/etc/`. The [example
|
||||||
service](utils/systemd/monerod.service) assumes that the user `monero` exists
|
service](utils/systemd/wownerod.service) assumes that the user `wownero` exists
|
||||||
and its home is the data directory specified in the [example
|
and its home is the data directory specified in the [example
|
||||||
config](utils/conf/monerod.conf).
|
config](utils/conf/wownerod.conf).
|
||||||
|
|
||||||
If you're on Mac, you may need to add the `--max-concurrency 1` option to
|
If you're on Mac, you may need to add the `--max-concurrency 1` option to
|
||||||
monero-wallet-cli, and possibly monerod, if you get crashes refreshing.
|
wownero-wallet-cli, and possibly wownerod, if you get crashes refreshing.
|
||||||
|
|
||||||
## Internationalization
|
## Internationalization
|
||||||
|
|
||||||
@@ -523,29 +398,31 @@ See [README.i18n.md](README.i18n.md).
|
|||||||
|
|
||||||
## Using Tor
|
## Using Tor
|
||||||
|
|
||||||
While Monero isn't made to integrate with Tor, it can be used wrapped with torsocks, by
|
While Wownero isn't made to integrate with Tor, it can be used wrapped with torsocks, by
|
||||||
setting the following configuration parameters and environment variables:
|
setting the following configuration parameters and environment variables:
|
||||||
|
|
||||||
* `--p2p-bind-ip 127.0.0.1` on the command line or `p2p-bind-ip=127.0.0.1` in
|
* `--p2p-bind-ip 127.0.0.1` on the command line or `p2p-bind-ip=127.0.0.1` in
|
||||||
monerod.conf to disable listening for connections on external interfaces.
|
wownerod.conf to disable listening for connections on external interfaces.
|
||||||
* `--no-igd` on the command line or `no-igd=1` in monerod.conf to disable IGD
|
* `--no-igd` on the command line or `no-igd=1` in wownerod.conf to disable IGD
|
||||||
(UPnP port forwarding negotiation), which is pointless with Tor.
|
(UPnP port forwarding negotiation), which is pointless with Tor.
|
||||||
* `DNS_PUBLIC=tcp` or `DNS_PUBLIC=tcp://x.x.x.x` where x.x.x.x is the IP of the
|
* `DNS_PUBLIC=tcp` or `DNS_PUBLIC=tcp://x.x.x.x` where x.x.x.x is the IP of the
|
||||||
desired DNS server, for DNS requests to go over TCP, so that they are routed
|
desired DNS server, for DNS requests to go over TCP, so that they are routed
|
||||||
through Tor. When IP is not specified, monerod uses the default list of
|
through Tor. When IP is not specified, wownerod uses the default list of
|
||||||
servers defined in [src/common/dns_utils.cpp](src/common/dns_utils.cpp).
|
servers defined in [src/common/dns_utils.cpp](src/common/dns_utils.cpp).
|
||||||
* `TORSOCKS_ALLOW_INBOUND=1` to tell torsocks to allow monerod to bind to interfaces
|
* `TORSOCKS_ALLOW_INBOUND=1` to tell torsocks to allow wownerod to bind to interfaces
|
||||||
to accept connections from the wallet. On some Linux systems, torsocks
|
to accept connections from the wallet. On some Linux systems, torsocks
|
||||||
allows binding to localhost by default, so setting this variable is only
|
allows binding to localhost by default, so setting this variable is only
|
||||||
necessary to allow binding to local LAN/VPN interfaces to allow wallets to
|
necessary to allow binding to local LAN/VPN interfaces to allow wallets to
|
||||||
connect from remote hosts. On other systems, it may be needed for local wallets
|
connect from remote hosts. On other systems, it may be needed for local wallets
|
||||||
as well.
|
as well.
|
||||||
* Do NOT pass `--detach` when running through torsocks with systemd, (see
|
* Do NOT pass `--detach` when running through torsocks with systemd, (see
|
||||||
[utils/systemd/monerod.service](utils/systemd/monerod.service) for details).
|
[utils/systemd/wownerod.service](utils/systemd/wownerod.service) for details).
|
||||||
|
* If you use the wallet with a Tor daemon via the loopback IP (eg, 127.0.0.1:9050),
|
||||||
|
then use `--untrusted-daemon` unless it is your own hidden service.
|
||||||
|
|
||||||
Example command line to start monerod through Tor:
|
Example command line to start wownerod through Tor:
|
||||||
|
|
||||||
DNS_PUBLIC=tcp torsocks monerod --p2p-bind-ip 127.0.0.1 --no-igd
|
DNS_PUBLIC=tcp torsocks wownerod --p2p-bind-ip 127.0.0.1 --no-igd
|
||||||
|
|
||||||
### Using Tor on Tails
|
### Using Tor on Tails
|
||||||
|
|
||||||
@@ -553,13 +430,13 @@ TAILS ships with a very restrictive set of firewall rules. Therefore, you need
|
|||||||
to add a rule to allow this connection too, in addition to telling torsocks to
|
to add a rule to allow this connection too, in addition to telling torsocks to
|
||||||
allow inbound connections. Full example:
|
allow inbound connections. Full example:
|
||||||
|
|
||||||
sudo iptables -I OUTPUT 2 -p tcp -d 127.0.0.1 -m tcp --dport 18081 -j ACCEPT
|
sudo iptables -I OUTPUT 2 -p tcp -d 127.0.0.1 -m tcp --dport 34568 -j ACCEPT
|
||||||
DNS_PUBLIC=tcp torsocks ./monerod --p2p-bind-ip 127.0.0.1 --no-igd --rpc-bind-ip 127.0.0.1 \
|
DNS_PUBLIC=tcp torsocks ./wownerod --p2p-bind-ip 127.0.0.1 --no-igd --rpc-bind-ip 127.0.0.1 \
|
||||||
--data-dir /home/amnesia/Persistent/your/directory/to/the/blockchain
|
--data-dir /home/amnesia/Persistent/your/directory/to/the/blockchain
|
||||||
|
|
||||||
## Debugging
|
## Debugging
|
||||||
|
|
||||||
This section contains general instructions for debugging failed installs or problems encountered with Monero. First ensure you are running the latest version built from the Github repo.
|
This section contains general instructions for debugging failed installs or problems encountered with Wownero. First ensure you are running the latest version built from the Github repo.
|
||||||
|
|
||||||
### Obtaining stack traces and core dumps on Unix systems
|
### Obtaining stack traces and core dumps on Unix systems
|
||||||
|
|
||||||
@@ -572,7 +449,7 @@ Run the build.
|
|||||||
Once it stalls, enter the following command:
|
Once it stalls, enter the following command:
|
||||||
|
|
||||||
```
|
```
|
||||||
gdb /path/to/monerod `pidof monerod`
|
gdb /path/to/wownerod `pidof wownerod`
|
||||||
```
|
```
|
||||||
|
|
||||||
Type `thread apply all bt` within gdb in order to obtain the stack trace
|
Type `thread apply all bt` within gdb in order to obtain the stack trace
|
||||||
@@ -585,27 +462,27 @@ Enter `echo core | sudo tee /proc/sys/kernel/core_pattern` to stop cores from be
|
|||||||
|
|
||||||
Run the build.
|
Run the build.
|
||||||
|
|
||||||
When it terminates with an output along the lines of "Segmentation fault (core dumped)", there should be a core dump file in the same directory as monerod. It may be named just `core`, or `core.xxxx` with numbers appended.
|
When it terminates with an output along the lines of "Segmentation fault (core dumped)", there should be a core dump file in the same directory as wownerod. It may be named just `core`, or `core.xxxx` with numbers appended.
|
||||||
|
|
||||||
You can now analyse this core dump with `gdb` as follows:
|
You can now analyse this core dump with `gdb` as follows:
|
||||||
|
|
||||||
`gdb /path/to/monerod /path/to/dumpfile`
|
`gdb /path/to/wownerod /path/to/dumpfile`
|
||||||
|
|
||||||
Print the stack trace with `bt`
|
Print the stack trace with `bt`
|
||||||
|
|
||||||
* To run monero within gdb:
|
* To run wownero within gdb:
|
||||||
|
|
||||||
Type `gdb /path/to/monerod`
|
Type `gdb /path/to/wownerod`
|
||||||
|
|
||||||
Pass command-line options with `--args` followed by the relevant arguments
|
Pass command-line options with `--args` followed by the relevant arguments
|
||||||
|
|
||||||
Type `run` to run monerod
|
Type `run` to run wownerod
|
||||||
|
|
||||||
### Analysing memory corruption
|
### Analysing memory corruption
|
||||||
|
|
||||||
We use the tool `valgrind` for this.
|
We use the tool `valgrind` for this.
|
||||||
|
|
||||||
Run with `valgrind /path/to/monerod`. It will be slow.
|
Run with `valgrind /path/to/wownerod`. It will be slow.
|
||||||
|
|
||||||
### LMDB
|
### LMDB
|
||||||
|
|
||||||
@@ -613,7 +490,7 @@ Instructions for debugging suspected blockchain corruption as per @HYC
|
|||||||
|
|
||||||
There is an `mdb_stat` command in the LMDB source that can print statistics about the database but it's not routinely built. This can be built with the following command:
|
There is an `mdb_stat` command in the LMDB source that can print statistics about the database but it's not routinely built. This can be built with the following command:
|
||||||
|
|
||||||
`cd ~/monero/external/db_drivers/liblmdb && make`
|
`cd ~/wownero/external/db_drivers/liblmdb && make`
|
||||||
|
|
||||||
The output of `mdb_stat -ea <path to blockchain dir>` will indicate inconsistencies in the blocks, block_heights and block_info table.
|
The output of `mdb_stat -ea <path to blockchain dir>` will indicate inconsistencies in the blocks, block_heights and block_info table.
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,9 @@
|
|||||||
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||||
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
set (CMAKE_SYSTEM_NAME Windows)
|
if (NOT CMAKE_HOST_WIN32)
|
||||||
|
set (CMAKE_SYSTEM_NAME Windows)
|
||||||
|
endif()
|
||||||
|
|
||||||
set (GCC_PREFIX i686-w64-mingw32)
|
set (GCC_PREFIX i686-w64-mingw32)
|
||||||
set (CMAKE_C_COMPILER ${GCC_PREFIX}-gcc)
|
set (CMAKE_C_COMPILER ${GCC_PREFIX}-gcc)
|
||||||
|
|||||||
@@ -26,7 +26,9 @@
|
|||||||
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||||
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
set (CMAKE_SYSTEM_NAME Windows)
|
if (NOT CMAKE_HOST_WIN32)
|
||||||
|
set (CMAKE_SYSTEM_NAME Windows)
|
||||||
|
endif()
|
||||||
|
|
||||||
set (GCC_PREFIX x86_64-w64-mingw32)
|
set (GCC_PREFIX x86_64-w64-mingw32)
|
||||||
set (CMAKE_C_COMPILER ${GCC_PREFIX}-gcc)
|
set (CMAKE_C_COMPILER ${GCC_PREFIX}-gcc)
|
||||||
|
|||||||
@@ -14,22 +14,31 @@ ENDIF (PCSC_INCLUDE_DIR AND PCSC_LIBRARIES)
|
|||||||
IF (NOT WIN32)
|
IF (NOT WIN32)
|
||||||
FIND_PACKAGE(PkgConfig)
|
FIND_PACKAGE(PkgConfig)
|
||||||
PKG_CHECK_MODULES(PC_PCSC libpcsclite)
|
PKG_CHECK_MODULES(PC_PCSC libpcsclite)
|
||||||
|
|
||||||
|
FIND_PATH(PCSC_INCLUDE_DIR winscard.h
|
||||||
|
HINTS
|
||||||
|
/usr/include/PCSC
|
||||||
|
${PC_PCSC_INCLUDEDIR}
|
||||||
|
${PC_PCSC_INCLUDE_DIRS}
|
||||||
|
PATH_SUFFIXES PCSC
|
||||||
|
)
|
||||||
|
|
||||||
|
FIND_LIBRARY(PCSC_LIBRARY NAMES pcsclite libpcsclite PCSC
|
||||||
|
HINTS
|
||||||
|
${PC_PCSC_LIBDIR}
|
||||||
|
${PC_PCSC_LIBRARY_DIRS}
|
||||||
|
)
|
||||||
|
|
||||||
|
ELSE (NOT WIN32)
|
||||||
|
IF(BUILD_64 STREQUAL "ON")
|
||||||
|
set(PCSC_INCLUDE_DIR /mingw64/x86_64-w64-mingw32/include)
|
||||||
|
set(PCSC_LIBRARY /mingw64/x86_64-w64-mingw32/lib/libwinscard.a)
|
||||||
|
ELSE(BUILD_64 STREQUAL "ON")
|
||||||
|
set(PCSC_INCLUDE_DIR /mingw32/i686-w64-mingw32/include)
|
||||||
|
set(PCSC_LIBRARY /mingw32/i686-w64-mingw32/lib/libwinscard.a)
|
||||||
|
ENDIF(BUILD_64 STREQUAL "ON")
|
||||||
ENDIF (NOT WIN32)
|
ENDIF (NOT WIN32)
|
||||||
|
|
||||||
FIND_PATH(PCSC_INCLUDE_DIR winscard.h
|
|
||||||
HINTS
|
|
||||||
/usr/include/PCSC
|
|
||||||
${PC_PCSC_INCLUDEDIR}
|
|
||||||
${PC_PCSC_INCLUDE_DIRS}
|
|
||||||
PATH_SUFFIXES PCSC
|
|
||||||
)
|
|
||||||
|
|
||||||
FIND_LIBRARY(PCSC_LIBRARY NAMES pcsclite libpcsclite WinSCard PCSC
|
|
||||||
HINTS
|
|
||||||
${PC_PCSC_LIBDIR}
|
|
||||||
${PC_PCSC_LIBRARY_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
# handle the QUIETLY and REQUIRED arguments and set PCSC_FOUND to TRUE if
|
# handle the QUIETLY and REQUIRED arguments and set PCSC_FOUND to TRUE if
|
||||||
# all listed variables are TRUE
|
# all listed variables are TRUE
|
||||||
INCLUDE(FindPackageHandleStandardArgs)
|
INCLUDE(FindPackageHandleStandardArgs)
|
||||||
@@ -37,8 +46,9 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(PCSC DEFAULT_MSG PCSC_LIBRARY PCSC_INCLUDE_DIR
|
|||||||
|
|
||||||
IF(PCSC_FOUND)
|
IF(PCSC_FOUND)
|
||||||
SET( PCSC_LIBRARIES ${PCSC_LIBRARY} )
|
SET( PCSC_LIBRARIES ${PCSC_LIBRARY} )
|
||||||
|
SET(PCSC_STATIC_LIBRARIES ${PCSC_STATIC_LIBRARY})
|
||||||
ELSE(PCSC_FOUND)
|
ELSE(PCSC_FOUND)
|
||||||
SET( PCSC_LIBRARIES )
|
SET( PCSC_LIBRARIES )
|
||||||
ENDIF(PCSC_FOUND)
|
ENDIF(PCSC_FOUND)
|
||||||
|
|
||||||
MARK_AS_ADVANCED( PCSC_LIBRARY PCSC_INCLUDE_DIR )
|
MARK_AS_ADVANCED( PCSC_LIBRARY PCSC_INCLUDE_DIR PCSC_STATIC_LIBRARY)
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
function (write_static_version_header hash)
|
function (write_static_version_header hash)
|
||||||
set(VERSIONTAG "${hash}")
|
set(VERSIONTAG "${hash}")
|
||||||
configure_file("src/version.cpp.in" "version.cpp")
|
configure_file("${CMAKE_SOURCE_DIR}/src/version.cpp.in" "${CMAKE_BINARY_DIR}/version.cpp")
|
||||||
endfunction ()
|
endfunction ()
|
||||||
|
|
||||||
find_package(Git QUIET)
|
find_package(Git QUIET)
|
||||||
|
|||||||
10
contrib/depends/.gitignore
vendored
Normal file
10
contrib/depends/.gitignore
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
SDKs/
|
||||||
|
work/
|
||||||
|
built/
|
||||||
|
sources/
|
||||||
|
config.site
|
||||||
|
x86_64*
|
||||||
|
i686*
|
||||||
|
mips*
|
||||||
|
arm*
|
||||||
|
aarch64*
|
||||||
227
contrib/depends/Makefile
Normal file
227
contrib/depends/Makefile
Normal file
@@ -0,0 +1,227 @@
|
|||||||
|
.NOTPARALLEL :
|
||||||
|
|
||||||
|
SOURCES_PATH ?= $(BASEDIR)/sources
|
||||||
|
BASE_CACHE ?= $(BASEDIR)/built
|
||||||
|
SDK_PATH ?= $(BASEDIR)/SDKs
|
||||||
|
NO_QT ?=
|
||||||
|
NO_WALLET ?=
|
||||||
|
NO_UPNP ?=
|
||||||
|
FALLBACK_DOWNLOAD_PATH ?= https://bitcoincore.org/depends-sources
|
||||||
|
|
||||||
|
BUILD = $(shell ./config.guess)
|
||||||
|
HOST ?= $(BUILD)
|
||||||
|
PATCHES_PATH = $(BASEDIR)/patches
|
||||||
|
BASEDIR = $(CURDIR)
|
||||||
|
HASH_LENGTH:=11
|
||||||
|
DOWNLOAD_CONNECT_TIMEOUT:=10
|
||||||
|
DOWNLOAD_RETRIES:=3
|
||||||
|
HOST_ID_SALT ?= salt
|
||||||
|
BUILD_ID_SALT ?= salt
|
||||||
|
|
||||||
|
host:=$(BUILD)
|
||||||
|
ifneq ($(HOST),)
|
||||||
|
host:=$(HOST)
|
||||||
|
host_toolchain:=$(HOST)-
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifneq ($(DEBUG),)
|
||||||
|
release_type=debug
|
||||||
|
else
|
||||||
|
release_type=release
|
||||||
|
endif
|
||||||
|
|
||||||
|
base_build_dir=$(BASEDIR)/work/build
|
||||||
|
base_staging_dir=$(BASEDIR)/work/staging
|
||||||
|
base_download_dir=$(BASEDIR)/work/download
|
||||||
|
canonical_host:=$(shell ./config.sub $(HOST))
|
||||||
|
build:=$(shell ./config.sub $(BUILD))
|
||||||
|
|
||||||
|
build_arch =$(firstword $(subst -, ,$(build)))
|
||||||
|
build_vendor=$(word 2,$(subst -, ,$(build)))
|
||||||
|
full_build_os:=$(subst $(build_arch)-$(build_vendor)-,,$(build))
|
||||||
|
build_os:=$(findstring linux,$(full_build_os))
|
||||||
|
build_os+=$(findstring darwin,$(full_build_os))
|
||||||
|
build_os:=$(strip $(build_os))
|
||||||
|
ifeq ($(build_os),)
|
||||||
|
build_os=$(full_build_os)
|
||||||
|
endif
|
||||||
|
|
||||||
|
host_arch=$(firstword $(subst -, ,$(canonical_host)))
|
||||||
|
host_vendor=$(word 2,$(subst -, ,$(canonical_host)))
|
||||||
|
full_host_os:=$(subst $(host_arch)-$(host_vendor)-,,$(canonical_host))
|
||||||
|
host_os:=$(findstring linux,$(full_host_os))
|
||||||
|
host_os+=$(findstring darwin,$(full_host_os))
|
||||||
|
host_os+=$(findstring mingw32,$(full_host_os))
|
||||||
|
host_os:=$(strip $(host_os))
|
||||||
|
ifeq ($(host_os),)
|
||||||
|
host_os=$(full_host_os)
|
||||||
|
endif
|
||||||
|
|
||||||
|
$(host_arch)_$(host_os)_prefix=$(BASEDIR)/$(host)
|
||||||
|
$(host_arch)_$(host_os)_host=$(host)
|
||||||
|
host_prefix=$($(host_arch)_$(host_os)_prefix)
|
||||||
|
build_prefix=$(host_prefix)/native
|
||||||
|
ifeq ($(host_os),mingw32)
|
||||||
|
host_cmake=Windows
|
||||||
|
endif
|
||||||
|
ifeq ($(host_os),linux)
|
||||||
|
host_cmake=Linux
|
||||||
|
endif
|
||||||
|
ifeq ($(host_os),darwin)
|
||||||
|
host_cmake=Darwin
|
||||||
|
endif
|
||||||
|
|
||||||
|
AT_$(V):=
|
||||||
|
AT_:=@
|
||||||
|
AT:=$(AT_$(V))
|
||||||
|
|
||||||
|
all: install
|
||||||
|
|
||||||
|
include hosts/$(host_os).mk
|
||||||
|
include hosts/default.mk
|
||||||
|
include builders/$(build_os).mk
|
||||||
|
include builders/default.mk
|
||||||
|
include packages/packages.mk
|
||||||
|
|
||||||
|
build_id_string:=$(BUILD_ID_SALT)
|
||||||
|
build_id_string+=$(shell $(build_CC) --version 2>/dev/null)
|
||||||
|
build_id_string+=$(shell $(build_AR) --version 2>/dev/null)
|
||||||
|
build_id_string+=$(shell $(build_CXX) --version 2>/dev/null)
|
||||||
|
build_id_string+=$(shell $(build_RANLIB) --version 2>/dev/null)
|
||||||
|
build_id_string+=$(shell $(build_STRIP) --version 2>/dev/null)
|
||||||
|
|
||||||
|
$(host_arch)_$(host_os)_id_string:=$(HOST_ID_SALT)
|
||||||
|
$(host_arch)_$(host_os)_id_string+=$(shell $(host_CC) --version 2>/dev/null)
|
||||||
|
$(host_arch)_$(host_os)_id_string+=$(shell $(host_AR) --version 2>/dev/null)
|
||||||
|
$(host_arch)_$(host_os)_id_string+=$(shell $(host_CXX) --version 2>/dev/null)
|
||||||
|
$(host_arch)_$(host_os)_id_string+=$(shell $(host_RANLIB) --version 2>/dev/null)
|
||||||
|
$(host_arch)_$(host_os)_id_string+=$(shell $(host_STRIP) --version 2>/dev/null)
|
||||||
|
|
||||||
|
qt_packages_$(NO_QT) = $(qt_packages) $(qt_$(host_os)_packages) $(qt_$(host_arch)_$(host_os)_packages)
|
||||||
|
wallet_packages_$(NO_WALLET) = $(wallet_packages)
|
||||||
|
upnp_packages_$(NO_UPNP) = $(upnp_packages)
|
||||||
|
|
||||||
|
packages += $($(host_arch)_$(host_os)_packages) $($(host_os)_packages) $(qt_packages_) $(wallet_packages_) $(upnp_packages_)
|
||||||
|
native_packages += $($(host_arch)_$(host_os)_native_packages) $($(host_os)_native_packages)
|
||||||
|
|
||||||
|
ifneq ($(qt_packages_),)
|
||||||
|
native_packages += $(qt_native_packages)
|
||||||
|
endif
|
||||||
|
|
||||||
|
all_packages = $(packages) $(native_packages)
|
||||||
|
|
||||||
|
meta_depends = Makefile funcs.mk builders/default.mk hosts/default.mk hosts/$(host_os).mk builders/$(build_os).mk
|
||||||
|
|
||||||
|
$(host_arch)_$(host_os)_native_toolchain?=$($(host_os)_native_toolchain)
|
||||||
|
|
||||||
|
include funcs.mk
|
||||||
|
|
||||||
|
CONF_PKGS := cmake-conf mxe-conf
|
||||||
|
|
||||||
|
build-only-$(1)_$(3): CMAKE_RUNRESULT_FILE = $(PREFIX)/share/cmake/modules/TryRunResults.cmake
|
||||||
|
build-only-$(1)_$(3): CMAKE_TOOLCHAIN_FILE = $(PREFIX)/$(3)/share/cmake/mxe-conf.cmake
|
||||||
|
build-only-$(1)_$(3): CMAKE_TOOLCHAIN_DIR = $(PREFIX)/$(3)/share/cmake/mxe-conf.d
|
||||||
|
build-only-$(1)_$(3): CMAKE_STATIC_BOOL = $(if $(findstring shared,$(3)),OFF,ON)
|
||||||
|
build-only-$(1)_$(3): CMAKE_SHARED_BOOL = $(if $(findstring shared,$(3)),ON,OFF)
|
||||||
|
|
||||||
|
|
||||||
|
toolchain_path=$($($(host_arch)_$(host_os)_native_toolchain)_prefixbin)
|
||||||
|
final_build_id_long+=$(shell $(build_SHA256SUM) config.site.in)
|
||||||
|
final_build_id_long+=$(shell $(build_SHA256SUM) toolchain.cmake.in)
|
||||||
|
final_build_id+=$(shell echo -n "$(final_build_id_long)" | $(build_SHA256SUM) | cut -c-$(HASH_LENGTH))
|
||||||
|
$(host_prefix)/.stamp_$(final_build_id): $(native_packages) $(packages)
|
||||||
|
$(AT)rm -rf $(@D)
|
||||||
|
$(AT)mkdir -p $(@D)
|
||||||
|
$(AT)echo copying packages: $^
|
||||||
|
$(AT)echo to: $(@D)
|
||||||
|
$(AT)cd $(@D); $(foreach package,$^, tar xf $($(package)_cached); )
|
||||||
|
$(AT)touch $@
|
||||||
|
|
||||||
|
$(host_prefix)/share/config.site : config.site.in $(host_prefix)/.stamp_$(final_build_id)
|
||||||
|
$(AT)@mkdir -p $(@D)
|
||||||
|
$(AT)sed -e 's|@HOST@|$(host)|' \
|
||||||
|
-e 's|@CC@|$(toolchain_path)$(host_CC)|' \
|
||||||
|
-e 's|@CXX@|$(toolchain_path)$(host_CXX)|' \
|
||||||
|
-e 's|@AR@|$(toolchain_path)$(host_AR)|' \
|
||||||
|
-e 's|@RANLIB@|$(toolchain_path)$(host_RANLIB)|' \
|
||||||
|
-e 's|@NM@|$(toolchain_path)$(host_NM)|' \
|
||||||
|
-e 's|@STRIP@|$(toolchain_path)$(host_STRIP)|' \
|
||||||
|
-e 's|@build_os@|$(build_os)|' \
|
||||||
|
-e 's|@host_os@|$(host_os)|' \
|
||||||
|
-e 's|@CFLAGS@|$(strip $(host_CFLAGS) $(host_$(release_type)_CFLAGS))|' \
|
||||||
|
-e 's|@CXXFLAGS@|$(strip $(host_CXXFLAGS) $(host_$(release_type)_CXXFLAGS))|' \
|
||||||
|
-e 's|@CPPFLAGS@|$(strip $(host_CPPFLAGS) $(host_$(release_type)_CPPFLAGS))|' \
|
||||||
|
-e 's|@LDFLAGS@|$(strip $(host_LDFLAGS) $(host_$(release_type)_LDFLAGS))|' \
|
||||||
|
-e 's|@allow_host_packages@|$(ALLOW_HOST_PACKAGES)|' \
|
||||||
|
-e 's|@no_qt@|$(NO_QT)|' \
|
||||||
|
-e 's|@no_wallet@|$(NO_WALLET)|' \
|
||||||
|
-e 's|@no_upnp@|$(NO_UPNP)|' \
|
||||||
|
-e 's|@debug@|$(DEBUG)|' \
|
||||||
|
$< > $@
|
||||||
|
$(AT)touch $@
|
||||||
|
|
||||||
|
$(host_prefix)/share/toolchain.cmake : toolchain.cmake.in $(host_prefix)/.stamp_$(final_build_id)
|
||||||
|
$(AT)@mkdir -p $(@D)
|
||||||
|
$(AT)sed -e 's|@HOST@|$(host)|' \
|
||||||
|
-e 's|@CC@|$(toolchain_path)$(host_CC)|' \
|
||||||
|
-e 's|@CXX@|$(toolchain_path)$(host_CXX)|' \
|
||||||
|
-e 's|@AR@|$(toolchain_path)$(host_AR)|' \
|
||||||
|
-e 's|@RANLIB@|$(toolchain_path)$(host_RANLIB)|' \
|
||||||
|
-e 's|@NM@|$(toolchain_path)$(host_NM)|' \
|
||||||
|
-e 's|@STRIP@|$(toolchain_path)$(host_STRIP)|' \
|
||||||
|
-e 's|@build_os@|$(build_os)|' \
|
||||||
|
-e 's|@host_os@|$(host_os)|' \
|
||||||
|
-e 's|@CFLAGS@|$(strip $(host_CFLAGS) $(host_$(release_type)_CFLAGS))|' \
|
||||||
|
-e 's|@CXXFLAGS@|$(strip $(host_CXXFLAGS) $(host_$(release_type)_CXXFLAGS))|' \
|
||||||
|
-e 's|@CPPFLAGS@|$(strip $(host_CPPFLAGS) $(host_$(release_type)_CPPFLAGS))|' \
|
||||||
|
-e 's|@LDFLAGS@|$(strip $(host_LDFLAGS) $(host_$(release_type)_LDFLAGS))|' \
|
||||||
|
-e 's|@allow_host_packages@|$(ALLOW_HOST_PACKAGES)|' \
|
||||||
|
-e 's|@no_qt@|$(NO_QT)|' \
|
||||||
|
-e 's|@no_wallet@|$(NO_WALLET)|' \
|
||||||
|
-e 's|@no_upnp@|$(NO_UPNP)|' \
|
||||||
|
-e 's|@debug@|$(DEBUG)|' \
|
||||||
|
-e 's|@depends@|$(host_cmake)|' \
|
||||||
|
-e 's|@prefix@|$($(host_arch)_$(host_os)_prefix)|'\
|
||||||
|
-e 's|@sdk@|$(SDK_PATH)|'\
|
||||||
|
-e 's|@arch@|$(host_arch)|'\
|
||||||
|
$< > $@
|
||||||
|
$(AT)touch $@
|
||||||
|
|
||||||
|
define check_or_remove_cached
|
||||||
|
mkdir -p $(BASE_CACHE)/$(host)/$(package) && cd $(BASE_CACHE)/$(host)/$(package); \
|
||||||
|
$(build_SHA256SUM) -c $($(package)_cached_checksum) >/dev/null 2>/dev/null || \
|
||||||
|
( rm -f $($(package)_cached_checksum); \
|
||||||
|
if test -f "$($(package)_cached)"; then echo "Checksum mismatch for $(package). Forcing rebuild.."; rm -f $($(package)_cached_checksum) $($(package)_cached); fi )
|
||||||
|
endef
|
||||||
|
|
||||||
|
define check_or_remove_sources
|
||||||
|
mkdir -p $($(package)_source_dir); cd $($(package)_source_dir); \
|
||||||
|
test -f $($(package)_fetched) && ( $(build_SHA256SUM) -c $($(package)_fetched) >/dev/null 2>/dev/null || \
|
||||||
|
( echo "Checksum missing or mismatched for $(package) source. Forcing re-download."; \
|
||||||
|
rm -f $($(package)_all_sources) $($(1)_fetched))) || true
|
||||||
|
endef
|
||||||
|
|
||||||
|
check-packages:
|
||||||
|
@$(foreach package,$(all_packages),$(call check_or_remove_cached,$(package));)
|
||||||
|
check-sources:
|
||||||
|
@$(foreach package,$(all_packages),$(call check_or_remove_sources,$(package));)
|
||||||
|
|
||||||
|
$(host_prefix)/share/config.site: check-packages
|
||||||
|
$(host_prefix)/share/toolchain.cmake: check-packages
|
||||||
|
|
||||||
|
check-packages: check-sources
|
||||||
|
|
||||||
|
install: check-packages $(host_prefix)/share/config.site
|
||||||
|
install: check-packages $(host_prefix)/share/toolchain.cmake
|
||||||
|
|
||||||
|
download-one: check-sources $(all_sources)
|
||||||
|
|
||||||
|
download-osx:
|
||||||
|
@$(MAKE) -s HOST=x86_64-apple-darwin11 download-one
|
||||||
|
download-linux:
|
||||||
|
@$(MAKE) -s HOST=x86_64-unknown-linux-gnu download-one
|
||||||
|
download-win:
|
||||||
|
@$(MAKE) -s HOST=x86_64-w64-mingw32 download-one
|
||||||
|
download: download-osx download-linux download-win
|
||||||
|
|
||||||
|
.PHONY: install cached download-one download-osx download-linux download-win download check-packages check-sources
|
||||||
59
contrib/depends/README.md
Normal file
59
contrib/depends/README.md
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
### Usage
|
||||||
|
|
||||||
|
To build dependencies for the current arch+OS:
|
||||||
|
|
||||||
|
make
|
||||||
|
|
||||||
|
To build for another arch/OS:
|
||||||
|
|
||||||
|
make HOST=host-platform-triplet
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
make HOST=x86_64-w64-mingw32 -j4
|
||||||
|
|
||||||
|
A prefix will be generated that's suitable for plugging into Bitcoin's
|
||||||
|
configure. In the above example, a dir named x86_64-w64-mingw32 will be
|
||||||
|
created. To use it for Bitcoin:
|
||||||
|
|
||||||
|
./configure --prefix=`pwd`/depends/x86_64-w64-mingw32
|
||||||
|
|
||||||
|
Common `host-platform-triplets` for cross compilation are:
|
||||||
|
|
||||||
|
- `i686-w64-mingw32` for Win32
|
||||||
|
- `x86_64-w64-mingw32` for Win64
|
||||||
|
- `x86_64-apple-darwin11` for MacOSX
|
||||||
|
- `arm-linux-gnueabihf` for Linux ARM 32 bit
|
||||||
|
- `aarch64-linux-gnu` for Linux ARM 64 bit
|
||||||
|
|
||||||
|
No other options are needed, the paths are automatically configured.
|
||||||
|
|
||||||
|
Dependency Options:
|
||||||
|
The following can be set when running make: make FOO=bar
|
||||||
|
|
||||||
|
SOURCES_PATH: downloaded sources will be placed here
|
||||||
|
BASE_CACHE: built packages will be placed here
|
||||||
|
SDK_PATH: Path where sdk's can be found (used by OSX)
|
||||||
|
FALLBACK_DOWNLOAD_PATH: If a source file can't be fetched, try here before giving up
|
||||||
|
NO_QT: Don't download/build/cache qt and its dependencies
|
||||||
|
NO_WALLET: Don't download/build/cache libs needed to enable the wallet
|
||||||
|
NO_UPNP: Don't download/build/cache packages needed for enabling upnp
|
||||||
|
DEBUG: disable some optimizations and enable more runtime checking
|
||||||
|
HOST_ID_SALT: Optional salt to use when generating host package ids
|
||||||
|
BUILD_ID_SALT: Optional salt to use when generating build package ids
|
||||||
|
|
||||||
|
If some packages are not built, for example `make NO_WALLET=1`, the appropriate
|
||||||
|
options will be passed to bitcoin's configure. In this case, `--disable-wallet`.
|
||||||
|
|
||||||
|
Additional targets:
|
||||||
|
|
||||||
|
download: run 'make download' to fetch all sources without building them
|
||||||
|
download-osx: run 'make download-osx' to fetch all sources needed for osx builds
|
||||||
|
download-win: run 'make download-win' to fetch all sources needed for win builds
|
||||||
|
download-linux: run 'make download-linux' to fetch all sources needed for linux builds
|
||||||
|
|
||||||
|
### Other documentation
|
||||||
|
|
||||||
|
- [description.md](description.md): General description of the depends system
|
||||||
|
- [packages.md](packages.md): Steps for adding packages
|
||||||
|
|
||||||
22
contrib/depends/builders/darwin.mk
Normal file
22
contrib/depends/builders/darwin.mk
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
build_darwin_CC: = $(shell xcrun -f clang)
|
||||||
|
build_darwin_CXX: = $(shell xcrun -f clang++)
|
||||||
|
build_darwin_AR: = $(shell xcrun -f ar)
|
||||||
|
build_darwin_RANLIB: = $(shell xcrun -f ranlib)
|
||||||
|
build_darwin_STRIP: = $(shell xcrun -f strip)
|
||||||
|
build_darwin_OTOOL: = $(shell xcrun -f otool)
|
||||||
|
build_darwin_NM: = $(shell xcrun -f nm)
|
||||||
|
build_darwin_INSTALL_NAME_TOOL:=$(shell xcrun -f install_name_tool)
|
||||||
|
build_darwin_SHA256SUM = shasum -a 256
|
||||||
|
build_darwin_DOWNLOAD = curl --location --fail --connect-timeout $(DOWNLOAD_CONNECT_TIMEOUT) --retry $(DOWNLOAD_RETRIES) -o
|
||||||
|
|
||||||
|
#darwin host on darwin builder. overrides darwin host preferences.
|
||||||
|
darwin_CC=$(shell xcrun -f clang) -mmacosx-version-min=$(OSX_MIN_VERSION)
|
||||||
|
darwin_CXX:=$(shell xcrun -f clang++) -mmacosx-version-min=$(OSX_MIN_VERSION) -stdlib=libc++
|
||||||
|
darwin_AR:=$(shell xcrun -f ar)
|
||||||
|
darwin_RANLIB:=$(shell xcrun -f ranlib)
|
||||||
|
darwin_STRIP:=$(shell xcrun -f strip)
|
||||||
|
darwin_LIBTOOL:=$(shell xcrun -f libtool)
|
||||||
|
darwin_OTOOL:=$(shell xcrun -f otool)
|
||||||
|
darwin_NM:=$(shell xcrun -f nm)
|
||||||
|
darwin_INSTALL_NAME_TOOL:=$(shell xcrun -f install_name_tool)
|
||||||
|
darwin_native_toolchain=
|
||||||
20
contrib/depends/builders/default.mk
Normal file
20
contrib/depends/builders/default.mk
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
default_build_CC = gcc
|
||||||
|
default_build_CXX = g++
|
||||||
|
default_build_AR = ar
|
||||||
|
default_build_RANLIB = ranlib
|
||||||
|
default_build_STRIP = strip
|
||||||
|
default_build_NM = nm
|
||||||
|
default_build_OTOOL = otool
|
||||||
|
default_build_INSTALL_NAME_TOOL = install_name_tool
|
||||||
|
|
||||||
|
define add_build_tool_func
|
||||||
|
build_$(build_os)_$1 ?= $$(default_build_$1)
|
||||||
|
build_$(build_arch)_$(build_os)_$1 ?= $$(build_$(build_os)_$1)
|
||||||
|
build_$1=$$(build_$(build_arch)_$(build_os)_$1)
|
||||||
|
endef
|
||||||
|
$(foreach var,CC CXX AR RANLIB NM STRIP SHA256SUM DOWNLOAD OTOOL INSTALL_NAME_TOOL,$(eval $(call add_build_tool_func,$(var))))
|
||||||
|
define add_build_flags_func
|
||||||
|
build_$(build_arch)_$(build_os)_$1 += $(build_$(build_os)_$1)
|
||||||
|
build_$1=$$(build_$(build_arch)_$(build_os)_$1)
|
||||||
|
endef
|
||||||
|
$(foreach flags, CFLAGS CXXFLAGS LDFLAGS, $(eval $(call add_build_flags_func,$(flags))))
|
||||||
2
contrib/depends/builders/linux.mk
Normal file
2
contrib/depends/builders/linux.mk
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
build_linux_SHA256SUM = sha256sum
|
||||||
|
build_linux_DOWNLOAD = curl --location --fail --connect-timeout $(DOWNLOAD_CONNECT_TIMEOUT) --retry $(DOWNLOAD_RETRIES) -o
|
||||||
1466
contrib/depends/config.guess
vendored
Executable file
1466
contrib/depends/config.guess
vendored
Executable file
File diff suppressed because it is too large
Load Diff
100
contrib/depends/config.site.in
Normal file
100
contrib/depends/config.site.in
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
depends_prefix="`dirname ${ac_site_file}`/.."
|
||||||
|
|
||||||
|
cross_compiling=maybe
|
||||||
|
host_alias=@HOST@
|
||||||
|
ac_tool_prefix=${host_alias}-
|
||||||
|
|
||||||
|
if test -z $with_boost; then
|
||||||
|
with_boost=$depends_prefix
|
||||||
|
fi
|
||||||
|
if test -z $with_qt_plugindir; then
|
||||||
|
with_qt_plugindir=$depends_prefix/plugins
|
||||||
|
fi
|
||||||
|
if test -z $with_qt_translationdir; then
|
||||||
|
with_qt_translationdir=$depends_prefix/translations
|
||||||
|
fi
|
||||||
|
if test -z $with_qt_bindir && test -z "@no_qt@"; then
|
||||||
|
with_qt_bindir=$depends_prefix/native/bin
|
||||||
|
fi
|
||||||
|
if test -z $with_protoc_bindir && test -z "@no_qt@"; then
|
||||||
|
with_protoc_bindir=$depends_prefix/native/bin
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if test -z $enable_wallet && test -n "@no_wallet@"; then
|
||||||
|
enable_wallet=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -z $with_miniupnpc && test -n "@no_upnp@"; then
|
||||||
|
with_miniupnpc=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -z $with_gui && test -n "@no_qt@"; then
|
||||||
|
with_gui=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test x@host_os@ = xdarwin; then
|
||||||
|
BREW=no
|
||||||
|
PORT=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test x@host_os@ = xmingw32; then
|
||||||
|
if test -z $with_qt_incdir; then
|
||||||
|
with_qt_incdir=$depends_prefix/include
|
||||||
|
fi
|
||||||
|
if test -z $with_qt_libdir; then
|
||||||
|
with_qt_libdir=$depends_prefix/lib
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
PATH=$depends_prefix/native/bin:$PATH
|
||||||
|
PKG_CONFIG="`which pkg-config` --static"
|
||||||
|
|
||||||
|
# These two need to remain exported because pkg-config does not see them
|
||||||
|
# otherwise. That means they must be unexported at the end of configure.ac to
|
||||||
|
# avoid ruining the cache. Sigh.
|
||||||
|
export PKG_CONFIG_PATH=$depends_prefix/share/pkgconfig:$depends_prefix/lib/pkgconfig
|
||||||
|
if test -z "@allow_host_packages@"; then
|
||||||
|
export PKGCONFIG_LIBDIR=
|
||||||
|
fi
|
||||||
|
|
||||||
|
CPPFLAGS="-I$depends_prefix/include/ $CPPFLAGS"
|
||||||
|
LDFLAGS="-L$depends_prefix/lib $LDFLAGS"
|
||||||
|
|
||||||
|
CC="@CC@"
|
||||||
|
CXX="@CXX@"
|
||||||
|
OBJC="${CC}"
|
||||||
|
CCACHE=$depends_prefix/native/bin/ccache
|
||||||
|
PYTHONPATH=$depends_prefix/native/lib/python/dist-packages:$PYTHONPATH
|
||||||
|
|
||||||
|
if test -n "@AR@"; then
|
||||||
|
AR=@AR@
|
||||||
|
ac_cv_path_ac_pt_AR=${AR}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -n "@RANLIB@"; then
|
||||||
|
RANLIB=@RANLIB@
|
||||||
|
ac_cv_path_ac_pt_RANLIB=${RANLIB}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -n "@NM@"; then
|
||||||
|
NM=@NM@
|
||||||
|
ac_cv_path_ac_pt_NM=${NM}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -n "@debug@"; then
|
||||||
|
enable_reduce_exports=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -n "@CFLAGS@"; then
|
||||||
|
CFLAGS="@CFLAGS@ $CFLAGS"
|
||||||
|
fi
|
||||||
|
if test -n "@CXXFLAGS@"; then
|
||||||
|
CXXFLAGS="@CXXFLAGS@ $CXXFLAGS"
|
||||||
|
fi
|
||||||
|
if test -n "@CPPFLAGS@"; then
|
||||||
|
CPPFLAGS="@CPPFLAGS@ $CPPFLAGS"
|
||||||
|
fi
|
||||||
|
if test -n "@LDFLAGS@"; then
|
||||||
|
LDFLAGS="@LDFLAGS@ $LDFLAGS"
|
||||||
|
fi
|
||||||
1836
contrib/depends/config.sub
vendored
Executable file
1836
contrib/depends/config.sub
vendored
Executable file
File diff suppressed because it is too large
Load Diff
53
contrib/depends/description.md
Normal file
53
contrib/depends/description.md
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
This is a system of building and caching dependencies necessary for building Bitcoin.
|
||||||
|
There are several features that make it different from most similar systems:
|
||||||
|
|
||||||
|
### It is designed to be builder and host agnostic
|
||||||
|
|
||||||
|
In theory, binaries for any target OS/architecture can be created, from a
|
||||||
|
builder running any OS/architecture. In practice, build-side tools must be
|
||||||
|
specified when the defaults don't fit, and packages must be amended to work
|
||||||
|
on new hosts. For now, a build architecture of x86_64 is assumed, either on
|
||||||
|
Linux or OSX.
|
||||||
|
|
||||||
|
### No reliance on timestamps
|
||||||
|
|
||||||
|
File presence is used to determine what needs to be built. This makes the
|
||||||
|
results distributable and easily digestable by automated builders.
|
||||||
|
|
||||||
|
### Each build only has its specified dependencies available at build-time.
|
||||||
|
|
||||||
|
For each build, the sysroot is wiped and the (recursive) dependencies are
|
||||||
|
installed. This makes each build deterministic, since there will never be any
|
||||||
|
unknown files available to cause side-effects.
|
||||||
|
|
||||||
|
### Each package is cached and only rebuilt as needed.
|
||||||
|
|
||||||
|
Before building, a unique build-id is generated for each package. This id
|
||||||
|
consists of a hash of all files used to build the package (Makefiles, packages,
|
||||||
|
etc), and as well as a hash of the same data for each recursive dependency. If
|
||||||
|
any portion of a package's build recipe changes, it will be rebuilt as well as
|
||||||
|
any other package that depends on it. If any of the main makefiles (Makefile,
|
||||||
|
funcs.mk, etc) are changed, all packages will be rebuilt. After building, the
|
||||||
|
results are cached into a tarball that can be re-used and distributed.
|
||||||
|
|
||||||
|
### Package build results are (relatively) deterministic.
|
||||||
|
|
||||||
|
Each package is configured and patched so that it will yield the same
|
||||||
|
build-results with each consequent build, within a reasonable set of
|
||||||
|
constraints. Some things like timestamp insertion are unavoidable, and are
|
||||||
|
beyond the scope of this system. Additionally, the toolchain itself must be
|
||||||
|
capable of deterministic results. When revisions are properly bumped, a cached
|
||||||
|
build should represent an exact single payload.
|
||||||
|
|
||||||
|
### Sources are fetched and verified automatically
|
||||||
|
|
||||||
|
Each package must define its source location and checksum. The build will fail
|
||||||
|
if the fetched source does not match. Sources may be pre-seeded and/or cached
|
||||||
|
as desired.
|
||||||
|
|
||||||
|
### Self-cleaning
|
||||||
|
|
||||||
|
Build and staging dirs are wiped after use, and any previous version of a
|
||||||
|
cached result is removed following a successful build. Automated builders
|
||||||
|
should be able to build each revision and store the results with no further
|
||||||
|
intervention.
|
||||||
245
contrib/depends/funcs.mk
Normal file
245
contrib/depends/funcs.mk
Normal file
@@ -0,0 +1,245 @@
|
|||||||
|
define int_vars
|
||||||
|
#Set defaults for vars which may be overridden per-package
|
||||||
|
$(1)_cc=$($($(1)_type)_CC)
|
||||||
|
$(1)_cxx=$($($(1)_type)_CXX)
|
||||||
|
$(1)_objc=$($($(1)_type)_OBJC)
|
||||||
|
$(1)_objcxx=$($($(1)_type)_OBJCXX)
|
||||||
|
$(1)_ar=$($($(1)_type)_AR)
|
||||||
|
$(1)_ranlib=$($($(1)_type)_RANLIB)
|
||||||
|
$(1)_libtool=$($($(1)_type)_LIBTOOL)
|
||||||
|
$(1)_nm=$($($(1)_type)_NM)
|
||||||
|
$(1)_cflags=$($($(1)_type)_CFLAGS) $($($(1)_type)_$(release_type)_CFLAGS)
|
||||||
|
$(1)_cxxflags=$($($(1)_type)_CXXFLAGS) $($($(1)_type)_$(release_type)_CXXFLAGS)
|
||||||
|
$(1)_ldflags=$($($(1)_type)_LDFLAGS) $($($(1)_type)_$(release_type)_LDFLAGS) -L$($($(1)_type)_prefix)/lib
|
||||||
|
$(1)_cppflags=$($($(1)_type)_CPPFLAGS) $($($(1)_type)_$(release_type)_CPPFLAGS) -I$($($(1)_type)_prefix)/include
|
||||||
|
$(1)_recipe_hash:=
|
||||||
|
endef
|
||||||
|
|
||||||
|
define int_get_all_dependencies
|
||||||
|
$(sort $(foreach dep,$(2),$(2) $(call int_get_all_dependencies,$(1),$($(dep)_dependencies))))
|
||||||
|
endef
|
||||||
|
|
||||||
|
define fetch_file_inner
|
||||||
|
( mkdir -p $$($(1)_download_dir) && echo Fetching $(3) from $(2) && \
|
||||||
|
$(build_DOWNLOAD) "$$($(1)_download_dir)/$(4).temp" "$(2)/$(3)" && \
|
||||||
|
echo "$(5) $$($(1)_download_dir)/$(4).temp" > $$($(1)_download_dir)/.$(4).hash && \
|
||||||
|
$(build_SHA256SUM) -c $$($(1)_download_dir)/.$(4).hash && \
|
||||||
|
mv $$($(1)_download_dir)/$(4).temp $$($(1)_source_dir)/$(4) && \
|
||||||
|
rm -rf $$($(1)_download_dir) )
|
||||||
|
endef
|
||||||
|
|
||||||
|
define fetch_file
|
||||||
|
( test -f $$($(1)_source_dir)/$(4) || \
|
||||||
|
( $(call fetch_file_inner,$(1),$(2),$(3),$(4),$(5)) || \
|
||||||
|
$(call fetch_file_inner,$(1),$(FALLBACK_DOWNLOAD_PATH),$(3),$(4),$(5))))
|
||||||
|
endef
|
||||||
|
|
||||||
|
define int_get_build_recipe_hash
|
||||||
|
$(eval $(1)_all_file_checksums:=$(shell $(build_SHA256SUM) $(meta_depends) packages/$(1).mk $(addprefix $(PATCHES_PATH)/$(1)/,$($(1)_patches)) | cut -d" " -f1))
|
||||||
|
$(eval $(1)_recipe_hash:=$(shell echo -n "$($(1)_all_file_checksums)" | $(build_SHA256SUM) | cut -d" " -f1))
|
||||||
|
endef
|
||||||
|
|
||||||
|
define int_get_build_id
|
||||||
|
$(eval $(1)_dependencies += $($(1)_$(host_arch)_$(host_os)_dependencies) $($(1)_$(host_os)_dependencies))
|
||||||
|
$(eval $(1)_all_dependencies:=$(call int_get_all_dependencies,$(1),$($($(1)_type)_native_toolchain) $($(1)_dependencies)))
|
||||||
|
$(foreach dep,$($(1)_all_dependencies),$(eval $(1)_build_id_deps+=$(dep)-$($(dep)_version)-$($(dep)_recipe_hash)))
|
||||||
|
$(eval $(1)_build_id_long:=$(1)-$($(1)_version)-$($(1)_recipe_hash)-$(release_type) $($(1)_build_id_deps) $($($(1)_type)_id_string))
|
||||||
|
$(eval $(1)_build_id:=$(shell echo -n "$($(1)_build_id_long)" | $(build_SHA256SUM) | cut -c-$(HASH_LENGTH)))
|
||||||
|
final_build_id_long+=$($(package)_build_id_long)
|
||||||
|
|
||||||
|
#compute package-specific paths
|
||||||
|
$(1)_build_subdir?=.
|
||||||
|
$(1)_download_file?=$($(1)_file_name)
|
||||||
|
$(1)_source_dir:=$(SOURCES_PATH)
|
||||||
|
$(1)_source:=$$($(1)_source_dir)/$($(1)_file_name)
|
||||||
|
$(1)_staging_dir=$(base_staging_dir)/$(host)/$(1)/$($(1)_version)-$($(1)_build_id)
|
||||||
|
$(1)_staging_prefix_dir:=$$($(1)_staging_dir)$($($(1)_type)_prefix)
|
||||||
|
$(1)_extract_dir:=$(base_build_dir)/$(host)/$(1)/$($(1)_version)-$($(1)_build_id)
|
||||||
|
$(1)_download_dir:=$(base_download_dir)/$(1)-$($(1)_version)
|
||||||
|
$(1)_build_dir:=$$($(1)_extract_dir)/$$($(1)_build_subdir)
|
||||||
|
$(1)_cached_checksum:=$(BASE_CACHE)/$(host)/$(1)/$(1)-$($(1)_version)-$($(1)_build_id).tar.gz.hash
|
||||||
|
$(1)_patch_dir:=$(base_build_dir)/$(host)/$(1)/$($(1)_version)-$($(1)_build_id)/.patches-$($(1)_build_id)
|
||||||
|
$(1)_prefixbin:=$($($(1)_type)_prefix)/bin/
|
||||||
|
$(1)_cached:=$(BASE_CACHE)/$(host)/$(1)/$(1)-$($(1)_version)-$($(1)_build_id).tar.gz
|
||||||
|
$(1)_all_sources=$($(1)_file_name) $($(1)_extra_sources)
|
||||||
|
|
||||||
|
#stamps
|
||||||
|
$(1)_fetched=$(SOURCES_PATH)/download-stamps/.stamp_fetched-$(1)-$($(1)_file_name).hash
|
||||||
|
$(1)_extracted=$$($(1)_extract_dir)/.stamp_extracted
|
||||||
|
$(1)_preprocessed=$$($(1)_extract_dir)/.stamp_preprocessed
|
||||||
|
$(1)_cleaned=$$($(1)_extract_dir)/.stamp_cleaned
|
||||||
|
$(1)_built=$$($(1)_build_dir)/.stamp_built
|
||||||
|
$(1)_configured=$$($(1)_build_dir)/.stamp_configured
|
||||||
|
$(1)_staged=$$($(1)_staging_dir)/.stamp_staged
|
||||||
|
$(1)_postprocessed=$$($(1)_staging_prefix_dir)/.stamp_postprocessed
|
||||||
|
$(1)_download_path_fixed=$(subst :,\:,$$($(1)_download_path))
|
||||||
|
|
||||||
|
|
||||||
|
#default commands
|
||||||
|
$(1)_fetch_cmds ?= $(call fetch_file,$(1),$(subst \:,:,$$($(1)_download_path_fixed)),$$($(1)_download_file),$($(1)_file_name),$($(1)_sha256_hash))
|
||||||
|
$(1)_extract_cmds ?= mkdir -p $$($(1)_extract_dir) && echo "$$($(1)_sha256_hash) $$($(1)_source)" > $$($(1)_extract_dir)/.$$($(1)_file_name).hash && $(build_SHA256SUM) -c $$($(1)_extract_dir)/.$$($(1)_file_name).hash && tar --strip-components=1 -xf $$($(1)_source)
|
||||||
|
$(1)_preprocess_cmds ?=
|
||||||
|
$(1)_build_cmds ?=
|
||||||
|
$(1)_config_cmds ?=
|
||||||
|
$(1)_stage_cmds ?=
|
||||||
|
$(1)_set_vars ?=
|
||||||
|
|
||||||
|
|
||||||
|
all_sources+=$$($(1)_fetched)
|
||||||
|
endef
|
||||||
|
#$(foreach dep_target,$($(1)_all_dependencies),$(eval $(1)_dependency_targets=$($(dep_target)_cached)))
|
||||||
|
|
||||||
|
|
||||||
|
define int_config_attach_build_config
|
||||||
|
$(eval $(call $(1)_set_vars,$(1)))
|
||||||
|
$(1)_cflags+=$($(1)_cflags_$(release_type))
|
||||||
|
$(1)_cflags+=$($(1)_cflags_$(host_arch)) $($(1)_cflags_$(host_arch)_$(release_type))
|
||||||
|
$(1)_cflags+=$($(1)_cflags_$(host_os)) $($(1)_cflags_$(host_os)_$(release_type))
|
||||||
|
$(1)_cflags+=$($(1)_cflags_$(host_arch)_$(host_os)) $($(1)_cflags_$(host_arch)_$(host_os)_$(release_type))
|
||||||
|
|
||||||
|
$(1)_cxxflags+=$($(1)_cxxflags_$(release_type))
|
||||||
|
$(1)_cxxflags+=$($(1)_cxxflags_$(host_arch)) $($(1)_cxxflags_$(host_arch)_$(release_type))
|
||||||
|
$(1)_cxxflags+=$($(1)_cxxflags_$(host_os)) $($(1)_cxxflags_$(host_os)_$(release_type))
|
||||||
|
$(1)_cxxflags+=$($(1)_cxxflags_$(host_arch)_$(host_os)) $($(1)_cxxflags_$(host_arch)_$(host_os)_$(release_type))
|
||||||
|
|
||||||
|
$(1)_cppflags+=$($(1)_cppflags_$(release_type))
|
||||||
|
$(1)_cppflags+=$($(1)_cppflags_$(host_arch)) $($(1)_cppflags_$(host_arch)_$(release_type))
|
||||||
|
$(1)_cppflags+=$($(1)_cppflags_$(host_os)) $($(1)_cppflags_$(host_os)_$(release_type))
|
||||||
|
$(1)_cppflags+=$($(1)_cppflags_$(host_arch)_$(host_os)) $($(1)_cppflags_$(host_arch)_$(host_os)_$(release_type))
|
||||||
|
|
||||||
|
$(1)_ldflags+=$($(1)_ldflags_$(release_type))
|
||||||
|
$(1)_ldflags+=$($(1)_ldflags_$(host_arch)) $($(1)_ldflags_$(host_arch)_$(release_type))
|
||||||
|
$(1)_ldflags+=$($(1)_ldflags_$(host_os)) $($(1)_ldflags_$(host_os)_$(release_type))
|
||||||
|
$(1)_ldflags+=$($(1)_ldflags_$(host_arch)_$(host_os)) $($(1)_ldflags_$(host_arch)_$(host_os)_$(release_type))
|
||||||
|
|
||||||
|
$(1)_build_opts+=$$($(1)_build_opts_$(release_type))
|
||||||
|
$(1)_build_opts+=$$($(1)_build_opts_$(host_arch)) $$($(1)_build_opts_$(host_arch)_$(release_type))
|
||||||
|
$(1)_build_opts+=$$($(1)_build_opts_$(host_os)) $$($(1)_build_opts_$(host_os)_$(release_type))
|
||||||
|
$(1)_build_opts+=$$($(1)_build_opts_$(host_arch)_$(host_os)) $$($(1)_build_opts_$(host_arch)_$(host_os)_$(release_type))
|
||||||
|
|
||||||
|
$(1)_config_opts+=$$($(1)_config_opts_$(release_type))
|
||||||
|
$(1)_config_opts+=$$($(1)_config_opts_$(host_arch)) $$($(1)_config_opts_$(host_arch)_$(release_type))
|
||||||
|
$(1)_config_opts+=$$($(1)_config_opts_$(host_os)) $$($(1)_config_opts_$(host_os)_$(release_type))
|
||||||
|
$(1)_config_opts+=$$($(1)_config_opts_$(host_arch)_$(host_os)) $$($(1)_config_opts_$(host_arch)_$(host_os)_$(release_type))
|
||||||
|
|
||||||
|
$(1)_config_env+=$$($(1)_config_env_$(release_type))
|
||||||
|
$(1)_config_env+=$($(1)_config_env_$(host_arch)) $($(1)_config_env_$(host_arch)_$(release_type))
|
||||||
|
$(1)_config_env+=$($(1)_config_env_$(host_os)) $($(1)_config_env_$(host_os)_$(release_type))
|
||||||
|
$(1)_config_env+=$($(1)_config_env_$(host_arch)_$(host_os)) $($(1)_config_env_$(host_arch)_$(host_os)_$(release_type))
|
||||||
|
|
||||||
|
$(1)_config_env+=PKG_CONFIG_LIBDIR=$($($(1)_type)_prefix)/lib/pkgconfig
|
||||||
|
$(1)_config_env+=PKG_CONFIG_PATH=$($($(1)_type)_prefix)/share/pkgconfig
|
||||||
|
$(1)_config_env+=PATH=$(build_prefix)/bin:$(PATH)
|
||||||
|
$(1)_build_env+=PATH=$(build_prefix)/bin:$(PATH)
|
||||||
|
$(1)_stage_env+=PATH=$(build_prefix)/bin:$(PATH)
|
||||||
|
$(1)_autoconf=./configure --host=$($($(1)_type)_host) --disable-dependency-tracking --prefix=$($($(1)_type)_prefix) $$($(1)_config_opts) CC="$$($(1)_cc)" CXX="$$($(1)_cxx)"
|
||||||
|
|
||||||
|
ifneq ($($(1)_nm),)
|
||||||
|
$(1)_autoconf += NM="$$($(1)_nm)"
|
||||||
|
endif
|
||||||
|
ifneq ($($(1)_ranlib),)
|
||||||
|
$(1)_autoconf += RANLIB="$$($(1)_ranlib)"
|
||||||
|
endif
|
||||||
|
ifneq ($($(1)_ar),)
|
||||||
|
$(1)_autoconf += AR="$$($(1)_ar)"
|
||||||
|
endif
|
||||||
|
ifneq ($($(1)_cflags),)
|
||||||
|
$(1)_autoconf += CFLAGS="$$($(1)_cflags)"
|
||||||
|
endif
|
||||||
|
ifneq ($($(1)_cxxflags),)
|
||||||
|
$(1)_autoconf += CXXFLAGS="$$($(1)_cxxflags)"
|
||||||
|
endif
|
||||||
|
ifneq ($($(1)_cppflags),)
|
||||||
|
$(1)_autoconf += CPPFLAGS="$$($(1)_cppflags)"
|
||||||
|
endif
|
||||||
|
ifneq ($($(1)_ldflags),)
|
||||||
|
$(1)_autoconf += LDFLAGS="$$($(1)_ldflags)"
|
||||||
|
endif
|
||||||
|
endef
|
||||||
|
|
||||||
|
define int_add_cmds
|
||||||
|
$($(1)_fetched):
|
||||||
|
$(AT)mkdir -p $$(@D) $(SOURCES_PATH)
|
||||||
|
$(AT)rm -f $$@
|
||||||
|
$(AT)touch $$@
|
||||||
|
$(AT)cd $$(@D); $(call $(1)_fetch_cmds,$(1))
|
||||||
|
$(AT)cd $($(1)_source_dir); $(foreach source,$($(1)_all_sources),$(build_SHA256SUM) $(source) >> $$(@);)
|
||||||
|
$(AT)touch $$@
|
||||||
|
$($(1)_extracted): | $($(1)_fetched)
|
||||||
|
$(AT)echo Extracting $(1)...
|
||||||
|
$(AT)mkdir -p $$(@D)
|
||||||
|
$(AT)cd $$(@D); $(call $(1)_extract_cmds,$(1))
|
||||||
|
$(AT)touch $$@
|
||||||
|
$($(1)_preprocessed): | $($(1)_dependencies) $($(1)_extracted)
|
||||||
|
$(AT)echo Preprocessing $(1)...
|
||||||
|
$(AT)mkdir -p $$(@D) $($(1)_patch_dir)
|
||||||
|
$(AT)$(foreach patch,$($(1)_patches),cd $(PATCHES_PATH)/$(1); cp $(patch) $($(1)_patch_dir) ;)
|
||||||
|
$(AT)cd $$(@D); $(call $(1)_preprocess_cmds, $(1))
|
||||||
|
$(AT)touch $$@
|
||||||
|
$($(1)_configured): | $($(1)_preprocessed)
|
||||||
|
$(AT)echo Configuring $(1)...
|
||||||
|
$(AT)rm -rf $(host_prefix); mkdir -p $(host_prefix)/lib; cd $(host_prefix); $(foreach package,$($(1)_all_dependencies), tar xf $($(package)_cached); )
|
||||||
|
$(AT)mkdir -p $$(@D)
|
||||||
|
$(AT)+cd $$(@D); $($(1)_config_env) $(call $(1)_config_cmds, $(1))
|
||||||
|
$(AT)touch $$@
|
||||||
|
$($(1)_built): | $($(1)_configured)
|
||||||
|
$(AT)echo Building $(1)...
|
||||||
|
$(AT)mkdir -p $$(@D)
|
||||||
|
$(AT)+cd $$(@D); $($(1)_build_env) $(call $(1)_build_cmds, $(1))
|
||||||
|
$(AT)touch $$@
|
||||||
|
$($(1)_staged): | $($(1)_built)
|
||||||
|
$(AT)echo Staging $(1)...
|
||||||
|
$(AT)mkdir -p $($(1)_staging_dir)/$(host_prefix)
|
||||||
|
$(AT)cd $($(1)_build_dir); $($(1)_stage_env) $(call $(1)_stage_cmds, $(1))
|
||||||
|
$(AT)rm -rf $($(1)_extract_dir)
|
||||||
|
$(AT)touch $$@
|
||||||
|
$($(1)_postprocessed): | $($(1)_staged)
|
||||||
|
$(AT)echo Postprocessing $(1)...
|
||||||
|
$(AT)cd $($(1)_staging_prefix_dir); $(call $(1)_postprocess_cmds)
|
||||||
|
$(AT)touch $$@
|
||||||
|
$($(1)_cached): | $($(1)_dependencies) $($(1)_postprocessed)
|
||||||
|
$(AT)echo Caching $(1)...
|
||||||
|
$(AT)cd $$($(1)_staging_dir)/$(host_prefix); find . | sort | tar --no-recursion -czf $$($(1)_staging_dir)/$$(@F) -T -
|
||||||
|
$(AT)mkdir -p $$(@D)
|
||||||
|
$(AT)rm -rf $$(@D) && mkdir -p $$(@D)
|
||||||
|
$(AT)mv $$($(1)_staging_dir)/$$(@F) $$(@)
|
||||||
|
$(AT)rm -rf $($(1)_staging_dir)
|
||||||
|
$($(1)_cached_checksum): $($(1)_cached)
|
||||||
|
$(AT)cd $$(@D); $(build_SHA256SUM) $$(<F) > $$(@)
|
||||||
|
|
||||||
|
.PHONY: $(1)
|
||||||
|
$(1): | $($(1)_cached_checksum)
|
||||||
|
.SECONDARY: $($(1)_cached) $($(1)_postprocessed) $($(1)_staged) $($(1)_built) $($(1)_configured) $($(1)_preprocessed) $($(1)_extracted) $($(1)_fetched)
|
||||||
|
|
||||||
|
endef
|
||||||
|
|
||||||
|
# These functions create the build targets for each package. They must be
|
||||||
|
# broken down into small steps so that each part is done for all packages
|
||||||
|
# before moving on to the next step. Otherwise, a package's info
|
||||||
|
# (build-id for example) would only be available to another package if it
|
||||||
|
# happened to be computed already.
|
||||||
|
|
||||||
|
#set the type for host/build packages.
|
||||||
|
$(foreach native_package,$(native_packages),$(eval $(native_package)_type=build))
|
||||||
|
$(foreach package,$(packages),$(eval $(package)_type=$(host_arch)_$(host_os)))
|
||||||
|
|
||||||
|
#set overridable defaults
|
||||||
|
$(foreach package,$(all_packages),$(eval $(call int_vars,$(package))))
|
||||||
|
|
||||||
|
#include package files
|
||||||
|
$(foreach package,$(all_packages),$(eval include packages/$(package).mk))
|
||||||
|
|
||||||
|
#compute a hash of all files that comprise this package's build recipe
|
||||||
|
$(foreach package,$(all_packages),$(eval $(call int_get_build_recipe_hash,$(package))))
|
||||||
|
|
||||||
|
#generate a unique id for this package, incorporating its dependencies as well
|
||||||
|
$(foreach package,$(all_packages),$(eval $(call int_get_build_id,$(package))))
|
||||||
|
|
||||||
|
#compute final vars after reading package vars
|
||||||
|
$(foreach package,$(all_packages),$(eval $(call int_config_attach_build_config,$(package))))
|
||||||
|
|
||||||
|
#create build targets
|
||||||
|
$(foreach package,$(all_packages),$(eval $(call int_add_cmds,$(package))))
|
||||||
|
|
||||||
|
#special exception: if a toolchain package exists, all non-native packages depend on it
|
||||||
|
$(foreach package,$(packages),$(eval $($(package)_unpacked): |$($($(host_arch)_$(host_os)_native_toolchain)_cached) ))
|
||||||
17
contrib/depends/hosts/darwin.mk
Normal file
17
contrib/depends/hosts/darwin.mk
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
OSX_MIN_VERSION=10.8
|
||||||
|
OSX_SDK_VERSION=10.11
|
||||||
|
OSX_SDK=$(SDK_PATH)/MacOSX$(OSX_SDK_VERSION).sdk
|
||||||
|
LD64_VERSION=253.9
|
||||||
|
darwin_CC=clang -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -mlinker-version=$(LD64_VERSION) -B $(host_prefix)/native/bin
|
||||||
|
darwin_CXX=clang++ -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -mlinker-version=$(LD64_VERSION) -stdlib=libc++ -B $(host_prefix)/native/bin
|
||||||
|
|
||||||
|
darwin_CFLAGS=-pipe
|
||||||
|
darwin_CXXFLAGS=$(darwin_CFLAGS)
|
||||||
|
|
||||||
|
darwin_release_CFLAGS=-O1
|
||||||
|
darwin_release_CXXFLAGS=$(darwin_release_CFLAGS)
|
||||||
|
|
||||||
|
darwin_debug_CFLAGS=-O1
|
||||||
|
darwin_debug_CXXFLAGS=$(darwin_debug_CFLAGS)
|
||||||
|
|
||||||
|
darwin_native_toolchain=native_cctools
|
||||||
26
contrib/depends/hosts/default.mk
Normal file
26
contrib/depends/hosts/default.mk
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
default_host_CC = $(host_toolchain)gcc
|
||||||
|
default_host_CXX = $(host_toolchain)g++
|
||||||
|
default_host_AR = $(host_toolchain)ar
|
||||||
|
default_host_RANLIB = $(host_toolchain)ranlib
|
||||||
|
default_host_STRIP = $(host_toolchain)strip
|
||||||
|
default_host_LIBTOOL = $(host_toolchain)libtool
|
||||||
|
default_host_INSTALL_NAME_TOOL = $(host_toolchain)install_name_tool
|
||||||
|
default_host_OTOOL = $(host_toolchain)otool
|
||||||
|
default_host_NM = $(host_toolchain)nm
|
||||||
|
|
||||||
|
define add_host_tool_func
|
||||||
|
$(host_os)_$1?=$$(default_host_$1)
|
||||||
|
$(host_arch)_$(host_os)_$1?=$$($(host_os)_$1)
|
||||||
|
$(host_arch)_$(host_os)_$(release_type)_$1?=$$($(host_os)_$1)
|
||||||
|
host_$1=$$($(host_arch)_$(host_os)_$1)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define add_host_flags_func
|
||||||
|
$(host_arch)_$(host_os)_$1 += $($(host_os)_$1)
|
||||||
|
$(host_arch)_$(host_os)_$(release_type)_$1 += $($(host_os)_$(release_type)_$1)
|
||||||
|
host_$1 = $$($(host_arch)_$(host_os)_$1)
|
||||||
|
host_$(release_type)_$1 = $$($(host_arch)_$(host_os)_$(release_type)_$1)
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(foreach tool,CC CXX AR RANLIB STRIP NM LIBTOOL OTOOL INSTALL_NAME_TOOL,$(eval $(call add_host_tool_func,$(tool))))
|
||||||
|
$(foreach flags,CFLAGS CXXFLAGS CPPFLAGS LDFLAGS, $(eval $(call add_host_flags_func,$(flags))))
|
||||||
31
contrib/depends/hosts/linux.mk
Normal file
31
contrib/depends/hosts/linux.mk
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
linux_CFLAGS=-pipe
|
||||||
|
linux_CXXFLAGS=$(linux_CFLAGS)
|
||||||
|
|
||||||
|
linux_release_CFLAGS=-O2
|
||||||
|
linux_release_CXXFLAGS=$(linux_release_CFLAGS)
|
||||||
|
|
||||||
|
linux_debug_CFLAGS=-O1
|
||||||
|
linux_debug_CXXFLAGS=$(linux_debug_CFLAGS)
|
||||||
|
|
||||||
|
linux_debug_CPPFLAGS=-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC
|
||||||
|
|
||||||
|
ifeq (86,$(findstring 86,$(build_arch)))
|
||||||
|
i686_linux_CC=gcc -m32
|
||||||
|
i686_linux_CXX=g++ -m32
|
||||||
|
i686_linux_AR=ar
|
||||||
|
i686_linux_RANLIB=ranlib
|
||||||
|
i686_linux_NM=nm
|
||||||
|
i686_linux_STRIP=strip
|
||||||
|
|
||||||
|
x86_64_linux_CC=gcc -m64
|
||||||
|
x86_64_linux_CXX=g++ -m64
|
||||||
|
x86_64_linux_AR=ar
|
||||||
|
x86_64_linux_RANLIB=ranlib
|
||||||
|
x86_64_linux_NM=nm
|
||||||
|
x86_64_linux_STRIP=strip
|
||||||
|
else
|
||||||
|
i686_linux_CC=$(default_host_CC) -m32
|
||||||
|
i686_linux_CXX=$(default_host_CXX) -m32
|
||||||
|
x86_64_linux_CC=$(default_host_CC) -m64
|
||||||
|
x86_64_linux_CXX=$(default_host_CXX) -m64
|
||||||
|
endif
|
||||||
10
contrib/depends/hosts/mingw32.mk
Normal file
10
contrib/depends/hosts/mingw32.mk
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
mingw32_CFLAGS=-pipe
|
||||||
|
mingw32_CXXFLAGS=$(mingw32_CFLAGS)
|
||||||
|
|
||||||
|
mingw32_release_CFLAGS=-O2
|
||||||
|
mingw32_release_CXXFLAGS=$(mingw32_release_CFLAGS)
|
||||||
|
|
||||||
|
mingw32_debug_CFLAGS=-O1
|
||||||
|
mingw32_debug_CXXFLAGS=$(mingw32_debug_CFLAGS)
|
||||||
|
|
||||||
|
mingw32_debug_CPPFLAGS=-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC
|
||||||
147
contrib/depends/packages.md
Normal file
147
contrib/depends/packages.md
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
Each recipe consists of 3 main parts: defining identifiers, setting build
|
||||||
|
variables, and defining build commands.
|
||||||
|
|
||||||
|
The package "mylib" will be used here as an example
|
||||||
|
|
||||||
|
General tips:
|
||||||
|
- mylib_foo is written as $(package)_foo in order to make recipes more similar.
|
||||||
|
|
||||||
|
## Identifiers
|
||||||
|
Each package is required to define at least these variables:
|
||||||
|
|
||||||
|
$(package)_version:
|
||||||
|
Version of the upstream library or program. If there is no version, a
|
||||||
|
placeholder such as 1.0 can be used.
|
||||||
|
|
||||||
|
$(package)_download_path:
|
||||||
|
Location of the upstream source, without the file-name. Usually http or
|
||||||
|
ftp.
|
||||||
|
|
||||||
|
$(package)_file_name:
|
||||||
|
The upstream source filename available at the download path.
|
||||||
|
|
||||||
|
$(package)_sha256_hash:
|
||||||
|
The sha256 hash of the upstream file
|
||||||
|
|
||||||
|
These variables are optional:
|
||||||
|
|
||||||
|
$(package)_build_subdir:
|
||||||
|
cd to this dir before running configure/build/stage commands.
|
||||||
|
|
||||||
|
$(package)_download_file:
|
||||||
|
The file-name of the upstream source if it differs from how it should be
|
||||||
|
stored locally. This can be used to avoid storing file-names with strange
|
||||||
|
characters.
|
||||||
|
|
||||||
|
$(package)_dependencies:
|
||||||
|
Names of any other packages that this one depends on.
|
||||||
|
|
||||||
|
$(package)_patches:
|
||||||
|
Filenames of any patches needed to build the package
|
||||||
|
|
||||||
|
$(package)_extra_sources:
|
||||||
|
Any extra files that will be fetched via $(package)_fetch_cmds. These are
|
||||||
|
specified so that they can be fetched and verified via 'make download'.
|
||||||
|
|
||||||
|
|
||||||
|
## Build Variables:
|
||||||
|
After defining the main identifiers, build variables may be added or customized
|
||||||
|
before running the build commands. They should be added to a function called
|
||||||
|
$(package)_set_vars. For example:
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
...
|
||||||
|
endef
|
||||||
|
|
||||||
|
Most variables can be prefixed with the host, architecture, or both, to make
|
||||||
|
the modifications specific to that case. For example:
|
||||||
|
|
||||||
|
Universal: $(package)_cc=gcc
|
||||||
|
Linux only: $(package)_linux_cc=gcc
|
||||||
|
x86_64 only: $(package)_x86_64_cc = gcc
|
||||||
|
x86_64 linux only: $(package)_x86_64_linux_cc = gcc
|
||||||
|
|
||||||
|
These variables may be set to override or append their default values.
|
||||||
|
|
||||||
|
$(package)_cc
|
||||||
|
$(package)_cxx
|
||||||
|
$(package)_objc
|
||||||
|
$(package)_objcxx
|
||||||
|
$(package)_ar
|
||||||
|
$(package)_ranlib
|
||||||
|
$(package)_libtool
|
||||||
|
$(package)_nm
|
||||||
|
$(package)_cflags
|
||||||
|
$(package)_cxxflags
|
||||||
|
$(package)_ldflags
|
||||||
|
$(package)_cppflags
|
||||||
|
$(package)_config_env
|
||||||
|
$(package)_build_env
|
||||||
|
$(package)_stage_env
|
||||||
|
$(package)_build_opts
|
||||||
|
$(package)_config_opts
|
||||||
|
|
||||||
|
The *_env variables are used to add environment variables to the respective
|
||||||
|
commands.
|
||||||
|
|
||||||
|
Many variables respect a debug/release suffix as well, in order to use them for
|
||||||
|
only the appropriate build config. For example:
|
||||||
|
|
||||||
|
$(package)_cflags_release = -O3
|
||||||
|
$(package)_cflags_i686_debug = -g
|
||||||
|
$(package)_config_opts_release = --disable-debug
|
||||||
|
|
||||||
|
These will be used in addition to the options that do not specify
|
||||||
|
debug/release. All builds are considered to be release unless DEBUG=1 is set by
|
||||||
|
the user. Other variables may be defined as needed.
|
||||||
|
|
||||||
|
## Build commands:
|
||||||
|
|
||||||
|
For each build, a unique build dir and staging dir are created. For example,
|
||||||
|
`work/build/mylib/1.0-1adac830f6e` and `work/staging/mylib/1.0-1adac830f6e`.
|
||||||
|
|
||||||
|
The following build commands are available for each recipe:
|
||||||
|
|
||||||
|
$(package)_fetch_cmds:
|
||||||
|
Runs from: build dir
|
||||||
|
Fetch the source file. If undefined, it will be fetched and verified
|
||||||
|
against its hash.
|
||||||
|
|
||||||
|
$(package)_extract_cmds:
|
||||||
|
Runs from: build dir
|
||||||
|
Verify the source file against its hash and extract it. If undefined, the
|
||||||
|
source is assumed to be a tarball.
|
||||||
|
|
||||||
|
$(package)_preprocess_cmds:
|
||||||
|
Runs from: build dir/$(package)_build_subdir
|
||||||
|
Preprocess the source as necessary. If undefined, does nothing.
|
||||||
|
|
||||||
|
$(package)_config_cmds:
|
||||||
|
Runs from: build dir/$(package)_build_subdir
|
||||||
|
Configure the source. If undefined, does nothing.
|
||||||
|
|
||||||
|
$(package)_build_cmds:
|
||||||
|
Runs from: build dir/$(package)_build_subdir
|
||||||
|
Build the source. If undefined, does nothing.
|
||||||
|
|
||||||
|
$(package)_stage_cmds:
|
||||||
|
Runs from: build dir/$(package)_build_subdir
|
||||||
|
Stage the build results. If undefined, does nothing.
|
||||||
|
|
||||||
|
The following variables are available for each recipe:
|
||||||
|
|
||||||
|
$(1)_staging_dir: package's destination sysroot path
|
||||||
|
$(1)_staging_prefix_dir: prefix path inside of the package's staging dir
|
||||||
|
$(1)_extract_dir: path to the package's extracted sources
|
||||||
|
$(1)_build_dir: path where configure/build/stage commands will be run
|
||||||
|
$(1)_patch_dir: path where the package's patches (if any) are found
|
||||||
|
|
||||||
|
Notes on build commands:
|
||||||
|
|
||||||
|
For packages built with autotools, $($(package)_autoconf) can be used in the
|
||||||
|
configure step to (usually) correctly configure automatically. Any
|
||||||
|
$($(package)_config_opts) will be appended.
|
||||||
|
|
||||||
|
Most autotools projects can be properly staged using:
|
||||||
|
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||||
31
contrib/depends/packages/bdb.mk
Normal file
31
contrib/depends/packages/bdb.mk
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
package=bdb
|
||||||
|
$(package)_version=4.8.30
|
||||||
|
$(package)_download_path=http://download.oracle.com/berkeley-db
|
||||||
|
$(package)_file_name=db-$($(package)_version).NC.tar.gz
|
||||||
|
$(package)_sha256_hash=12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef
|
||||||
|
$(package)_build_subdir=build_unix
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_config_opts=--disable-shared --enable-cxx --disable-replication
|
||||||
|
$(package)_config_opts_mingw32=--enable-mingw
|
||||||
|
$(package)_config_opts_linux=--with-pic
|
||||||
|
$(package)_cxxflags=-std=c++11
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_preprocess_cmds
|
||||||
|
sed -i.old 's/__atomic_compare_exchange/__atomic_compare_exchange_db/' dbinc/atomic.h && \
|
||||||
|
sed -i.old 's/atomic_init/atomic_init_db/' dbinc/atomic.h mp/mp_region.c mp/mp_mvcc.c mp/mp_fget.c mutex/mut_method.c mutex/mut_tas.c && \
|
||||||
|
cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub dist
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
../dist/$($(package)_autoconf)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE) libdb_cxx-4.8.a libdb-4.8.a
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install_lib install_include
|
||||||
|
endef
|
||||||
41
contrib/depends/packages/boost.mk
Normal file
41
contrib/depends/packages/boost.mk
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
package=boost
|
||||||
|
$(package)_version=1_64_0
|
||||||
|
$(package)_download_path=https://dl.bintray.com/boostorg/release/1.64.0/source/
|
||||||
|
$(package)_file_name=$(package)_$($(package)_version).tar.bz2
|
||||||
|
$(package)_sha256_hash=7bcc5caace97baa948931d712ea5f37038dbb1c5d89b43ad4def4ed7cb683332
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_config_opts_release=variant=release
|
||||||
|
$(package)_config_opts_debug=variant=debug
|
||||||
|
$(package)_config_opts=--layout=tagged --build-type=complete --user-config=user-config.jam
|
||||||
|
$(package)_config_opts+=threading=multi link=static -sNO_BZIP2=1 -sNO_ZLIB=1
|
||||||
|
$(package)_config_opts_linux=threadapi=pthread runtime-link=shared
|
||||||
|
$(package)_config_opts_darwin=--toolset=darwin-4.2.1 runtime-link=shared
|
||||||
|
$(package)_config_opts_mingw32=binary-format=pe target-os=windows threadapi=win32 runtime-link=static
|
||||||
|
$(package)_config_opts_x86_64_mingw32=address-model=64
|
||||||
|
$(package)_config_opts_i686_mingw32=address-model=32
|
||||||
|
$(package)_config_opts_i686_linux=address-model=32 architecture=x86
|
||||||
|
$(package)_toolset_$(host_os)=gcc
|
||||||
|
$(package)_archiver_$(host_os)=$($(package)_ar)
|
||||||
|
$(package)_toolset_darwin=darwin
|
||||||
|
$(package)_archiver_darwin=$($(package)_libtool)
|
||||||
|
$(package)_config_libraries=chrono,filesystem,program_options,system,thread,test,date_time,regex,serialization,locale
|
||||||
|
$(package)_cxxflags=-std=c++11 -fvisibility=hidden
|
||||||
|
$(package)_cxxflags_linux=-fPIC
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_preprocess_cmds
|
||||||
|
echo "using $(boost_toolset_$(host_os)) : : $($(package)_cxx) : <cxxflags>\"$($(package)_cxxflags) $($(package)_cppflags)\" <linkflags>\"$($(package)_ldflags)\" <archiver>\"$(boost_archiver_$(host_os))\" <striper>\"$(host_STR IP)\" <ranlib>\"$(host_RANLIB)\" <rc>\"$(host_WINDRES)\" : ;" > user-config.jam
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
./bootstrap.sh --without-icu --with-libraries=$(boost_config_libraries)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
./b2 -d2 -j2 -d1 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) stage
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
./b2 -d0 -j4 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) install
|
||||||
|
endef
|
||||||
67
contrib/depends/packages/cmake/conf/mxe-conf.cmake.in
Normal file
67
contrib/depends/packages/cmake/conf/mxe-conf.cmake.in
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
# This file is part of MXE. See LICENSE.md for licensing information.
|
||||||
|
|
||||||
|
# https://cmake.org/cmake/help/latest
|
||||||
|
|
||||||
|
# Can't set `cmake_minimum_required` or `cmake_policy` in toolchain
|
||||||
|
# since toolchain is read before CMakeLists.txt
|
||||||
|
# See `target-cmake.in` for CMAKE_POLICY_DEFAULT_CMPNNNN
|
||||||
|
|
||||||
|
# Check if we are using mxe supplied version
|
||||||
|
# - toolchain is included multiple times so set a guard in
|
||||||
|
# environment to suppress duplicate messages
|
||||||
|
if(NOT ${CMAKE_COMMAND} STREQUAL @PREFIX@/@BUILD@/bin/cmake AND NOT DEFINED ENV{_MXE_CMAKE_TOOLCHAIN_INCLUDED})
|
||||||
|
message(WARNING "
|
||||||
|
** Warning: direct use of toolchain file is deprecated
|
||||||
|
** Please use prefixed wrapper script instead:
|
||||||
|
@TARGET@-cmake [options] <path-to-source>
|
||||||
|
- uses mxe supplied cmake version @CMAKE_VERSION@
|
||||||
|
- loads toolchain
|
||||||
|
- loads common run results
|
||||||
|
- sets various policy defaults
|
||||||
|
")
|
||||||
|
set(ENV{_MXE_CMAKE_TOOLCHAIN_INCLUDED} TRUE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
## General configuration
|
||||||
|
set(CMAKE_SYSTEM_NAME Windows)
|
||||||
|
set(MSYS 1)
|
||||||
|
set(CMAKE_EXPORT_NO_PACKAGE_REGISTRY ON)
|
||||||
|
# Workaround for https://www.cmake.org/Bug/view.php?id=14075
|
||||||
|
set(CMAKE_CROSS_COMPILING ON)
|
||||||
|
|
||||||
|
|
||||||
|
## Library config
|
||||||
|
set(BUILD_SHARED_LIBS @CMAKE_SHARED_BOOL@ CACHE BOOL "BUILD_SHARED_LIBS" FORCE)
|
||||||
|
set(BUILD_STATIC_LIBS @CMAKE_STATIC_BOOL@ CACHE BOOL "BUILD_STATIC_LIBS" FORCE)
|
||||||
|
set(BUILD_SHARED @CMAKE_SHARED_BOOL@ CACHE BOOL "BUILD_SHARED" FORCE)
|
||||||
|
set(BUILD_STATIC @CMAKE_STATIC_BOOL@ CACHE BOOL "BUILD_STATIC" FORCE)
|
||||||
|
set(LIBTYPE @LIBTYPE@)
|
||||||
|
|
||||||
|
|
||||||
|
## Paths etc.
|
||||||
|
set(CMAKE_FIND_ROOT_PATH @PREFIX@/@TARGET@)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
|
set(CMAKE_PREFIX_PATH @PREFIX@/@TARGET@)
|
||||||
|
set(CMAKE_INSTALL_PREFIX @PREFIX@/@TARGET@ CACHE PATH "Installation Prefix")
|
||||||
|
# For custom mxe FindPackage scripts
|
||||||
|
set(CMAKE_MODULE_PATH "@PREFIX@/share/cmake/modules" ${CMAKE_MODULE_PATH})
|
||||||
|
|
||||||
|
|
||||||
|
## Programs
|
||||||
|
set(CMAKE_C_COMPILER @PREFIX@/bin/@TARGET@-gcc)
|
||||||
|
set(CMAKE_CXX_COMPILER @PREFIX@/bin/@TARGET@-g++)
|
||||||
|
set(CMAKE_Fortran_COMPILER @PREFIX@/bin/@TARGET@-gfortran)
|
||||||
|
set(CMAKE_RC_COMPILER @PREFIX@/bin/@TARGET@-windres)
|
||||||
|
# CMAKE_RC_COMPILE_OBJECT is defined in:
|
||||||
|
# <cmake root>/share/cmake-X.Y/Modules/Platform/Windows-windres.cmake
|
||||||
|
set(CPACK_NSIS_EXECUTABLE @TARGET@-makensis)
|
||||||
|
|
||||||
|
## Individual package configuration
|
||||||
|
file(GLOB mxe_cmake_files
|
||||||
|
"@CMAKE_TOOLCHAIN_DIR@/*.cmake"
|
||||||
|
)
|
||||||
|
foreach(mxe_cmake_file ${mxe_cmake_files})
|
||||||
|
include(${mxe_cmake_file})
|
||||||
|
endforeach()
|
||||||
29
contrib/depends/packages/cmake/conf/target-cmake.in
Normal file
29
contrib/depends/packages/cmake/conf/target-cmake.in
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
echo "== Using MXE wrapper: @PREFIX@/bin/@TARGET@-cmake"
|
||||||
|
|
||||||
|
# https://cmake.org/cmake/help/latest/manual/cmake-policies.7.html
|
||||||
|
# https://cmake.org/cmake/help/latest/variable/CMAKE_POLICY_DEFAULT_CMPNNNN.html
|
||||||
|
POLICIES=(0017,0020)
|
||||||
|
|
||||||
|
unset NO_MXE_TOOLCHAIN
|
||||||
|
if echo -- "$@" | grep -Ewq "(--build|-E|--system-information)" ; then
|
||||||
|
NO_MXE_TOOLCHAIN=1
|
||||||
|
fi
|
||||||
|
if [[ "$NO_MXE_TOOLCHAIN" == "1" ]]; then
|
||||||
|
echo "== Skip using MXE toolchain: @CMAKE_TOOLCHAIN_FILE@"
|
||||||
|
# see https://github.com/mxe/mxe/issues/932
|
||||||
|
exec "@PREFIX@/@BUILD@/bin/cmake" "$@"
|
||||||
|
else
|
||||||
|
echo " - cmake version @CMAKE_VERSION@"
|
||||||
|
echo " - warnings for unused CMAKE_POLICY_DEFAULT variables can be ignored"
|
||||||
|
echo "== Using MXE toolchain: @CMAKE_TOOLCHAIN_FILE@"
|
||||||
|
echo "== Using MXE runresult: @CMAKE_RUNRESULT_FILE@"
|
||||||
|
if ! ( echo "$@" | grep --silent "DCMAKE_BUILD_TYPE" ) ; then
|
||||||
|
echo '== Adding "-DCMAKE_BUILD_TYPE=Release"'
|
||||||
|
set -- "-DCMAKE_BUILD_TYPE=Release" "$@"
|
||||||
|
fi
|
||||||
|
exec "@PREFIX@/@BUILD@/bin/cmake" \
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE="@CMAKE_TOOLCHAIN_FILE@" \
|
||||||
|
`eval echo -DCMAKE_POLICY_DEFAULT_CMP{$POLICIES}=NEW` \
|
||||||
|
-C"@CMAKE_RUNRESULT_FILE@" "$@"
|
||||||
|
fi
|
||||||
18
contrib/depends/packages/cmake/test/CMakeLists.txt
Normal file
18
contrib/depends/packages/cmake/test/CMakeLists.txt
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# This file is part of MXE. See LICENSE.md for licensing information.
|
||||||
|
|
||||||
|
# 2.8.9 is Debian Wheezy version
|
||||||
|
cmake_minimum_required(VERSION 2.8.9)
|
||||||
|
|
||||||
|
# use default C and CXX languages
|
||||||
|
project(mxe)
|
||||||
|
|
||||||
|
# see cmake --help-policy <cmp> for details
|
||||||
|
cmake_policy(SET CMP0017 NEW)
|
||||||
|
if (POLICY CMP0020)
|
||||||
|
cmake_policy(SET CMP0020 NEW)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# so we can find pkg-test.cmake files to include
|
||||||
|
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/../.. ${CMAKE_MODULE_PATH})
|
||||||
|
|
||||||
|
include(${PKG}-test)
|
||||||
15
contrib/depends/packages/cppzmq.mk
Normal file
15
contrib/depends/packages/cppzmq.mk
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
package=cppzmq
|
||||||
|
$(package)_version=4.2.3
|
||||||
|
$(package)_download_path=https://github.com/zeromq/cppzmq/archive/
|
||||||
|
$(package)_file_name=v$($(package)_version).tar.gz
|
||||||
|
$(package)_sha256_hash=3e6b57bf49115f4ae893b1ff7848ead7267013087dc7be1ab27636a97144d373
|
||||||
|
$(package)_dependencies=zeromq
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
mkdir $($(package)_staging_prefix_dir)/include &&\
|
||||||
|
cp zmq.hpp $($(package)_staging_prefix_dir)/include
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_postprocess_cmds
|
||||||
|
rm -rf bin share
|
||||||
|
endef
|
||||||
22
contrib/depends/packages/expat.mk
Normal file
22
contrib/depends/packages/expat.mk
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
package=expat
|
||||||
|
$(package)_version=2.2.4
|
||||||
|
$(package)_download_path=https://downloads.sourceforge.net/project/expat/expat/$($(package)_version)
|
||||||
|
$(package)_file_name=$(package)-$($(package)_version).tar.bz2
|
||||||
|
$(package)_sha256_hash=03ad85db965f8ab2d27328abcf0bc5571af6ec0a414874b2066ee3fdd372019e
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_config_opts=--enable-static
|
||||||
|
$(package)_config_opts+=--prefix=$(host_prefix)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
$($(package)_autoconf) $($(package)_config_opts)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||||
|
endef
|
||||||
30
contrib/depends/packages/graphviz.mk
Normal file
30
contrib/depends/packages/graphviz.mk
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
package=graphviz
|
||||||
|
$(package)_version=2.40.1
|
||||||
|
$(package)_download_path=www.graphviz.org/pub/graphviz/stable/SOURCES/
|
||||||
|
$(package)_file_name=$(package)-$($(package)_version).tar.gz
|
||||||
|
$(package)_sha256_hash=ca5218fade0204d59947126c38439f432853543b0818d9d728c589dfe7f3a421
|
||||||
|
|
||||||
|
define $(package)_preprocess_cmds
|
||||||
|
./autogen.sh
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_config_opts=--disable-shared --enable-multibye --without-purify --without-curses
|
||||||
|
$(package)_config_opts_release=--disable-debug-mode
|
||||||
|
$(package)_config_opts_linux=--with-pic
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
$($(package)_autoconf)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_postprocess_cmds
|
||||||
|
endef
|
||||||
32
contrib/depends/packages/icu4c.mk
Normal file
32
contrib/depends/packages/icu4c.mk
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
package=icu4c
|
||||||
|
$(package)_version=55.1
|
||||||
|
$(package)_download_path=https://github.com/TheCharlatan/icu4c/archive
|
||||||
|
$(package)_file_name=55.1.tar.gz
|
||||||
|
$(package)_sha256_hash=1f912c54035533fb4268809701d65c7468d00e292efbc31e6444908450cc46ef
|
||||||
|
$(package)_patches=icu-001-dont-build-static-dynamic-twice.patch
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_build_opts=CFLAGS="$($(package)_cflags) $($(package)_cppflags) -DU_USING_ICU_NAMESPACE=0 --std=gnu++0x -DU_STATIC_IMPLEMENTATION -DU_COMBINED_IMPLEMENTATION -fPIC"
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
patch -p1 < $($(package)_patch_dir)/icu-001-dont-build-static-dynamic-twice.patch &&\
|
||||||
|
mkdir builda &&\
|
||||||
|
mkdir buildb &&\
|
||||||
|
cd builda &&\
|
||||||
|
sh ../source/runConfigureICU Linux &&\
|
||||||
|
make &&\
|
||||||
|
cd ../buildb &&\
|
||||||
|
sh ../source/$($(package)_autoconf) --enable-static=yes --enable-shared=yes --disable-layoutex --prefix=$(host_prefix) --with-cross-build=`pwd`/../builda &&\
|
||||||
|
$(MAKE) $($(package)_build_opts)
|
||||||
|
endef
|
||||||
|
|
||||||
|
#define $(package)_build_cmds
|
||||||
|
# cd source &&\
|
||||||
|
$(MAKE) $($((package)_build_opts) `nproc`
|
||||||
|
#endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
cd buildb &&\
|
||||||
|
$(MAKE) $($(package)_build_opts) DESTDIR=$($(package)_staging_dir) install lib/*
|
||||||
|
endef
|
||||||
28
contrib/depends/packages/ldns.mk
Normal file
28
contrib/depends/packages/ldns.mk
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
package=ldns
|
||||||
|
$(package)_version=1.6.17
|
||||||
|
$(package)_download_path=http://www.nlnetlabs.nl/downloads/ldns/
|
||||||
|
$(package)_file_name=$(package)-$($(package)_version).tar.gz
|
||||||
|
$(package)_sha256_hash=8b88e059452118e8949a2752a55ce59bc71fa5bc414103e17f5b6b06f9bcc8cd
|
||||||
|
$(package)_dependencies=openssl
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_config_opts=--disable-shared --enable-static --disable-dane-ta-usage --with-drill
|
||||||
|
$(package)_config_opts=--with-ssl=$(host_prefix)
|
||||||
|
$(package)_config_opts_release=--disable-debug-mode
|
||||||
|
$(package)_config_opts_linux=--with-pic
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
$($(package)_autoconf)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install-h install-lib
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_postprocess_cmds
|
||||||
|
endef
|
||||||
23
contrib/depends/packages/libICE.mk
Normal file
23
contrib/depends/packages/libICE.mk
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
package=libICE
|
||||||
|
$(package)_version=1.0.9
|
||||||
|
$(package)_download_path=http://xorg.freedesktop.org/releases/individual/lib/
|
||||||
|
$(package)_file_name=$(package)-$($(package)_version).tar.bz2
|
||||||
|
$(package)_sha256_hash=8f7032f2c1c64352b5423f6b48a8ebdc339cc63064af34d66a6c9aa79759e202
|
||||||
|
$(package)_dependencies=xtrans xproto
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_config_opts=--disable-static --disable-docs --disable-specs --without-xsltproc
|
||||||
|
$(package)_config_opts_linux=--with-pic
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
$($(package)_autoconf)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||||
|
endef
|
||||||
23
contrib/depends/packages/libSM.mk
Normal file
23
contrib/depends/packages/libSM.mk
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
package=libSM
|
||||||
|
$(package)_version=1.2.2
|
||||||
|
$(package)_download_path=http://xorg.freedesktop.org/releases/individual/lib/
|
||||||
|
$(package)_file_name=$(package)-$($(package)_version).tar.bz2
|
||||||
|
$(package)_sha256_hash=0baca8c9f5d934450a70896c4ad38d06475521255ca63b717a6510fdb6e287bd
|
||||||
|
$(package)_dependencies=xtrans xproto libICE
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_config_opts=--without-libuuid --without-xsltproc --disable-docs --disable-static
|
||||||
|
$(package)_config_opts_linux=--with-pic
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
$($(package)_autoconf)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||||
|
endef
|
||||||
30
contrib/depends/packages/libevent.mk
Normal file
30
contrib/depends/packages/libevent.mk
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
package=libevent
|
||||||
|
$(package)_version=2.1.8-stable
|
||||||
|
$(package)_download_path=https://github.com/libevent/libevent/archive/
|
||||||
|
$(package)_file_name=release-$($(package)_version).tar.gz
|
||||||
|
$(package)_sha256_hash=316ddb401745ac5d222d7c529ef1eada12f58f6376a66c1118eee803cb70f83d
|
||||||
|
|
||||||
|
define $(package)_preprocess_cmds
|
||||||
|
./autogen.sh
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_config_opts=--disable-shared --disable-openssl --disable-libevent-regress --disable-samples
|
||||||
|
$(package)_config_opts_release=--disable-debug-mode
|
||||||
|
$(package)_config_opts_linux=--with-pic
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
$($(package)_autoconf)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_postprocess_cmds
|
||||||
|
endef
|
||||||
17
contrib/depends/packages/libiconv.mk
Normal file
17
contrib/depends/packages/libiconv.mk
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
package=libiconv
|
||||||
|
$(package)_version=1.15
|
||||||
|
$(package)_download_path=https://ftp.gnu.org/gnu/libiconv
|
||||||
|
$(package)_file_name=libiconv-$($(package)_version).tar.gz
|
||||||
|
$(package)_sha256_hash=ccf536620a45458d26ba83887a983b96827001e92a13847b45e4925cc8913178
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
$($(package)_autoconf) --disable-nls --enable-static --disable-shared
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||||
|
endef
|
||||||
28
contrib/depends/packages/miniupnpc.mk
Normal file
28
contrib/depends/packages/miniupnpc.mk
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
package=miniupnpc
|
||||||
|
$(package)_version=2.0.20170509
|
||||||
|
$(package)_download_path=http://miniupnp.free.fr/files
|
||||||
|
$(package)_file_name=$(package)-$($(package)_version).tar.gz
|
||||||
|
$(package)_sha256_hash=d3c368627f5cdfb66d3ebd64ca39ba54d6ff14a61966dbecb8dd296b7039f16a
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_build_opts=CC="$($(package)_cc)"
|
||||||
|
$(package)_build_opts_darwin=OS=Darwin LIBTOOL="$($(package)_libtool)"
|
||||||
|
$(package)_build_opts_mingw32=-f Makefile.mingw
|
||||||
|
$(package)_build_env+=CFLAGS="$($(package)_cflags) $($(package)_cppflags)" AR="$($(package)_ar)"
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_preprocess_cmds
|
||||||
|
mkdir dll && \
|
||||||
|
sed -e 's|MINIUPNPC_VERSION_STRING \"version\"|MINIUPNPC_VERSION_STRING \"$($(package)_version)\"|' -e 's|OS/version|$(host)|' miniupnpcstrings.h.in > miniupnpcstrings.h && \
|
||||||
|
sed -i.old "s|miniupnpcstrings.h: miniupnpcstrings.h.in wingenminiupnpcstrings|miniupnpcstrings.h: miniupnpcstrings.h.in|" Makefile.mingw
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE) libminiupnpc.a $($(package)_build_opts)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
mkdir -p $($(package)_staging_prefix_dir)/include/miniupnpc $($(package)_staging_prefix_dir)/lib &&\
|
||||||
|
install *.h $($(package)_staging_prefix_dir)/include/miniupnpc &&\
|
||||||
|
install libminiupnpc.a $($(package)_staging_prefix_dir)/lib
|
||||||
|
endef
|
||||||
20
contrib/depends/packages/native_biplist.mk
Normal file
20
contrib/depends/packages/native_biplist.mk
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
package=native_biplist
|
||||||
|
$(package)_version=0.9
|
||||||
|
$(package)_download_path=https://pypi.python.org/packages/source/b/biplist
|
||||||
|
$(package)_file_name=biplist-$($(package)_version).tar.gz
|
||||||
|
$(package)_sha256_hash=b57cadfd26e4754efdf89e9e37de87885f9b5c847b2615688ca04adfaf6ca604
|
||||||
|
$(package)_install_libdir=$(build_prefix)/lib/python/dist-packages
|
||||||
|
$(package)_patches=sorted_list.patch
|
||||||
|
|
||||||
|
define $(package)_preprocess_cmds
|
||||||
|
patch -p1 < $($(package)_patch_dir)/sorted_list.patch
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
python setup.py build
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
mkdir -p $($(package)_install_libdir) && \
|
||||||
|
python setup.py install --root=$($(package)_staging_dir) --prefix=$(build_prefix) --install-lib=$($(package)_install_libdir)
|
||||||
|
endef
|
||||||
25
contrib/depends/packages/native_ccache.mk
Normal file
25
contrib/depends/packages/native_ccache.mk
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
package=native_ccache
|
||||||
|
$(package)_version=3.3.4
|
||||||
|
$(package)_download_path=https://samba.org/ftp/ccache
|
||||||
|
$(package)_file_name=ccache-$($(package)_version).tar.bz2
|
||||||
|
$(package)_sha256_hash=fa9d7f38367431bc86b19ad107d709ca7ecf1574fdacca01698bdf0a47cd8567
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_config_opts=
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
$($(package)_autoconf)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_postprocess_cmds
|
||||||
|
rm -rf lib include
|
||||||
|
endef
|
||||||
65
contrib/depends/packages/native_cctools.mk
Normal file
65
contrib/depends/packages/native_cctools.mk
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
package=native_cctools
|
||||||
|
$(package)_version=807d6fd1be5d2224872e381870c0a75387fe05e6
|
||||||
|
$(package)_download_path=https://github.com/theuni/cctools-port/archive
|
||||||
|
$(package)_file_name=$($(package)_version).tar.gz
|
||||||
|
$(package)_sha256_hash=a09c9ba4684670a0375e42d9d67e7f12c1f62581a27f28f7c825d6d7032ccc6a
|
||||||
|
$(package)_build_subdir=cctools
|
||||||
|
$(package)_clang_version=3.7.1
|
||||||
|
$(package)_clang_download_path=http://llvm.org/releases/$($(package)_clang_version)
|
||||||
|
$(package)_clang_download_file=clang+llvm-$($(package)_clang_version)-x86_64-linux-gnu-ubuntu-14.04.tar.xz
|
||||||
|
$(package)_clang_file_name=clang-llvm-$($(package)_clang_version)-x86_64-linux-gnu-ubuntu-14.04.tar.xz
|
||||||
|
$(package)_clang_sha256_hash=99b28a6b48e793705228a390471991386daa33a9717cd9ca007fcdde69608fd9
|
||||||
|
$(package)_extra_sources=$($(package)_clang_file_name)
|
||||||
|
|
||||||
|
define $(package)_fetch_cmds
|
||||||
|
$(call fetch_file,$(package),$($(package)_download_path),$($(package)_download_file),$($(package)_file_name),$($(package)_sha256_hash)) && \
|
||||||
|
$(call fetch_file,$(package),$($(package)_clang_download_path),$($(package)_clang_download_file),$($(package)_clang_file_name),$($(package)_clang_sha256_hash))
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_extract_cmds
|
||||||
|
mkdir -p $($(package)_extract_dir) && \
|
||||||
|
echo "$($(package)_sha256_hash) $($(package)_source)" > $($(package)_extract_dir)/.$($(package)_file_name).hash && \
|
||||||
|
echo "$($(package)_clang_sha256_hash) $($(package)_source_dir)/$($(package)_clang_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \
|
||||||
|
$(build_SHA256SUM) -c $($(package)_extract_dir)/.$($(package)_file_name).hash && \
|
||||||
|
mkdir -p toolchain/bin toolchain/lib/clang/3.5/include && \
|
||||||
|
tar --strip-components=1 -C toolchain -xf $($(package)_source_dir)/$($(package)_clang_file_name) && \
|
||||||
|
rm -f toolchain/lib/libc++abi.so* && \
|
||||||
|
echo "#!/bin/sh" > toolchain/bin/$(host)-dsymutil && \
|
||||||
|
echo "exit 0" >> toolchain/bin/$(host)-dsymutil && \
|
||||||
|
chmod +x toolchain/bin/$(host)-dsymutil && \
|
||||||
|
tar --strip-components=1 -xf $($(package)_source)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_config_opts=--target=$(host) --disable-lto-support
|
||||||
|
$(package)_ldflags+=-Wl,-rpath=\\$$$$$$$$\$$$$$$$$ORIGIN/../lib
|
||||||
|
$(package)_cc=$($(package)_extract_dir)/toolchain/bin/clang
|
||||||
|
$(package)_cxx=$($(package)_extract_dir)/toolchain/bin/clang++
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_preprocess_cmds
|
||||||
|
cd $($(package)_build_subdir); ./autogen.sh && \
|
||||||
|
sed -i.old "/define HAVE_PTHREADS/d" ld64/src/ld/InputFiles.h
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
$($(package)_autoconf)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install && \
|
||||||
|
cd $($(package)_extract_dir)/toolchain && \
|
||||||
|
mkdir -p $($(package)_staging_prefix_dir)/lib/clang/$($(package)_clang_version)/include && \
|
||||||
|
mkdir -p $($(package)_staging_prefix_dir)/bin $($(package)_staging_prefix_dir)/include && \
|
||||||
|
cp bin/clang $($(package)_staging_prefix_dir)/bin/ &&\
|
||||||
|
cp -P bin/clang++ $($(package)_staging_prefix_dir)/bin/ &&\
|
||||||
|
cp lib/libLTO.so $($(package)_staging_prefix_dir)/lib/ && \
|
||||||
|
cp -rf lib/clang/$($(package)_clang_version)/include/* $($(package)_staging_prefix_dir)/lib/clang/$($(package)_clang_version)/include/ && \
|
||||||
|
cp bin/llvm-dsymutil $($(package)_staging_prefix_dir)/bin/$(host)-dsymutil && \
|
||||||
|
if `test -d include/c++/`; then cp -rf include/c++/ $($(package)_staging_prefix_dir)/include/; fi && \
|
||||||
|
if `test -d lib/c++/`; then cp -rf lib/c++/ $($(package)_staging_prefix_dir)/lib/; fi
|
||||||
|
endef
|
||||||
26
contrib/depends/packages/native_cdrkit.mk
Normal file
26
contrib/depends/packages/native_cdrkit.mk
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
package=native_cdrkit
|
||||||
|
$(package)_version=1.1.11
|
||||||
|
$(package)_download_path=http://distro.ibiblio.org/fatdog/source/600/c
|
||||||
|
$(package)_file_name=cdrkit-$($(package)_version).tar.bz2
|
||||||
|
$(package)_sha256_hash=b50d64c214a65b1a79afe3a964c691931a4233e2ba605d793eb85d0ac3652564
|
||||||
|
$(package)_patches=cdrkit-deterministic.patch
|
||||||
|
|
||||||
|
define $(package)_preprocess_cmds
|
||||||
|
patch -p1 < $($(package)_patch_dir)/cdrkit-deterministic.patch
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
cmake -DCMAKE_INSTALL_PREFIX=$(build_prefix)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE) genisoimage
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) -C genisoimage install
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_postprocess_cmds
|
||||||
|
rm bin/isovfy bin/isoinfo bin/isodump bin/isodebug bin/devdump
|
||||||
|
endef
|
||||||
17
contrib/depends/packages/native_ds_store.mk
Normal file
17
contrib/depends/packages/native_ds_store.mk
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
package=native_ds_store
|
||||||
|
$(package)_version=1.1.0
|
||||||
|
$(package)_download_path=https://bitbucket.org/al45tair/ds_store/get
|
||||||
|
$(package)_download_file=v$($(package)_version).tar.bz2
|
||||||
|
$(package)_file_name=$(package)-$($(package)_version).tar.bz2
|
||||||
|
$(package)_sha256_hash=921596764d71d1bbd3297a90ef6d286f718794d667e4f81d91d14053525d64c1
|
||||||
|
$(package)_install_libdir=$(build_prefix)/lib/python/dist-packages
|
||||||
|
$(package)_dependencies=native_biplist
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
python setup.py build
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
mkdir -p $($(package)_install_libdir) && \
|
||||||
|
python setup.py install --root=$($(package)_staging_dir) --prefix=$(build_prefix) --install-lib=$($(package)_install_libdir)
|
||||||
|
endef
|
||||||
22
contrib/depends/packages/native_libdmg-hfsplus.mk
Normal file
22
contrib/depends/packages/native_libdmg-hfsplus.mk
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
package=native_libdmg-hfsplus
|
||||||
|
$(package)_version=0.1
|
||||||
|
$(package)_download_path=https://github.com/theuni/libdmg-hfsplus/archive
|
||||||
|
$(package)_file_name=libdmg-hfsplus-v$($(package)_version).tar.gz
|
||||||
|
$(package)_sha256_hash=6569a02eb31c2827080d7d59001869ea14484c281efab0ae7f2b86af5c3120b3
|
||||||
|
$(package)_build_subdir=build
|
||||||
|
|
||||||
|
define $(package)_preprocess_cmds
|
||||||
|
mkdir build
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
cmake -DCMAKE_INSTALL_PREFIX:PATH=$(build_prefix)/bin ..
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE) -C dmg
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) -C dmg install
|
||||||
|
endef
|
||||||
21
contrib/depends/packages/native_mac_alias.mk
Normal file
21
contrib/depends/packages/native_mac_alias.mk
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
package=native_mac_alias
|
||||||
|
$(package)_version=1.1.0
|
||||||
|
$(package)_download_path=https://bitbucket.org/al45tair/mac_alias/get
|
||||||
|
$(package)_download_file=v$($(package)_version).tar.bz2
|
||||||
|
$(package)_file_name=$(package)-$($(package)_version).tar.bz2
|
||||||
|
$(package)_sha256_hash=87ad827e66790028361e43fc754f68ed041a9bdb214cca03c853f079b04fb120
|
||||||
|
$(package)_install_libdir=$(build_prefix)/lib/python/dist-packages
|
||||||
|
$(package)_patches=python3.patch
|
||||||
|
|
||||||
|
define $(package)_preprocess_cmds
|
||||||
|
patch -p1 < $($(package)_patch_dir)/python3.patch
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
python setup.py build
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
mkdir -p $($(package)_install_libdir) && \
|
||||||
|
python setup.py install --root=$($(package)_staging_dir) --prefix=$(build_prefix) --install-lib=$($(package)_install_libdir)
|
||||||
|
endef
|
||||||
78
contrib/depends/packages/openssl.mk
Normal file
78
contrib/depends/packages/openssl.mk
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
package=openssl
|
||||||
|
$(package)_version=1.0.1k
|
||||||
|
$(package)_download_path=https://www.openssl.org/source
|
||||||
|
$(package)_file_name=$(package)-$($(package)_version).tar.gz
|
||||||
|
$(package)_sha256_hash=8f9faeaebad088e772f4ef5e38252d472be4d878c6b3a2718c10a4fcebe7a41c
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_config_env=AR="$($(package)_ar)" RANLIB="$($(package)_ranlib)" CC="$($(package)_cc)"
|
||||||
|
$(package)_config_opts=--prefix=$(host_prefix) --openssldir=$(host_prefix)/etc/openssl
|
||||||
|
$(package)_config_opts+=no-camellia
|
||||||
|
$(package)_config_opts+=no-capieng
|
||||||
|
$(package)_config_opts+=no-cast
|
||||||
|
$(package)_config_opts+=no-comp
|
||||||
|
$(package)_config_opts+=no-dso
|
||||||
|
$(package)_config_opts+=no-dtls1
|
||||||
|
$(package)_config_opts+=no-ec_nistp_64_gcc_128
|
||||||
|
$(package)_config_opts+=no-gost
|
||||||
|
$(package)_config_opts+=no-gmp
|
||||||
|
$(package)_config_opts+=no-heartbeats
|
||||||
|
$(package)_config_opts+=no-idea
|
||||||
|
$(package)_config_opts+=no-jpake
|
||||||
|
$(package)_config_opts+=no-krb5
|
||||||
|
$(package)_config_opts+=no-libunbound
|
||||||
|
$(package)_config_opts+=no-md2
|
||||||
|
$(package)_config_opts+=no-mdc2
|
||||||
|
$(package)_config_opts+=no-rc4
|
||||||
|
$(package)_config_opts+=no-rc5
|
||||||
|
$(package)_config_opts+=no-rdrand
|
||||||
|
$(package)_config_opts+=no-rfc3779
|
||||||
|
$(package)_config_opts+=no-rsax
|
||||||
|
$(package)_config_opts+=no-sctp
|
||||||
|
$(package)_config_opts+=no-seed
|
||||||
|
$(package)_config_opts+=no-sha0
|
||||||
|
$(package)_config_opts+=no-shared
|
||||||
|
$(package)_config_opts+=no-ssl-trace
|
||||||
|
$(package)_config_opts+=no-ssl2
|
||||||
|
$(package)_config_opts+=no-ssl3
|
||||||
|
$(package)_config_opts+=no-static_engine
|
||||||
|
$(package)_config_opts+=no-store
|
||||||
|
$(package)_config_opts+=no-unit-test
|
||||||
|
$(package)_config_opts+=no-weak-ssl-ciphers
|
||||||
|
$(package)_config_opts+=no-whirlpool
|
||||||
|
$(package)_config_opts+=no-zlib
|
||||||
|
$(package)_config_opts+=no-zlib-dynamic
|
||||||
|
$(package)_config_opts+=$($(package)_cflags) $($(package)_cppflags)
|
||||||
|
$(package)_config_opts_linux=-fPIC -Wa,--noexecstack
|
||||||
|
$(package)_config_opts_x86_64_linux=linux-x86_64
|
||||||
|
$(package)_config_opts_i686_linux=linux-generic32
|
||||||
|
$(package)_config_opts_arm_linux=linux-generic32
|
||||||
|
$(package)_config_opts_aarch64_linux=linux-generic64
|
||||||
|
$(package)_config_opts_mipsel_linux=linux-generic32
|
||||||
|
$(package)_config_opts_mips_linux=linux-generic32
|
||||||
|
$(package)_config_opts_powerpc_linux=linux-generic32
|
||||||
|
$(package)_config_opts_x86_64_darwin=darwin64-x86_64-cc
|
||||||
|
$(package)_config_opts_x86_64_mingw32=mingw64
|
||||||
|
$(package)_config_opts_i686_mingw32=mingw
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_preprocess_cmds
|
||||||
|
sed -i.old "/define DATE/d" util/mkbuildinf.pl && \
|
||||||
|
sed -i.old "s|engines apps test|engines|" Makefile.org
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
./Configure $($(package)_config_opts)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE) -j1 build_libs libcrypto.pc libssl.pc openssl.pc
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) INSTALL_PREFIX=$($(package)_staging_dir) -j1 install_sw
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_postprocess_cmds
|
||||||
|
rm -rf share bin etc
|
||||||
|
endef
|
||||||
23
contrib/depends/packages/packages.mk
Normal file
23
contrib/depends/packages/packages.mk
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
packages:=boost openssl libevent zeromq cppzmq zlib expat ldns cppzmq readline libiconv qt
|
||||||
|
native_packages := native_ccache
|
||||||
|
|
||||||
|
wallet_packages=bdb
|
||||||
|
|
||||||
|
darwin_native_packages = native_biplist native_ds_store native_mac_alias
|
||||||
|
darwin_packages += sodium-darwin
|
||||||
|
|
||||||
|
ifeq ($(host_os),linux)
|
||||||
|
packages += pcsc-lite
|
||||||
|
packages += unwind
|
||||||
|
packages += sodium
|
||||||
|
endif
|
||||||
|
ifeq ($(host_os),mingw32)
|
||||||
|
packages += icu4c
|
||||||
|
packages += sodium
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifneq ($(build_os),darwin)
|
||||||
|
darwin_native_packages += native_cctools native_cdrkit native_libdmg-hfsplus
|
||||||
|
packages += readline
|
||||||
|
endif
|
||||||
|
|
||||||
26
contrib/depends/packages/pcsc-lite.mk
Normal file
26
contrib/depends/packages/pcsc-lite.mk
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
package=pcsc-lite
|
||||||
|
$(package)_version=1.8.23
|
||||||
|
$(package)_download_path=https://pcsclite.apdu.fr/files
|
||||||
|
$(package)_file_name=$(package)-$($(package)_version).tar.bz2
|
||||||
|
$(package)_sha256_hash=5a27262586eff39cfd5c19aadc8891dd71c0818d3d629539bd631b958be689c9
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_build_opts=CC="$($(package)_cc)"
|
||||||
|
$(package)_config_env=AR="$($(package)_ar)" RANLIB="$($(package)_ranlib)" CC="$($(package)_cc)"
|
||||||
|
$(package)_config_opts=--prefix=$(host_prefix)
|
||||||
|
$(package)_config_opts_release=--disable-debug-mode --disable-libsystemd --disable-libudev --enable-static --disable-shared --disable-libusb
|
||||||
|
$(package)_build_opts=CFLAGS="$($(package)_cflags) $($(package)_cppflags) -fPIC"
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
./bootstrap &&\
|
||||||
|
$($(package)_autoconf) $($(package)_config_opts)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE) $($(package)_build_opts)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||||
|
endef
|
||||||
29
contrib/depends/packages/protobuf.mk
Normal file
29
contrib/depends/packages/protobuf.mk
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
package=protobuf
|
||||||
|
$(package)_version=$(native_$(package)_version)
|
||||||
|
$(package)_download_path=$(native_$(package)_download_path)
|
||||||
|
$(package)_file_name=$(native_$(package)_file_name)
|
||||||
|
$(package)_sha256_hash=$(native_$(package)_sha256_hash)
|
||||||
|
$(package)_dependencies=native_$(package)
|
||||||
|
$(package)_cxxflags=-std=c++11
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_config_opts=--disable-shared --with-protoc=$(build_prefix)/bin/protoc
|
||||||
|
$(package)_config_opts_linux=--with-pic
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
$($(package)_autoconf)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE) -C src libprotobuf.la
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) -C src install-libLTLIBRARIES install-nobase_includeHEADERS &&\
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install-pkgconfigDATA
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_postprocess_cmds
|
||||||
|
rm lib/libprotoc.a
|
||||||
|
endef
|
||||||
150
contrib/depends/packages/qt.mk
Normal file
150
contrib/depends/packages/qt.mk
Normal file
@@ -0,0 +1,150 @@
|
|||||||
|
PACKAGE=qt
|
||||||
|
$(package)_version=5.7.1
|
||||||
|
$(package)_download_path=http://download.qt.io/official_releases/qt/5.7/$($(package)_version)/submodules
|
||||||
|
$(package)_suffix=opensource-src-$($(package)_version).tar.gz
|
||||||
|
$(package)_file_name=qtbase-$($(package)_suffix)
|
||||||
|
$(package)_sha256_hash=95f83e532d23b3ddbde7973f380ecae1bac13230340557276f75f2e37984e410
|
||||||
|
$(package)_dependencies=openssl zlib
|
||||||
|
$(package)_build_subdir=qtbase
|
||||||
|
$(package)_qt_libs=corelib
|
||||||
|
$(package)_patches=pidlist_absolute.patch fix_qt_pkgconfig.patch qfixed-coretext.patch
|
||||||
|
|
||||||
|
$(package)_qttranslations_file_name=qttranslations-$($(package)_suffix)
|
||||||
|
$(package)_qttranslations_sha256_hash=3a15aebd523c6d89fb97b2d3df866c94149653a26d27a00aac9b6d3020bc5a1d
|
||||||
|
|
||||||
|
$(package)_qttools_file_name=qttools-$($(package)_suffix)
|
||||||
|
$(package)_qttools_sha256_hash=22d67de915cb8cd93e16fdd38fa006224ad9170bd217c2be1e53045a8dd02f0f
|
||||||
|
|
||||||
|
$(package)_extra_sources = $($(package)_qttranslations_file_name)
|
||||||
|
$(package)_extra_sources += $($(package)_qttools_file_name)
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_config_opts_release = -release
|
||||||
|
$(package)_config_opts_debug = -debug
|
||||||
|
$(package)_config_opts += -bindir $(build_prefix)/bin
|
||||||
|
$(package)_config_opts += -c++std c++11
|
||||||
|
$(package)_config_opts += -confirm-license
|
||||||
|
$(package)_config_opts += -dbus-runtime
|
||||||
|
$(package)_config_opts += -no-alsa
|
||||||
|
$(package)_config_opts += -no-audio-backend
|
||||||
|
$(package)_config_opts += -no-cups
|
||||||
|
$(package)_config_opts += -no-egl
|
||||||
|
$(package)_config_opts += -no-eglfs
|
||||||
|
$(package)_config_opts += -no-feature-style-windowsmobile
|
||||||
|
$(package)_config_opts += -no-feature-style-windowsce
|
||||||
|
$(package)_config_opts += -no-freetype
|
||||||
|
$(package)_config_opts += -no-gif
|
||||||
|
$(package)_config_opts += -no-glib
|
||||||
|
$(package)_config_opts += -no-gstreamer
|
||||||
|
$(package)_config_opts += -no-icu
|
||||||
|
$(package)_config_opts += -no-iconv
|
||||||
|
$(package)_config_opts += -no-kms
|
||||||
|
$(package)_config_opts += -no-linuxfb
|
||||||
|
$(package)_config_opts += -no-libudev
|
||||||
|
$(package)_config_opts += -no-mitshm
|
||||||
|
$(package)_config_opts += -no-mtdev
|
||||||
|
$(package)_config_opts += -no-pulseaudio
|
||||||
|
$(package)_config_opts += -no-openvg
|
||||||
|
$(package)_config_opts += -no-reduce-relocations
|
||||||
|
$(package)_config_opts += -no-qml-debug
|
||||||
|
$(package)_config_opts += -no-sql-db2
|
||||||
|
$(package)_config_opts += -no-sql-ibase
|
||||||
|
$(package)_config_opts += -no-sql-oci
|
||||||
|
$(package)_config_opts += -no-sql-tds
|
||||||
|
$(package)_config_opts += -no-sql-mysql
|
||||||
|
$(package)_config_opts += -no-sql-odbc
|
||||||
|
$(package)_config_opts += -no-sql-psql
|
||||||
|
$(package)_config_opts += -no-sql-sqlite
|
||||||
|
$(package)_config_opts += -no-sql-sqlite2
|
||||||
|
$(package)_config_opts += -no-use-gold-linker
|
||||||
|
$(package)_config_opts += -no-xinput2
|
||||||
|
$(package)_config_opts += -no-xrender
|
||||||
|
$(package)_config_opts += -nomake examples
|
||||||
|
$(package)_config_opts += -nomake tests
|
||||||
|
$(package)_config_opts += -opensource
|
||||||
|
$(package)_config_opts += -openssl-linked
|
||||||
|
$(package)_config_opts += -optimized-qmake
|
||||||
|
$(package)_config_opts += -pch
|
||||||
|
$(package)_config_opts += -pkg-config
|
||||||
|
$(package)_config_opts += -qt-libpng
|
||||||
|
$(package)_config_opts += -qt-libjpeg
|
||||||
|
$(package)_config_opts += -qt-pcre
|
||||||
|
$(package)_config_opts += -system-zlib
|
||||||
|
$(package)_config_opts += -reduce-exports
|
||||||
|
$(package)_config_opts += -static
|
||||||
|
$(package)_config_opts += -silent
|
||||||
|
$(package)_config_opts += -v
|
||||||
|
$(package)_config_opts += -no-feature-printer
|
||||||
|
$(package)_config_opts += -no-feature-printdialog
|
||||||
|
$(package)_config_opts += -no-gui
|
||||||
|
$(package)_config_opts += -no-freetype
|
||||||
|
$(package)_config_opts += -no-sm
|
||||||
|
$(package)_config_opts += -no-fontconfig
|
||||||
|
$(package)_config_opts += -no-opengl
|
||||||
|
$(package)_config_opts += -no-xkb
|
||||||
|
$(package)_config_opts += -no-xcb
|
||||||
|
$(package)_config_opts += -no-xshape
|
||||||
|
$(package)_build_env = QT_RCC_TEST=1
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_fetch_cmds
|
||||||
|
$(call fetch_file,$(package),$($(package)_download_path),$($(package)_download_file),$($(package)_file_name),$($(package)_sha256_hash)) && \
|
||||||
|
$(call fetch_file,$(package),$($(package)_download_path),$($(package)_qttranslations_file_name),$($(package)_qttranslations_file_name),$($(package)_qttranslations_sha256_hash)) && \
|
||||||
|
$(call fetch_file,$(package),$($(package)_download_path),$($(package)_qttools_file_name),$($(package)_qttools_file_name),$($(package)_qttools_sha256_hash))
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_extract_cmds
|
||||||
|
mkdir -p $($(package)_extract_dir) && \
|
||||||
|
echo "$($(package)_sha256_hash) $($(package)_source)" > $($(package)_extract_dir)/.$($(package)_file_name).hash && \
|
||||||
|
echo "$($(package)_qttranslations_sha256_hash) $($(package)_source_dir)/$($(package)_qttranslations_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \
|
||||||
|
echo "$($(package)_qttools_sha256_hash) $($(package)_source_dir)/$($(package)_qttools_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \
|
||||||
|
$(build_SHA256SUM) -c $($(package)_extract_dir)/.$($(package)_file_name).hash && \
|
||||||
|
mkdir qtbase && \
|
||||||
|
tar --strip-components=1 -xf $($(package)_source) -C qtbase && \
|
||||||
|
mkdir qttranslations && \
|
||||||
|
tar --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qttranslations_file_name) -C qttranslations && \
|
||||||
|
mkdir qttools && \
|
||||||
|
tar --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qttools_file_name) -C qttools
|
||||||
|
endef
|
||||||
|
|
||||||
|
|
||||||
|
define $(package)_preprocess_cmds
|
||||||
|
sed -i.old "s|updateqm.commands = \$$$$\$$$$LRELEASE|updateqm.commands = $($(package)_extract_dir)/qttools/bin/lrelease|" qttranslations/translations/translations.pro && \
|
||||||
|
sed -i.old "/updateqm.depends =/d" qttranslations/translations/translations.pro && \
|
||||||
|
patch -p1 < $($(package)_patch_dir)/pidlist_absolute.patch && \
|
||||||
|
patch -p1 < $($(package)_patch_dir)/fix_qt_pkgconfig.patch && \
|
||||||
|
patch -p1 < $($(package)_patch_dir)/qfixed-coretext.patch && \
|
||||||
|
echo "!host_build: QMAKE_CFLAGS += $($(package)_cflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \
|
||||||
|
echo "!host_build: QMAKE_CXXFLAGS += $($(package)_cxxflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \
|
||||||
|
echo "!host_build: QMAKE_LFLAGS += $($(package)_ldflags)" >> qtbase/mkspecs/common/gcc-base.conf
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
export PKG_CONFIG_SYSROOT_DIR=/ && \
|
||||||
|
export PKG_CONFIG_LIBDIR=$(host_prefix)/lib/pkgconfig && \
|
||||||
|
export PKG_CONFIG_PATH=$(host_prefix)/share/pkgconfig && \
|
||||||
|
./configure $($(package)_config_opts) && \
|
||||||
|
echo "host_build: QT_CONFIG ~= s/system-zlib/zlib" >> mkspecs/qconfig.pri && \
|
||||||
|
echo "CONFIG += force_bootstrap" >> mkspecs/qconfig.pri && \
|
||||||
|
$(MAKE) sub-src-clean && \
|
||||||
|
cd ../qttranslations && ../qtbase/bin/qmake qttranslations.pro -o Makefile && \
|
||||||
|
cd translations && ../../qtbase/bin/qmake translations.pro -o Makefile && cd ../.. &&\
|
||||||
|
cd qttools/src/linguist/lrelease/ && ../../../../qtbase/bin/qmake lrelease.pro -o Makefile
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE) -C src $(addprefix sub-,$($(package)_qt_libs)) && \
|
||||||
|
$(MAKE) -C ../qttools/src/linguist/lrelease && \
|
||||||
|
$(MAKE) -C ../qttranslations
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) -C src INSTALL_ROOT=$($(package)_staging_dir) $(addsuffix -install_subtargets,$(addprefix sub-,$($(package)_qt_libs))) && cd .. &&\
|
||||||
|
$(MAKE) -C qttools/src/linguist/lrelease INSTALL_ROOT=$($(package)_staging_dir) install_target && \
|
||||||
|
$(MAKE) -C qttranslations INSTALL_ROOT=$($(package)_staging_dir) install_subtargets
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_postprocess_cmds
|
||||||
|
rm -rf native/mkspecs/ native/lib/ lib/cmake/ && \
|
||||||
|
rm -f lib/lib*.la lib/*.prl plugins/*/*.prl
|
||||||
|
endef
|
||||||
33
contrib/depends/packages/readline.mk
Normal file
33
contrib/depends/packages/readline.mk
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
package=readline
|
||||||
|
$(package)_version=6.3
|
||||||
|
$(package)_download_path=ftp://ftp.cwru.edu/pub/bash/
|
||||||
|
$(package)_file_name=$(package)-$($(package)_version).tar.gz
|
||||||
|
$(package)_sha256_hash=56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43
|
||||||
|
$(package)_patches=readline-1.patch
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_build_opts=CC="$($(package)_cc)"
|
||||||
|
$(package)_config_env=AR="$($(package)_ar)" RANLIB="$($(package)_ranlib)" CC="$($(package)_cc)"
|
||||||
|
$(package)_config_opts=--prefix=$(host_prefix)
|
||||||
|
$(package)_config_opts+=--disable-shared --enable-multibye --without-purify --without-curses
|
||||||
|
$(package)_config_opts_release=--disable-debug-mode
|
||||||
|
$(package)_build_opts=CFLAGS="$($(package)_cflags) $($(package)_cppflags) -fPIC"
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
patch -p1 < $($(package)_patch_dir)/readline-1.patch &&\
|
||||||
|
export bash_cv_have_mbstate_t=yes &&\
|
||||||
|
export bash_cv_wcwidth_broken=yes &&\
|
||||||
|
./configure $($(package)_config_opts)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE) $($(package)_build_opts)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_postprocess_cmds
|
||||||
|
endef
|
||||||
24
contrib/depends/packages/sodium-darwin.mk
Normal file
24
contrib/depends/packages/sodium-darwin.mk
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
package=sodium-darwin
|
||||||
|
$(package)_version=1.0.15
|
||||||
|
$(package)_download_path=https://download.libsodium.org/libsodium/releases/
|
||||||
|
$(package)_file_name=libsodium-$($(package)_version).tar.gz
|
||||||
|
$(package)_sha256_hash=fb6a9e879a2f674592e4328c5d9f79f082405ee4bb05cb6e679b90afe9e178f4
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_config_opts=--enable-static
|
||||||
|
$(package)_config_opts+=--prefix=$(host_prefix)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
./autogen.sh &&\
|
||||||
|
$($(package)_autoconf) $($(package)_config_opts) RANLIB="$(host_prefix)/native/bin/x86_64-apple-darwin11-ranlib" AR="$(host_prefix)/native/bin/x86_64-apple-darwin11-ar"
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
echo "path is problematic here" &&\
|
||||||
|
make
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||||
|
endef
|
||||||
23
contrib/depends/packages/sodium.mk
Normal file
23
contrib/depends/packages/sodium.mk
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
package=sodium
|
||||||
|
$(package)_version=1.0.15
|
||||||
|
$(package)_download_path=https://download.libsodium.org/libsodium/releases/
|
||||||
|
$(package)_file_name=libsodium-$($(package)_version).tar.gz
|
||||||
|
$(package)_sha256_hash=fb6a9e879a2f674592e4328c5d9f79f082405ee4bb05cb6e679b90afe9e178f4
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_config_opts=--enable-static
|
||||||
|
$(package)_config_opts+=--prefix=$(host_prefix)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
./autogen.sh &&\
|
||||||
|
$($(package)_autoconf) $($(package)_config_opts)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||||
|
endef
|
||||||
28
contrib/depends/packages/unbound.mk
Normal file
28
contrib/depends/packages/unbound.mk
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
package=unbound
|
||||||
|
$(package)_version=1.6.8
|
||||||
|
$(package)_download_path=http://www.unbound.net/downloads/
|
||||||
|
$(package)_file_name=$(package)-$($(package)_version).tar.gz
|
||||||
|
$(package)_sha256_hash=e3b428e33f56a45417107448418865fe08d58e0e7fea199b855515f60884dd49
|
||||||
|
$(package)_dependencies=openssl expat ldns
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_config_opts=--disable-shared --enable-static --without-pyunbound --prefix=$(host_prefix) --with-libexpat=$(host_prefix) --with-ssl=$(host_prefix) --with-libevent=no --without-pythonmodule --disable-flto --with-pthreads
|
||||||
|
$(package)_config_opts_linux=--with-pic
|
||||||
|
$(package)_config_opts_w64=--enable-static-exe --sysconfdir=/etc --prefix=$(host_prefix) --target=$(host_prefix)
|
||||||
|
$(package)_build_opts_mingw32=LDFLAGS="$($(package)_ldflags) -lpthread"
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
$($(package)_autoconf) $($(package)_config_opts)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE) $($(package)_build_opts)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_postprocess_cmds
|
||||||
|
endef
|
||||||
22
contrib/depends/packages/unwind.mk
Normal file
22
contrib/depends/packages/unwind.mk
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
package=unwind
|
||||||
|
$(package)_version=1.2
|
||||||
|
$(package)_download_path=http://download.savannah.nongnu.org/releases/libunwind
|
||||||
|
$(package)_file_name=lib$(package)-$($(package)_version).tar.gz
|
||||||
|
$(package)_sha256_hash=1de38ffbdc88bd694d10081865871cd2bfbb02ad8ef9e1606aee18d65532b992
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
cp -f $(BASEDIR)/config.guess config/config.guess &&\
|
||||||
|
cp -f $(BASEDIR)/config.sub config/config.sub &&\
|
||||||
|
$($(package)_autoconf) --disable-shared --enable-static
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_postprocess_cmds
|
||||||
|
endef
|
||||||
21
contrib/depends/packages/xproto.mk
Normal file
21
contrib/depends/packages/xproto.mk
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
package=xproto
|
||||||
|
$(package)_version=7.0.26
|
||||||
|
$(package)_download_path=http://xorg.freedesktop.org/releases/individual/proto
|
||||||
|
$(package)_file_name=$(package)-$($(package)_version).tar.bz2
|
||||||
|
$(package)_sha256_hash=636162c1759805a5a0114a369dffdeccb8af8c859ef6e1445f26a4e6e046514f
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_config_opts=--disable-shared
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
$($(package)_autoconf)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||||
|
endef
|
||||||
34
contrib/depends/packages/zeromq.mk
Normal file
34
contrib/depends/packages/zeromq.mk
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
package=zeromq
|
||||||
|
$(package)_version=4.1.5
|
||||||
|
$(package)_download_path=https://github.com/zeromq/zeromq4-1/releases/download/v$($(package)_version)/
|
||||||
|
$(package)_file_name=$(package)-$($(package)_version).tar.gz
|
||||||
|
$(package)_sha256_hash=04aac57f081ffa3a2ee5ed04887be9e205df3a7ddade0027460b8042432bdbcf
|
||||||
|
$(package)_patches=9114d3957725acd34aa8b8d011585812f3369411.patch 9e6745c12e0b100cd38acecc16ce7db02905e27c.patch
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_config_opts=--without-documentation --disable-shared --without-libsodium --disable-curve
|
||||||
|
$(package)_config_opts_linux=--with-pic
|
||||||
|
$(package)_cxxflags=-std=c++11
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_preprocess_cmds
|
||||||
|
patch -p1 < $($(package)_patch_dir)/9114d3957725acd34aa8b8d011585812f3369411.patch && \
|
||||||
|
patch -p1 < $($(package)_patch_dir)/9e6745c12e0b100cd38acecc16ce7db02905e27c.patch && \
|
||||||
|
./autogen.sh
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
$($(package)_autoconf)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE) libzmq.la
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install-libLTLIBRARIES install-includeHEADERS install-pkgconfigDATA
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_postprocess_cmds
|
||||||
|
rm -rf bin share
|
||||||
|
endef
|
||||||
27
contrib/depends/packages/zlib.mk
Normal file
27
contrib/depends/packages/zlib.mk
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
package=zlib
|
||||||
|
$(package)_version=1.2.11
|
||||||
|
$(package)_download_path=http://www.zlib.net
|
||||||
|
$(package)_file_name=$(package)-$($(package)_version).tar.gz
|
||||||
|
$(package)_sha256_hash=c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_build_opts= CC="$($(package)_cc)"
|
||||||
|
$(package)_build_opts+=CFLAGS="$($(package)_cflags) $($(package)_cppflags) -fPIC"
|
||||||
|
$(package)_build_opts+=RANLIB="$($(package)_ranlib)"
|
||||||
|
$(package)_build_opts+=AR="$($(package)_ar)"
|
||||||
|
$(package)_build_opts_darwin+=AR="$($(package)_libtool)"
|
||||||
|
$(package)_build_opts_darwin+=ARFLAGS="-o"
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
./configure --static --prefix=$(host_prefix)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE) $($(package)_build_opts) libz.a
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install $($(package)_build_opts)
|
||||||
|
endef
|
||||||
|
|
||||||
67
contrib/depends/patches/cmake/cmake-1-fixes.patch
Normal file
67
contrib/depends/patches/cmake/cmake-1-fixes.patch
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
This file is part of MXE. See LICENSE.md for licensing information.
|
||||||
|
|
||||||
|
Contains ad hoc patches for cross building.
|
||||||
|
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tony Theodore <tonyt@logyst.com>
|
||||||
|
Date: Fri, 12 Aug 2016 02:01:20 +1000
|
||||||
|
Subject: [PATCH 1/3] fix windres invocation options
|
||||||
|
|
||||||
|
windres doesn't recognise various gcc flags like -mms-bitfields,
|
||||||
|
-fopenmp, -mthreads etc. (basically not `-D` or `-I`)
|
||||||
|
|
||||||
|
diff --git a/Modules/Platform/Windows-windres.cmake b/Modules/Platform/Windows-windres.cmake
|
||||||
|
index 1111111..2222222 100644
|
||||||
|
--- a/Modules/Platform/Windows-windres.cmake
|
||||||
|
+++ b/Modules/Platform/Windows-windres.cmake
|
||||||
|
@@ -1 +1 @@
|
||||||
|
-set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> -O coff <DEFINES> <INCLUDES> <FLAGS> <SOURCE> <OBJECT>")
|
||||||
|
+set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> -O coff <DEFINES> <INCLUDES> <SOURCE> <OBJECT>")
|
||||||
|
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tony Theodore <tonyt@logyst.com>
|
||||||
|
Date: Tue, 25 Jul 2017 20:34:56 +1000
|
||||||
|
Subject: [PATCH 2/3] add option to disable -isystem
|
||||||
|
|
||||||
|
taken from (not accepted):
|
||||||
|
https://gitlab.kitware.com/cmake/cmake/merge_requests/895
|
||||||
|
|
||||||
|
see also:
|
||||||
|
https://gitlab.kitware.com/cmake/cmake/issues/16291
|
||||||
|
https://gitlab.kitware.com/cmake/cmake/issues/16919
|
||||||
|
|
||||||
|
diff --git a/Modules/Compiler/GNU.cmake b/Modules/Compiler/GNU.cmake
|
||||||
|
index 1111111..2222222 100644
|
||||||
|
--- a/Modules/Compiler/GNU.cmake
|
||||||
|
+++ b/Modules/Compiler/GNU.cmake
|
||||||
|
@@ -42,7 +42,7 @@ macro(__compiler_gnu lang)
|
||||||
|
string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -O2 -g -DNDEBUG")
|
||||||
|
set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
|
||||||
|
set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
|
||||||
|
- if(NOT APPLE OR NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4) # work around #4462
|
||||||
|
+ if(NOT APPLE OR NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4 AND (NOT MXE_DISABLE_INCLUDE_SYSTEM_FLAG)) # work around #4462
|
||||||
|
set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang} "-isystem ")
|
||||||
|
endif()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tony Theodore <tonyt@logyst.com>
|
||||||
|
Date: Tue, 15 Aug 2017 15:25:06 +1000
|
||||||
|
Subject: [PATCH 3/3] add CPACK_NSIS_EXECUTABLE variable
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/Source/CPack/cmCPackNSISGenerator.cxx b/Source/CPack/cmCPackNSISGenerator.cxx
|
||||||
|
index 1111111..2222222 100644
|
||||||
|
--- a/Source/CPack/cmCPackNSISGenerator.cxx
|
||||||
|
+++ b/Source/CPack/cmCPackNSISGenerator.cxx
|
||||||
|
@@ -384,7 +384,9 @@ int cmCPackNSISGenerator::InitializeInternal()
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
- nsisPath = cmSystemTools::FindProgram("makensis", path, false);
|
||||||
|
+ this->SetOptionIfNotSet("CPACK_NSIS_EXECUTABLE", "makensis");
|
||||||
|
+ nsisPath = cmSystemTools::FindProgram(
|
||||||
|
+ this->GetOption("CPACK_NSIS_EXECUTABLE"), path, false);
|
||||||
|
|
||||||
|
if (nsisPath.empty()) {
|
||||||
|
cmCPackLogger(
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
Don't build object files twice
|
||||||
|
|
||||||
|
When passed --enable-static and --enable-shared, icu will generate
|
||||||
|
both a shared and a static version of its libraries.
|
||||||
|
|
||||||
|
However, in order to do so, it builds each and every object file
|
||||||
|
twice: once with -fPIC (for the shared library), and once without
|
||||||
|
-fPIC (for the static library). While admittedly building -fPIC for a
|
||||||
|
static library generates a slightly suboptimal code, this is what all
|
||||||
|
the autotools-based project are doing. They build each object file
|
||||||
|
once, and they use it for both the static and shared libraries.
|
||||||
|
|
||||||
|
icu builds the object files for the shared library as .o files, and
|
||||||
|
the object files for static library as .ao files. By simply changing
|
||||||
|
the suffix of object files used for static libraries to ".o", we tell
|
||||||
|
icu to use the ones built for the shared library (i.e, with -fPIC),
|
||||||
|
and avoid the double build of icu.
|
||||||
|
|
||||||
|
On a fast build server, this brings the target icu build from
|
||||||
|
3m41.302s down to 1m43.926s (approximate numbers: some other builds
|
||||||
|
are running on the system at the same time).
|
||||||
|
|
||||||
|
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
||||||
|
|
||||||
|
Index: b/source/config/mh-linux
|
||||||
|
===================================================================
|
||||||
|
--- a/source/config/mh-linux
|
||||||
|
+++ b/source/config/mh-linux
|
||||||
|
@@ -38,7 +38,7 @@
|
||||||
|
## Shared object suffix
|
||||||
|
SO = so
|
||||||
|
## Non-shared intermediate object suffix
|
||||||
|
-STATIC_O = ao
|
||||||
|
+STATIC_O = o
|
||||||
|
|
||||||
|
## Compilation rules
|
||||||
|
%.$(STATIC_O): $(srcdir)/%.c
|
||||||
29
contrib/depends/patches/native_biplist/sorted_list.patch
Normal file
29
contrib/depends/patches/native_biplist/sorted_list.patch
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
--- a/biplist/__init__.py 2014-10-26 19:03:11.000000000 +0000
|
||||||
|
+++ b/biplist/__init__.py 2016-07-19 19:30:17.663521999 +0000
|
||||||
|
@@ -541,7 +541,7 @@
|
||||||
|
return HashableWrapper(n)
|
||||||
|
elif isinstance(root, dict):
|
||||||
|
n = {}
|
||||||
|
- for key, value in iteritems(root):
|
||||||
|
+ for key, value in sorted(iteritems(root)):
|
||||||
|
n[self.wrapRoot(key)] = self.wrapRoot(value)
|
||||||
|
return HashableWrapper(n)
|
||||||
|
elif isinstance(root, list):
|
||||||
|
@@ -616,7 +616,7 @@
|
||||||
|
elif isinstance(obj, dict):
|
||||||
|
size = proc_size(len(obj))
|
||||||
|
self.incrementByteCount('dictBytes', incr=1+size)
|
||||||
|
- for key, value in iteritems(obj):
|
||||||
|
+ for key, value in sorted(iteritems(obj)):
|
||||||
|
check_key(key)
|
||||||
|
self.computeOffsets(key, asReference=True)
|
||||||
|
self.computeOffsets(value, asReference=True)
|
||||||
|
@@ -714,7 +714,7 @@
|
||||||
|
keys = []
|
||||||
|
values = []
|
||||||
|
objectsToWrite = []
|
||||||
|
- for key, value in iteritems(obj):
|
||||||
|
+ for key, value in sorted(iteritems(obj)):
|
||||||
|
keys.append(key)
|
||||||
|
values.append(value)
|
||||||
|
for key in keys:
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
--- cdrkit-1.1.11.old/genisoimage/tree.c 2008-10-21 19:57:47.000000000 -0400
|
||||||
|
+++ cdrkit-1.1.11/genisoimage/tree.c 2013-12-06 00:23:18.489622668 -0500
|
||||||
|
@@ -1139,8 +1139,9 @@
|
||||||
|
scan_directory_tree(struct directory *this_dir, char *path,
|
||||||
|
struct directory_entry *de)
|
||||||
|
{
|
||||||
|
- DIR *current_dir;
|
||||||
|
+ int current_file;
|
||||||
|
char whole_path[PATH_MAX];
|
||||||
|
+ struct dirent **d_list;
|
||||||
|
struct dirent *d_entry;
|
||||||
|
struct directory *parent;
|
||||||
|
int dflag;
|
||||||
|
@@ -1164,7 +1165,8 @@
|
||||||
|
this_dir->dir_flags |= DIR_WAS_SCANNED;
|
||||||
|
|
||||||
|
errno = 0; /* Paranoia */
|
||||||
|
- current_dir = opendir(path);
|
||||||
|
+ //current_dir = opendir(path);
|
||||||
|
+ current_file = scandir(path, &d_list, NULL, alphasort);
|
||||||
|
d_entry = NULL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -1173,12 +1175,12 @@
|
||||||
|
*/
|
||||||
|
old_path = path;
|
||||||
|
|
||||||
|
- if (current_dir) {
|
||||||
|
+ if (current_file >= 0) {
|
||||||
|
errno = 0;
|
||||||
|
- d_entry = readdir(current_dir);
|
||||||
|
+ d_entry = d_list[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (!current_dir || !d_entry) {
|
||||||
|
+ if (current_file < 0 || !d_entry) {
|
||||||
|
int ret = 1;
|
||||||
|
|
||||||
|
#ifdef USE_LIBSCHILY
|
||||||
|
@@ -1191,8 +1193,8 @@
|
||||||
|
de->isorec.flags[0] &= ~ISO_DIRECTORY;
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
- if (current_dir)
|
||||||
|
- closedir(current_dir);
|
||||||
|
+ if(d_list)
|
||||||
|
+ free(d_list);
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
#ifdef ABORT_DEEP_ISO_ONLY
|
||||||
|
@@ -1208,7 +1210,7 @@
|
||||||
|
errmsgno(EX_BAD, "use Rock Ridge extensions via -R or -r,\n");
|
||||||
|
errmsgno(EX_BAD, "or allow deep ISO9660 directory nesting via -D.\n");
|
||||||
|
}
|
||||||
|
- closedir(current_dir);
|
||||||
|
+ free(d_list);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@@ -1250,13 +1252,13 @@
|
||||||
|
* The first time through, skip this, since we already asked
|
||||||
|
* for the first entry when we opened the directory.
|
||||||
|
*/
|
||||||
|
- if (dflag)
|
||||||
|
- d_entry = readdir(current_dir);
|
||||||
|
+ if (dflag && current_file >= 0)
|
||||||
|
+ d_entry = d_list[current_file];
|
||||||
|
dflag++;
|
||||||
|
|
||||||
|
- if (!d_entry)
|
||||||
|
+ if (current_file < 0)
|
||||||
|
break;
|
||||||
|
-
|
||||||
|
+ current_file--;
|
||||||
|
/* OK, got a valid entry */
|
||||||
|
|
||||||
|
/* If we do not want all files, then pitch the backups. */
|
||||||
|
@@ -1348,7 +1350,7 @@
|
||||||
|
insert_file_entry(this_dir, whole_path, d_entry->d_name);
|
||||||
|
#endif /* APPLE_HYB */
|
||||||
|
}
|
||||||
|
- closedir(current_dir);
|
||||||
|
+ free(d_list);
|
||||||
|
|
||||||
|
#ifdef APPLE_HYB
|
||||||
|
/*
|
||||||
72
contrib/depends/patches/native_mac_alias/python3.patch
Normal file
72
contrib/depends/patches/native_mac_alias/python3.patch
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
diff -dur a/mac_alias/alias.py b/mac_alias/alias.py
|
||||||
|
--- a/mac_alias/alias.py 2015-10-19 12:12:48.000000000 +0200
|
||||||
|
+++ b/mac_alias/alias.py 2016-04-03 12:13:12.037159417 +0200
|
||||||
|
@@ -243,10 +243,10 @@
|
||||||
|
alias = Alias()
|
||||||
|
alias.appinfo = appinfo
|
||||||
|
|
||||||
|
- alias.volume = VolumeInfo (volname.replace('/',':'),
|
||||||
|
+ alias.volume = VolumeInfo (volname.decode().replace('/',':'),
|
||||||
|
voldate, fstype, disktype,
|
||||||
|
volattrs, volfsid)
|
||||||
|
- alias.target = TargetInfo (kind, filename.replace('/',':'),
|
||||||
|
+ alias.target = TargetInfo (kind, filename.decode().replace('/',':'),
|
||||||
|
folder_cnid, cnid,
|
||||||
|
crdate, creator_code, type_code)
|
||||||
|
alias.target.levels_from = levels_from
|
||||||
|
@@ -261,9 +261,9 @@
|
||||||
|
b.read(1)
|
||||||
|
|
||||||
|
if tag == TAG_CARBON_FOLDER_NAME:
|
||||||
|
- alias.target.folder_name = value.replace('/',':')
|
||||||
|
+ alias.target.folder_name = value.decode().replace('/',':')
|
||||||
|
elif tag == TAG_CNID_PATH:
|
||||||
|
- alias.target.cnid_path = struct.unpack(b'>%uI' % (length // 4),
|
||||||
|
+ alias.target.cnid_path = struct.unpack('>%uI' % (length // 4),
|
||||||
|
value)
|
||||||
|
elif tag == TAG_CARBON_PATH:
|
||||||
|
alias.target.carbon_path = value
|
||||||
|
@@ -298,9 +298,9 @@
|
||||||
|
alias.target.creation_date \
|
||||||
|
= mac_epoch + datetime.timedelta(seconds=seconds)
|
||||||
|
elif tag == TAG_POSIX_PATH:
|
||||||
|
- alias.target.posix_path = value
|
||||||
|
+ alias.target.posix_path = value.decode()
|
||||||
|
elif tag == TAG_POSIX_PATH_TO_MOUNTPOINT:
|
||||||
|
- alias.volume.posix_path = value
|
||||||
|
+ alias.volume.posix_path = value.decode()
|
||||||
|
elif tag == TAG_RECURSIVE_ALIAS_OF_DISK_IMAGE:
|
||||||
|
alias.volume.disk_image_alias = Alias.from_bytes(value)
|
||||||
|
elif tag == TAG_USER_HOME_LENGTH_PREFIX:
|
||||||
|
@@ -422,13 +422,13 @@
|
||||||
|
# (so doing so is ridiculous, and nothing could rely on it).
|
||||||
|
b.write(struct.pack(b'>h28pI2shI64pII4s4shhI2s10s',
|
||||||
|
self.target.kind,
|
||||||
|
- carbon_volname, voldate,
|
||||||
|
+ carbon_volname, int(voldate),
|
||||||
|
self.volume.fs_type,
|
||||||
|
self.volume.disk_type,
|
||||||
|
self.target.folder_cnid,
|
||||||
|
carbon_filename,
|
||||||
|
self.target.cnid,
|
||||||
|
- crdate,
|
||||||
|
+ int(crdate),
|
||||||
|
self.target.creator_code,
|
||||||
|
self.target.type_code,
|
||||||
|
self.target.levels_from,
|
||||||
|
@@ -449,12 +449,12 @@
|
||||||
|
|
||||||
|
b.write(struct.pack(b'>hhQhhQ',
|
||||||
|
TAG_HIGH_RES_VOLUME_CREATION_DATE,
|
||||||
|
- 8, long(voldate * 65536),
|
||||||
|
+ 8, int(voldate * 65536),
|
||||||
|
TAG_HIGH_RES_CREATION_DATE,
|
||||||
|
- 8, long(crdate * 65536)))
|
||||||
|
+ 8, int(crdate * 65536)))
|
||||||
|
|
||||||
|
if self.target.cnid_path:
|
||||||
|
- cnid_path = struct.pack(b'>%uI' % len(self.target.cnid_path),
|
||||||
|
+ cnid_path = struct.pack('>%uI' % len(self.target.cnid_path),
|
||||||
|
*self.target.cnid_path)
|
||||||
|
b.write(struct.pack(b'>hh', TAG_CNID_PATH,
|
||||||
|
len(cnid_path)))
|
||||||
11
contrib/depends/patches/qt/fix_qt_pkgconfig.patch
Normal file
11
contrib/depends/patches/qt/fix_qt_pkgconfig.patch
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
--- old/qtbase/mkspecs/features/qt_module.prf
|
||||||
|
+++ new/qtbase/mkspecs/features/qt_module.prf
|
||||||
|
@@ -245,7 +245,7 @@
|
||||||
|
load(qt_targets)
|
||||||
|
|
||||||
|
# this builds on top of qt_common
|
||||||
|
-!internal_module:!lib_bundle:if(unix|mingw) {
|
||||||
|
+unix|mingw {
|
||||||
|
CONFIG += create_pc
|
||||||
|
QMAKE_PKGCONFIG_DESTDIR = pkgconfig
|
||||||
|
host_build: \
|
||||||
37
contrib/depends/patches/qt/pidlist_absolute.patch
Normal file
37
contrib/depends/patches/qt/pidlist_absolute.patch
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
diff -dur old/qtbase/src/plugins/platforms/windows/qwindowscontext.h new/qtbase/src/plugins/platforms/windows/qwindowscontext.h
|
||||||
|
--- old/qtbase/src/plugins/platforms/windows/qwindowscontext.h
|
||||||
|
+++ new/qtbase/src/plugins/platforms/windows/qwindowscontext.h
|
||||||
|
@@ -136,10 +136,18 @@
|
||||||
|
inline void init();
|
||||||
|
|
||||||
|
typedef HRESULT (WINAPI *SHCreateItemFromParsingName)(PCWSTR, IBindCtx *, const GUID&, void **);
|
||||||
|
+#if defined(Q_CC_MINGW) && (!defined(__MINGW64_VERSION_MAJOR) || __MINGW64_VERSION_MAJOR < 3)
|
||||||
|
+ typedef HRESULT (WINAPI *SHGetKnownFolderIDList)(const GUID &, DWORD, HANDLE, ITEMIDLIST **);
|
||||||
|
+#else
|
||||||
|
typedef HRESULT (WINAPI *SHGetKnownFolderIDList)(const GUID &, DWORD, HANDLE, PIDLIST_ABSOLUTE *);
|
||||||
|
+#endif
|
||||||
|
typedef HRESULT (WINAPI *SHGetStockIconInfo)(int , int , _SHSTOCKICONINFO *);
|
||||||
|
typedef HRESULT (WINAPI *SHGetImageList)(int, REFIID , void **);
|
||||||
|
+#if defined(Q_CC_MINGW) && (!defined(__MINGW64_VERSION_MAJOR) || __MINGW64_VERSION_MAJOR < 3)
|
||||||
|
+ typedef HRESULT (WINAPI *SHCreateItemFromIDList)(const ITEMIDLIST *, REFIID, void **);
|
||||||
|
+#else
|
||||||
|
typedef HRESULT (WINAPI *SHCreateItemFromIDList)(PCIDLIST_ABSOLUTE, REFIID, void **);
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
SHCreateItemFromParsingName sHCreateItemFromParsingName;
|
||||||
|
SHGetKnownFolderIDList sHGetKnownFolderIDList;
|
||||||
|
diff -dur old/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp new/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
|
||||||
|
--- old/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
|
||||||
|
+++ new/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
|
||||||
|
@@ -1016,7 +1016,11 @@
|
||||||
|
qWarning() << __FUNCTION__ << ": Invalid CLSID: " << url.path();
|
||||||
|
return Q_NULLPTR;
|
||||||
|
}
|
||||||
|
+#if defined(Q_CC_MINGW) && (!defined(__MINGW64_VERSION_MAJOR) || __MINGW64_VERSION_MAJOR < 3)
|
||||||
|
+ ITEMIDLIST *idList;
|
||||||
|
+#else
|
||||||
|
PIDLIST_ABSOLUTE idList;
|
||||||
|
+#endif
|
||||||
|
HRESULT hr = QWindowsContext::shell32dll.sHGetKnownFolderIDList(uuid, 0, 0, &idList);
|
||||||
|
if (FAILED(hr)) {
|
||||||
|
qErrnoWarning("%s: SHGetKnownFolderIDList(%s)) failed", __FUNCTION__, qPrintable(url.toString()));
|
||||||
34
contrib/depends/patches/qt/qfixed-coretext.patch
Normal file
34
contrib/depends/patches/qt/qfixed-coretext.patch
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
From dbdd5f0ffbce52c8b789ed09f1aa3f1da6c02e23 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Gabriel de Dietrich <gabriel.dedietrich@qt.io>
|
||||||
|
Date: Fri, 30 Mar 2018 11:58:16 -0700
|
||||||
|
Subject: [PATCH] QCoreTextFontEngine: Fix build with Xcode 9.3
|
||||||
|
|
||||||
|
Apple LLVM version 9.1.0 (clang-902.0.39.1)
|
||||||
|
|
||||||
|
Error message:
|
||||||
|
|
||||||
|
.../qfontengine_coretext.mm:827:20: error: qualified reference to
|
||||||
|
'QFixed' is a constructor name rather than a type in this context
|
||||||
|
return QFixed::QFixed(int(CTFontGetUnitsPerEm(ctfont)));
|
||||||
|
|
||||||
|
Change-Id: Iebe26b3b087a16b10664208fc8851cbddb47f043
|
||||||
|
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
|
||||||
|
---
|
||||||
|
src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git old/qtbase/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm new/qtbase/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
|
||||||
|
index 25ff69d877d..98b753eff96 100644
|
||||||
|
--- old/qtbase/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
|
||||||
|
+++ new/qtbase/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
|
||||||
|
@@ -824,7 +824,7 @@ void QCoreTextFontEngine::getUnscaledGlyph(glyph_t glyph, QPainterPath *path, gl
|
||||||
|
|
||||||
|
QFixed QCoreTextFontEngine::emSquareSize() const
|
||||||
|
{
|
||||||
|
- return QFixed::QFixed(int(CTFontGetUnitsPerEm(ctfont)));
|
||||||
|
+ return QFixed(int(CTFontGetUnitsPerEm(ctfont)));
|
||||||
|
}
|
||||||
|
|
||||||
|
QFontEngine *QCoreTextFontEngine::cloneWithSize(qreal pixelSize) const
|
||||||
|
--
|
||||||
|
2.16.3
|
||||||
187
contrib/depends/patches/readline/readline-1.patch
Normal file
187
contrib/depends/patches/readline/readline-1.patch
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
From c0572cecbeadc8fe24c70c5c39d49210a39ac719 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Timothy Gu <timothygu99@gmail.com>
|
||||||
|
Date: Tue, 30 Sep 2014 10:32:33 -0700
|
||||||
|
Subject: [PATCH 1/2] signals: safeguard the remaining usage of frequently
|
||||||
|
missing signals
|
||||||
|
|
||||||
|
diff --git a/input.c b/input.c
|
||||||
|
index 117dfe8..465f0b9 100644
|
||||||
|
--- a/input.c
|
||||||
|
+++ b/input.c
|
||||||
|
@@ -532,9 +532,17 @@ rl_getc (stream)
|
||||||
|
Otherwise (not EINTR), some error occurred, also signifying EOF. */
|
||||||
|
if (errno != EINTR)
|
||||||
|
return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF);
|
||||||
|
- else if (_rl_caught_signal == SIGHUP || _rl_caught_signal == SIGTERM)
|
||||||
|
+ else if (_rl_caught_signal == SIGTERM
|
||||||
|
+#if defined(SIGHUP)
|
||||||
|
+ || _rl_caught_signal == SIGHUP
|
||||||
|
+#endif
|
||||||
|
+ )
|
||||||
|
return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF);
|
||||||
|
- else if (_rl_caught_signal == SIGINT || _rl_caught_signal == SIGQUIT)
|
||||||
|
+ else if (_rl_caught_signal == SIGINT
|
||||||
|
+#if defined(SIGQUIT)
|
||||||
|
+ || _rl_caught_signal == SIGQUIT
|
||||||
|
+#endif
|
||||||
|
+ )
|
||||||
|
RL_CHECK_SIGNALS ();
|
||||||
|
|
||||||
|
if (rl_signal_event_hook)
|
||||||
|
diff --git a/signals.c b/signals.c
|
||||||
|
index 61f02f9..7c921d6 100644
|
||||||
|
--- a/signals.c
|
||||||
|
+++ b/signals.c
|
||||||
|
@@ -216,7 +216,9 @@ _rl_handle_signal (sig)
|
||||||
|
/* FALLTHROUGH */
|
||||||
|
|
||||||
|
case SIGTERM:
|
||||||
|
+#if defined (SIGHUP)
|
||||||
|
case SIGHUP:
|
||||||
|
+#endif
|
||||||
|
#if defined (SIGTSTP)
|
||||||
|
case SIGTSTP:
|
||||||
|
case SIGTTOU:
|
||||||
|
@@ -426,7 +428,9 @@ rl_set_signals ()
|
||||||
|
|
||||||
|
rl_maybe_set_sighandler (SIGINT, rl_signal_handler, &old_int);
|
||||||
|
rl_maybe_set_sighandler (SIGTERM, rl_signal_handler, &old_term);
|
||||||
|
+#if defined (SIGHUP)
|
||||||
|
rl_maybe_set_sighandler (SIGHUP, rl_signal_handler, &old_hup);
|
||||||
|
+#endif
|
||||||
|
#if defined (SIGQUIT)
|
||||||
|
rl_maybe_set_sighandler (SIGQUIT, rl_signal_handler, &old_quit);
|
||||||
|
#endif
|
||||||
|
@@ -491,7 +495,9 @@ rl_clear_signals ()
|
||||||
|
overhead */
|
||||||
|
rl_maybe_restore_sighandler (SIGINT, &old_int);
|
||||||
|
rl_maybe_restore_sighandler (SIGTERM, &old_term);
|
||||||
|
+#if defined (SIGHUP)
|
||||||
|
rl_maybe_restore_sighandler (SIGHUP, &old_hup);
|
||||||
|
+#endif
|
||||||
|
#if defined (SIGQUIT)
|
||||||
|
rl_maybe_restore_sighandler (SIGQUIT, &old_quit);
|
||||||
|
#endif
|
||||||
|
--
|
||||||
|
1.8.3.2
|
||||||
|
|
||||||
|
|
||||||
|
From 6896ffa4fc85bf0dfae58e69a860d2076c1d9fd2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Timothy Gu <timothygu99@gmail.com>
|
||||||
|
Date: Tue, 30 Sep 2014 17:16:32 -0700
|
||||||
|
Subject: [PATCH 2/2] Handle missing S_IS* macros more gracefully
|
||||||
|
|
||||||
|
diff --git a/colors.c b/colors.c
|
||||||
|
index 89d9035..ec19844 100644
|
||||||
|
--- a/colors.c
|
||||||
|
+++ b/colors.c
|
||||||
|
@@ -152,14 +152,22 @@ _rl_print_color_indicator (char *f)
|
||||||
|
{
|
||||||
|
colored_filetype = C_FILE;
|
||||||
|
|
||||||
|
+#if defined (S_ISUID)
|
||||||
|
if ((mode & S_ISUID) != 0 && is_colored (C_SETUID))
|
||||||
|
colored_filetype = C_SETUID;
|
||||||
|
- else if ((mode & S_ISGID) != 0 && is_colored (C_SETGID))
|
||||||
|
+ else
|
||||||
|
+#endif
|
||||||
|
+#if defined (S_ISGID)
|
||||||
|
+ if ((mode & S_ISGID) != 0 && is_colored (C_SETGID))
|
||||||
|
colored_filetype = C_SETGID;
|
||||||
|
- else if (is_colored (C_CAP) && 0) //f->has_capability)
|
||||||
|
+ else
|
||||||
|
+#endif
|
||||||
|
+ if (is_colored (C_CAP) && 0) //f->has_capability)
|
||||||
|
colored_filetype = C_CAP;
|
||||||
|
+#if defined(S_IXUGO)
|
||||||
|
else if ((mode & S_IXUGO) != 0 && is_colored (C_EXEC))
|
||||||
|
colored_filetype = C_EXEC;
|
||||||
|
+#endif
|
||||||
|
else if ((1 < astat.st_nlink) && is_colored (C_MULTIHARDLINK))
|
||||||
|
colored_filetype = C_MULTIHARDLINK;
|
||||||
|
}
|
||||||
|
@@ -173,8 +181,10 @@ _rl_print_color_indicator (char *f)
|
||||||
|
colored_filetype = C_STICKY_OTHER_WRITABLE;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
+#if defined (S_IWOTH)
|
||||||
|
if ((mode & S_IWOTH) != 0 && is_colored (C_OTHER_WRITABLE))
|
||||||
|
colored_filetype = C_OTHER_WRITABLE;
|
||||||
|
+#endif
|
||||||
|
#if defined (S_ISVTX)
|
||||||
|
else if ((mode & S_ISVTX) != 0 && is_colored (C_STICKY))
|
||||||
|
colored_filetype = C_STICKY;
|
||||||
|
diff --git a/colors.h b/colors.h
|
||||||
|
index fc926e5..e62edd0 100644
|
||||||
|
--- a/colors.h
|
||||||
|
+++ b/colors.h
|
||||||
|
@@ -96,7 +96,7 @@ enum indicator_no
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
-#if !S_IXUGO
|
||||||
|
+#if !S_IXUGO && defined(S_IXUSR) && defined(S_IXGRP) && defined(S_IXOTH)
|
||||||
|
# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
diff --git a/posixstat.h b/posixstat.h
|
||||||
|
index 3eb7f29..854a2c9 100644
|
||||||
|
--- a/posixstat.h
|
||||||
|
+++ b/posixstat.h
|
||||||
|
@@ -78,30 +78,44 @@
|
||||||
|
|
||||||
|
#if defined (S_IFBLK) && !defined (S_ISBLK)
|
||||||
|
#define S_ISBLK(m) (((m)&S_IFMT) == S_IFBLK) /* block device */
|
||||||
|
+#elif !defined (S_IFBLK)
|
||||||
|
+#define S_ISBLK(m) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (S_IFCHR) && !defined (S_ISCHR)
|
||||||
|
#define S_ISCHR(m) (((m)&S_IFMT) == S_IFCHR) /* character device */
|
||||||
|
+#elif !defined (S_IFCHR)
|
||||||
|
+#define S_ISCHR(m) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (S_IFDIR) && !defined (S_ISDIR)
|
||||||
|
#define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR) /* directory */
|
||||||
|
+#elif !defined (S_IFDIR)
|
||||||
|
+#define S_ISDIR(m) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (S_IFREG) && !defined (S_ISREG)
|
||||||
|
#define S_ISREG(m) (((m)&S_IFMT) == S_IFREG) /* file */
|
||||||
|
+#elif !defined (S_IFREG)
|
||||||
|
+#define S_ISREG(m) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (S_IFIFO) && !defined (S_ISFIFO)
|
||||||
|
#define S_ISFIFO(m) (((m)&S_IFMT) == S_IFIFO) /* fifo - named pipe */
|
||||||
|
+#elif !defined (S_IFIFO)
|
||||||
|
+#define S_ISFIFO(m) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (S_IFLNK) && !defined (S_ISLNK)
|
||||||
|
#define S_ISLNK(m) (((m)&S_IFMT) == S_IFLNK) /* symbolic link */
|
||||||
|
+#elif !defined (S_IFLNK)
|
||||||
|
+#define S_ISLNK(m) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (S_IFSOCK) && !defined (S_ISSOCK)
|
||||||
|
#define S_ISSOCK(m) (((m)&S_IFMT) == S_IFSOCK) /* socket */
|
||||||
|
+#elif !defined (S_IFSOCK)
|
||||||
|
+#define S_ISSOCK(m) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -137,6 +151,8 @@
|
||||||
|
/* These are non-standard, but are used in builtins.c$symbolic_umask() */
|
||||||
|
#define S_IRUGO (S_IRUSR | S_IRGRP | S_IROTH)
|
||||||
|
#define S_IWUGO (S_IWUSR | S_IWGRP | S_IWOTH)
|
||||||
|
+#if defined(S_IXUSR) && defined(S_IXGRP) && defined(S_IXOTH)
|
||||||
|
#define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#endif /* _POSIXSTAT_H_ */
|
||||||
|
--
|
||||||
|
1.8.3.2
|
||||||
|
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
From 9114d3957725acd34aa8b8d011585812f3369411 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jeroen Ooms <jeroenooms@gmail.com>
|
||||||
|
Date: Tue, 20 Oct 2015 13:10:38 +0200
|
||||||
|
Subject: [PATCH] enable static libraries on mingw
|
||||||
|
|
||||||
|
---
|
||||||
|
configure.ac | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 393505b..e92131a 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -265,7 +265,7 @@ case "${host_os}" in
|
||||||
|
libzmq_dso_visibility="no"
|
||||||
|
|
||||||
|
if test "x$enable_static" = "xyes"; then
|
||||||
|
- AC_MSG_ERROR([Building static libraries is not supported under MinGW32])
|
||||||
|
+ CPPFLAGS="-DZMQ_STATIC"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set FD_SETSIZE to 1024
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
From 9e6745c12e0b100cd38acecc16ce7db02905e27c Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Millard <dmillard10@gmail.com>
|
||||||
|
Date: Tue, 10 May 2016 13:53:53 -0700
|
||||||
|
Subject: [PATCH] Fix autotools for static MinGW builds
|
||||||
|
|
||||||
|
---
|
||||||
|
configure.ac | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 5a0fa14..def6ea7 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -259,7 +259,7 @@ case "${host_os}" in
|
||||||
|
libzmq_dso_visibility="no"
|
||||||
|
|
||||||
|
if test "x$enable_static" = "xyes"; then
|
||||||
|
- CPPFLAGS="-DZMQ_STATIC"
|
||||||
|
+ CPPFLAGS="-DZMQ_STATIC $CPPFLAGS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set FD_SETSIZE to 1024
|
||||||
29
contrib/depends/protobuf.mk
Normal file
29
contrib/depends/protobuf.mk
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
package=protobuf
|
||||||
|
$(package)_version=$(native_$(package)_version)
|
||||||
|
$(package)_download_path=$(native_$(package)_download_path)
|
||||||
|
$(package)_file_name=$(native_$(package)_file_name)
|
||||||
|
$(package)_sha256_hash=$(native_$(package)_sha256_hash)
|
||||||
|
$(package)_dependencies=native_$(package)
|
||||||
|
$(package)_cxxflags=-std=c++11
|
||||||
|
|
||||||
|
define $(package)_set_vars
|
||||||
|
$(package)_config_opts=--disable-shared --with-protoc=$(build_prefix)/bin/protoc
|
||||||
|
$(package)_config_opts_linux=--with-pic
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_config_cmds
|
||||||
|
$($(package)_autoconf)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_build_cmds
|
||||||
|
$(MAKE) -C src libprotobuf.la
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_stage_cmds
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) -C src install-libLTLIBRARIES install-nobase_includeHEADERS &&\
|
||||||
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install-pkgconfigDATA
|
||||||
|
endef
|
||||||
|
|
||||||
|
define $(package)_postprocess_cmds
|
||||||
|
rm lib/libprotoc.a
|
||||||
|
endef
|
||||||
82
contrib/depends/toolchain.cmake.in
Normal file
82
contrib/depends/toolchain.cmake.in
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
# Set the system name, either Darwin, Linux, or Windows
|
||||||
|
SET(CMAKE_SYSTEM_NAME @depends@)
|
||||||
|
SET(CMAKE_BUILD_TYPE release)
|
||||||
|
|
||||||
|
SET(STATIC true)
|
||||||
|
SET(UNBOUND_STATIC true)
|
||||||
|
|
||||||
|
# where is the target environment
|
||||||
|
SET(CMAKE_FIND_ROOT_PATH @prefix@ /usr)
|
||||||
|
|
||||||
|
SET(ENV{PKG_CONFIG_PATH} @prefix@/lib/pkgconfig)
|
||||||
|
|
||||||
|
SET(LRELEASE_PATH @prefix@/native/bin CACHE FILEPATH "path to lrelease" FORCE)
|
||||||
|
|
||||||
|
SET(Readline_ROOT_DIR @prefix@)
|
||||||
|
|
||||||
|
SET(LIBUNWIND_INCLUDE_DIR @prefix@/include)
|
||||||
|
SET(LIBUNWIND_LIBRARIES @prefix@/lib/libunwind.a)
|
||||||
|
SET(LIBUNWIND_LIBRARY_DIRS @prefix@/lib)
|
||||||
|
|
||||||
|
SET(ZMQ_INCLUDE_PATH @prefix@/include)
|
||||||
|
SET(ZMQ_LIB @prefix@/lib/libzmq.a)
|
||||||
|
|
||||||
|
SET(BOOST_IGNORE_SYSTEM_PATHS_DEFAULT ON)
|
||||||
|
SET(BOOST_IGNORE_SYSTEM_PATH ON)
|
||||||
|
SET(BOOST_ROOT @prefix@)
|
||||||
|
SET(BOOST_LIBRARYDIR @prefix@/lib)
|
||||||
|
SET(BOOST_IGNORE_SYSTEM_PATHS_DEFAULT OFF)
|
||||||
|
SET(BOOST_NO_SYSTEM_PATHS TRUE)
|
||||||
|
SET(BOOST_USE_STATIC_LIBS TRUE)
|
||||||
|
SET(BOOST_USE_STATIC_RUNTIME TRUE)
|
||||||
|
|
||||||
|
SET(OpenSSL_DIR @prefix@/lib)
|
||||||
|
SET(ARCHITECTURE @arch@)
|
||||||
|
|
||||||
|
# for libraries and headers in the target directories
|
||||||
|
set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Find programs on host
|
||||||
|
set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) # Find libs in target
|
||||||
|
set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) # Find includes in target
|
||||||
|
|
||||||
|
# specify the cross compiler to be used. Darwin uses clang provided by the SDK.
|
||||||
|
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||||
|
SET(CMAKE_C_COMPILER @prefix@/native/bin/clang)
|
||||||
|
SET(CMAKE_C_COMPILER_TARGET x86_64-apple-darwin11)
|
||||||
|
SET(CMAKE_CXX_COMPILER @prefix@/native/bin/clang++ -stdlib=libc++)
|
||||||
|
SET(CMAKE_CXX_COMPILER_TARGET x86_64-apple-darwin11)
|
||||||
|
SET(_CMAKE_TOOLCHAIN_PREFIX x86_64-apple-darwin11-)
|
||||||
|
SET(APPLE True)
|
||||||
|
SET(BUILD_TAG "mac-x64")
|
||||||
|
SET(BUILD_64 ON)
|
||||||
|
SET(ARCH "x86_64")
|
||||||
|
SET(BREW OFF)
|
||||||
|
SET(PORT OFF)
|
||||||
|
SET(CMAKE_OSX_SYSROOT "@sdk@/MacOSX10.11.sdk/")
|
||||||
|
SET(CMAKE_OSX_DEPLOYMENT_TARGET "10.08")
|
||||||
|
SET(CMAKE_CXX_STANDARD 11)
|
||||||
|
SET(CMAKE_OSX_ARCHITECTURES "x86_64")
|
||||||
|
SET(LLVM_ENABLE_PIC OFF)
|
||||||
|
SET(LLVM_ENABLE_PIE OFF)
|
||||||
|
else()
|
||||||
|
SET(CMAKE_C_COMPILER @CC@)
|
||||||
|
SET(CMAKE_CXX_COMPILER @CXX@)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(ARCHITECTURE STREQUAL "arm")
|
||||||
|
set(ARCH "armv7-a")
|
||||||
|
set(ARM ON)
|
||||||
|
set(ARM_ID "armv7-a")
|
||||||
|
set(BUILD_64 OFF)
|
||||||
|
set(CMAKE_BUILD_TYPE release)
|
||||||
|
set(BUILD_TAG "linux-armv7")
|
||||||
|
set(ARM7)
|
||||||
|
elseif(ARCHITECTURE STREQUAL "aarch64")
|
||||||
|
set(ARCH "armv8-a")
|
||||||
|
set(ARM ON)
|
||||||
|
set(ARM_ID "armv8-a")
|
||||||
|
set(BUILD_TAG "linux-armv8")
|
||||||
|
set(BUILD_64 ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
#Create a new global cmake flag that indicates building with depends
|
||||||
|
set (DEPENDS true)
|
||||||
@@ -401,13 +401,19 @@ eof:
|
|||||||
|
|
||||||
|
|
||||||
template<class t_server, class t_handler>
|
template<class t_server, class t_handler>
|
||||||
bool start_default_console(t_server* ptsrv, t_handler handlr, const std::string& prompt, const std::string& usage = "")
|
bool start_default_console(t_server* ptsrv, t_handler handlr, std::function<std::string(void)> prompt, const std::string& usage = "")
|
||||||
{
|
{
|
||||||
std::shared_ptr<async_console_handler> console_handler = std::make_shared<async_console_handler>();
|
std::shared_ptr<async_console_handler> console_handler = std::make_shared<async_console_handler>();
|
||||||
boost::thread([=](){console_handler->run<t_server, t_handler>(ptsrv, handlr, prompt, usage);}).detach();
|
boost::thread([=](){console_handler->run<t_server, t_handler>(ptsrv, handlr, prompt, usage);}).detach();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<class t_server, class t_handler>
|
||||||
|
bool start_default_console(t_server* ptsrv, t_handler handlr, const std::string& prompt, const std::string& usage = "")
|
||||||
|
{
|
||||||
|
return start_default_console(ptsrv, handlr, [prompt](){ return prompt; }, usage);
|
||||||
|
}
|
||||||
|
|
||||||
template<class t_server>
|
template<class t_server>
|
||||||
bool start_default_console(t_server* ptsrv, const std::string& prompt, const std::string& usage = "")
|
bool start_default_console(t_server* ptsrv, const std::string& prompt, const std::string& usage = "")
|
||||||
{
|
{
|
||||||
@@ -421,19 +427,31 @@ eof:
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<class t_server, class t_handler>
|
template<class t_server, class t_handler>
|
||||||
bool run_default_console_handler_no_srv_param(t_server* ptsrv, t_handler handlr, const std::string& prompt, const std::string& usage = "")
|
bool run_default_console_handler_no_srv_param(t_server* ptsrv, t_handler handlr, std::function<std::string(void)> prompt, const std::string& usage = "")
|
||||||
{
|
{
|
||||||
async_console_handler console_handler;
|
async_console_handler console_handler;
|
||||||
return console_handler.run(ptsrv, boost::bind<bool>(no_srv_param_adapter<t_server, t_handler>, _1, _2, handlr), prompt, usage);
|
return console_handler.run(ptsrv, boost::bind<bool>(no_srv_param_adapter<t_server, t_handler>, _1, _2, handlr), prompt, usage);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class t_server, class t_handler>
|
template<class t_server, class t_handler>
|
||||||
bool start_default_console_handler_no_srv_param(t_server* ptsrv, t_handler handlr, const std::string& prompt, const std::string& usage = "")
|
bool run_default_console_handler_no_srv_param(t_server* ptsrv, t_handler handlr, const std::string& prompt, const std::string& usage = "")
|
||||||
|
{
|
||||||
|
return run_default_console_handler_no_srv_param(ptsrv, handlr, [prompt](){return prompt;},usage);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class t_server, class t_handler>
|
||||||
|
bool start_default_console_handler_no_srv_param(t_server* ptsrv, t_handler handlr, std::function<std::string(void)> prompt, const std::string& usage = "")
|
||||||
{
|
{
|
||||||
boost::thread( boost::bind(run_default_console_handler_no_srv_param<t_server, t_handler>, ptsrv, handlr, prompt, usage) );
|
boost::thread( boost::bind(run_default_console_handler_no_srv_param<t_server, t_handler>, ptsrv, handlr, prompt, usage) );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<class t_server, class t_handler>
|
||||||
|
bool start_default_console_handler_no_srv_param(t_server* ptsrv, t_handler handlr, const std::string& prompt, const std::string& usage = "")
|
||||||
|
{
|
||||||
|
return start_default_console_handler_no_srv_param(ptsrv, handlr, [prompt](){return prompt;}, usage);
|
||||||
|
}
|
||||||
|
|
||||||
/*template<class a>
|
/*template<class a>
|
||||||
bool f(int i, a l)
|
bool f(int i, a l)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -28,11 +28,12 @@
|
|||||||
#ifndef _FILE_IO_UTILS_H_
|
#ifndef _FILE_IO_UTILS_H_
|
||||||
#define _FILE_IO_UTILS_H_
|
#define _FILE_IO_UTILS_H_
|
||||||
|
|
||||||
#include <iostream>
|
#include <fstream>
|
||||||
#include <boost/filesystem/path.hpp>
|
#include <boost/filesystem/path.hpp>
|
||||||
#include <boost/filesystem/operations.hpp>
|
#include <boost/filesystem/operations.hpp>
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include "string_tools.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// On Windows there is a problem with non-ASCII characters in path and file names
|
// On Windows there is a problem with non-ASCII characters in path and file names
|
||||||
@@ -72,11 +73,9 @@ namespace file_io_utils
|
|||||||
bool save_string_to_file(const std::string& path_to_file, const std::string& str)
|
bool save_string_to_file(const std::string& path_to_file, const std::string& str)
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
WCHAR wide_path[1000];
|
std::wstring wide_path;
|
||||||
int chars = MultiByteToWideChar(CP_UTF8, 0, path_to_file.c_str(), path_to_file.size() + 1, wide_path, 1000);
|
try { wide_path = string_tools::utf8_to_utf16(path_to_file); } catch (...) { return false; }
|
||||||
if (chars == 0)
|
HANDLE file_handle = CreateFileW(wide_path.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
return false;
|
|
||||||
HANDLE file_handle = CreateFileW(wide_path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
||||||
if (file_handle == INVALID_HANDLE_VALUE)
|
if (file_handle == INVALID_HANDLE_VALUE)
|
||||||
return false;
|
return false;
|
||||||
DWORD bytes_written;
|
DWORD bytes_written;
|
||||||
@@ -128,18 +127,16 @@ namespace file_io_utils
|
|||||||
|
|
||||||
|
|
||||||
inline
|
inline
|
||||||
bool load_file_to_string(const std::string& path_to_file, std::string& target_str)
|
bool load_file_to_string(const std::string& path_to_file, std::string& target_str, size_t max_size = 1000000000)
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
WCHAR wide_path[1000];
|
std::wstring wide_path;
|
||||||
int chars = MultiByteToWideChar(CP_UTF8, 0, path_to_file.c_str(), path_to_file.size() + 1, wide_path, 1000);
|
try { wide_path = string_tools::utf8_to_utf16(path_to_file); } catch (...) { return false; }
|
||||||
if (chars == 0)
|
HANDLE file_handle = CreateFileW(wide_path.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
return false;
|
|
||||||
HANDLE file_handle = CreateFileW(wide_path, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
||||||
if (file_handle == INVALID_HANDLE_VALUE)
|
if (file_handle == INVALID_HANDLE_VALUE)
|
||||||
return false;
|
return false;
|
||||||
DWORD file_size = GetFileSize(file_handle, NULL);
|
DWORD file_size = GetFileSize(file_handle, NULL);
|
||||||
if ((file_size == INVALID_FILE_SIZE) || (file_size > 1000000000)) {
|
if ((file_size == INVALID_FILE_SIZE) || (uint64_t)file_size > (uint64_t)max_size) {
|
||||||
CloseHandle(file_handle);
|
CloseHandle(file_handle);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -159,7 +156,7 @@ namespace file_io_utils
|
|||||||
|
|
||||||
std::ifstream::pos_type file_size = fstream.tellg();
|
std::ifstream::pos_type file_size = fstream.tellg();
|
||||||
|
|
||||||
if(file_size > 1000000000)
|
if((uint64_t)file_size > (uint64_t)max_size) // ensure a large domain for comparison, and negative -> too large
|
||||||
return false;//don't go crazy
|
return false;//don't go crazy
|
||||||
size_t file_size_t = static_cast<size_t>(file_size);
|
size_t file_size_t = static_cast<size_t>(file_size);
|
||||||
|
|
||||||
@@ -202,11 +199,9 @@ namespace file_io_utils
|
|||||||
bool get_file_size(const std::string& path_to_file, uint64_t &size)
|
bool get_file_size(const std::string& path_to_file, uint64_t &size)
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
WCHAR wide_path[1000];
|
std::wstring wide_path;
|
||||||
int chars = MultiByteToWideChar(CP_UTF8, 0, path_to_file.c_str(), path_to_file.size() + 1, wide_path, 1000);
|
try { wide_path = string_tools::utf8_to_utf16(path_to_file); } catch (...) { return false; }
|
||||||
if (chars == 0)
|
HANDLE file_handle = CreateFileW(wide_path.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
return false;
|
|
||||||
HANDLE file_handle = CreateFileW(wide_path, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
||||||
if (file_handle == INVALID_HANDLE_VALUE)
|
if (file_handle == INVALID_HANDLE_VALUE)
|
||||||
return false;
|
return false;
|
||||||
LARGE_INTEGER file_size;
|
LARGE_INTEGER file_size;
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
//
|
//
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <Winsock2.h>
|
#include <winsock2.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
|||||||
@@ -119,6 +119,7 @@ namespace net_utils
|
|||||||
//----------------- i_service_endpoint ---------------------
|
//----------------- i_service_endpoint ---------------------
|
||||||
virtual bool do_send(const void* ptr, size_t cb); ///< (see do_send from i_service_endpoint)
|
virtual bool do_send(const void* ptr, size_t cb); ///< (see do_send from i_service_endpoint)
|
||||||
virtual bool do_send_chunk(const void* ptr, size_t cb); ///< will send (or queue) a part of data
|
virtual bool do_send_chunk(const void* ptr, size_t cb); ///< will send (or queue) a part of data
|
||||||
|
virtual bool send_done();
|
||||||
virtual bool close();
|
virtual bool close();
|
||||||
virtual bool call_run_once_service_io();
|
virtual bool call_run_once_service_io();
|
||||||
virtual bool request_callback();
|
virtual bool request_callback();
|
||||||
@@ -135,6 +136,14 @@ namespace net_utils
|
|||||||
/// Handle completion of a write operation.
|
/// Handle completion of a write operation.
|
||||||
void handle_write(const boost::system::error_code& e, size_t cb);
|
void handle_write(const boost::system::error_code& e, size_t cb);
|
||||||
|
|
||||||
|
/// reset connection timeout timer and callback
|
||||||
|
void reset_timer(boost::posix_time::milliseconds ms, bool add);
|
||||||
|
boost::posix_time::milliseconds get_default_timeout();
|
||||||
|
boost::posix_time::milliseconds get_timeout_from_bytes_read(size_t bytes);
|
||||||
|
|
||||||
|
/// host connection count tracking
|
||||||
|
unsigned int host_count(const std::string &host, int delta = 0);
|
||||||
|
|
||||||
/// Buffer for incoming data.
|
/// Buffer for incoming data.
|
||||||
boost::array<char, 8192> buffer_;
|
boost::array<char, 8192> buffer_;
|
||||||
//boost::array<char, 1024> buffer_;
|
//boost::array<char, 1024> buffer_;
|
||||||
@@ -149,6 +158,7 @@ namespace net_utils
|
|||||||
std::list<boost::shared_ptr<connection<t_protocol_handler> > > m_self_refs; // add_ref/release support
|
std::list<boost::shared_ptr<connection<t_protocol_handler> > > m_self_refs; // add_ref/release support
|
||||||
critical_section m_self_refs_lock;
|
critical_section m_self_refs_lock;
|
||||||
critical_section m_chunking_lock; // held while we add small chunks of the big do_send() to small do_send_chunk()
|
critical_section m_chunking_lock; // held while we add small chunks of the big do_send() to small do_send_chunk()
|
||||||
|
critical_section m_shutdown_lock; // held while shutting down
|
||||||
|
|
||||||
t_connection_type m_connection_type;
|
t_connection_type m_connection_type;
|
||||||
|
|
||||||
@@ -158,6 +168,11 @@ namespace net_utils
|
|||||||
boost::mutex m_throttle_speed_in_mutex;
|
boost::mutex m_throttle_speed_in_mutex;
|
||||||
boost::mutex m_throttle_speed_out_mutex;
|
boost::mutex m_throttle_speed_out_mutex;
|
||||||
|
|
||||||
|
boost::asio::deadline_timer m_timer;
|
||||||
|
bool m_local;
|
||||||
|
bool m_ready_to_close;
|
||||||
|
std::string m_host;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void setRpcStation();
|
void setRpcStation();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -44,6 +44,7 @@
|
|||||||
#include <boost/thread/thread.hpp> // TODO
|
#include <boost/thread/thread.hpp> // TODO
|
||||||
#include <boost/thread/condition_variable.hpp> // TODO
|
#include <boost/thread/condition_variable.hpp> // TODO
|
||||||
#include "misc_language.h"
|
#include "misc_language.h"
|
||||||
|
#include "net/local_ip.h"
|
||||||
#include "pragma_comp_defs.h"
|
#include "pragma_comp_defs.h"
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
@@ -55,6 +56,10 @@
|
|||||||
#undef MONERO_DEFAULT_LOG_CATEGORY
|
#undef MONERO_DEFAULT_LOG_CATEGORY
|
||||||
#define MONERO_DEFAULT_LOG_CATEGORY "net"
|
#define MONERO_DEFAULT_LOG_CATEGORY "net"
|
||||||
|
|
||||||
|
#define DEFAULT_TIMEOUT_MS_LOCAL 1800000 // 30 minutes
|
||||||
|
#define DEFAULT_TIMEOUT_MS_REMOTE 300000 // 5 minutes
|
||||||
|
#define TIMEOUT_EXTRA_MS_PER_BYTE 0.2
|
||||||
|
|
||||||
PRAGMA_WARNING_PUSH
|
PRAGMA_WARNING_PUSH
|
||||||
namespace epee
|
namespace epee
|
||||||
{
|
{
|
||||||
@@ -79,7 +84,10 @@ PRAGMA_WARNING_DISABLE_VS(4355)
|
|||||||
m_pfilter( pfilter ),
|
m_pfilter( pfilter ),
|
||||||
m_connection_type( connection_type ),
|
m_connection_type( connection_type ),
|
||||||
m_throttle_speed_in("speed_in", "throttle_speed_in"),
|
m_throttle_speed_in("speed_in", "throttle_speed_in"),
|
||||||
m_throttle_speed_out("speed_out", "throttle_speed_out")
|
m_throttle_speed_out("speed_out", "throttle_speed_out"),
|
||||||
|
m_timer(io_service),
|
||||||
|
m_local(false),
|
||||||
|
m_ready_to_close(false)
|
||||||
{
|
{
|
||||||
MDEBUG("test, connection constructor set m_connection_type="<<m_connection_type);
|
MDEBUG("test, connection constructor set m_connection_type="<<m_connection_type);
|
||||||
}
|
}
|
||||||
@@ -139,6 +147,7 @@ PRAGMA_WARNING_DISABLE_VS(4355)
|
|||||||
|
|
||||||
context = boost::value_initialized<t_connection_context>();
|
context = boost::value_initialized<t_connection_context>();
|
||||||
const unsigned long ip_{boost::asio::detail::socket_ops::host_to_network_long(remote_ep.address().to_v4().to_ulong())};
|
const unsigned long ip_{boost::asio::detail::socket_ops::host_to_network_long(remote_ep.address().to_v4().to_ulong())};
|
||||||
|
m_local = epee::net_utils::is_ip_loopback(ip_) || epee::net_utils::is_ip_local(ip_);
|
||||||
|
|
||||||
// create a random uuid
|
// create a random uuid
|
||||||
boost::uuids::uuid random_uuid;
|
boost::uuids::uuid random_uuid;
|
||||||
@@ -157,8 +166,13 @@ PRAGMA_WARNING_DISABLE_VS(4355)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_host = context.m_remote_address.host_str();
|
||||||
|
try { host_count(m_host, 1); } catch(...) { /* ignore */ }
|
||||||
|
|
||||||
m_protocol_handler.after_init_connection();
|
m_protocol_handler.after_init_connection();
|
||||||
|
|
||||||
|
reset_timer(get_default_timeout(), false);
|
||||||
|
|
||||||
socket_.async_read_some(boost::asio::buffer(buffer_),
|
socket_.async_read_some(boost::asio::buffer(buffer_),
|
||||||
strand_.wrap(
|
strand_.wrap(
|
||||||
boost::bind(&connection<t_protocol_handler>::handle_read, self,
|
boost::bind(&connection<t_protocol_handler>::handle_read, self,
|
||||||
@@ -304,6 +318,7 @@ PRAGMA_WARNING_DISABLE_VS(4355)
|
|||||||
delay *= 0.5;
|
delay *= 0.5;
|
||||||
if (delay > 0) {
|
if (delay > 0) {
|
||||||
long int ms = (long int)(delay * 100);
|
long int ms = (long int)(delay * 100);
|
||||||
|
reset_timer(boost::posix_time::milliseconds(ms + 1), true);
|
||||||
boost::this_thread::sleep_for(boost::chrono::milliseconds(ms));
|
boost::this_thread::sleep_for(boost::chrono::milliseconds(ms));
|
||||||
}
|
}
|
||||||
} while(delay > 0);
|
} while(delay > 0);
|
||||||
@@ -313,6 +328,7 @@ PRAGMA_WARNING_DISABLE_VS(4355)
|
|||||||
logger_handle_net_read(bytes_transferred);
|
logger_handle_net_read(bytes_transferred);
|
||||||
context.m_last_recv = time(NULL);
|
context.m_last_recv = time(NULL);
|
||||||
context.m_recv_cnt += bytes_transferred;
|
context.m_recv_cnt += bytes_transferred;
|
||||||
|
m_ready_to_close = false;
|
||||||
bool recv_res = m_protocol_handler.handle_recv(buffer_.data(), bytes_transferred);
|
bool recv_res = m_protocol_handler.handle_recv(buffer_.data(), bytes_transferred);
|
||||||
if(!recv_res)
|
if(!recv_res)
|
||||||
{
|
{
|
||||||
@@ -329,6 +345,7 @@ PRAGMA_WARNING_DISABLE_VS(4355)
|
|||||||
shutdown();
|
shutdown();
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
|
reset_timer(get_timeout_from_bytes_read(bytes_transferred), false);
|
||||||
socket_.async_read_some(boost::asio::buffer(buffer_),
|
socket_.async_read_some(boost::asio::buffer(buffer_),
|
||||||
strand_.wrap(
|
strand_.wrap(
|
||||||
boost::bind(&connection<t_protocol_handler>::handle_read, connection<t_protocol_handler>::shared_from_this(),
|
boost::bind(&connection<t_protocol_handler>::handle_read, connection<t_protocol_handler>::shared_from_this(),
|
||||||
@@ -344,6 +361,13 @@ PRAGMA_WARNING_DISABLE_VS(4355)
|
|||||||
_dbg3("[sock " << socket_.native_handle() << "] Some problems at read: " << e.message() << ':' << e.value());
|
_dbg3("[sock " << socket_.native_handle() << "] Some problems at read: " << e.message() << ':' << e.value());
|
||||||
shutdown();
|
shutdown();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_dbg3("[sock " << socket_.native_handle() << "] peer closed connection");
|
||||||
|
if (m_ready_to_close)
|
||||||
|
shutdown();
|
||||||
|
}
|
||||||
|
m_ready_to_close = true;
|
||||||
}
|
}
|
||||||
// If an error occurs then no new asynchronous operations are started. This
|
// If an error occurs then no new asynchronous operations are started. This
|
||||||
// means that all shared_ptr references to the connection object will
|
// means that all shared_ptr references to the connection object will
|
||||||
@@ -519,7 +543,7 @@ PRAGMA_WARNING_DISABLE_VS(4355)
|
|||||||
if(m_send_que.size() > 1)
|
if(m_send_que.size() > 1)
|
||||||
{ // active operation should be in progress, nothing to do, just wait last operation callback
|
{ // active operation should be in progress, nothing to do, just wait last operation callback
|
||||||
auto size_now = cb;
|
auto size_now = cb;
|
||||||
MDEBUG("do_send() NOW just queues: packet="<<size_now<<" B, is added to queue-size="<<m_send_que.size());
|
MDEBUG("do_send_chunk() NOW just queues: packet="<<size_now<<" B, is added to queue-size="<<m_send_que.size());
|
||||||
//do_send_handler_delayed( ptr , size_now ); // (((H))) // empty function
|
//do_send_handler_delayed( ptr , size_now ); // (((H))) // empty function
|
||||||
|
|
||||||
LOG_TRACE_CC(context, "[sock " << socket_.native_handle() << "] Async send requested " << m_send_que.front().size());
|
LOG_TRACE_CC(context, "[sock " << socket_.native_handle() << "] Async send requested " << m_send_que.front().size());
|
||||||
@@ -534,11 +558,12 @@ PRAGMA_WARNING_DISABLE_VS(4355)
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto size_now = m_send_que.front().size();
|
auto size_now = m_send_que.front().size();
|
||||||
MDEBUG("do_send() NOW SENSD: packet="<<size_now<<" B");
|
MDEBUG("do_send_chunk() NOW SENSD: packet="<<size_now<<" B");
|
||||||
if (speed_limit_is_enabled())
|
if (speed_limit_is_enabled())
|
||||||
do_send_handler_write( ptr , size_now ); // (((H)))
|
do_send_handler_write( ptr , size_now ); // (((H)))
|
||||||
|
|
||||||
CHECK_AND_ASSERT_MES( size_now == m_send_que.front().size(), false, "Unexpected queue size");
|
CHECK_AND_ASSERT_MES( size_now == m_send_que.front().size(), false, "Unexpected queue size");
|
||||||
|
reset_timer(get_default_timeout(), false);
|
||||||
boost::asio::async_write(socket_, boost::asio::buffer(m_send_que.front().data(), size_now ) ,
|
boost::asio::async_write(socket_, boost::asio::buffer(m_send_que.front().data(), size_now ) ,
|
||||||
//strand_.wrap(
|
//strand_.wrap(
|
||||||
boost::bind(&connection<t_protocol_handler>::handle_write, self, _1, _2)
|
boost::bind(&connection<t_protocol_handler>::handle_write, self, _1, _2)
|
||||||
@@ -553,16 +578,91 @@ PRAGMA_WARNING_DISABLE_VS(4355)
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
CATCH_ENTRY_L0("connection<t_protocol_handler>::do_send", false);
|
CATCH_ENTRY_L0("connection<t_protocol_handler>::do_send_chunk", false);
|
||||||
} // do_send_chunk
|
} // do_send_chunk
|
||||||
//---------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------
|
||||||
template<class t_protocol_handler>
|
template<class t_protocol_handler>
|
||||||
|
boost::posix_time::milliseconds connection<t_protocol_handler>::get_default_timeout()
|
||||||
|
{
|
||||||
|
unsigned count;
|
||||||
|
try { count = host_count(m_host); } catch (...) { count = 0; }
|
||||||
|
const unsigned shift = std::min(std::max(count, 1u) - 1, 8u);
|
||||||
|
boost::posix_time::milliseconds timeout(0);
|
||||||
|
if (m_local)
|
||||||
|
timeout = boost::posix_time::milliseconds(DEFAULT_TIMEOUT_MS_LOCAL >> shift);
|
||||||
|
else
|
||||||
|
timeout = boost::posix_time::milliseconds(DEFAULT_TIMEOUT_MS_REMOTE >> shift);
|
||||||
|
return timeout;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------------
|
||||||
|
template<class t_protocol_handler>
|
||||||
|
boost::posix_time::milliseconds connection<t_protocol_handler>::get_timeout_from_bytes_read(size_t bytes)
|
||||||
|
{
|
||||||
|
boost::posix_time::milliseconds ms = (boost::posix_time::milliseconds)(unsigned)(bytes * TIMEOUT_EXTRA_MS_PER_BYTE);
|
||||||
|
ms += m_timer.expires_from_now();
|
||||||
|
if (ms > get_default_timeout())
|
||||||
|
ms = get_default_timeout();
|
||||||
|
return ms;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------------
|
||||||
|
template<class t_protocol_handler>
|
||||||
|
unsigned int connection<t_protocol_handler>::host_count(const std::string &host, int delta)
|
||||||
|
{
|
||||||
|
static boost::mutex hosts_mutex;
|
||||||
|
CRITICAL_REGION_LOCAL(hosts_mutex);
|
||||||
|
static std::map<std::string, unsigned int> hosts;
|
||||||
|
unsigned int &val = hosts[host];
|
||||||
|
if (delta > 0)
|
||||||
|
MTRACE("New connection from host " << host << ": " << val);
|
||||||
|
else if (delta < 0)
|
||||||
|
MTRACE("Closed connection from host " << host << ": " << val);
|
||||||
|
CHECK_AND_ASSERT_THROW_MES(delta >= 0 || val >= (unsigned)-delta, "Count would go negative");
|
||||||
|
CHECK_AND_ASSERT_THROW_MES(delta <= 0 || val <= std::numeric_limits<unsigned int>::max() - (unsigned)delta, "Count would wrap");
|
||||||
|
val += delta;
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------------
|
||||||
|
template<class t_protocol_handler>
|
||||||
|
void connection<t_protocol_handler>::reset_timer(boost::posix_time::milliseconds ms, bool add)
|
||||||
|
{
|
||||||
|
if (m_connection_type != e_connection_type_RPC)
|
||||||
|
return;
|
||||||
|
MTRACE("Setting " << ms << " expiry");
|
||||||
|
auto self = safe_shared_from_this();
|
||||||
|
if(!self)
|
||||||
|
{
|
||||||
|
MERROR("Resetting timer on a dead object");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (add)
|
||||||
|
ms += m_timer.expires_from_now();
|
||||||
|
m_timer.expires_from_now(ms);
|
||||||
|
m_timer.async_wait([=](const boost::system::error_code& ec)
|
||||||
|
{
|
||||||
|
if(ec == boost::asio::error::operation_aborted)
|
||||||
|
return;
|
||||||
|
MDEBUG(context << "connection timeout, closing");
|
||||||
|
self->close();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------------
|
||||||
|
template<class t_protocol_handler>
|
||||||
bool connection<t_protocol_handler>::shutdown()
|
bool connection<t_protocol_handler>::shutdown()
|
||||||
{
|
{
|
||||||
|
CRITICAL_REGION_BEGIN(m_shutdown_lock);
|
||||||
|
if (m_was_shutdown)
|
||||||
|
return true;
|
||||||
|
m_was_shutdown = true;
|
||||||
// Initiate graceful connection closure.
|
// Initiate graceful connection closure.
|
||||||
|
m_timer.cancel();
|
||||||
boost::system::error_code ignored_ec;
|
boost::system::error_code ignored_ec;
|
||||||
socket_.shutdown(boost::asio::ip::tcp::socket::shutdown_both, ignored_ec);
|
socket_.shutdown(boost::asio::ip::tcp::socket::shutdown_both, ignored_ec);
|
||||||
m_was_shutdown = true;
|
if (!m_host.empty())
|
||||||
|
{
|
||||||
|
try { host_count(m_host, -1); } catch (...) { /* ignore */ }
|
||||||
|
m_host = "";
|
||||||
|
}
|
||||||
|
CRITICAL_REGION_END();
|
||||||
m_protocol_handler.release_protocol();
|
m_protocol_handler.release_protocol();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -571,7 +671,11 @@ PRAGMA_WARNING_DISABLE_VS(4355)
|
|||||||
bool connection<t_protocol_handler>::close()
|
bool connection<t_protocol_handler>::close()
|
||||||
{
|
{
|
||||||
TRY_ENTRY();
|
TRY_ENTRY();
|
||||||
|
auto self = safe_shared_from_this();
|
||||||
|
if(!self)
|
||||||
|
return false;
|
||||||
//_info("[sock " << socket_.native_handle() << "] Que Shutdown called.");
|
//_info("[sock " << socket_.native_handle() << "] Que Shutdown called.");
|
||||||
|
m_timer.cancel();
|
||||||
size_t send_que_size = 0;
|
size_t send_que_size = 0;
|
||||||
CRITICAL_REGION_BEGIN(m_send_que_lock);
|
CRITICAL_REGION_BEGIN(m_send_que_lock);
|
||||||
send_que_size = m_send_que.size();
|
send_que_size = m_send_que.size();
|
||||||
@@ -587,6 +691,15 @@ PRAGMA_WARNING_DISABLE_VS(4355)
|
|||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------
|
||||||
template<class t_protocol_handler>
|
template<class t_protocol_handler>
|
||||||
|
bool connection<t_protocol_handler>::send_done()
|
||||||
|
{
|
||||||
|
if (m_ready_to_close)
|
||||||
|
return close();
|
||||||
|
m_ready_to_close = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------------
|
||||||
|
template<class t_protocol_handler>
|
||||||
bool connection<t_protocol_handler>::cancel()
|
bool connection<t_protocol_handler>::cancel()
|
||||||
{
|
{
|
||||||
return close();
|
return close();
|
||||||
@@ -629,6 +742,7 @@ PRAGMA_WARNING_DISABLE_VS(4355)
|
|||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
//have more data to send
|
//have more data to send
|
||||||
|
reset_timer(get_default_timeout(), false);
|
||||||
auto size_now = m_send_que.front().size();
|
auto size_now = m_send_que.front().size();
|
||||||
MDEBUG("handle_write() NOW SENDS: packet="<<size_now<<" B" <<", from queue size="<<m_send_que.size());
|
MDEBUG("handle_write() NOW SENDS: packet="<<size_now<<" B" <<", from queue size="<<m_send_que.size());
|
||||||
if (speed_limit_is_enabled())
|
if (speed_limit_is_enabled())
|
||||||
@@ -923,7 +1037,8 @@ POP_WARNINGS
|
|||||||
void boosted_tcp_server<t_protocol_handler>::handle_accept(const boost::system::error_code& e)
|
void boosted_tcp_server<t_protocol_handler>::handle_accept(const boost::system::error_code& e)
|
||||||
{
|
{
|
||||||
MDEBUG("handle_accept");
|
MDEBUG("handle_accept");
|
||||||
TRY_ENTRY();
|
try
|
||||||
|
{
|
||||||
if (!e)
|
if (!e)
|
||||||
{
|
{
|
||||||
if (m_connection_type == e_connection_type_RPC) {
|
if (m_connection_type == e_connection_type_RPC) {
|
||||||
@@ -941,11 +1056,25 @@ POP_WARNINGS
|
|||||||
|
|
||||||
conn->start(true, 1 < m_threads_count);
|
conn->start(true, 1 < m_threads_count);
|
||||||
conn->save_dbg_log();
|
conn->save_dbg_log();
|
||||||
}else
|
return;
|
||||||
{
|
|
||||||
_erro("Some problems at accept: " << e.message() << ", connections_count = " << m_sock_count);
|
|
||||||
}
|
}
|
||||||
CATCH_ENTRY_L0("boosted_tcp_server<t_protocol_handler>::handle_accept", void());
|
else
|
||||||
|
{
|
||||||
|
MERROR("Error in boosted_tcp_server<t_protocol_handler>::handle_accept: " << e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (const std::exception &e)
|
||||||
|
{
|
||||||
|
MERROR("Exception in boosted_tcp_server<t_protocol_handler>::handle_accept: " << e.what());
|
||||||
|
}
|
||||||
|
|
||||||
|
// error path, if e or exception
|
||||||
|
_erro("Some problems at accept: " << e.message() << ", connections_count = " << m_sock_count);
|
||||||
|
misc_utils::sleep_no_w(100);
|
||||||
|
new_connection_.reset(new connection<t_protocol_handler>(io_service_, m_config, m_sock_count, m_sock_number, m_pfilter, m_connection_type));
|
||||||
|
acceptor_.async_accept(new_connection_->socket(),
|
||||||
|
boost::bind(&boosted_tcp_server<t_protocol_handler>::handle_accept, this,
|
||||||
|
boost::asio::placeholders::error));
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------
|
||||||
template<class t_protocol_handler>
|
template<class t_protocol_handler>
|
||||||
|
|||||||
@@ -141,6 +141,7 @@ namespace net_utils
|
|||||||
size_t m_len_summary, m_len_remain;
|
size_t m_len_summary, m_len_remain;
|
||||||
config_type& m_config;
|
config_type& m_config;
|
||||||
bool m_want_close;
|
bool m_want_close;
|
||||||
|
size_t m_newlines;
|
||||||
protected:
|
protected:
|
||||||
i_service_endpoint* m_psnd_hndlr;
|
i_service_endpoint* m_psnd_hndlr;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
|
|
||||||
#define HTTP_MAX_URI_LEN 9000
|
#define HTTP_MAX_URI_LEN 9000
|
||||||
#define HTTP_MAX_HEADER_LEN 100000
|
#define HTTP_MAX_HEADER_LEN 100000
|
||||||
|
#define HTTP_MAX_STARTING_NEWLINES 8
|
||||||
|
|
||||||
namespace epee
|
namespace epee
|
||||||
{
|
{
|
||||||
@@ -203,6 +204,7 @@ namespace net_utils
|
|||||||
m_len_remain(0),
|
m_len_remain(0),
|
||||||
m_config(config),
|
m_config(config),
|
||||||
m_want_close(false),
|
m_want_close(false),
|
||||||
|
m_newlines(0),
|
||||||
m_psnd_hndlr(psnd_hndlr)
|
m_psnd_hndlr(psnd_hndlr)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -216,6 +218,7 @@ namespace net_utils
|
|||||||
m_body_transfer_type = http_body_transfer_undefined;
|
m_body_transfer_type = http_body_transfer_undefined;
|
||||||
m_query_info.clear();
|
m_query_info.clear();
|
||||||
m_len_summary = 0;
|
m_len_summary = 0;
|
||||||
|
m_newlines = 0;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//--------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------
|
||||||
@@ -236,6 +239,8 @@ namespace net_utils
|
|||||||
bool simple_http_connection_handler<t_connection_context>::handle_buff_in(std::string& buf)
|
bool simple_http_connection_handler<t_connection_context>::handle_buff_in(std::string& buf)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
size_t ndel;
|
||||||
|
|
||||||
if(m_cache.size())
|
if(m_cache.size())
|
||||||
m_cache += buf;
|
m_cache += buf;
|
||||||
else
|
else
|
||||||
@@ -253,11 +258,19 @@ namespace net_utils
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
//check_and_handle_fake_response();
|
//check_and_handle_fake_response();
|
||||||
if((m_cache[0] == '\r' || m_cache[0] == '\n'))
|
ndel = m_cache.find_first_not_of("\r\n");
|
||||||
|
if (ndel != 0)
|
||||||
{
|
{
|
||||||
//some times it could be that before query line cold be few line breaks
|
//some times it could be that before query line cold be few line breaks
|
||||||
//so we have to be calm without panic with assers
|
//so we have to be calm without panic with assers
|
||||||
m_cache.erase(0, 1);
|
m_newlines += std::string::npos == ndel ? m_cache.size() : ndel;
|
||||||
|
if (m_newlines > HTTP_MAX_STARTING_NEWLINES)
|
||||||
|
{
|
||||||
|
LOG_ERROR("simple_http_connection_handler::handle_buff_out: Too many starting newlines");
|
||||||
|
m_state = http_state_error;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
m_cache.erase(0, ndel);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -386,7 +399,7 @@ namespace net_utils
|
|||||||
template<class t_connection_context>
|
template<class t_connection_context>
|
||||||
bool simple_http_connection_handler<t_connection_context>::analize_cached_request_header_and_invoke_state(size_t pos)
|
bool simple_http_connection_handler<t_connection_context>::analize_cached_request_header_and_invoke_state(size_t pos)
|
||||||
{
|
{
|
||||||
//LOG_PRINT_L4("HTTP HEAD:\r\n" << m_cache.substr(0, pos));
|
LOG_PRINT_L3("HTTP HEAD:\r\n" << m_cache.substr(0, pos));
|
||||||
|
|
||||||
m_query_info.m_full_request_buf_size = pos;
|
m_query_info.m_full_request_buf_size = pos;
|
||||||
m_query_info.m_request_head.assign(m_cache.begin(), m_cache.begin()+pos);
|
m_query_info.m_request_head.assign(m_cache.begin(), m_cache.begin()+pos);
|
||||||
@@ -569,6 +582,7 @@ namespace net_utils
|
|||||||
m_psnd_hndlr->do_send((void*)response_data.data(), response_data.size());
|
m_psnd_hndlr->do_send((void*)response_data.data(), response_data.size());
|
||||||
if ((response.m_body.size() && (query_info.m_http_method != http::http_method_head)) || (query_info.m_http_method == http::http_method_options))
|
if ((response.m_body.size() && (query_info.m_http_method != http::http_method_head)) || (query_info.m_http_method == http::http_method_options))
|
||||||
m_psnd_hndlr->do_send((void*)response.m_body.data(), response.m_body.size());
|
m_psnd_hndlr->do_send((void*)response.m_body.data(), response.m_body.size());
|
||||||
|
m_psnd_hndlr->send_done();
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
//-----------------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -122,6 +122,7 @@
|
|||||||
if(!ps.load_from_json(query_info.m_body)) \
|
if(!ps.load_from_json(query_info.m_body)) \
|
||||||
{ \
|
{ \
|
||||||
boost::value_initialized<epee::json_rpc::error_response> rsp; \
|
boost::value_initialized<epee::json_rpc::error_response> rsp; \
|
||||||
|
static_cast<epee::json_rpc::error_response&>(rsp).jsonrpc = "2.0"; \
|
||||||
static_cast<epee::json_rpc::error_response&>(rsp).error.code = -32700; \
|
static_cast<epee::json_rpc::error_response&>(rsp).error.code = -32700; \
|
||||||
static_cast<epee::json_rpc::error_response&>(rsp).error.message = "Parse error"; \
|
static_cast<epee::json_rpc::error_response&>(rsp).error.message = "Parse error"; \
|
||||||
epee::serialization::store_t_to_json(static_cast<epee::json_rpc::error_response&>(rsp), response_info.m_body); \
|
epee::serialization::store_t_to_json(static_cast<epee::json_rpc::error_response&>(rsp), response_info.m_body); \
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ namespace epee
|
|||||||
|
|
||||||
if( (ip | 0xffffff00) == 0xffffffac)
|
if( (ip | 0xffffff00) == 0xffffffac)
|
||||||
{
|
{
|
||||||
uint32_t second_num = (ip << 8) & 0xff000000;
|
uint32_t second_num = (ip >> 8) & 0xff;
|
||||||
if(second_num >= 16 && second_num <= 31 )
|
if(second_num >= 16 && second_num <= 31 )
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -281,6 +281,7 @@ namespace net_utils
|
|||||||
{
|
{
|
||||||
virtual bool do_send(const void* ptr, size_t cb)=0;
|
virtual bool do_send(const void* ptr, size_t cb)=0;
|
||||||
virtual bool close()=0;
|
virtual bool close()=0;
|
||||||
|
virtual bool send_done()=0;
|
||||||
virtual bool call_run_once_service_io()=0;
|
virtual bool call_run_once_service_io()=0;
|
||||||
virtual bool request_callback()=0;
|
virtual bool request_callback()=0;
|
||||||
virtual boost::asio::io_service& get_io_service()=0;
|
virtual boost::asio::io_service& get_io_service()=0;
|
||||||
|
|||||||
@@ -35,6 +35,11 @@
|
|||||||
|
|
||||||
namespace epee
|
namespace epee
|
||||||
{
|
{
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
template<class C> void hint_resize(C &container, size_t size) {}
|
||||||
|
template<class C> void hint_resize(std::vector<C> &container, size_t size) { container.reserve(size); }
|
||||||
|
}
|
||||||
namespace serialization
|
namespace serialization
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -158,6 +163,7 @@ namespace epee
|
|||||||
false,
|
false,
|
||||||
"size in blob " << loaded_size << " not have not zero modulo for sizeof(value_type) = " << sizeof(typename stl_container::value_type));
|
"size in blob " << loaded_size << " not have not zero modulo for sizeof(value_type) = " << sizeof(typename stl_container::value_type));
|
||||||
size_t count = (loaded_size/sizeof(typename stl_container::value_type));
|
size_t count = (loaded_size/sizeof(typename stl_container::value_type));
|
||||||
|
hint_resize(container, count);
|
||||||
for(size_t i = 0; i < count; i++)
|
for(size_t i = 0; i < count; i++)
|
||||||
container.insert(container.end(), *(pelem++));
|
container.insert(container.end(), *(pelem++));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,8 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
namespace epee
|
namespace epee
|
||||||
{
|
{
|
||||||
namespace misc_utils
|
namespace misc_utils
|
||||||
@@ -36,8 +38,12 @@ namespace misc_utils
|
|||||||
{
|
{
|
||||||
inline std::string transform_to_escape_sequence(const std::string& src)
|
inline std::string transform_to_escape_sequence(const std::string& src)
|
||||||
{
|
{
|
||||||
//std::stringstream res;
|
static const char escaped[] = "\b\f\n\r\t\v\"\\/";
|
||||||
|
if (std::find_first_of(src.begin(), src.end(), escaped, escaped + sizeof(escaped)) == src.end())
|
||||||
|
return src;
|
||||||
|
|
||||||
std::string res;
|
std::string res;
|
||||||
|
res.reserve(2 * src.size());
|
||||||
for(std::string::const_iterator it = src.begin(); it!=src.end(); ++it)
|
for(std::string::const_iterator it = src.begin(); it!=src.end(); ++it)
|
||||||
{
|
{
|
||||||
switch(*it)
|
switch(*it)
|
||||||
@@ -84,6 +90,7 @@ namespace misc_utils
|
|||||||
inline void match_string2(std::string::const_iterator& star_end_string, std::string::const_iterator buf_end, std::string& val)
|
inline void match_string2(std::string::const_iterator& star_end_string, std::string::const_iterator buf_end, std::string& val)
|
||||||
{
|
{
|
||||||
val.clear();
|
val.clear();
|
||||||
|
val.reserve(std::distance(star_end_string, buf_end));
|
||||||
bool escape_mode = false;
|
bool escape_mode = false;
|
||||||
std::string::const_iterator it = star_end_string;
|
std::string::const_iterator it = star_end_string;
|
||||||
++it;
|
++it;
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ namespace epee
|
|||||||
storage_entry load_storage_entry();
|
storage_entry load_storage_entry();
|
||||||
void read(section& sec);
|
void read(section& sec);
|
||||||
void read(std::string& str);
|
void read(std::string& str);
|
||||||
|
void read(array_entry &ae);
|
||||||
private:
|
private:
|
||||||
struct recursuion_limitation_guard
|
struct recursuion_limitation_guard
|
||||||
{
|
{
|
||||||
@@ -114,6 +115,7 @@ namespace epee
|
|||||||
void throwable_buffer_reader::read(t_pod_type& pod_val)
|
void throwable_buffer_reader::read(t_pod_type& pod_val)
|
||||||
{
|
{
|
||||||
RECURSION_LIMITATION();
|
RECURSION_LIMITATION();
|
||||||
|
static_assert(std::is_pod<t_pod_type>::value, "POD type expected");
|
||||||
read(&pod_val, sizeof(pod_val));
|
read(&pod_val, sizeof(pod_val));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -277,5 +279,11 @@ namespace epee
|
|||||||
m_ptr+=len;
|
m_ptr+=len;
|
||||||
m_count -= len;
|
m_count -= len;
|
||||||
}
|
}
|
||||||
|
inline
|
||||||
|
void throwable_buffer_reader::read(array_entry &ae)
|
||||||
|
{
|
||||||
|
RECURSION_LIMITATION();
|
||||||
|
CHECK_AND_ASSERT_THROW_MES(false, "Reading array entry is not supported");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,8 @@
|
|||||||
#include "parserse_base_utils.h"
|
#include "parserse_base_utils.h"
|
||||||
#include "file_io_utils.h"
|
#include "file_io_utils.h"
|
||||||
|
|
||||||
|
#define EPEE_JSON_RECURSION_LIMIT_INTERNAL 100
|
||||||
|
|
||||||
namespace epee
|
namespace epee
|
||||||
{
|
{
|
||||||
using namespace misc_utils::parse;
|
using namespace misc_utils::parse;
|
||||||
@@ -44,8 +46,9 @@ namespace epee
|
|||||||
ASSERT_MES_AND_THROW("json parse error");
|
ASSERT_MES_AND_THROW("json parse error");
|
||||||
}*/
|
}*/
|
||||||
template<class t_storage>
|
template<class t_storage>
|
||||||
inline void run_handler(typename t_storage::hsection current_section, std::string::const_iterator& sec_buf_begin, std::string::const_iterator buf_end, t_storage& stg)
|
inline void run_handler(typename t_storage::hsection current_section, std::string::const_iterator& sec_buf_begin, std::string::const_iterator buf_end, t_storage& stg, unsigned int recursion)
|
||||||
{
|
{
|
||||||
|
CHECK_AND_ASSERT_THROW_MES(recursion < EPEE_JSON_RECURSION_LIMIT_INTERNAL, "Wrong JSON data: recursion limitation (" << EPEE_JSON_RECURSION_LIMIT_INTERNAL << ") exceeded");
|
||||||
|
|
||||||
std::string::const_iterator sub_element_start;
|
std::string::const_iterator sub_element_start;
|
||||||
std::string name;
|
std::string name;
|
||||||
@@ -157,7 +160,7 @@ namespace epee
|
|||||||
//sub section here
|
//sub section here
|
||||||
typename t_storage::hsection new_sec = stg.open_section(name, current_section, true);
|
typename t_storage::hsection new_sec = stg.open_section(name, current_section, true);
|
||||||
CHECK_AND_ASSERT_THROW_MES(new_sec, "Failed to insert new section in json: " << std::string(it, buf_end));
|
CHECK_AND_ASSERT_THROW_MES(new_sec, "Failed to insert new section in json: " << std::string(it, buf_end));
|
||||||
run_handler(new_sec, it, buf_end, stg);
|
run_handler(new_sec, it, buf_end, stg, recursion + 1);
|
||||||
state = match_state_wonder_after_value;
|
state = match_state_wonder_after_value;
|
||||||
}else if(*it == '[')
|
}else if(*it == '[')
|
||||||
{//array of something
|
{//array of something
|
||||||
@@ -186,7 +189,7 @@ namespace epee
|
|||||||
typename t_storage::hsection new_sec = nullptr;
|
typename t_storage::hsection new_sec = nullptr;
|
||||||
h_array = stg.insert_first_section(name, new_sec, current_section);
|
h_array = stg.insert_first_section(name, new_sec, current_section);
|
||||||
CHECK_AND_ASSERT_THROW_MES(h_array&&new_sec, "failed to create new section");
|
CHECK_AND_ASSERT_THROW_MES(h_array&&new_sec, "failed to create new section");
|
||||||
run_handler(new_sec, it, buf_end, stg);
|
run_handler(new_sec, it, buf_end, stg, recursion + 1);
|
||||||
state = match_state_array_after_value;
|
state = match_state_array_after_value;
|
||||||
array_md = array_mode_sections;
|
array_md = array_mode_sections;
|
||||||
}else if(*it == '"')
|
}else if(*it == '"')
|
||||||
@@ -260,7 +263,7 @@ namespace epee
|
|||||||
typename t_storage::hsection new_sec = NULL;
|
typename t_storage::hsection new_sec = NULL;
|
||||||
bool res = stg.insert_next_section(h_array, new_sec);
|
bool res = stg.insert_next_section(h_array, new_sec);
|
||||||
CHECK_AND_ASSERT_THROW_MES(res&&new_sec, "failed to insert next section");
|
CHECK_AND_ASSERT_THROW_MES(res&&new_sec, "failed to insert next section");
|
||||||
run_handler(new_sec, it, buf_end, stg);
|
run_handler(new_sec, it, buf_end, stg, recursion + 1);
|
||||||
state = match_state_array_after_value;
|
state = match_state_array_after_value;
|
||||||
}else CHECK_ISSPACE();
|
}else CHECK_ISSPACE();
|
||||||
break;
|
break;
|
||||||
@@ -362,7 +365,7 @@ namespace epee
|
|||||||
std::string::const_iterator sec_buf_begin = buff_json.begin();
|
std::string::const_iterator sec_buf_begin = buff_json.begin();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
run_handler(nullptr, sec_buf_begin, buff_json.end(), stg);
|
run_handler(nullptr, sec_buf_begin, buff_json.end(), stg, 0);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch(const std::exception& ex)
|
catch(const std::exception& ex)
|
||||||
|
|||||||
@@ -381,6 +381,41 @@ POP_WARNINGS
|
|||||||
res = str.substr(0, pos);
|
res = str.substr(0, pos);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
#ifdef _WIN32
|
||||||
|
inline std::wstring utf8_to_utf16(const std::string& str)
|
||||||
|
{
|
||||||
|
if (str.empty())
|
||||||
|
return {};
|
||||||
|
int wstr_size = MultiByteToWideChar(CP_UTF8, 0, &str[0], str.size(), NULL, 0);
|
||||||
|
if (wstr_size == 0)
|
||||||
|
{
|
||||||
|
throw std::runtime_error(std::error_code(GetLastError(), std::system_category()).message());
|
||||||
|
}
|
||||||
|
std::wstring wstr(wstr_size, wchar_t{});
|
||||||
|
if (!MultiByteToWideChar(CP_UTF8, 0, &str[0], str.size(), &wstr[0], wstr_size))
|
||||||
|
{
|
||||||
|
throw std::runtime_error(std::error_code(GetLastError(), std::system_category()).message());
|
||||||
|
}
|
||||||
|
return wstr;
|
||||||
|
}
|
||||||
|
inline std::string utf16_to_utf8(const std::wstring& wstr)
|
||||||
|
{
|
||||||
|
if (wstr.empty())
|
||||||
|
return {};
|
||||||
|
int str_size = WideCharToMultiByte(CP_UTF8, 0, &wstr[0], wstr.size(), NULL, 0, NULL, NULL);
|
||||||
|
if (str_size == 0)
|
||||||
|
{
|
||||||
|
throw std::runtime_error(std::error_code(GetLastError(), std::system_category()).message());
|
||||||
|
}
|
||||||
|
std::string str(str_size, char{});
|
||||||
|
if (!WideCharToMultiByte(CP_UTF8, 0, &wstr[0], wstr.size(), &str[0], str_size, NULL, NULL))
|
||||||
|
{
|
||||||
|
throw std::runtime_error(std::error_code(GetLastError(), std::system_category()).message());
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif //_STRING_TOOLS_H_
|
#endif //_STRING_TOOLS_H_
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ using namespace epee;
|
|||||||
static std::string generate_log_filename(const char *base)
|
static std::string generate_log_filename(const char *base)
|
||||||
{
|
{
|
||||||
std::string filename(base);
|
std::string filename(base);
|
||||||
|
static unsigned int fallback_counter = 0;
|
||||||
char tmp[200];
|
char tmp[200];
|
||||||
struct tm tm;
|
struct tm tm;
|
||||||
time_t now = time(NULL);
|
time_t now = time(NULL);
|
||||||
@@ -56,7 +57,7 @@ static std::string generate_log_filename(const char *base)
|
|||||||
#else
|
#else
|
||||||
(!gmtime_r(&now, &tm))
|
(!gmtime_r(&now, &tm))
|
||||||
#endif
|
#endif
|
||||||
strcpy(tmp, "unknown");
|
snprintf(tmp, sizeof(tmp), "part-%u", ++fallback_counter);
|
||||||
else
|
else
|
||||||
strftime(tmp, sizeof(tmp), "%Y-%m-%d-%H-%M-%S", &tm);
|
strftime(tmp, sizeof(tmp), "%Y-%m-%d-%H-%M-%S", &tm);
|
||||||
tmp[sizeof(tmp) - 1] = 0;
|
tmp[sizeof(tmp) - 1] = 0;
|
||||||
@@ -96,7 +97,7 @@ static const char *get_default_categories(int level)
|
|||||||
switch (level)
|
switch (level)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
categories = "*:WARNING,net:FATAL,net.p2p:FATAL,net.cn:FATAL,global:INFO,verify:FATAL,stacktrace:INFO,logging:INFO,msgwriter:INFO";
|
categories = "*:WARNING,net:FATAL,net.http:FATAL,net.p2p:FATAL,net.cn:FATAL,global:INFO,verify:FATAL,stacktrace:INFO,logging:INFO,msgwriter:INFO";
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
categories = "*:INFO,global:INFO,stacktrace:INFO,logging:INFO,msgwriter:INFO";
|
categories = "*:INFO,global:INFO,stacktrace:INFO,logging:INFO,msgwriter:INFO";
|
||||||
|
|||||||
5
external/CMakeLists.txt
vendored
5
external/CMakeLists.txt
vendored
@@ -38,15 +38,16 @@
|
|||||||
find_package(Miniupnpc REQUIRED)
|
find_package(Miniupnpc REQUIRED)
|
||||||
|
|
||||||
message(STATUS "Using in-tree miniupnpc")
|
message(STATUS "Using in-tree miniupnpc")
|
||||||
|
|
||||||
add_subdirectory(miniupnp/miniupnpc)
|
add_subdirectory(miniupnp/miniupnpc)
|
||||||
|
|
||||||
set_property(TARGET libminiupnpc-static PROPERTY FOLDER "external")
|
set_property(TARGET libminiupnpc-static PROPERTY FOLDER "external")
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
set_property(TARGET libminiupnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -wd4244 -wd4267")
|
set_property(TARGET libminiupnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -wd4244 -wd4267")
|
||||||
elseif(NOT MSVC)
|
elseif(NOT MSVC)
|
||||||
set_property(TARGET libminiupnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-undef -Wno-unused-result -Wno-unused-value")
|
set_property(TARGET libminiupnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-undef -Wno-unused-result -Wno-unused-value")
|
||||||
endif()
|
endif()
|
||||||
|
if(CMAKE_SYSTEM_NAME MATCHES "NetBSD")
|
||||||
|
set_property(TARGET libminiupnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -D_NETBSD_SOURCE")
|
||||||
|
endif()
|
||||||
|
|
||||||
set(UPNP_LIBRARIES "libminiupnpc-static" PARENT_SCOPE)
|
set(UPNP_LIBRARIES "libminiupnpc-static" PARENT_SCOPE)
|
||||||
|
|
||||||
|
|||||||
3
external/db_drivers/CMakeLists.txt
vendored
3
external/db_drivers/CMakeLists.txt
vendored
@@ -32,3 +32,6 @@ message(STATUS "Using ${ARCH_WIDTH}-bit LMDB from source tree")
|
|||||||
add_subdirectory(liblmdb)
|
add_subdirectory(liblmdb)
|
||||||
set(LMDB_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/liblmdb" CACHE STRING "LMDB Include path")
|
set(LMDB_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/liblmdb" CACHE STRING "LMDB Include path")
|
||||||
set(LMDB_LIBRARY "lmdb" CACHE STRING "LMDB Library name")
|
set(LMDB_LIBRARY "lmdb" CACHE STRING "LMDB Library name")
|
||||||
|
if(CMAKE_SYSTEM_NAME MATCHES "NetBSD")
|
||||||
|
set_property(TARGET lmdb APPEND_STRING PROPERTY COMPILE_FLAGS " -D_SEM_SEMUN_UNDEFINED")
|
||||||
|
endif()
|
||||||
|
|||||||
4
external/db_drivers/liblmdb/mdb.c
vendored
4
external/db_drivers/liblmdb/mdb.c
vendored
@@ -7231,7 +7231,7 @@ mdb_cursor_put(MDB_cursor *mc, MDB_val *key, MDB_val *data,
|
|||||||
|
|
||||||
dkey.mv_size = 0;
|
dkey.mv_size = 0;
|
||||||
|
|
||||||
if (flags == MDB_CURRENT) {
|
if (flags & MDB_CURRENT) {
|
||||||
if (!(mc->mc_flags & C_INITIALIZED))
|
if (!(mc->mc_flags & C_INITIALIZED))
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
rc = MDB_SUCCESS;
|
rc = MDB_SUCCESS;
|
||||||
@@ -7624,7 +7624,7 @@ put_sub:
|
|||||||
xdata.mv_size = 0;
|
xdata.mv_size = 0;
|
||||||
xdata.mv_data = "";
|
xdata.mv_data = "";
|
||||||
leaf = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]);
|
leaf = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]);
|
||||||
if (flags & MDB_CURRENT) {
|
if (flags == MDB_CURRENT) {
|
||||||
xflags = MDB_CURRENT|MDB_NOSPILL;
|
xflags = MDB_CURRENT|MDB_NOSPILL;
|
||||||
} else {
|
} else {
|
||||||
mdb_xcursor_init1(mc, leaf);
|
mdb_xcursor_init1(mc, leaf);
|
||||||
|
|||||||
12
external/db_drivers/liblmdb/mdb_load.c
vendored
12
external/db_drivers/liblmdb/mdb_load.c
vendored
@@ -78,6 +78,7 @@ static void readhdr(void)
|
|||||||
{
|
{
|
||||||
char *ptr;
|
char *ptr;
|
||||||
|
|
||||||
|
flags = 0;
|
||||||
while (fgets(dbuf.mv_data, dbuf.mv_size, stdin) != NULL) {
|
while (fgets(dbuf.mv_data, dbuf.mv_size, stdin) != NULL) {
|
||||||
lineno++;
|
lineno++;
|
||||||
if (!strncmp(dbuf.mv_data, "VERSION=", STRLENOF("VERSION="))) {
|
if (!strncmp(dbuf.mv_data, "VERSION=", STRLENOF("VERSION="))) {
|
||||||
@@ -303,7 +304,7 @@ int main(int argc, char *argv[])
|
|||||||
MDB_cursor *mc;
|
MDB_cursor *mc;
|
||||||
MDB_dbi dbi;
|
MDB_dbi dbi;
|
||||||
char *envname;
|
char *envname;
|
||||||
int envflags = 0, putflags = 0;
|
int envflags = MDB_NOSYNC, putflags = 0;
|
||||||
int dohdr = 0, append = 0;
|
int dohdr = 0, append = 0;
|
||||||
MDB_val prevk;
|
MDB_val prevk;
|
||||||
|
|
||||||
@@ -391,13 +392,11 @@ int main(int argc, char *argv[])
|
|||||||
kbuf.mv_data = malloc(kbuf.mv_size * 2);
|
kbuf.mv_data = malloc(kbuf.mv_size * 2);
|
||||||
k0buf.mv_size = kbuf.mv_size;
|
k0buf.mv_size = kbuf.mv_size;
|
||||||
k0buf.mv_data = (char *)kbuf.mv_data + kbuf.mv_size;
|
k0buf.mv_data = (char *)kbuf.mv_data + kbuf.mv_size;
|
||||||
prevk.mv_size = 0;
|
|
||||||
prevk.mv_data = k0buf.mv_data;
|
prevk.mv_data = k0buf.mv_data;
|
||||||
|
|
||||||
while(!Eof) {
|
while(!Eof) {
|
||||||
MDB_val key, data;
|
MDB_val key, data;
|
||||||
int batch = 0;
|
int batch = 0;
|
||||||
flags = 0;
|
|
||||||
int appflag;
|
int appflag;
|
||||||
|
|
||||||
if (!dohdr) {
|
if (!dohdr) {
|
||||||
@@ -416,6 +415,7 @@ int main(int argc, char *argv[])
|
|||||||
fprintf(stderr, "mdb_open failed, error %d %s\n", rc, mdb_strerror(rc));
|
fprintf(stderr, "mdb_open failed, error %d %s\n", rc, mdb_strerror(rc));
|
||||||
goto txn_abort;
|
goto txn_abort;
|
||||||
}
|
}
|
||||||
|
prevk.mv_size = 0;
|
||||||
if (append) {
|
if (append) {
|
||||||
mdb_set_compare(txn, dbi, greater);
|
mdb_set_compare(txn, dbi, greater);
|
||||||
if (flags & MDB_DUPSORT)
|
if (flags & MDB_DUPSORT)
|
||||||
@@ -443,7 +443,7 @@ int main(int argc, char *argv[])
|
|||||||
appflag = MDB_APPEND;
|
appflag = MDB_APPEND;
|
||||||
if (flags & MDB_DUPSORT) {
|
if (flags & MDB_DUPSORT) {
|
||||||
if (prevk.mv_size == key.mv_size && !memcmp(prevk.mv_data, key.mv_data, key.mv_size))
|
if (prevk.mv_size == key.mv_size && !memcmp(prevk.mv_data, key.mv_data, key.mv_size))
|
||||||
appflag = MDB_APPENDDUP;
|
appflag = MDB_CURRENT|MDB_APPENDDUP;
|
||||||
else {
|
else {
|
||||||
memcpy(prevk.mv_data, key.mv_data, key.mv_size);
|
memcpy(prevk.mv_data, key.mv_data, key.mv_size);
|
||||||
prevk.mv_size = key.mv_size;
|
prevk.mv_size = key.mv_size;
|
||||||
@@ -477,6 +477,10 @@ int main(int argc, char *argv[])
|
|||||||
fprintf(stderr, "mdb_cursor_open failed, error %d %s\n", rc, mdb_strerror(rc));
|
fprintf(stderr, "mdb_cursor_open failed, error %d %s\n", rc, mdb_strerror(rc));
|
||||||
goto txn_abort;
|
goto txn_abort;
|
||||||
}
|
}
|
||||||
|
if (appflag & MDB_APPENDDUP) {
|
||||||
|
MDB_val k, d;
|
||||||
|
mdb_cursor_get(mc, &k, &d, MDB_LAST);
|
||||||
|
}
|
||||||
batch = 0;
|
batch = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
9
external/easylogging++/easylogging++.h
vendored
9
external/easylogging++/easylogging++.h
vendored
@@ -104,6 +104,11 @@
|
|||||||
#else
|
#else
|
||||||
# define ELPP_OS_OPENBSD 0
|
# define ELPP_OS_OPENBSD 0
|
||||||
#endif
|
#endif
|
||||||
|
#if (defined(__NetBSD__))
|
||||||
|
# define ELPP_OS_NETBSD 1
|
||||||
|
#else
|
||||||
|
# define ELPP_OS_NETBSD 0
|
||||||
|
#endif
|
||||||
#if (defined(__sun))
|
#if (defined(__sun))
|
||||||
# define ELPP_OS_SOLARIS 1
|
# define ELPP_OS_SOLARIS 1
|
||||||
#else
|
#else
|
||||||
@@ -115,7 +120,7 @@
|
|||||||
# define ELPP_OS_DRAGONFLY 0
|
# define ELPP_OS_DRAGONFLY 0
|
||||||
#endif
|
#endif
|
||||||
// Unix
|
// Unix
|
||||||
#if ((ELPP_OS_LINUX || ELPP_OS_MAC || ELPP_OS_FREEBSD || ELPP_OS_SOLARIS || ELPP_OS_DRAGONFLY || ELPP_OS_OPENBSD) && (!ELPP_OS_WINDOWS))
|
#if ((ELPP_OS_LINUX || ELPP_OS_MAC || ELPP_OS_FREEBSD || ELPP_OS_SOLARIS || ELPP_OS_DRAGONFLY || ELPP_OS_OPENBSD || ELPP_OS_NETBSD ) && (!ELPP_OS_WINDOWS))
|
||||||
# define ELPP_OS_UNIX 1
|
# define ELPP_OS_UNIX 1
|
||||||
#else
|
#else
|
||||||
# define ELPP_OS_UNIX 0
|
# define ELPP_OS_UNIX 0
|
||||||
@@ -200,7 +205,7 @@ ELPP_INTERNAL_DEBUGGING_OUT_INFO << ELPP_INTERNAL_DEBUGGING_MSG(internalInfoStre
|
|||||||
# define ELPP_INTERNAL_INFO(lvl, msg)
|
# define ELPP_INTERNAL_INFO(lvl, msg)
|
||||||
#endif // (defined(ELPP_DEBUG_INFO))
|
#endif // (defined(ELPP_DEBUG_INFO))
|
||||||
#if (defined(ELPP_FEATURE_ALL)) || (defined(ELPP_FEATURE_CRASH_LOG))
|
#if (defined(ELPP_FEATURE_ALL)) || (defined(ELPP_FEATURE_CRASH_LOG))
|
||||||
# if (ELPP_COMPILER_GCC && !ELPP_MINGW && !ELPP_OS_OPENBSD)
|
# if (ELPP_COMPILER_GCC && !ELPP_MINGW && !ELPP_OS_OPENBSD && !ELPP_OS_NETBSD)
|
||||||
# define ELPP_STACKTRACE 1
|
# define ELPP_STACKTRACE 1
|
||||||
# else
|
# else
|
||||||
# define ELPP_STACKTRACE 0
|
# define ELPP_STACKTRACE 0
|
||||||
|
|||||||
1
external/rapidjson
vendored
Submodule
1
external/rapidjson
vendored
Submodule
Submodule external/rapidjson added at 129d19ba7f
271
external/rapidjson/allocators.h
vendored
271
external/rapidjson/allocators.h
vendored
@@ -1,271 +0,0 @@
|
|||||||
// Tencent is pleased to support the open source community by making RapidJSON available.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
|
|
||||||
//
|
|
||||||
// Licensed under the MIT License (the "License"); you may not use this file except
|
|
||||||
// in compliance with the License. You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://opensource.org/licenses/MIT
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software distributed
|
|
||||||
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
|
||||||
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
|
||||||
// specific language governing permissions and limitations under the License.
|
|
||||||
|
|
||||||
#ifndef RAPIDJSON_ALLOCATORS_H_
|
|
||||||
#define RAPIDJSON_ALLOCATORS_H_
|
|
||||||
|
|
||||||
#include "rapidjson.h"
|
|
||||||
|
|
||||||
RAPIDJSON_NAMESPACE_BEGIN
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Allocator
|
|
||||||
|
|
||||||
/*! \class rapidjson::Allocator
|
|
||||||
\brief Concept for allocating, resizing and freeing memory block.
|
|
||||||
|
|
||||||
Note that Malloc() and Realloc() are non-static but Free() is static.
|
|
||||||
|
|
||||||
So if an allocator need to support Free(), it needs to put its pointer in
|
|
||||||
the header of memory block.
|
|
||||||
|
|
||||||
\code
|
|
||||||
concept Allocator {
|
|
||||||
static const bool kNeedFree; //!< Whether this allocator needs to call Free().
|
|
||||||
|
|
||||||
// Allocate a memory block.
|
|
||||||
// \param size of the memory block in bytes.
|
|
||||||
// \returns pointer to the memory block.
|
|
||||||
void* Malloc(size_t size);
|
|
||||||
|
|
||||||
// Resize a memory block.
|
|
||||||
// \param originalPtr The pointer to current memory block. Null pointer is permitted.
|
|
||||||
// \param originalSize The current size in bytes. (Design issue: since some allocator may not book-keep this, explicitly pass to it can save memory.)
|
|
||||||
// \param newSize the new size in bytes.
|
|
||||||
void* Realloc(void* originalPtr, size_t originalSize, size_t newSize);
|
|
||||||
|
|
||||||
// Free a memory block.
|
|
||||||
// \param pointer to the memory block. Null pointer is permitted.
|
|
||||||
static void Free(void *ptr);
|
|
||||||
};
|
|
||||||
\endcode
|
|
||||||
*/
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
// CrtAllocator
|
|
||||||
|
|
||||||
//! C-runtime library allocator.
|
|
||||||
/*! This class is just wrapper for standard C library memory routines.
|
|
||||||
\note implements Allocator concept
|
|
||||||
*/
|
|
||||||
class CrtAllocator {
|
|
||||||
public:
|
|
||||||
static const bool kNeedFree = true;
|
|
||||||
void* Malloc(size_t size) {
|
|
||||||
if (size) // behavior of malloc(0) is implementation defined.
|
|
||||||
return std::malloc(size);
|
|
||||||
else
|
|
||||||
return NULL; // standardize to returning NULL.
|
|
||||||
}
|
|
||||||
void* Realloc(void* originalPtr, size_t originalSize, size_t newSize) {
|
|
||||||
(void)originalSize;
|
|
||||||
if (newSize == 0) {
|
|
||||||
std::free(originalPtr);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return std::realloc(originalPtr, newSize);
|
|
||||||
}
|
|
||||||
static void Free(void *ptr) { std::free(ptr); }
|
|
||||||
};
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
// MemoryPoolAllocator
|
|
||||||
|
|
||||||
//! Default memory allocator used by the parser and DOM.
|
|
||||||
/*! This allocator allocate memory blocks from pre-allocated memory chunks.
|
|
||||||
|
|
||||||
It does not free memory blocks. And Realloc() only allocate new memory.
|
|
||||||
|
|
||||||
The memory chunks are allocated by BaseAllocator, which is CrtAllocator by default.
|
|
||||||
|
|
||||||
User may also supply a buffer as the first chunk.
|
|
||||||
|
|
||||||
If the user-buffer is full then additional chunks are allocated by BaseAllocator.
|
|
||||||
|
|
||||||
The user-buffer is not deallocated by this allocator.
|
|
||||||
|
|
||||||
\tparam BaseAllocator the allocator type for allocating memory chunks. Default is CrtAllocator.
|
|
||||||
\note implements Allocator concept
|
|
||||||
*/
|
|
||||||
template <typename BaseAllocator = CrtAllocator>
|
|
||||||
class MemoryPoolAllocator {
|
|
||||||
public:
|
|
||||||
static const bool kNeedFree = false; //!< Tell users that no need to call Free() with this allocator. (concept Allocator)
|
|
||||||
|
|
||||||
//! Constructor with chunkSize.
|
|
||||||
/*! \param chunkSize The size of memory chunk. The default is kDefaultChunkSize.
|
|
||||||
\param baseAllocator The allocator for allocating memory chunks.
|
|
||||||
*/
|
|
||||||
MemoryPoolAllocator(size_t chunkSize = kDefaultChunkCapacity, BaseAllocator* baseAllocator = 0) :
|
|
||||||
chunkHead_(0), chunk_capacity_(chunkSize), userBuffer_(0), baseAllocator_(baseAllocator), ownBaseAllocator_(0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Constructor with user-supplied buffer.
|
|
||||||
/*! The user buffer will be used firstly. When it is full, memory pool allocates new chunk with chunk size.
|
|
||||||
|
|
||||||
The user buffer will not be deallocated when this allocator is destructed.
|
|
||||||
|
|
||||||
\param buffer User supplied buffer.
|
|
||||||
\param size Size of the buffer in bytes. It must at least larger than sizeof(ChunkHeader).
|
|
||||||
\param chunkSize The size of memory chunk. The default is kDefaultChunkSize.
|
|
||||||
\param baseAllocator The allocator for allocating memory chunks.
|
|
||||||
*/
|
|
||||||
MemoryPoolAllocator(void *buffer, size_t size, size_t chunkSize = kDefaultChunkCapacity, BaseAllocator* baseAllocator = 0) :
|
|
||||||
chunkHead_(0), chunk_capacity_(chunkSize), userBuffer_(buffer), baseAllocator_(baseAllocator), ownBaseAllocator_(0)
|
|
||||||
{
|
|
||||||
RAPIDJSON_ASSERT(buffer != 0);
|
|
||||||
RAPIDJSON_ASSERT(size > sizeof(ChunkHeader));
|
|
||||||
chunkHead_ = reinterpret_cast<ChunkHeader*>(buffer);
|
|
||||||
chunkHead_->capacity = size - sizeof(ChunkHeader);
|
|
||||||
chunkHead_->size = 0;
|
|
||||||
chunkHead_->next = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Destructor.
|
|
||||||
/*! This deallocates all memory chunks, excluding the user-supplied buffer.
|
|
||||||
*/
|
|
||||||
~MemoryPoolAllocator() {
|
|
||||||
Clear();
|
|
||||||
RAPIDJSON_DELETE(ownBaseAllocator_);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Deallocates all memory chunks, excluding the user-supplied buffer.
|
|
||||||
void Clear() {
|
|
||||||
while (chunkHead_ && chunkHead_ != userBuffer_) {
|
|
||||||
ChunkHeader* next = chunkHead_->next;
|
|
||||||
baseAllocator_->Free(chunkHead_);
|
|
||||||
chunkHead_ = next;
|
|
||||||
}
|
|
||||||
if (chunkHead_ && chunkHead_ == userBuffer_)
|
|
||||||
chunkHead_->size = 0; // Clear user buffer
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Computes the total capacity of allocated memory chunks.
|
|
||||||
/*! \return total capacity in bytes.
|
|
||||||
*/
|
|
||||||
size_t Capacity() const {
|
|
||||||
size_t capacity = 0;
|
|
||||||
for (ChunkHeader* c = chunkHead_; c != 0; c = c->next)
|
|
||||||
capacity += c->capacity;
|
|
||||||
return capacity;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Computes the memory blocks allocated.
|
|
||||||
/*! \return total used bytes.
|
|
||||||
*/
|
|
||||||
size_t Size() const {
|
|
||||||
size_t size = 0;
|
|
||||||
for (ChunkHeader* c = chunkHead_; c != 0; c = c->next)
|
|
||||||
size += c->size;
|
|
||||||
return size;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Allocates a memory block. (concept Allocator)
|
|
||||||
void* Malloc(size_t size) {
|
|
||||||
if (!size)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
size = RAPIDJSON_ALIGN(size);
|
|
||||||
if (chunkHead_ == 0 || chunkHead_->size + size > chunkHead_->capacity)
|
|
||||||
if (!AddChunk(chunk_capacity_ > size ? chunk_capacity_ : size))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
void *buffer = reinterpret_cast<char *>(chunkHead_) + RAPIDJSON_ALIGN(sizeof(ChunkHeader)) + chunkHead_->size;
|
|
||||||
chunkHead_->size += size;
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Resizes a memory block (concept Allocator)
|
|
||||||
void* Realloc(void* originalPtr, size_t originalSize, size_t newSize) {
|
|
||||||
if (originalPtr == 0)
|
|
||||||
return Malloc(newSize);
|
|
||||||
|
|
||||||
if (newSize == 0)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
originalSize = RAPIDJSON_ALIGN(originalSize);
|
|
||||||
newSize = RAPIDJSON_ALIGN(newSize);
|
|
||||||
|
|
||||||
// Do not shrink if new size is smaller than original
|
|
||||||
if (originalSize >= newSize)
|
|
||||||
return originalPtr;
|
|
||||||
|
|
||||||
// Simply expand it if it is the last allocation and there is sufficient space
|
|
||||||
if (originalPtr == reinterpret_cast<char *>(chunkHead_) + RAPIDJSON_ALIGN(sizeof(ChunkHeader)) + chunkHead_->size - originalSize) {
|
|
||||||
size_t increment = static_cast<size_t>(newSize - originalSize);
|
|
||||||
if (chunkHead_->size + increment <= chunkHead_->capacity) {
|
|
||||||
chunkHead_->size += increment;
|
|
||||||
return originalPtr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Realloc process: allocate and copy memory, do not free original buffer.
|
|
||||||
if (void* newBuffer = Malloc(newSize)) {
|
|
||||||
if (originalSize)
|
|
||||||
std::memcpy(newBuffer, originalPtr, originalSize);
|
|
||||||
return newBuffer;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Frees a memory block (concept Allocator)
|
|
||||||
static void Free(void *ptr) { (void)ptr; } // Do nothing
|
|
||||||
|
|
||||||
private:
|
|
||||||
//! Copy constructor is not permitted.
|
|
||||||
MemoryPoolAllocator(const MemoryPoolAllocator& rhs) /* = delete */;
|
|
||||||
//! Copy assignment operator is not permitted.
|
|
||||||
MemoryPoolAllocator& operator=(const MemoryPoolAllocator& rhs) /* = delete */;
|
|
||||||
|
|
||||||
//! Creates a new chunk.
|
|
||||||
/*! \param capacity Capacity of the chunk in bytes.
|
|
||||||
\return true if success.
|
|
||||||
*/
|
|
||||||
bool AddChunk(size_t capacity) {
|
|
||||||
if (!baseAllocator_)
|
|
||||||
ownBaseAllocator_ = baseAllocator_ = RAPIDJSON_NEW(BaseAllocator());
|
|
||||||
if (ChunkHeader* chunk = reinterpret_cast<ChunkHeader*>(baseAllocator_->Malloc(RAPIDJSON_ALIGN(sizeof(ChunkHeader)) + capacity))) {
|
|
||||||
chunk->capacity = capacity;
|
|
||||||
chunk->size = 0;
|
|
||||||
chunk->next = chunkHead_;
|
|
||||||
chunkHead_ = chunk;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const int kDefaultChunkCapacity = 64 * 1024; //!< Default chunk capacity.
|
|
||||||
|
|
||||||
//! Chunk header for perpending to each chunk.
|
|
||||||
/*! Chunks are stored as a singly linked list.
|
|
||||||
*/
|
|
||||||
struct ChunkHeader {
|
|
||||||
size_t capacity; //!< Capacity of the chunk in bytes (excluding the header itself).
|
|
||||||
size_t size; //!< Current size of allocated memory in bytes.
|
|
||||||
ChunkHeader *next; //!< Next chunk in the linked list.
|
|
||||||
};
|
|
||||||
|
|
||||||
ChunkHeader *chunkHead_; //!< Head of the chunk linked-list. Only the head chunk serves allocation.
|
|
||||||
size_t chunk_capacity_; //!< The minimum capacity of chunk when they are allocated.
|
|
||||||
void *userBuffer_; //!< User supplied buffer.
|
|
||||||
BaseAllocator* baseAllocator_; //!< base allocator for allocating memory chunks.
|
|
||||||
BaseAllocator* ownBaseAllocator_; //!< base allocator created by this object.
|
|
||||||
};
|
|
||||||
|
|
||||||
RAPIDJSON_NAMESPACE_END
|
|
||||||
|
|
||||||
#endif // RAPIDJSON_ENCODINGS_H_
|
|
||||||
2575
external/rapidjson/document.h
vendored
2575
external/rapidjson/document.h
vendored
File diff suppressed because it is too large
Load Diff
299
external/rapidjson/encodedstream.h
vendored
299
external/rapidjson/encodedstream.h
vendored
@@ -1,299 +0,0 @@
|
|||||||
// Tencent is pleased to support the open source community by making RapidJSON available.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
|
|
||||||
//
|
|
||||||
// Licensed under the MIT License (the "License"); you may not use this file except
|
|
||||||
// in compliance with the License. You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://opensource.org/licenses/MIT
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software distributed
|
|
||||||
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
|
||||||
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
|
||||||
// specific language governing permissions and limitations under the License.
|
|
||||||
|
|
||||||
#ifndef RAPIDJSON_ENCODEDSTREAM_H_
|
|
||||||
#define RAPIDJSON_ENCODEDSTREAM_H_
|
|
||||||
|
|
||||||
#include "stream.h"
|
|
||||||
#include "memorystream.h"
|
|
||||||
|
|
||||||
#ifdef __GNUC__
|
|
||||||
RAPIDJSON_DIAG_PUSH
|
|
||||||
RAPIDJSON_DIAG_OFF(effc++)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __clang__
|
|
||||||
RAPIDJSON_DIAG_PUSH
|
|
||||||
RAPIDJSON_DIAG_OFF(padded)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
RAPIDJSON_NAMESPACE_BEGIN
|
|
||||||
|
|
||||||
//! Input byte stream wrapper with a statically bound encoding.
|
|
||||||
/*!
|
|
||||||
\tparam Encoding The interpretation of encoding of the stream. Either UTF8, UTF16LE, UTF16BE, UTF32LE, UTF32BE.
|
|
||||||
\tparam InputByteStream Type of input byte stream. For example, FileReadStream.
|
|
||||||
*/
|
|
||||||
template <typename Encoding, typename InputByteStream>
|
|
||||||
class EncodedInputStream {
|
|
||||||
RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
|
|
||||||
public:
|
|
||||||
typedef typename Encoding::Ch Ch;
|
|
||||||
|
|
||||||
EncodedInputStream(InputByteStream& is) : is_(is) {
|
|
||||||
current_ = Encoding::TakeBOM(is_);
|
|
||||||
}
|
|
||||||
|
|
||||||
Ch Peek() const { return current_; }
|
|
||||||
Ch Take() { Ch c = current_; current_ = Encoding::Take(is_); return c; }
|
|
||||||
size_t Tell() const { return is_.Tell(); }
|
|
||||||
|
|
||||||
// Not implemented
|
|
||||||
void Put(Ch) { RAPIDJSON_ASSERT(false); }
|
|
||||||
void Flush() { RAPIDJSON_ASSERT(false); }
|
|
||||||
Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
|
|
||||||
size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; }
|
|
||||||
|
|
||||||
private:
|
|
||||||
EncodedInputStream(const EncodedInputStream&);
|
|
||||||
EncodedInputStream& operator=(const EncodedInputStream&);
|
|
||||||
|
|
||||||
InputByteStream& is_;
|
|
||||||
Ch current_;
|
|
||||||
};
|
|
||||||
|
|
||||||
//! Specialized for UTF8 MemoryStream.
|
|
||||||
template <>
|
|
||||||
class EncodedInputStream<UTF8<>, MemoryStream> {
|
|
||||||
public:
|
|
||||||
typedef UTF8<>::Ch Ch;
|
|
||||||
|
|
||||||
EncodedInputStream(MemoryStream& is) : is_(is) {
|
|
||||||
if (static_cast<unsigned char>(is_.Peek()) == 0xEFu) is_.Take();
|
|
||||||
if (static_cast<unsigned char>(is_.Peek()) == 0xBBu) is_.Take();
|
|
||||||
if (static_cast<unsigned char>(is_.Peek()) == 0xBFu) is_.Take();
|
|
||||||
}
|
|
||||||
Ch Peek() const { return is_.Peek(); }
|
|
||||||
Ch Take() { return is_.Take(); }
|
|
||||||
size_t Tell() const { return is_.Tell(); }
|
|
||||||
|
|
||||||
// Not implemented
|
|
||||||
void Put(Ch) {}
|
|
||||||
void Flush() {}
|
|
||||||
Ch* PutBegin() { return 0; }
|
|
||||||
size_t PutEnd(Ch*) { return 0; }
|
|
||||||
|
|
||||||
MemoryStream& is_;
|
|
||||||
|
|
||||||
private:
|
|
||||||
EncodedInputStream(const EncodedInputStream&);
|
|
||||||
EncodedInputStream& operator=(const EncodedInputStream&);
|
|
||||||
};
|
|
||||||
|
|
||||||
//! Output byte stream wrapper with statically bound encoding.
|
|
||||||
/*!
|
|
||||||
\tparam Encoding The interpretation of encoding of the stream. Either UTF8, UTF16LE, UTF16BE, UTF32LE, UTF32BE.
|
|
||||||
\tparam OutputByteStream Type of input byte stream. For example, FileWriteStream.
|
|
||||||
*/
|
|
||||||
template <typename Encoding, typename OutputByteStream>
|
|
||||||
class EncodedOutputStream {
|
|
||||||
RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
|
|
||||||
public:
|
|
||||||
typedef typename Encoding::Ch Ch;
|
|
||||||
|
|
||||||
EncodedOutputStream(OutputByteStream& os, bool putBOM = true) : os_(os) {
|
|
||||||
if (putBOM)
|
|
||||||
Encoding::PutBOM(os_);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Put(Ch c) { Encoding::Put(os_, c); }
|
|
||||||
void Flush() { os_.Flush(); }
|
|
||||||
|
|
||||||
// Not implemented
|
|
||||||
Ch Peek() const { RAPIDJSON_ASSERT(false); return 0;}
|
|
||||||
Ch Take() { RAPIDJSON_ASSERT(false); return 0;}
|
|
||||||
size_t Tell() const { RAPIDJSON_ASSERT(false); return 0; }
|
|
||||||
Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
|
|
||||||
size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; }
|
|
||||||
|
|
||||||
private:
|
|
||||||
EncodedOutputStream(const EncodedOutputStream&);
|
|
||||||
EncodedOutputStream& operator=(const EncodedOutputStream&);
|
|
||||||
|
|
||||||
OutputByteStream& os_;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define RAPIDJSON_ENCODINGS_FUNC(x) UTF8<Ch>::x, UTF16LE<Ch>::x, UTF16BE<Ch>::x, UTF32LE<Ch>::x, UTF32BE<Ch>::x
|
|
||||||
|
|
||||||
//! Input stream wrapper with dynamically bound encoding and automatic encoding detection.
|
|
||||||
/*!
|
|
||||||
\tparam CharType Type of character for reading.
|
|
||||||
\tparam InputByteStream type of input byte stream to be wrapped.
|
|
||||||
*/
|
|
||||||
template <typename CharType, typename InputByteStream>
|
|
||||||
class AutoUTFInputStream {
|
|
||||||
RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
|
|
||||||
public:
|
|
||||||
typedef CharType Ch;
|
|
||||||
|
|
||||||
//! Constructor.
|
|
||||||
/*!
|
|
||||||
\param is input stream to be wrapped.
|
|
||||||
\param type UTF encoding type if it is not detected from the stream.
|
|
||||||
*/
|
|
||||||
AutoUTFInputStream(InputByteStream& is, UTFType type = kUTF8) : is_(&is), type_(type), hasBOM_(false) {
|
|
||||||
RAPIDJSON_ASSERT(type >= kUTF8 && type <= kUTF32BE);
|
|
||||||
DetectType();
|
|
||||||
static const TakeFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Take) };
|
|
||||||
takeFunc_ = f[type_];
|
|
||||||
current_ = takeFunc_(*is_);
|
|
||||||
}
|
|
||||||
|
|
||||||
UTFType GetType() const { return type_; }
|
|
||||||
bool HasBOM() const { return hasBOM_; }
|
|
||||||
|
|
||||||
Ch Peek() const { return current_; }
|
|
||||||
Ch Take() { Ch c = current_; current_ = takeFunc_(*is_); return c; }
|
|
||||||
size_t Tell() const { return is_->Tell(); }
|
|
||||||
|
|
||||||
// Not implemented
|
|
||||||
void Put(Ch) { RAPIDJSON_ASSERT(false); }
|
|
||||||
void Flush() { RAPIDJSON_ASSERT(false); }
|
|
||||||
Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
|
|
||||||
size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; }
|
|
||||||
|
|
||||||
private:
|
|
||||||
AutoUTFInputStream(const AutoUTFInputStream&);
|
|
||||||
AutoUTFInputStream& operator=(const AutoUTFInputStream&);
|
|
||||||
|
|
||||||
// Detect encoding type with BOM or RFC 4627
|
|
||||||
void DetectType() {
|
|
||||||
// BOM (Byte Order Mark):
|
|
||||||
// 00 00 FE FF UTF-32BE
|
|
||||||
// FF FE 00 00 UTF-32LE
|
|
||||||
// FE FF UTF-16BE
|
|
||||||
// FF FE UTF-16LE
|
|
||||||
// EF BB BF UTF-8
|
|
||||||
|
|
||||||
const unsigned char* c = reinterpret_cast<const unsigned char *>(is_->Peek4());
|
|
||||||
if (!c)
|
|
||||||
return;
|
|
||||||
|
|
||||||
unsigned bom = static_cast<unsigned>(c[0] | (c[1] << 8) | (c[2] << 16) | (c[3] << 24));
|
|
||||||
hasBOM_ = false;
|
|
||||||
if (bom == 0xFFFE0000) { type_ = kUTF32BE; hasBOM_ = true; is_->Take(); is_->Take(); is_->Take(); is_->Take(); }
|
|
||||||
else if (bom == 0x0000FEFF) { type_ = kUTF32LE; hasBOM_ = true; is_->Take(); is_->Take(); is_->Take(); is_->Take(); }
|
|
||||||
else if ((bom & 0xFFFF) == 0xFFFE) { type_ = kUTF16BE; hasBOM_ = true; is_->Take(); is_->Take(); }
|
|
||||||
else if ((bom & 0xFFFF) == 0xFEFF) { type_ = kUTF16LE; hasBOM_ = true; is_->Take(); is_->Take(); }
|
|
||||||
else if ((bom & 0xFFFFFF) == 0xBFBBEF) { type_ = kUTF8; hasBOM_ = true; is_->Take(); is_->Take(); is_->Take(); }
|
|
||||||
|
|
||||||
// RFC 4627: Section 3
|
|
||||||
// "Since the first two characters of a JSON text will always be ASCII
|
|
||||||
// characters [RFC0020], it is possible to determine whether an octet
|
|
||||||
// stream is UTF-8, UTF-16 (BE or LE), or UTF-32 (BE or LE) by looking
|
|
||||||
// at the pattern of nulls in the first four octets."
|
|
||||||
// 00 00 00 xx UTF-32BE
|
|
||||||
// 00 xx 00 xx UTF-16BE
|
|
||||||
// xx 00 00 00 UTF-32LE
|
|
||||||
// xx 00 xx 00 UTF-16LE
|
|
||||||
// xx xx xx xx UTF-8
|
|
||||||
|
|
||||||
if (!hasBOM_) {
|
|
||||||
unsigned pattern = (c[0] ? 1 : 0) | (c[1] ? 2 : 0) | (c[2] ? 4 : 0) | (c[3] ? 8 : 0);
|
|
||||||
switch (pattern) {
|
|
||||||
case 0x08: type_ = kUTF32BE; break;
|
|
||||||
case 0x0A: type_ = kUTF16BE; break;
|
|
||||||
case 0x01: type_ = kUTF32LE; break;
|
|
||||||
case 0x05: type_ = kUTF16LE; break;
|
|
||||||
case 0x0F: type_ = kUTF8; break;
|
|
||||||
default: break; // Use type defined by user.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Runtime check whether the size of character type is sufficient. It only perform checks with assertion.
|
|
||||||
if (type_ == kUTF16LE || type_ == kUTF16BE) RAPIDJSON_ASSERT(sizeof(Ch) >= 2);
|
|
||||||
if (type_ == kUTF32LE || type_ == kUTF32BE) RAPIDJSON_ASSERT(sizeof(Ch) >= 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef Ch (*TakeFunc)(InputByteStream& is);
|
|
||||||
InputByteStream* is_;
|
|
||||||
UTFType type_;
|
|
||||||
Ch current_;
|
|
||||||
TakeFunc takeFunc_;
|
|
||||||
bool hasBOM_;
|
|
||||||
};
|
|
||||||
|
|
||||||
//! Output stream wrapper with dynamically bound encoding and automatic encoding detection.
|
|
||||||
/*!
|
|
||||||
\tparam CharType Type of character for writing.
|
|
||||||
\tparam OutputByteStream type of output byte stream to be wrapped.
|
|
||||||
*/
|
|
||||||
template <typename CharType, typename OutputByteStream>
|
|
||||||
class AutoUTFOutputStream {
|
|
||||||
RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
|
|
||||||
public:
|
|
||||||
typedef CharType Ch;
|
|
||||||
|
|
||||||
//! Constructor.
|
|
||||||
/*!
|
|
||||||
\param os output stream to be wrapped.
|
|
||||||
\param type UTF encoding type.
|
|
||||||
\param putBOM Whether to write BOM at the beginning of the stream.
|
|
||||||
*/
|
|
||||||
AutoUTFOutputStream(OutputByteStream& os, UTFType type, bool putBOM) : os_(&os), type_(type) {
|
|
||||||
RAPIDJSON_ASSERT(type >= kUTF8 && type <= kUTF32BE);
|
|
||||||
|
|
||||||
// Runtime check whether the size of character type is sufficient. It only perform checks with assertion.
|
|
||||||
if (type_ == kUTF16LE || type_ == kUTF16BE) RAPIDJSON_ASSERT(sizeof(Ch) >= 2);
|
|
||||||
if (type_ == kUTF32LE || type_ == kUTF32BE) RAPIDJSON_ASSERT(sizeof(Ch) >= 4);
|
|
||||||
|
|
||||||
static const PutFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Put) };
|
|
||||||
putFunc_ = f[type_];
|
|
||||||
|
|
||||||
if (putBOM)
|
|
||||||
PutBOM();
|
|
||||||
}
|
|
||||||
|
|
||||||
UTFType GetType() const { return type_; }
|
|
||||||
|
|
||||||
void Put(Ch c) { putFunc_(*os_, c); }
|
|
||||||
void Flush() { os_->Flush(); }
|
|
||||||
|
|
||||||
// Not implemented
|
|
||||||
Ch Peek() const { RAPIDJSON_ASSERT(false); return 0;}
|
|
||||||
Ch Take() { RAPIDJSON_ASSERT(false); return 0;}
|
|
||||||
size_t Tell() const { RAPIDJSON_ASSERT(false); return 0; }
|
|
||||||
Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
|
|
||||||
size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; }
|
|
||||||
|
|
||||||
private:
|
|
||||||
AutoUTFOutputStream(const AutoUTFOutputStream&);
|
|
||||||
AutoUTFOutputStream& operator=(const AutoUTFOutputStream&);
|
|
||||||
|
|
||||||
void PutBOM() {
|
|
||||||
typedef void (*PutBOMFunc)(OutputByteStream&);
|
|
||||||
static const PutBOMFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(PutBOM) };
|
|
||||||
f[type_](*os_);
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef void (*PutFunc)(OutputByteStream&, Ch);
|
|
||||||
|
|
||||||
OutputByteStream* os_;
|
|
||||||
UTFType type_;
|
|
||||||
PutFunc putFunc_;
|
|
||||||
};
|
|
||||||
|
|
||||||
#undef RAPIDJSON_ENCODINGS_FUNC
|
|
||||||
|
|
||||||
RAPIDJSON_NAMESPACE_END
|
|
||||||
|
|
||||||
#ifdef __clang__
|
|
||||||
RAPIDJSON_DIAG_POP
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __GNUC__
|
|
||||||
RAPIDJSON_DIAG_POP
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // RAPIDJSON_FILESTREAM_H_
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user