mirror of
https://github.com/feather-wallet/feather.git
synced 2024-11-17 09:47:36 +00:00
Merge pull request 'Webcam QrCode Scanner' (#367) from tobtoht/feather:qrscanner into master
Reviewed-on: https://git.featherwallet.org/feather/feather/pulls/367
This commit is contained in:
commit
8536db160d
47 changed files with 1149 additions and 2927 deletions
|
@ -1,3 +1,4 @@
|
||||||
*
|
*
|
||||||
!contrib/Qt5.15_LinuxPatch.json
|
!contrib/Qt5.15_LinuxPatch.json
|
||||||
!utils/pubkeys/*
|
!utils/pubkeys/*
|
||||||
|
!contrib/build-deps/verify-packages.sh
|
|
@ -19,6 +19,7 @@ option(TOR_BIN "Path to Tor binary to embed inside Feather" OFF)
|
||||||
option(CHECK_UPDATES "Enable checking for application updates" OFF)
|
option(CHECK_UPDATES "Enable checking for application updates" OFF)
|
||||||
option(USE_DEVICE_TREZOR "Trezor support compilation" OFF)
|
option(USE_DEVICE_TREZOR "Trezor support compilation" OFF)
|
||||||
option(DONATE_BEG "Prompt donation window every once in a while" ON)
|
option(DONATE_BEG "Prompt donation window every once in a while" ON)
|
||||||
|
option(WITH_SCANNER "Enable webcam QR scanner" OFF)
|
||||||
|
|
||||||
list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_SOURCE_DIR}/cmake")
|
list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_SOURCE_DIR}/cmake")
|
||||||
include(CheckCCompilerFlag)
|
include(CheckCCompilerFlag)
|
||||||
|
@ -56,34 +57,8 @@ if(STATIC)
|
||||||
|
|
||||||
set(Boost_USE_STATIC_LIBS ON)
|
set(Boost_USE_STATIC_LIBS ON)
|
||||||
set(Boost_USE_STATIC_RUNTIME ON)
|
set(Boost_USE_STATIC_RUNTIME ON)
|
||||||
add_definitions(-DMONERO_GUI_STATIC)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
function (add_c_flag_if_supported flag var)
|
|
||||||
string(REPLACE "-" "_" supported ${flag}_c)
|
|
||||||
check_c_compiler_flag(${flag} ${supported})
|
|
||||||
if(${${supported}})
|
|
||||||
set(${var} "${${var}} ${flag}" PARENT_SCOPE)
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function (add_cxx_flag_if_supported flag var)
|
|
||||||
string(REPLACE "-" "_" supported ${flag}_cxx)
|
|
||||||
check_cxx_compiler_flag(${flag} ${supported})
|
|
||||||
if(${${supported}})
|
|
||||||
set(${var} "${${var}} ${flag}" PARENT_SCOPE)
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function (add_linker_flag_if_supported flag var)
|
|
||||||
string(REPLACE "-" "_" supported ${flag}_ld)
|
|
||||||
string(REPLACE "," "_" supported ${flag}_ld)
|
|
||||||
check_linker_flag(${flag} ${supported})
|
|
||||||
if(${${supported}})
|
|
||||||
set(${var} "${${var}} ${flag}" PARENT_SCOPE)
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
find_package(Git)
|
find_package(Git)
|
||||||
if(GIT_FOUND)
|
if(GIT_FOUND)
|
||||||
execute_process(COMMAND git rev-parse "HEAD" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/monero OUTPUT_VARIABLE _MONERO_HEAD OUTPUT_STRIP_TRAILING_WHITESPACE)
|
execute_process(COMMAND git rev-parse "HEAD" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/monero OUTPUT_VARIABLE _MONERO_HEAD OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
@ -125,6 +100,13 @@ set(HIDAPI_FOUND OFF)
|
||||||
# QrEncode
|
# QrEncode
|
||||||
find_package(QREncode REQUIRED)
|
find_package(QREncode REQUIRED)
|
||||||
|
|
||||||
|
# Qr scanner
|
||||||
|
if (WITH_SCANNER)
|
||||||
|
find_package(ZBAR REQUIRED)
|
||||||
|
message(STATUS "libzbar: include dir at ${ZBAR_INCLUDE_DIR}")
|
||||||
|
message(STATUS "libzbar: libraries at ${ZBAR_LIBRARIES}")
|
||||||
|
endif()
|
||||||
|
|
||||||
# Tevador 14 word Monero seed
|
# Tevador 14 word Monero seed
|
||||||
find_package(monero-seed CONFIG)
|
find_package(monero-seed CONFIG)
|
||||||
if(NOT monero-seed_FOUND)
|
if(NOT monero-seed_FOUND)
|
||||||
|
@ -199,9 +181,10 @@ if(TOR_BIN)
|
||||||
|
|
||||||
execute_process(COMMAND bash -c "${TOR_BIN} --version --quiet" OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE out RESULT_VARIABLE ret)
|
execute_process(COMMAND bash -c "${TOR_BIN} --version --quiet" OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE out RESULT_VARIABLE ret)
|
||||||
if (ret EQUAL "0")
|
if (ret EQUAL "0")
|
||||||
set(TOR_VERSION "${out}")
|
string(REGEX MATCH "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]" version ${out})
|
||||||
|
set(TOR_VERSION "${version}")
|
||||||
endif()
|
endif()
|
||||||
message(STATUS "${TOR_VERSION}")
|
message(STATUS "Embedded Tor version: ${TOR_VERSION}")
|
||||||
configure_file("cmake/config-feather.h.cmake" "${CMAKE_CURRENT_SOURCE_DIR}/src/config-feather.h")
|
configure_file("cmake/config-feather.h.cmake" "${CMAKE_CURRENT_SOURCE_DIR}/src/config-feather.h")
|
||||||
|
|
||||||
# on the buildbot Tor is baked into the image
|
# on the buildbot Tor is baked into the image
|
||||||
|
|
565
Dockerfile
565
Dockerfile
|
@ -1,4 +1,7 @@
|
||||||
FROM ubuntu:18.04 AS tor
|
# bionic-20210615.1 (18.04)
|
||||||
|
FROM ubuntu@sha256:ce1e17c0e0aa9db95cf19fb6ba297eb2a52b9ba71768f32a74ab39213c416600
|
||||||
|
|
||||||
|
ARG THREADS=4
|
||||||
|
|
||||||
ENV CFLAGS="-fPIC"
|
ENV CFLAGS="-fPIC"
|
||||||
ENV CPPFLAGS="-fPIC"
|
ENV CPPFLAGS="-fPIC"
|
||||||
|
@ -6,21 +9,202 @@ ENV CXXFLAGS="-fPIC"
|
||||||
ENV SOURCE_DATE_EPOCH=1397818193
|
ENV SOURCE_DATE_EPOCH=1397818193
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
# Feather build flags
|
||||||
|
ENV CHECK_UPDATES=ON
|
||||||
|
ENV WITH_SCANNER=ON
|
||||||
|
|
||||||
|
COPY --from=featherwallet/feather-deps:linux-beta-8 /deps /deps
|
||||||
|
COPY --from=featherwallet/feather-deps:linux-beta-8 /var/cache/apt/archives /archives
|
||||||
|
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
apt-get install -y build-essential wget git automake pkg-config python python3 && \
|
apt-get install -y gpg xz-utils ca-certificates wget && \
|
||||||
rm -rf /var/lib/apt/lists/*
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
RUN wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz && \
|
COPY contrib/build-deps/verify-packages.sh .
|
||||||
echo "892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5 openssl-1.1.1k.tar.gz" | sha256sum -c && \
|
RUN bash verify-packages.sh && rm -rf /deps /archives
|
||||||
tar -xzf openssl-1.1.1k.tar.gz && \
|
|
||||||
rm openssl-1.1.1k.tar.gz && \
|
# OpenSSL: Required for CMake, Qt 5.15.2, libwallet, Tor
|
||||||
cd openssl-1.1.1k && \
|
ENV OPENSSL_ROOT_DIR=/usr/local/openssl/
|
||||||
|
RUN git clone -b OpenSSL_1_1_1k --depth 1 https://github.com/openssl/openssl.git && \
|
||||||
|
cd openssl && \
|
||||||
|
git reset --hard fd78df59b0f656aefe96e39533130454aa957c00 && \
|
||||||
./config no-shared no-dso --prefix=/usr/local/openssl && \
|
./config no-shared no-dso --prefix=/usr/local/openssl && \
|
||||||
make -j$THREADS && \
|
make -j$THREADS && \
|
||||||
make test && \
|
|
||||||
make -j$THREADS install_sw && \
|
make -j$THREADS install_sw && \
|
||||||
rm -rf $(pwd)
|
rm -rf $(pwd)
|
||||||
|
|
||||||
|
# CMake: Required to build libqrencode, monero-seed, libzip
|
||||||
|
RUN git clone -b v3.18.4 --depth 1 https://github.com/Kitware/CMake && \
|
||||||
|
cd CMake && \
|
||||||
|
git reset --hard 3cc3d42aba879fff5e85b363ae8f21386a3f9f9b && \
|
||||||
|
./bootstrap && \
|
||||||
|
make -j$THREADS && \
|
||||||
|
make -j$THREADS install && \
|
||||||
|
rm -rf $(pwd)
|
||||||
|
|
||||||
|
# freetype2: Required for Qt 5.15, fontconfig
|
||||||
|
RUN git clone -b VER-2-10-2 --depth 1 https://git.savannah.gnu.org/git/freetype/freetype2.git && \
|
||||||
|
cd freetype2 && \
|
||||||
|
git reset --hard 132f19b779828b194b3fede187cee719785db4d8 && \
|
||||||
|
./autogen.sh && \
|
||||||
|
./configure --disable-shared --enable-static --with-zlib=no && \
|
||||||
|
make -j$THREADS && \
|
||||||
|
make -j$THREADS install && \
|
||||||
|
rm -rf $(pwd)
|
||||||
|
|
||||||
|
# expat: Required for fontconfig
|
||||||
|
RUN git clone -b R_2_2_9 --depth 1 https://github.com/libexpat/libexpat && \
|
||||||
|
cd libexpat/expat && \
|
||||||
|
git reset --hard a7bc26b69768f7fb24f0c7976fae24b157b85b13 && \
|
||||||
|
./buildconf.sh && \
|
||||||
|
./configure --disable-shared --enable-static && \
|
||||||
|
make -j$THREADS && \
|
||||||
|
make -j$THREADS install && \
|
||||||
|
rm -rf $(pwd)
|
||||||
|
|
||||||
|
# fontconfig: Required for Qt 5.15
|
||||||
|
RUN git clone -b 2.13.92 --depth 1 https://gitlab.freedesktop.org/fontconfig/fontconfig && \
|
||||||
|
cd fontconfig && \
|
||||||
|
git reset --hard b1df1101a643ae16cdfa1d83b939de2497b1bf27 && \
|
||||||
|
./autogen.sh --disable-shared --enable-static --sysconfdir=/etc --localstatedir=/var && \
|
||||||
|
make -j$THREADS && \
|
||||||
|
make -j$THREADS install && \
|
||||||
|
rm -rf $(pwd)
|
||||||
|
|
||||||
|
ENV QT_VERSION=v5.15.2
|
||||||
|
RUN git clone git://code.qt.io/qt/qt5.git -b ${QT_VERSION} --depth 1 && \
|
||||||
|
cd qt5 && \
|
||||||
|
git clone git://code.qt.io/qt/qtbase.git -b ${QT_VERSION} --depth 1 && \
|
||||||
|
git clone git://code.qt.io/qt/qtimageformats.git -b ${QT_VERSION} --depth 1 && \
|
||||||
|
git clone git://code.qt.io/qt/qtmultimedia.git -b ${QT_VERSION} --depth 1 && \
|
||||||
|
git clone git://code.qt.io/qt/qtsvg.git -b ${QT_VERSION} --depth 1 && \
|
||||||
|
git clone git://code.qt.io/qt/qttools.git -b ${QT_VERSION} --depth 1 && \
|
||||||
|
git clone git://code.qt.io/qt/qttranslations.git -b ${QT_VERSION} --depth 1 && \
|
||||||
|
git clone git://code.qt.io/qt/qtx11extras.git -b ${QT_VERSION} --depth 1 && \
|
||||||
|
git clone git://code.qt.io/qt/qtwebsockets.git -b ${QT_VERSION} --depth 1 && \
|
||||||
|
sed -ri s/\(Libs:.*\)/\\1\ -lexpat/ /usr/local/lib/pkgconfig/fontconfig.pc && \
|
||||||
|
sed -ri s/\(Libs:.*\)/\\1\ -lz/ /usr/local/lib/pkgconfig/freetype2.pc && \
|
||||||
|
sed -i s/\\/usr\\/X11R6\\/lib64/\\/usr\\/local\\/lib/ qtbase/mkspecs/linux-g++-64/qmake.conf
|
||||||
|
|
||||||
|
RUN cd qt5 && \
|
||||||
|
rm /usr/lib/x86_64-linux-gnu/libX11.a && \
|
||||||
|
rm /usr/lib/x86_64-linux-gnu/libX11-xcb.a && \
|
||||||
|
OPENSSL_LIBS="-lssl -lcrypto -lpthread -ldl" \
|
||||||
|
./configure --prefix=/usr -platform linux-g++-64 -opensource -confirm-license -release -static -no-avx \
|
||||||
|
-no-opengl -qpa xcb --xcb -xcb-xlib -feature-xlib -openssl-linked -I /usr/local/openssl/include \
|
||||||
|
-L /usr/local/openssl/lib -system-freetype -fontconfig -glib \
|
||||||
|
-no-dbus -no-sql-sqlite -no-use-gold-linker -no-kms \
|
||||||
|
-qt-harfbuzz -qt-libjpeg -qt-libpng -qt-pcre -qt-zlib \
|
||||||
|
-skip qt3d -skip qtandroidextras -skip qtcanvas3d -skip qtcharts -skip qtconnectivity -skip qtdatavis3d \
|
||||||
|
-skip qtdoc -skip qtquickcontrols -skip qtquickcontrols2 -skip qtspeech -skip qtgamepad \
|
||||||
|
-skip qtlocation -skip qtmacextras -skip qtnetworkauth -skip qtpurchasing -optimize-size \
|
||||||
|
-skip qtscript -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtspeech -skip qttools \
|
||||||
|
-skip qtvirtualkeyboard -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwebview \
|
||||||
|
-skip qtwinextras -skip qtx11extras -skip gamepad -skip serialbus -skip location -skip webengine \
|
||||||
|
-skip qtdeclarative -gstreamer \
|
||||||
|
-no-feature-cups -no-feature-ftp -no-feature-pdf -no-feature-animation \
|
||||||
|
-nomake examples -nomake tests -nomake tools && \
|
||||||
|
make -j$THREADS && \
|
||||||
|
make -j$THREADS install && \
|
||||||
|
rm -rf $(pwd)
|
||||||
|
|
||||||
|
# boost: Required for libwallet
|
||||||
|
RUN wget https://downloads.sourceforge.net/project/boost/boost/1.73.0/boost_1_73_0.tar.bz2 && \
|
||||||
|
echo "4eb3b8d442b426dc35346235c8733b5ae35ba431690e38c6a8263dce9fcbb402 boost_1_73_0.tar.bz2" | sha256sum -c && \
|
||||||
|
tar -xvf boost_1_73_0.tar.bz2 && \
|
||||||
|
rm boost_1_73_0.tar.bz2 && \
|
||||||
|
cd boost_1_73_0 && \
|
||||||
|
./bootstrap.sh && \
|
||||||
|
./b2 --with-atomic --with-system --with-filesystem --with-thread --with-date_time --with-chrono --with-regex --with-serialization --with-program_options --with-locale variant=release link=static runtime-link=static cflags="${CFLAGS}" cxxflags="${CXXFLAGS}" install -a --prefix=/usr && \
|
||||||
|
rm -rf $(pwd)
|
||||||
|
|
||||||
|
# libusb: Required for libwallet
|
||||||
|
RUN git clone -b v1.0.24 --depth 1 https://github.com/libusb/libusb && \
|
||||||
|
cd libusb && \
|
||||||
|
git reset --hard c6a35c56016ea2ab2f19115d2ea1e85e0edae155 && \
|
||||||
|
./autogen.sh --disable-shared --enable-static && \
|
||||||
|
make -j$THREADS && \
|
||||||
|
make -j$THREADS install && \
|
||||||
|
rm -rf $(pwd)
|
||||||
|
|
||||||
|
# hidapi: Required for libwallet
|
||||||
|
RUN git clone -b hidapi-0.10.1 --depth 1 https://github.com/libusb/hidapi && \
|
||||||
|
cd hidapi && \
|
||||||
|
git reset --hard f6d0073fcddbdda24549199445e844971d3c9cef && \
|
||||||
|
./bootstrap && \
|
||||||
|
./configure --disable-shared --enable-static && \
|
||||||
|
make -j$THREADS && \
|
||||||
|
make -j$THREADS install && \
|
||||||
|
rm -rf $(pwd)
|
||||||
|
|
||||||
|
# libsodium: Required for libzmq
|
||||||
|
RUN git clone -b 1.0.18-RELEASE --depth 1 https://github.com/jedisct1/libsodium.git && \
|
||||||
|
cd libsodium && \
|
||||||
|
git reset --hard 940ef42797baa0278df6b7fd9e67c7590f87744b && \
|
||||||
|
./autogen.sh && \
|
||||||
|
./configure --disable-shared --enable-static && \
|
||||||
|
make -j$THREADS && \
|
||||||
|
make -j$THREADS install && \
|
||||||
|
rm -rf $(pwd)
|
||||||
|
|
||||||
|
# libzmq: Required for libwallet
|
||||||
|
RUN git clone -b v4.3.2 --depth 1 https://github.com/zeromq/libzmq && \
|
||||||
|
cd libzmq && \
|
||||||
|
git reset --hard a84ffa12b2eb3569ced199660bac5ad128bff1f0 && \
|
||||||
|
./autogen.sh && \
|
||||||
|
./configure --disable-shared --enable-static --disable-libunwind --with-libsodium && \
|
||||||
|
make -j$THREADS && \
|
||||||
|
make -j$THREADS install && \
|
||||||
|
rm -rf $(pwd)
|
||||||
|
|
||||||
|
# protobuf: Required for libwallet
|
||||||
|
RUN git clone -b v3.10.0 --depth 1 https://github.com/protocolbuffers/protobuf && \
|
||||||
|
cd protobuf && \
|
||||||
|
git reset --hard 6d4e7fd7966c989e38024a8ea693db83758944f1 && \
|
||||||
|
./autogen.sh && \
|
||||||
|
./configure --enable-static --disable-shared && \
|
||||||
|
make -j$THREADS && \
|
||||||
|
make -j$THREADS install && \
|
||||||
|
rm -rf $(pwd)
|
||||||
|
|
||||||
|
# appimagetool: Used to created Feather AppImage
|
||||||
|
RUN mkdir appimagetool && \
|
||||||
|
cd appimagetool && \
|
||||||
|
wget https://github.com/AppImage/AppImageKit/releases/download/12/appimagetool-x86_64.AppImage && \
|
||||||
|
echo "d918b4df547b388ef253f3c9e7f6529ca81a885395c31f619d9aaf7030499a13 appimagetool-x86_64.AppImage" | sha256sum -c && \
|
||||||
|
chmod +x appimagetool-x86_64.AppImage && \
|
||||||
|
./appimagetool-x86_64.AppImage --appimage-extract && \
|
||||||
|
rm appimagetool-x86_64.AppImage
|
||||||
|
|
||||||
|
# squashfs-tools: Used to create Feather AppImage
|
||||||
|
RUN git clone https://github.com/plougher/squashfs-tools.git && \
|
||||||
|
cd squashfs-tools/squashfs-tools && \
|
||||||
|
git reset --hard 38fa0720526222827da44b3b6c3f7eb63e8f5c2f && \
|
||||||
|
make && \
|
||||||
|
make install && \
|
||||||
|
rm -rf $(pwd)
|
||||||
|
|
||||||
|
# patchelf: Required by linuxdeployqt
|
||||||
|
RUN git clone -b 0.12 --depth 1 https://github.com/NixOS/patchelf.git && \
|
||||||
|
cd patchelf && \
|
||||||
|
git reset --hard 8d3a16e97294e3c5521c61b4c8835499c9918264 && \
|
||||||
|
./bootstrap.sh && \
|
||||||
|
./configure && \
|
||||||
|
make -j$THREADS && \
|
||||||
|
make install && \
|
||||||
|
rm -rf $(pwd)
|
||||||
|
|
||||||
|
# linuxdeployqt: Used to create Feather AppImage
|
||||||
|
# build from source because latest release does not allow glib 2.27
|
||||||
|
RUN git clone https://github.com/probonopd/linuxdeployqt.git && \
|
||||||
|
cd linuxdeployqt && \
|
||||||
|
git reset --hard b4697483c98120007019c3456914cfd1dba58384 && \
|
||||||
|
qmake && \
|
||||||
|
make -j$THREADS && \
|
||||||
|
make install && \
|
||||||
|
rm -rf $(pwd)
|
||||||
|
|
||||||
|
# libevent: Required for Tor
|
||||||
RUN wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz && \
|
RUN wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz && \
|
||||||
echo "92e6de1be9ec176428fd2367677e61ceffc2ee1cb119035037a27d346b0403bb libevent-2.1.12-stable.tar.gz" | sha256sum -c && \
|
echo "92e6de1be9ec176428fd2367677e61ceffc2ee1cb119035037a27d346b0403bb libevent-2.1.12-stable.tar.gz" | sha256sum -c && \
|
||||||
tar -zxvf libevent-2.1.12-stable.tar.gz && \
|
tar -zxvf libevent-2.1.12-stable.tar.gz && \
|
||||||
|
@ -34,6 +218,7 @@ RUN wget https://github.com/libevent/libevent/releases/download/release-2.1.12-s
|
||||||
make -j$THREADS install && \
|
make -j$THREADS install && \
|
||||||
rm -rf $(pwd)
|
rm -rf $(pwd)
|
||||||
|
|
||||||
|
# zlib: Required for Tor
|
||||||
RUN git clone -b v1.2.11 --depth 1 https://github.com/madler/zlib && \
|
RUN git clone -b v1.2.11 --depth 1 https://github.com/madler/zlib && \
|
||||||
cd zlib && \
|
cd zlib && \
|
||||||
git reset --hard cacf7f1d4e3d44d871b605da3b647f07d718623f && \
|
git reset --hard cacf7f1d4e3d44d871b605da3b647f07d718623f && \
|
||||||
|
@ -42,6 +227,9 @@ RUN git clone -b v1.2.11 --depth 1 https://github.com/madler/zlib && \
|
||||||
make -j$THREADS install && \
|
make -j$THREADS install && \
|
||||||
rm -rf $(pwd)
|
rm -rf $(pwd)
|
||||||
|
|
||||||
|
# Tor: Optional for Feather (-DTOR_BIN)
|
||||||
|
# Binary can be embedded in Feather
|
||||||
|
ENV TOR_BIN=/usr/local/tor/bin/tor
|
||||||
RUN git clone -b tor-0.4.5.7 --depth 1 https://git.torproject.org/tor.git && \
|
RUN git clone -b tor-0.4.5.7 --depth 1 https://git.torproject.org/tor.git && \
|
||||||
cd tor && \
|
cd tor && \
|
||||||
git reset --hard 83f895c015de55201e5f226f84a866f30f5ee14b && \
|
git reset --hard 83f895c015de55201e5f226f84a866f30f5ee14b && \
|
||||||
|
@ -66,292 +254,37 @@ RUN git clone -b tor-0.4.5.7 --depth 1 https://git.torproject.org/tor.git && \
|
||||||
rm -rf $(pwd) && \
|
rm -rf $(pwd) && \
|
||||||
strip -s -D /usr/local/tor/bin/tor
|
strip -s -D /usr/local/tor/bin/tor
|
||||||
|
|
||||||
FROM ubuntu:16.04
|
# libqrencode: Required for Feather
|
||||||
|
# Used to display QR Codes
|
||||||
ARG THREADS=1
|
RUN git clone -b v4.1.1 --depth 1 https://github.com/fukuchi/libqrencode.git && \
|
||||||
ARG QT_VERSION=v5.15.2
|
cd libqrencode && \
|
||||||
|
git reset --hard 715e29fd4cd71b6e452ae0f4e36d917b43122ce8 && \
|
||||||
ENV CFLAGS="-fPIC"
|
cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=/usr . && \
|
||||||
ENV CPPFLAGS="-fPIC"
|
|
||||||
ENV CXXFLAGS="-fPIC"
|
|
||||||
ENV SOURCE_DATE_EPOCH=1397818193
|
|
||||||
|
|
||||||
ENV OPENSSL_ROOT_DIR=/usr/local/openssl/
|
|
||||||
ENV TOR_BIN=/usr/local/tor/bin/tor
|
|
||||||
|
|
||||||
COPY --from=tor ${TOR_BIN} /usr/local/tor/bin/tor
|
|
||||||
|
|
||||||
RUN apt-get update && \
|
|
||||||
apt-get install -y \
|
|
||||||
# dev tools
|
|
||||||
nano vim ccache \
|
|
||||||
# build tools
|
|
||||||
software-properties-common automake pkg-config python \
|
|
||||||
libtool-bin wget zip \
|
|
||||||
# Qt
|
|
||||||
libgl1-mesa-dev libglib2.0-dev mesa-common-dev \
|
|
||||||
# libusb
|
|
||||||
libudev-dev \
|
|
||||||
# fontconfig
|
|
||||||
autopoint gettext gperf libpng12-dev \
|
|
||||||
# libxcb
|
|
||||||
libpthread-stubs0-dev \
|
|
||||||
# xorgproto
|
|
||||||
xutils-dev \
|
|
||||||
# libxkbcommon
|
|
||||||
bison \
|
|
||||||
# zeromq
|
|
||||||
libsodium-dev \
|
|
||||||
# AppImage tools
|
|
||||||
file squashfs-tools desktop-file-utils patchelf
|
|
||||||
|
|
||||||
RUN add-apt-repository ppa:git-core/ppa && \
|
|
||||||
apt-get update && \
|
|
||||||
apt-get install -y git && \
|
|
||||||
rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
RUN wget http://archive.ubuntu.com/ubuntu/pool/main/s/systemd/libudev-dev_229-4ubuntu21.31_amd64.deb && \
|
|
||||||
echo "f1f72bd814d1e8ca2828ac004924fba0b54a3299e60f089c6d818262b11750f7 libudev-dev_229-4ubuntu21.31_amd64.deb" | sha256sum -c && \
|
|
||||||
apt install ./libudev-dev_229-4ubuntu21.31_amd64.deb && \
|
|
||||||
rm libudev-dev_229-4ubuntu21.31_amd64.deb
|
|
||||||
|
|
||||||
RUN mkdir appimagetool && \
|
|
||||||
cd appimagetool && \
|
|
||||||
wget https://github.com/AppImage/AppImageKit/releases/download/12/appimagetool-x86_64.AppImage && \
|
|
||||||
echo "d918b4df547b388ef253f3c9e7f6529ca81a885395c31f619d9aaf7030499a13 appimagetool-x86_64.AppImage" | sha256sum -c && \
|
|
||||||
chmod +x appimagetool-x86_64.AppImage && \
|
|
||||||
./appimagetool-x86_64.AppImage --appimage-extract && \
|
|
||||||
rm appimagetool-x86_64.AppImage
|
|
||||||
|
|
||||||
RUN git clone -b xorgproto-2020.1 --depth 1 https://gitlab.freedesktop.org/xorg/proto/xorgproto && \
|
|
||||||
cd xorgproto && \
|
|
||||||
git reset --hard c62e8203402cafafa5ba0357b6d1c019156c9f36 && \
|
|
||||||
./autogen.sh && \
|
|
||||||
make -j$THREADS && \
|
make -j$THREADS && \
|
||||||
make -j$THREADS install && \
|
make -j$THREADS install && \
|
||||||
rm -rf $(pwd)
|
rm -rf $(pwd)
|
||||||
|
|
||||||
RUN git clone -b 1.12 --depth 1 https://gitlab.freedesktop.org/xorg/proto/xcbproto && \
|
# monero-seed: Required for Feather
|
||||||
cd xcbproto && \
|
# Tevador's 14 word seed library
|
||||||
git reset --hard 6398e42131eedddde0d98759067dde933191f049 && \
|
RUN git clone https://git.featherwallet.org/feather/monero-seed.git && \
|
||||||
./autogen.sh && \
|
cd monero-seed && \
|
||||||
make -j$THREADS && \
|
git reset --hard 4674ef09b6faa6fe602ab5ae0b9ca8e1fd7d5e1b && \
|
||||||
make -j$THREADS install && \
|
cmake -DCMAKE_BUILD_TYPE=Release -Bbuild && \
|
||||||
rm -rf $(pwd)
|
make -Cbuild -j$THREADS && \
|
||||||
|
make -Cbuild install && \
|
||||||
RUN git clone -b libXau-1.0.9 --depth 1 https://gitlab.freedesktop.org/xorg/lib/libxau && \
|
rm -rf $(pwd)
|
||||||
cd libxau && \
|
|
||||||
git reset --hard d9443b2c57b512cfb250b35707378654d86c7dea && \
|
# libzip: Required for Feather
|
||||||
./autogen.sh --enable-shared --disable-static && \
|
# Used to unzip updates downloaded by the built-in updater
|
||||||
make -j$THREADS && \
|
RUN git clone -b v1.7.3 --depth 1 https://github.com/nih-at/libzip.git && \
|
||||||
make -j$THREADS install && \
|
cd libzip && \
|
||||||
rm -rf $(pwd)
|
git reset --hard 66e496489bdae81bfda8b0088172871d8fda0032 && \
|
||||||
|
cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=/usr . && \
|
||||||
RUN git clone -b 1.12 --depth 1 https://gitlab.freedesktop.org/xorg/lib/libxcb && \
|
|
||||||
cd libxcb && \
|
|
||||||
git reset --hard d34785a34f28fa6a00f8ce00d87e3132ff0f6467 && \
|
|
||||||
./autogen.sh --enable-shared --disable-static && \
|
|
||||||
make -j$THREADS && \
|
|
||||||
make -j$THREADS install && \
|
|
||||||
make -j$THREADS clean && \
|
|
||||||
rm /usr/local/lib/libxcb-xinerama.so && \
|
|
||||||
./autogen.sh --disable-shared --enable-static && \
|
|
||||||
make -j$THREADS && \
|
|
||||||
cp src/.libs/libxcb-xinerama.a /usr/local/lib/ && \
|
|
||||||
rm -rf $(pwd)
|
|
||||||
|
|
||||||
RUN git clone -b 0.4.0 --depth 1 https://gitlab.freedesktop.org/xorg/lib/libxcb-util && \
|
|
||||||
cd libxcb-util && \
|
|
||||||
git reset --hard acf790d7752f36e450d476ad79807d4012ec863b && \
|
|
||||||
git submodule init && \
|
|
||||||
git clone --depth 1 https://gitlab.freedesktop.org/xorg/util/xcb-util-m4 m4 && \
|
|
||||||
git -C m4 reset --hard f662e3a93ebdec3d1c9374382dcc070093a42fed && \
|
|
||||||
./autogen.sh --enable-shared --disable-static && \
|
|
||||||
make -j$THREADS && \
|
|
||||||
make -j$THREADS install && \
|
|
||||||
rm -rf $(pwd)
|
|
||||||
|
|
||||||
RUN git clone -b 0.4.0 --depth 1 https://gitlab.freedesktop.org/xorg/lib/libxcb-image && \
|
|
||||||
cd libxcb-image && \
|
|
||||||
git reset --hard d882052fb2ce439c6483fce944ba8f16f7294639 && \
|
|
||||||
git submodule init && \
|
|
||||||
git clone --depth 1 https://gitlab.freedesktop.org/xorg/util/xcb-util-m4 m4 && \
|
|
||||||
git -C m4 reset --hard f662e3a93ebdec3d1c9374382dcc070093a42fed && \
|
|
||||||
./autogen.sh --enable-shared --disable-static && \
|
|
||||||
make -j$THREADS && \
|
|
||||||
make -j$THREADS install && \
|
|
||||||
rm -rf $(pwd)
|
|
||||||
|
|
||||||
RUN git clone -b 0.4.0 --depth 1 https://gitlab.freedesktop.org/xorg/lib/libxcb-keysyms && \
|
|
||||||
cd libxcb-keysyms && \
|
|
||||||
git reset --hard 0e51ee5570a6a80bdf98770b975dfe8a57f4eeb1 && \
|
|
||||||
git submodule init && \
|
|
||||||
git clone --depth 1 https://gitlab.freedesktop.org/xorg/util/xcb-util-m4 m4 && \
|
|
||||||
git -C m4 reset --hard f662e3a93ebdec3d1c9374382dcc070093a42fed && \
|
|
||||||
./autogen.sh --enable-shared --disable-static && \
|
|
||||||
make -j$THREADS && \
|
|
||||||
make -j$THREADS install && \
|
|
||||||
rm -rf $(pwd)
|
|
||||||
|
|
||||||
RUN git clone -b 0.3.9 --depth 1 https://gitlab.freedesktop.org/xorg/lib/libxcb-render-util && \
|
|
||||||
cd libxcb-render-util && \
|
|
||||||
git reset --hard 0317caf63de532fd7a0493ed6afa871a67253747 && \
|
|
||||||
git submodule init && \
|
|
||||||
git clone --depth 1 https://gitlab.freedesktop.org/xorg/util/xcb-util-m4 m4 && \
|
|
||||||
git -C m4 reset --hard f662e3a93ebdec3d1c9374382dcc070093a42fed && \
|
|
||||||
./autogen.sh --enable-shared --disable-static && \
|
|
||||||
make -j$THREADS && \
|
|
||||||
make -j$THREADS install && \
|
|
||||||
rm -rf $(pwd)
|
|
||||||
|
|
||||||
RUN git clone -b 0.4.1 --depth 1 https://gitlab.freedesktop.org/xorg/lib/libxcb-wm && \
|
|
||||||
cd libxcb-wm && \
|
|
||||||
git reset --hard 24eb17df2e1245885e72c9d4bbb0a0f69f0700f2 && \
|
|
||||||
git submodule init && \
|
|
||||||
git clone --depth 1 https://gitlab.freedesktop.org/xorg/util/xcb-util-m4 m4 && \
|
|
||||||
git -C m4 reset --hard f662e3a93ebdec3d1c9374382dcc070093a42fed && \
|
|
||||||
./autogen.sh --enable-shared --disable-static && \
|
|
||||||
make -j$THREADS && \
|
|
||||||
make -j$THREADS install && \
|
|
||||||
rm -rf $(pwd)
|
|
||||||
|
|
||||||
RUN git clone -b xkbcommon-0.5.0 --depth 1 https://github.com/xkbcommon/libxkbcommon && \
|
|
||||||
cd libxkbcommon && \
|
|
||||||
git reset --hard c43c3c866eb9d52cd8f61e75cbef1c30d07f3a28 && \
|
|
||||||
./autogen.sh --prefix=/usr --enable-shared --disable-static --enable-x11 --disable-docs && \
|
|
||||||
make -j$THREADS && \
|
|
||||||
make -j$THREADS install && \
|
|
||||||
rm -rf $(pwd)
|
|
||||||
|
|
||||||
RUN git clone -b v1.2.11 --depth 1 https://github.com/madler/zlib && \
|
|
||||||
cd zlib && \
|
|
||||||
git reset --hard cacf7f1d4e3d44d871b605da3b647f07d718623f && \
|
|
||||||
./configure --static --prefix=/usr/local/zlib && \
|
|
||||||
make -j$THREADS && \
|
|
||||||
make -j$THREADS install && \
|
|
||||||
rm -rf $(pwd)
|
|
||||||
|
|
||||||
RUN git clone -b VER-2-10-2 --depth 1 https://git.savannah.gnu.org/git/freetype/freetype2.git && \
|
|
||||||
cd freetype2 && \
|
|
||||||
git reset --hard 132f19b779828b194b3fede187cee719785db4d8 && \
|
|
||||||
./autogen.sh && \
|
|
||||||
./configure --disable-shared --enable-static --with-zlib=no && \
|
|
||||||
make -j$THREADS && \
|
|
||||||
make -j$THREADS install && \
|
|
||||||
rm -rf $(pwd)
|
|
||||||
|
|
||||||
RUN git clone -b R_2_2_9 --depth 1 https://github.com/libexpat/libexpat && \
|
|
||||||
cd libexpat/expat && \
|
|
||||||
git reset --hard a7bc26b69768f7fb24f0c7976fae24b157b85b13 && \
|
|
||||||
./buildconf.sh && \
|
|
||||||
./configure --disable-shared --enable-static && \
|
|
||||||
make -j$THREADS && \
|
|
||||||
make -j$THREADS install && \
|
|
||||||
rm -rf $(pwd)
|
|
||||||
|
|
||||||
RUN git clone -b 2.13.92 --depth 1 https://gitlab.freedesktop.org/fontconfig/fontconfig && \
|
|
||||||
cd fontconfig && \
|
|
||||||
git reset --hard b1df1101a643ae16cdfa1d83b939de2497b1bf27 && \
|
|
||||||
./autogen.sh --disable-shared --enable-static --sysconfdir=/etc --localstatedir=/var && \
|
|
||||||
make -j$THREADS && \
|
|
||||||
make -j$THREADS install && \
|
|
||||||
rm -rf $(pwd)
|
|
||||||
|
|
||||||
RUN git clone -b release-64-2 --depth 1 https://github.com/unicode-org/icu && \
|
|
||||||
cd icu/icu4c/source && \
|
|
||||||
git reset --hard e2d85306162d3a0691b070b4f0a73e4012433444 && \
|
|
||||||
./configure --disable-shared --enable-static --disable-tests --disable-samples && \
|
|
||||||
make -j$THREADS && \
|
|
||||||
make -j$THREADS install && \
|
|
||||||
rm -rf $(pwd)
|
|
||||||
|
|
||||||
RUN wget https://downloads.sourceforge.net/project/boost/boost/1.73.0/boost_1_73_0.tar.bz2 && \
|
|
||||||
echo "4eb3b8d442b426dc35346235c8733b5ae35ba431690e38c6a8263dce9fcbb402 boost_1_73_0.tar.bz2" | sha256sum -c && \
|
|
||||||
tar -xvf boost_1_73_0.tar.bz2 && \
|
|
||||||
rm boost_1_73_0.tar.bz2 && \
|
|
||||||
cd boost_1_73_0 && \
|
|
||||||
./bootstrap.sh && \
|
|
||||||
./b2 --with-atomic --with-system --with-filesystem --with-thread --with-date_time --with-chrono --with-regex --with-serialization --with-program_options --with-locale variant=release link=static runtime-link=static cflags="${CFLAGS}" cxxflags="${CXXFLAGS}" install -a --prefix=/usr && \
|
|
||||||
rm -rf $(pwd)
|
|
||||||
|
|
||||||
RUN wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz && \
|
|
||||||
echo "892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5 openssl-1.1.1k.tar.gz" | sha256sum -c && \
|
|
||||||
tar -xzf openssl-1.1.1k.tar.gz && \
|
|
||||||
rm openssl-1.1.1k.tar.gz && \
|
|
||||||
cd openssl-1.1.1k && \
|
|
||||||
./config no-shared no-dso --prefix=/usr/local/openssl && \
|
|
||||||
make -j$THREADS && \
|
|
||||||
make test && \
|
|
||||||
make -j$THREADS install_sw && \
|
|
||||||
rm -rf $(pwd)
|
|
||||||
|
|
||||||
RUN rm /usr/lib/x86_64-linux-gnu/libX11.a && \
|
|
||||||
rm /usr/lib/x86_64-linux-gnu/libXext.a && \
|
|
||||||
rm /usr/lib/x86_64-linux-gnu/libX11-xcb.a && \
|
|
||||||
git clone git://code.qt.io/qt/qt5.git -b ${QT_VERSION} --depth 1 && \
|
|
||||||
cd qt5 && \
|
|
||||||
git clone git://code.qt.io/qt/qtbase.git -b ${QT_VERSION} --depth 1 && \
|
|
||||||
git clone git://code.qt.io/qt/qtimageformats.git -b ${QT_VERSION} --depth 1 && \
|
|
||||||
git clone git://code.qt.io/qt/qtmultimedia.git -b ${QT_VERSION} --depth 1 && \
|
|
||||||
git clone git://code.qt.io/qt/qtsvg.git -b ${QT_VERSION} --depth 1 && \
|
|
||||||
git clone git://code.qt.io/qt/qttools.git -b ${QT_VERSION} --depth 1 && \
|
|
||||||
git clone git://code.qt.io/qt/qttranslations.git -b ${QT_VERSION} --depth 1 && \
|
|
||||||
git clone git://code.qt.io/qt/qtx11extras.git -b ${QT_VERSION} --depth 1 && \
|
|
||||||
git clone git://code.qt.io/qt/qtwebsockets.git -b ${QT_VERSION} --depth 1 && \
|
|
||||||
sed -ri s/\(Libs:.*\)/\\1\ -lexpat/ /usr/local/lib/pkgconfig/fontconfig.pc && \
|
|
||||||
sed -ri s/\(Libs:.*\)/\\1\ -lz/ /usr/local/lib/pkgconfig/freetype2.pc && \
|
|
||||||
sed -ri s/\(Libs:.*\)/\\1\ -lXau/ /usr/local/lib/pkgconfig/xcb.pc && \
|
|
||||||
sed -i s/\\/usr\\/X11R6\\/lib64/\\/usr\\/local\\/lib/ qtbase/mkspecs/linux-g++-64/qmake.conf && \
|
|
||||||
OPENSSL_LIBS="-lssl -lcrypto -lpthread -ldl" \
|
|
||||||
./configure --prefix=/usr -platform linux-g++-64 -opensource -confirm-license -release -static -no-avx \
|
|
||||||
-no-opengl -qpa xcb --xcb -xcb-xlib -feature-xlib -openssl-linked -I /usr/local/openssl/include \
|
|
||||||
-L /usr/local/openssl/lib -system-freetype -fontconfig -glib \
|
|
||||||
-no-dbus -no-sql-sqlite -no-use-gold-linker -no-kms \
|
|
||||||
-qt-harfbuzz -qt-libjpeg -qt-libpng -qt-pcre -qt-zlib \
|
|
||||||
-skip qt3d -skip qtandroidextras -skip qtcanvas3d -skip qtcharts -skip qtconnectivity -skip qtdatavis3d \
|
|
||||||
-skip qtdoc -skip qtquickcontrols -skip qtquickcontrols2 -skip qtspeech -skip qtgamepad \
|
|
||||||
-skip qtlocation -skip qtmacextras -skip qtnetworkauth -skip qtpurchasing -optimize-size \
|
|
||||||
-skip qtscript -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtspeech -skip qttools \
|
|
||||||
-skip qtvirtualkeyboard -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwebview \
|
|
||||||
-skip qtwinextras -skip qtx11extras -skip gamepad -skip serialbus -skip location -skip webengine \
|
|
||||||
-skip qtdeclarative \
|
|
||||||
-no-feature-cups -no-feature-ftp -no-feature-pdf -no-feature-animation \
|
|
||||||
-nomake examples -nomake tests -nomake tools && \
|
|
||||||
make -j$THREADS && \
|
|
||||||
make -j$THREADS install && \
|
|
||||||
cd qttools/src/linguist/lrelease && \
|
|
||||||
../../../../qtbase/bin/qmake && \
|
|
||||||
make -j$THREADS && \
|
|
||||||
make -j$THREADS install && \
|
|
||||||
cd ../../../.. && \
|
|
||||||
rm -rf $(pwd)
|
|
||||||
|
|
||||||
RUN git clone -b v1.0.24 --depth 1 https://github.com/libusb/libusb && \
|
|
||||||
cd libusb && \
|
|
||||||
git reset --hard c6a35c56016ea2ab2f19115d2ea1e85e0edae155 && \
|
|
||||||
./autogen.sh --disable-shared --enable-static && \
|
|
||||||
make -j$THREADS && \
|
|
||||||
make -j$THREADS install && \
|
|
||||||
rm -rf $(pwd)
|
|
||||||
|
|
||||||
RUN git clone -b hidapi-0.10.1 --depth 1 https://github.com/libusb/hidapi && \
|
|
||||||
cd hidapi && \
|
|
||||||
git reset --hard f6d0073fcddbdda24549199445e844971d3c9cef && \
|
|
||||||
./bootstrap && \
|
|
||||||
./configure --disable-shared --enable-static && \
|
|
||||||
make -j$THREADS && \
|
|
||||||
make -j$THREADS install && \
|
|
||||||
rm -rf $(pwd)
|
|
||||||
|
|
||||||
RUN git clone -b v4.3.2 --depth 1 https://github.com/zeromq/libzmq && \
|
|
||||||
cd libzmq && \
|
|
||||||
git reset --hard a84ffa12b2eb3569ced199660bac5ad128bff1f0 && \
|
|
||||||
./autogen.sh && \
|
|
||||||
./configure --disable-shared --enable-static --disable-libunwind --with-libsodium && \
|
|
||||||
make -j$THREADS && \
|
make -j$THREADS && \
|
||||||
make -j$THREADS install && \
|
make -j$THREADS install && \
|
||||||
rm -rf $(pwd)
|
rm -rf $(pwd)
|
||||||
|
|
||||||
|
# libgpg-error: Required for libgcrypt
|
||||||
RUN git clone -b libgpg-error-1.38 --depth 1 git://git.gnupg.org/libgpg-error.git && \
|
RUN git clone -b libgpg-error-1.38 --depth 1 git://git.gnupg.org/libgpg-error.git && \
|
||||||
cd libgpg-error && \
|
cd libgpg-error && \
|
||||||
git reset --hard 71d278824c5fe61865f7927a2ed1aa3115f9e439 && \
|
git reset --hard 71d278824c5fe61865f7927a2ed1aa3115f9e439 && \
|
||||||
|
@ -361,6 +294,8 @@ RUN git clone -b libgpg-error-1.38 --depth 1 git://git.gnupg.org/libgpg-error.gi
|
||||||
make -j$THREADS install && \
|
make -j$THREADS install && \
|
||||||
rm -rf $(pwd)
|
rm -rf $(pwd)
|
||||||
|
|
||||||
|
# libgcrypt: Required for Feather
|
||||||
|
# Used in src/openpgp to verify updates downloaded by the built-in updater
|
||||||
RUN git clone -b libgcrypt-1.8.5 --depth 1 git://git.gnupg.org/libgcrypt.git && \
|
RUN git clone -b libgcrypt-1.8.5 --depth 1 git://git.gnupg.org/libgcrypt.git && \
|
||||||
cd libgcrypt && \
|
cd libgcrypt && \
|
||||||
git reset --hard 56606331bc2a80536db9fc11ad53695126007298 && \
|
git reset --hard 56606331bc2a80536db9fc11ad53695126007298 && \
|
||||||
|
@ -370,57 +305,13 @@ RUN git clone -b libgcrypt-1.8.5 --depth 1 git://git.gnupg.org/libgcrypt.git &&
|
||||||
make -j$THREADS install && \
|
make -j$THREADS install && \
|
||||||
rm -rf $(pwd)
|
rm -rf $(pwd)
|
||||||
|
|
||||||
RUN git clone -b v3.10.0 --depth 1 https://github.com/protocolbuffers/protobuf && \
|
# zbar: Optional for Feather (-DWITH_SCANNER)
|
||||||
cd protobuf && \
|
# Used to scan for QR Codes
|
||||||
git reset --hard 6d4e7fd7966c989e38024a8ea693db83758944f1 && \
|
RUN git clone -b stable-0.21 --recursive https://github.com/mchehab/zbar.git && \
|
||||||
./autogen.sh && \
|
cd zbar && \
|
||||||
./configure --enable-static --disable-shared && \
|
git reset --hard 505f1a87b32cb7bb0edbaf37e20ccdd46bbae2a3 && \
|
||||||
|
autoreconf -vfi && \
|
||||||
|
./configure --enable-static --disable-shared --without-imagemagick --with-gtk=no --with-python=no --enable-doc=no && \
|
||||||
make -j$THREADS && \
|
make -j$THREADS && \
|
||||||
make -j$THREADS install && \
|
|
||||||
rm -rf $(pwd)
|
|
||||||
|
|
||||||
RUN git clone -b v3.18.4 --depth 1 https://github.com/Kitware/CMake && \
|
|
||||||
cd CMake && \
|
|
||||||
git reset --hard 3cc3d42aba879fff5e85b363ae8f21386a3f9f9b && \
|
|
||||||
./bootstrap && \
|
|
||||||
make -j$THREADS && \
|
|
||||||
make -j$THREADS install && \
|
|
||||||
rm -rf $(pwd)
|
|
||||||
|
|
||||||
RUN git clone -b v4.1.1 --depth 1 https://github.com/fukuchi/libqrencode.git && \
|
|
||||||
cd libqrencode && \
|
|
||||||
git reset --hard 715e29fd4cd71b6e452ae0f4e36d917b43122ce8 && \
|
|
||||||
cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=/usr . && \
|
|
||||||
make -j$THREADS && \
|
|
||||||
make -j$THREADS install && \
|
|
||||||
rm -rf $(pwd)
|
|
||||||
|
|
||||||
RUN git clone https://git.featherwallet.org/feather/monero-seed.git && \
|
|
||||||
cd monero-seed && \
|
|
||||||
git reset --hard 4674ef09b6faa6fe602ab5ae0b9ca8e1fd7d5e1b && \
|
|
||||||
cmake -DCMAKE_BUILD_TYPE=Release -Bbuild && \
|
|
||||||
make -Cbuild -j$THREADS && \
|
|
||||||
make -Cbuild install && \
|
|
||||||
rm -rf $(pwd)
|
|
||||||
|
|
||||||
RUN git clone https://github.com/plougher/squashfs-tools.git && \
|
|
||||||
cd squashfs-tools/squashfs-tools && \
|
|
||||||
git reset --hard 38fa0720526222827da44b3b6c3f7eb63e8f5c2f && \
|
|
||||||
make && \
|
|
||||||
make install && \
|
make install && \
|
||||||
rm -rf $(pwd)
|
rm -rf $(pwd)
|
||||||
|
|
||||||
RUN mkdir linuxdeployqt && \
|
|
||||||
cd linuxdeployqt && \
|
|
||||||
wget https://github.com/probonopd/linuxdeployqt/releases/download/7/linuxdeployqt-7-x86_64.AppImage && \
|
|
||||||
echo "645276306a801d7154d59e5b4b3c2fac3d34e09be57ec31f6d9a09814c6c162a linuxdeployqt-7-x86_64.AppImage" | sha256sum -c && \
|
|
||||||
chmod +x linuxdeployqt-7-x86_64.AppImage && \
|
|
||||||
./linuxdeployqt-7-x86_64.AppImage --appimage-extract && \
|
|
||||||
rm linuxdeployqt-7-x86_64.AppImage
|
|
||||||
|
|
||||||
RUN git clone -b v1.7.3 --depth 1 https://github.com/nih-at/libzip.git && \
|
|
||||||
cd libzip && \
|
|
||||||
git reset --hard 66e496489bdae81bfda8b0088172871d8fda0032 && \
|
|
||||||
cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=/usr . && \
|
|
||||||
make -j$THREADS && \
|
|
||||||
make -j$THREADS install
|
|
||||||
|
|
|
@ -3,13 +3,21 @@ FROM ubuntu:20.04
|
||||||
ARG THREADS=1
|
ARG THREADS=1
|
||||||
ARG QT_VERSION=5.15.2
|
ARG QT_VERSION=5.15.2
|
||||||
ENV SOURCE_DATE_EPOCH=1397818193
|
ENV SOURCE_DATE_EPOCH=1397818193
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
# Feather build flags
|
||||||
|
ENV CHECK_UPDATES=ON
|
||||||
|
ENV WITH_SCANNER=ON
|
||||||
|
|
||||||
ENV OPENSSL_ROOT_DIR=/usr/local/openssl/
|
ENV OPENSSL_ROOT_DIR=/usr/local/openssl/
|
||||||
ENV TOR_BIN=/usr/local/tor/bin/tor.exe
|
ENV TOR_BIN=/usr/local/tor/bin/tor.exe
|
||||||
|
|
||||||
RUN apt update && \
|
RUN apt update && \
|
||||||
DEBIAN_FRONTEND=noninteractive apt install -y curl wget zip automake build-essential cmake gcc-mingw-w64 g++-mingw-w64 gettext git libtool pkg-config \
|
apt install -y \
|
||||||
python && \
|
curl wget zip automake build-essential cmake gcc-mingw-w64 g++-mingw-w64 gettext git libtool pkg-config \
|
||||||
|
python \
|
||||||
|
# zbar
|
||||||
|
autopoint && \
|
||||||
rm -rf /var/lib/apt/lists/*
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
RUN update-alternatives --set x86_64-w64-mingw32-g++ $(which x86_64-w64-mingw32-g++-posix) && \
|
RUN update-alternatives --set x86_64-w64-mingw32-g++ $(which x86_64-w64-mingw32-g++-posix) && \
|
||||||
|
@ -190,3 +198,11 @@ RUN git clone https://github.com/nih-at/libzip.git && \
|
||||||
-DCMAKE_PREFIX_PATH=/usr/x86_64-w64-mingw32 && \
|
-DCMAKE_PREFIX_PATH=/usr/x86_64-w64-mingw32 && \
|
||||||
make -j$THREADS && \
|
make -j$THREADS && \
|
||||||
make -j$THREADS install
|
make -j$THREADS install
|
||||||
|
|
||||||
|
RUN git clone -b 0.23.92 --depth 1 --recursive https://github.com/mchehab/zbar.git && \
|
||||||
|
cd zbar && \
|
||||||
|
git reset --hard aac86d5f08d64ab4c3da78188eb622fa3cb07182 && \
|
||||||
|
autoreconf -vfi && \
|
||||||
|
./configure --enable-static --disable-shared --without-imagemagick --disable-video --without-xv --with-gtk=no --with-python=no --enable-doc=no --host=x86_64-w64-mingw32 && \
|
||||||
|
make -j$THREADS && \
|
||||||
|
make install
|
2
Makefile
2
Makefile
|
@ -45,6 +45,7 @@ CMAKEFLAGS = \
|
||||||
release-static: CMAKEFLAGS += -DBUILD_TAG="linux-x64"
|
release-static: CMAKEFLAGS += -DBUILD_TAG="linux-x64"
|
||||||
release-static: CMAKEFLAGS += -DTOR_BIN=$(or ${TOR_BIN},OFF)
|
release-static: CMAKEFLAGS += -DTOR_BIN=$(or ${TOR_BIN},OFF)
|
||||||
release-static: CMAKEFLAGS += -DCHECK_UPDATES=$(or ${CHECK_UPDATES}, Off)
|
release-static: CMAKEFLAGS += -DCHECK_UPDATES=$(or ${CHECK_UPDATES}, Off)
|
||||||
|
release-static: CMAKEFLAGS += -DWITH_SCANNER=$(or ${WITH_SCANNER}, Off)
|
||||||
release-static: CMAKEFLAGS += -DCMAKE_BUILD_TYPE=Release
|
release-static: CMAKEFLAGS += -DCMAKE_BUILD_TYPE=Release
|
||||||
release-static: CMAKEFLAGS += -DREPRODUCIBLE=$(or ${SOURCE_DATE_EPOCH},OFF)
|
release-static: CMAKEFLAGS += -DREPRODUCIBLE=$(or ${SOURCE_DATE_EPOCH},OFF)
|
||||||
release-static:
|
release-static:
|
||||||
|
@ -58,6 +59,7 @@ depends:
|
||||||
mac-release: CMAKEFLAGS += -DSTATIC=Off
|
mac-release: CMAKEFLAGS += -DSTATIC=Off
|
||||||
mac-release: CMAKEFLAGS += -DTOR_BIN=$(or ${TOR_BIN},OFF)
|
mac-release: CMAKEFLAGS += -DTOR_BIN=$(or ${TOR_BIN},OFF)
|
||||||
mac-release: CMAKEFLAGS += -DCHECK_UPDATES=$(or ${CHECK_UPDATES}, Off)
|
mac-release: CMAKEFLAGS += -DCHECK_UPDATES=$(or ${CHECK_UPDATES}, Off)
|
||||||
|
mac-release: CMAKEFLAGS += -DWITH_SCANNER=$(or ${WITH_SCANNER}, On)
|
||||||
mac-release: CMAKEFLAGS += -DBUILD_TAG="mac-x64"
|
mac-release: CMAKEFLAGS += -DBUILD_TAG="mac-x64"
|
||||||
mac-release: CMAKEFLAGS += -DCMAKE_BUILD_TYPE=Release
|
mac-release: CMAKEFLAGS += -DCMAKE_BUILD_TYPE=Release
|
||||||
mac-release:
|
mac-release:
|
||||||
|
|
|
@ -1,50 +0,0 @@
|
||||||
# Copyright (c) 2014-2019, The Monero Project
|
|
||||||
#
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without modification, are
|
|
||||||
# permitted provided that the following conditions are met:
|
|
||||||
#
|
|
||||||
# 1. Redistributions of source code must retain the above copyright notice, this list of
|
|
||||||
# conditions and the following disclaimer.
|
|
||||||
#
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
|
||||||
# of conditions and the following disclaimer in the documentation and/or other
|
|
||||||
# materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# 3. Neither the name of the copyright holder nor the names of its contributors may be
|
|
||||||
# used to endorse or promote products derived from this software without specific
|
|
||||||
# prior written permission.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
|
||||||
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
|
||||||
# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
|
||||||
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
if (NOT CMAKE_HOST_WIN32)
|
|
||||||
set (CMAKE_SYSTEM_NAME Windows)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set (GCC_PREFIX i686-w64-mingw32)
|
|
||||||
set (CMAKE_C_COMPILER ${GCC_PREFIX}-gcc)
|
|
||||||
set (CMAKE_CXX_COMPILER ${GCC_PREFIX}-g++)
|
|
||||||
set (CMAKE_AR ar CACHE FILEPATH "" FORCE)
|
|
||||||
set (CMAKE_NM nm CACHE FILEPATH "" FORCE)
|
|
||||||
set (CMAKE_LINKER ld CACHE FILEPATH "" FORCE)
|
|
||||||
#set (CMAKE_RANLIB ${GCC_PREFIX}-gcc-ranlib CACHE FILEPATH "" FORCE)
|
|
||||||
set (CMAKE_RC_COMPILER windres)
|
|
||||||
|
|
||||||
set (CMAKE_FIND_ROOT_PATH "${MSYS2_FOLDER}/mingw32")
|
|
||||||
|
|
||||||
# Ensure cmake doesn't find things in the wrong places
|
|
||||||
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
|
|
||||||
|
|
||||||
set (MINGW_FLAG "-m32")
|
|
||||||
set (USE_LTO_DEFAULT false)
|
|
|
@ -1,50 +0,0 @@
|
||||||
# Copyright (c) 2014-2019, The Monero Project
|
|
||||||
#
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without modification, are
|
|
||||||
# permitted provided that the following conditions are met:
|
|
||||||
#
|
|
||||||
# 1. Redistributions of source code must retain the above copyright notice, this list of
|
|
||||||
# conditions and the following disclaimer.
|
|
||||||
#
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
|
||||||
# of conditions and the following disclaimer in the documentation and/or other
|
|
||||||
# materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# 3. Neither the name of the copyright holder nor the names of its contributors may be
|
|
||||||
# used to endorse or promote products derived from this software without specific
|
|
||||||
# prior written permission.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
|
||||||
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
|
||||||
# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
|
||||||
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
if (NOT CMAKE_HOST_WIN32)
|
|
||||||
set (CMAKE_SYSTEM_NAME Windows)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set (GCC_PREFIX x86_64-w64-mingw32)
|
|
||||||
set (CMAKE_C_COMPILER ${GCC_PREFIX}-gcc)
|
|
||||||
set (CMAKE_CXX_COMPILER ${GCC_PREFIX}-g++)
|
|
||||||
set (CMAKE_AR ar CACHE FILEPATH "" FORCE)
|
|
||||||
set (CMAKE_NM nm CACHE FILEPATH "" FORCE)
|
|
||||||
set (CMAKE_LINKER ld CACHE FILEPATH "" FORCE)
|
|
||||||
#set (CMAKE_RANLIB ${GCC_PREFIX}-gcc-ranlib CACHE FILEPATH "" FORCE)
|
|
||||||
set (CMAKE_RC_COMPILER windres)
|
|
||||||
|
|
||||||
set (CMAKE_FIND_ROOT_PATH "${MSYS2_FOLDER}/mingw64")
|
|
||||||
|
|
||||||
# Ensure cmake doesn't find things in the wrong places
|
|
||||||
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
|
|
||||||
|
|
||||||
set (MINGW_FLAG "-m64")
|
|
||||||
set (USE_LTO_DEFAULT false)
|
|
|
@ -1,47 +0,0 @@
|
||||||
include(CheckCCompilerFlag)
|
|
||||||
|
|
||||||
macro(CHECK_LINKER_FLAG flag VARIABLE)
|
|
||||||
if(NOT DEFINED "${VARIABLE}")
|
|
||||||
if(NOT CMAKE_REQUIRED_QUIET)
|
|
||||||
message(STATUS "Looking for ${flag} linker flag")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(_cle_source ${CMAKE_SOURCE_DIR}/cmake/CheckLinkerFlag.c)
|
|
||||||
|
|
||||||
set(saved_CMAKE_C_FLAGS ${CMAKE_C_FLAGS})
|
|
||||||
set(CMAKE_C_FLAGS "${flag}")
|
|
||||||
try_compile(${VARIABLE}
|
|
||||||
${CMAKE_BINARY_DIR}
|
|
||||||
${_cle_source}
|
|
||||||
COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} ${flag}
|
|
||||||
CMAKE_FLAGS
|
|
||||||
OUTPUT_VARIABLE OUTPUT)
|
|
||||||
unset(_cle_source)
|
|
||||||
set(CMAKE_C_FLAGS ${saved_CMAKE_C_FLAGS})
|
|
||||||
unset(saved_CMAKE_C_FLAGS)
|
|
||||||
|
|
||||||
if ("${OUTPUT}" MATCHES "warning.*ignored")
|
|
||||||
set(${VARIABLE} 0)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(${VARIABLE})
|
|
||||||
if(NOT CMAKE_REQUIRED_QUIET)
|
|
||||||
message(STATUS "Looking for ${flag} linker flag - found")
|
|
||||||
endif()
|
|
||||||
set(${VARIABLE} 1 CACHE INTERNAL "Have linker flag ${flag}")
|
|
||||||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
|
||||||
"Determining if the ${flag} linker flag is supported "
|
|
||||||
"passed with the following output:\n"
|
|
||||||
"${OUTPUT}\n\n")
|
|
||||||
else()
|
|
||||||
if(NOT CMAKE_REQUIRED_QUIET)
|
|
||||||
message(STATUS "Looking for ${flag} linker flag - not found")
|
|
||||||
endif()
|
|
||||||
set(${VARIABLE} "" CACHE INTERNAL "Have linker flag ${flag}")
|
|
||||||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
|
||||||
"Determining if the ${flag} linker flag is supported "
|
|
||||||
"failed with the following output:\n"
|
|
||||||
"${OUTPUT}\n\n")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endmacro()
|
|
|
@ -1,5 +0,0 @@
|
||||||
OPTION(USE_DEVICE_TREZOR "Trezor support compilation" OFF)
|
|
||||||
OPTION(USE_DEVICE_TREZOR_LIBUSB "Trezor LibUSB compilation" OFF)
|
|
||||||
OPTION(USE_DEVICE_TREZOR_UDP_RELEASE "Trezor UdpTransport in release mode" OFF)
|
|
||||||
OPTION(USE_DEVICE_TREZOR_DEBUG "Trezor Debugging enabled" OFF)
|
|
||||||
OPTION(TREZOR_DEBUG "Main trezor debugging switch" OFF)
|
|
1803
cmake/Doxyfile.in
1803
cmake/Doxyfile.in
File diff suppressed because it is too large
Load diff
|
@ -1,14 +0,0 @@
|
||||||
/* increase vertical space */
|
|
||||||
#titlearea, #nav-path {
|
|
||||||
display: none;
|
|
||||||
height: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* uncomment these lines for some extra vertical space */
|
|
||||||
|
|
||||||
/*
|
|
||||||
.tablist li {
|
|
||||||
line-height: 26px;
|
|
||||||
}
|
|
||||||
*/
|
|
|
@ -1,98 +0,0 @@
|
||||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
||||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
|
||||||
|
|
||||||
#.rst:
|
|
||||||
# FindBacktrace
|
|
||||||
# -------------
|
|
||||||
#
|
|
||||||
# Find provider for backtrace(3).
|
|
||||||
#
|
|
||||||
# Checks if OS supports backtrace(3) via either libc or custom library.
|
|
||||||
# This module defines the following variables:
|
|
||||||
#
|
|
||||||
# ``Backtrace_HEADER``
|
|
||||||
# The header file needed for backtrace(3). Cached.
|
|
||||||
# Could be forcibly set by user.
|
|
||||||
# ``Backtrace_INCLUDE_DIRS``
|
|
||||||
# The include directories needed to use backtrace(3) header.
|
|
||||||
# ``Backtrace_LIBRARIES``
|
|
||||||
# The libraries (linker flags) needed to use backtrace(3), if any.
|
|
||||||
# ``Backtrace_FOUND``
|
|
||||||
# Is set if and only if backtrace(3) support detected.
|
|
||||||
#
|
|
||||||
# The following cache variables are also available to set or use:
|
|
||||||
#
|
|
||||||
# ``Backtrace_LIBRARY``
|
|
||||||
# The external library providing backtrace, if any.
|
|
||||||
# ``Backtrace_INCLUDE_DIR``
|
|
||||||
# The directory holding the backtrace(3) header.
|
|
||||||
#
|
|
||||||
# Typical usage is to generate of header file using configure_file() with the
|
|
||||||
# contents like the following::
|
|
||||||
#
|
|
||||||
# #cmakedefine01 Backtrace_FOUND
|
|
||||||
# #if Backtrace_FOUND
|
|
||||||
# # include <${Backtrace_HEADER}>
|
|
||||||
# #endif
|
|
||||||
#
|
|
||||||
# And then reference that generated header file in actual source.
|
|
||||||
|
|
||||||
include(CMakePushCheckState)
|
|
||||||
include(CheckSymbolExists)
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
|
|
||||||
# List of variables to be provided to find_package_handle_standard_args()
|
|
||||||
set(_Backtrace_STD_ARGS Backtrace_INCLUDE_DIR)
|
|
||||||
|
|
||||||
if(Backtrace_HEADER)
|
|
||||||
set(_Backtrace_HEADER_TRY "${Backtrace_HEADER}")
|
|
||||||
else(Backtrace_HEADER)
|
|
||||||
set(_Backtrace_HEADER_TRY "execinfo.h")
|
|
||||||
endif(Backtrace_HEADER)
|
|
||||||
|
|
||||||
find_path(Backtrace_INCLUDE_DIR "${_Backtrace_HEADER_TRY}")
|
|
||||||
set(Backtrace_INCLUDE_DIRS ${Backtrace_INCLUDE_DIR})
|
|
||||||
|
|
||||||
if (NOT DEFINED Backtrace_LIBRARY)
|
|
||||||
# First, check if we already have backtrace(), e.g., in libc
|
|
||||||
cmake_push_check_state(RESET)
|
|
||||||
set(CMAKE_REQUIRED_INCLUDES ${Backtrace_INCLUDE_DIRS})
|
|
||||||
set(CMAKE_REQUIRED_QUIET ${Backtrace_FIND_QUIETLY})
|
|
||||||
check_symbol_exists("backtrace" "${_Backtrace_HEADER_TRY}" _Backtrace_SYM_FOUND)
|
|
||||||
cmake_pop_check_state()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(_Backtrace_SYM_FOUND)
|
|
||||||
# Avoid repeating the message() call below each time CMake is run.
|
|
||||||
if(NOT Backtrace_FIND_QUIETLY AND NOT DEFINED Backtrace_LIBRARY)
|
|
||||||
message(STATUS "backtrace facility detected in default set of libraries")
|
|
||||||
endif()
|
|
||||||
set(Backtrace_LIBRARY "" CACHE FILEPATH "Library providing backtrace(3), empty for default set of libraries")
|
|
||||||
else()
|
|
||||||
# Check for external library, for non-glibc systems
|
|
||||||
if(Backtrace_INCLUDE_DIR)
|
|
||||||
# OpenBSD has libbacktrace renamed to libexecinfo
|
|
||||||
find_library(Backtrace_LIBRARY "execinfo")
|
|
||||||
elseif() # respect user wishes
|
|
||||||
set(_Backtrace_HEADER_TRY "backtrace.h")
|
|
||||||
find_path(Backtrace_INCLUDE_DIR ${_Backtrace_HEADER_TRY})
|
|
||||||
find_library(Backtrace_LIBRARY "backtrace")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Prepend list with library path as it's more common practice
|
|
||||||
set(_Backtrace_STD_ARGS Backtrace_LIBRARY ${_Backtrace_STD_ARGS})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
message(STATUS "Backtrace_LIBRARY: ${Backtrace_LIBRARY}")
|
|
||||||
if(Backtrace_LIBRARY STREQUAL "NOTFOUND")
|
|
||||||
set(Backtrace_LIBRARY "")
|
|
||||||
endif()
|
|
||||||
if(Backtrace_LIBRARY STREQUAL "Backtrace_LIBRARY-NOTFOUND")
|
|
||||||
set(Backtrace_LIBRARY "")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(Backtrace_LIBRARIES ${Backtrace_LIBRARY})
|
|
||||||
set(Backtrace_HEADER "${_Backtrace_HEADER_TRY}" CACHE STRING "Header providing backtrace(3) facility")
|
|
||||||
|
|
||||||
find_package_handle_standard_args(Backtrace FOUND_VAR Backtrace_FOUND REQUIRED_VARS ${_Backtrace_STD_ARGS})
|
|
||||||
mark_as_advanced(Backtrace_HEADER Backtrace_INCLUDE_DIR Backtrace_LIBRARY)
|
|
|
@ -1,25 +0,0 @@
|
||||||
# - Try to find Berkeley DB
|
|
||||||
# Once done this will define
|
|
||||||
#
|
|
||||||
# BERKELEY_DB_FOUND - system has Berkeley DB
|
|
||||||
# BERKELEY_DB_INCLUDE_DIR - the Berkeley DB include directory
|
|
||||||
# BERKELEY_DB_LIBRARIES - Link these to use Berkeley DB
|
|
||||||
# BERKELEY_DB_DEFINITIONS - Compiler switches required for using Berkeley DB
|
|
||||||
|
|
||||||
# Copyright (c) 2006, Alexander Dymo, <adymo@kdevelop.org>
|
|
||||||
#
|
|
||||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
|
||||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
|
||||||
|
|
||||||
find_path(BERKELEY_DB_INCLUDE_DIR db_cxx.h
|
|
||||||
/usr/include/db4
|
|
||||||
/usr/local/include/db4
|
|
||||||
)
|
|
||||||
|
|
||||||
find_library(BERKELEY_DB_LIBRARIES NAMES db_cxx )
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
find_package_handle_standard_args(Berkeley "Could not find Berkeley DB >= 4.1" BERKELEY_DB_INCLUDE_DIR BERKELEY_DB_LIBRARIES)
|
|
||||||
# show the BERKELEY_DB_INCLUDE_DIR and BERKELEY_DB_LIBRARIES variables only in the advanced view
|
|
||||||
mark_as_advanced(BERKELEY_DB_INCLUDE_DIR BERKELEY_DB_LIBRARIES )
|
|
||||||
|
|
|
@ -1,60 +0,0 @@
|
||||||
# - try to find HIDAPI library
|
|
||||||
# from http://www.signal11.us/oss/hidapi/
|
|
||||||
#
|
|
||||||
# Cache Variables: (probably not for direct use in your scripts)
|
|
||||||
# HIDAPI_INCLUDE_DIR
|
|
||||||
# HIDAPI_LIBRARY
|
|
||||||
#
|
|
||||||
# Non-cache variables you might use in your CMakeLists.txt:
|
|
||||||
# HIDAPI_FOUND
|
|
||||||
# HIDAPI_INCLUDE_DIRS
|
|
||||||
# HIDAPI_LIBRARIES
|
|
||||||
#
|
|
||||||
# Requires these CMake modules:
|
|
||||||
# FindPackageHandleStandardArgs (known included with CMake >=2.6.2)
|
|
||||||
#
|
|
||||||
# Original Author:
|
|
||||||
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
|
|
||||||
# http://academic.cleardefinition.com
|
|
||||||
# Iowa State University HCI Graduate Program/VRAC
|
|
||||||
#
|
|
||||||
# Copyright Iowa State University 2009-2010.
|
|
||||||
# Distributed under the Boost Software License, Version 1.0.
|
|
||||||
# (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
# http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
find_library(HIDAPI_LIBRARY
|
|
||||||
NAMES hidapi hidapi-libusb)
|
|
||||||
|
|
||||||
find_path(HIDAPI_INCLUDE_DIR
|
|
||||||
NAMES hidapi.h
|
|
||||||
PATH_SUFFIXES
|
|
||||||
hidapi)
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
find_package_handle_standard_args(HIDAPI
|
|
||||||
DEFAULT_MSG
|
|
||||||
HIDAPI_LIBRARY
|
|
||||||
HIDAPI_INCLUDE_DIR)
|
|
||||||
|
|
||||||
if(HIDAPI_FOUND)
|
|
||||||
set(HIDAPI_LIBRARIES "${HIDAPI_LIBRARY}")
|
|
||||||
if((STATIC AND UNIX AND NOT APPLE) OR (DEPENDS AND CMAKE_SYSTEM_NAME STREQUAL "Linux"))
|
|
||||||
find_library(LIBUSB-1.0_LIBRARY usb-1.0)
|
|
||||||
find_library(LIBUDEV_LIBRARY udev)
|
|
||||||
if(LIBUSB-1.0_LIBRARY)
|
|
||||||
set(HIDAPI_LIBRARIES "${HIDAPI_LIBRARIES};${LIBUSB-1.0_LIBRARY}")
|
|
||||||
if(LIBUDEV_LIBRARY)
|
|
||||||
set(HIDAPI_LIBRARIES "${HIDAPI_LIBRARIES};${LIBUDEV_LIBRARY}")
|
|
||||||
else()
|
|
||||||
message(WARNING "libudev library not found, binaries may fail to link.")
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
message(WARNING "libusb-1.0 library not found, binaries may fail to link.")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(HIDAPI_INCLUDE_DIRS "${HIDAPI_INCLUDE_DIR}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
mark_as_advanced(HIDAPI_INCLUDE_DIR HIDAPI_LIBRARY)
|
|
|
@ -1,41 +0,0 @@
|
||||||
# - Try to find libunwind
|
|
||||||
# Once done this will define
|
|
||||||
#
|
|
||||||
# LIBUNWIND_FOUND - system has libunwind
|
|
||||||
# LIBUNWIND_INCLUDE_DIR - the libunwind include directory
|
|
||||||
# LIBUNWIND_LIBRARIES - Link these to use libunwind
|
|
||||||
# LIBUNWIND_DEFINITIONS - Compiler switches required for using libunwind
|
|
||||||
|
|
||||||
# Copyright (c) 2006, Alexander Dymo, <adymo@kdevelop.org>
|
|
||||||
#
|
|
||||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
|
||||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
|
||||||
|
|
||||||
find_path(LIBUNWIND_INCLUDE_DIR libunwind.h
|
|
||||||
/usr/include
|
|
||||||
/usr/local/include
|
|
||||||
)
|
|
||||||
|
|
||||||
find_library(LIBUNWIND_LIBRARIES NAMES unwind )
|
|
||||||
if(NOT LIBUNWIND_LIBRARIES STREQUAL "LIBUNWIND_LIBRARIES-NOTFOUND")
|
|
||||||
if (CMAKE_COMPILER_IS_GNUCC)
|
|
||||||
set(LIBUNWIND_LIBRARIES "gcc_eh;${LIBUNWIND_LIBRARIES}")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# some versions of libunwind need liblzma, and we don't use pkg-config
|
|
||||||
# so we just look whether liblzma is installed, and add it if it is.
|
|
||||||
# It might not be actually needed, but doesn't hurt if it is not.
|
|
||||||
# We don't need any headers, just the lib, as it's privately needed.
|
|
||||||
message(STATUS "looking for liblzma")
|
|
||||||
find_library(LIBLZMA_LIBRARIES lzma )
|
|
||||||
if(NOT LIBLZMA_LIBRARIES STREQUAL "LIBLZMA_LIBRARIES-NOTFOUND")
|
|
||||||
message(STATUS "liblzma found")
|
|
||||||
set(LIBUNWIND_LIBRARIES "${LIBUNWIND_LIBRARIES};${LIBLZMA_LIBRARIES}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
find_package_handle_standard_args(Libunwind "Could not find libunwind" LIBUNWIND_INCLUDE_DIR LIBUNWIND_LIBRARIES)
|
|
||||||
# show the LIBUNWIND_INCLUDE_DIR and LIBUNWIND_LIBRARIES variables only in the advanced view
|
|
||||||
mark_as_advanced(LIBUNWIND_INCLUDE_DIR LIBUNWIND_LIBRARIES )
|
|
||||||
|
|
|
@ -1,59 +0,0 @@
|
||||||
# --------------------------------- FindMiniupnpc Start ---------------------------------
|
|
||||||
# Locate miniupnp library
|
|
||||||
# This module defines
|
|
||||||
# MINIUPNP_FOUND, if false, do not try to link to miniupnp
|
|
||||||
# MINIUPNP_LIBRARY, the miniupnp variant
|
|
||||||
# MINIUPNP_INCLUDE_DIR, where to find miniupnpc.h and family)
|
|
||||||
# MINIUPNPC_VERSION_1_7_OR_HIGHER, set if we detect the version of miniupnpc is 1.7 or higher
|
|
||||||
#
|
|
||||||
# Note that the expected include convention is
|
|
||||||
# #include "miniupnpc.h"
|
|
||||||
# and not
|
|
||||||
# #include <miniupnpc/miniupnpc.h>
|
|
||||||
# This is because, the miniupnpc location is not standardized and may exist
|
|
||||||
# in locations other than miniupnpc/
|
|
||||||
|
|
||||||
if (MINIUPNP_INCLUDE_DIR AND MINIUPNP_LIBRARY)
|
|
||||||
# Already in cache, be silent
|
|
||||||
set(MINIUPNP_FIND_QUIETLY TRUE)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
find_path(MINIUPNP_INCLUDE_DIR miniupnpc.h
|
|
||||||
HINTS $ENV{MINIUPNP_INCLUDE_DIR}
|
|
||||||
PATH_SUFFIXES miniupnpc
|
|
||||||
)
|
|
||||||
|
|
||||||
find_library(MINIUPNP_LIBRARY miniupnpc
|
|
||||||
HINTS $ENV{MINIUPNP_LIBRARY}
|
|
||||||
)
|
|
||||||
|
|
||||||
find_library(MINIUPNP_STATIC_LIBRARY libminiupnpc.a
|
|
||||||
HINTS $ENV{MINIUPNP_STATIC_LIBRARY}
|
|
||||||
)
|
|
||||||
|
|
||||||
set(MINIUPNP_INCLUDE_DIRS ${MINIUPNP_INCLUDE_DIR})
|
|
||||||
set(MINIUPNP_LIBRARIES ${MINIUPNP_LIBRARY})
|
|
||||||
set(MINIUPNP_STATIC_LIBRARIES ${MINIUPNP_STATIC_LIBRARY})
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
find_package_handle_standard_args(
|
|
||||||
MiniUPnPc DEFAULT_MSG
|
|
||||||
MINIUPNP_INCLUDE_DIR
|
|
||||||
MINIUPNP_LIBRARY
|
|
||||||
)
|
|
||||||
|
|
||||||
IF(MINIUPNPC_FOUND)
|
|
||||||
file(STRINGS "${MINIUPNP_INCLUDE_DIR}/miniupnpc.h" MINIUPNPC_API_VERSION_STR REGEX "^#define[\t ]+MINIUPNPC_API_VERSION[\t ]+[0-9]+")
|
|
||||||
if(MINIUPNPC_API_VERSION_STR MATCHES "^#define[\t ]+MINIUPNPC_API_VERSION[\t ]+([0-9]+)")
|
|
||||||
set(MINIUPNPC_API_VERSION "${CMAKE_MATCH_1}")
|
|
||||||
if (${MINIUPNPC_API_VERSION} GREATER "10" OR ${MINIUPNPC_API_VERSION} EQUAL "10")
|
|
||||||
message(STATUS "Found miniupnpc API version " ${MINIUPNPC_API_VERSION})
|
|
||||||
set(MINIUPNP_FOUND true)
|
|
||||||
set(MINIUPNPC_VERSION_1_7_OR_HIGHER true)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
mark_as_advanced(MINIUPNP_INCLUDE_DIR MINIUPNP_LIBRARY MINIUPNP_STATIC_LIBRARY)
|
|
||||||
# --------------------------------- FindMiniupnpc End ---------------------------------
|
|
|
@ -1,91 +0,0 @@
|
||||||
# - Try to find readline include dirs and libraries
|
|
||||||
#
|
|
||||||
# Usage of this module as follows:
|
|
||||||
#
|
|
||||||
# find_package(Readline)
|
|
||||||
#
|
|
||||||
# Variables used by this module, they can change the default behaviour and need
|
|
||||||
# to be set before calling find_package:
|
|
||||||
#
|
|
||||||
# Readline_ROOT_DIR Set this variable to the root installation of
|
|
||||||
# readline if the module has problems finding the
|
|
||||||
# proper installation path.
|
|
||||||
#
|
|
||||||
# Variables defined by this module:
|
|
||||||
#
|
|
||||||
# READLINE_FOUND System has readline, include and lib dirs found
|
|
||||||
# GNU_READLINE_FOUND Version of readline found is GNU readline, not libedit!
|
|
||||||
# LIBEDIT_FOUND Version of readline found is libedit, not GNU readline!
|
|
||||||
# Readline_INCLUDE_DIR The readline include directories.
|
|
||||||
# Readline_LIBRARY The readline library.
|
|
||||||
# GNU_READLINE_LIBRARY The GNU readline library or empty string.
|
|
||||||
# LIBEDIT_LIBRARY The libedit library or empty string.
|
|
||||||
|
|
||||||
find_path(Readline_ROOT_DIR
|
|
||||||
NAMES include/readline/readline.h
|
|
||||||
PATHS /usr/local/opt/readline/ /opt/local/ /usr/local/ /usr/
|
|
||||||
NO_DEFAULT_PATH
|
|
||||||
)
|
|
||||||
|
|
||||||
find_path(Readline_INCLUDE_DIR
|
|
||||||
NAMES readline/readline.h
|
|
||||||
PATHS ${Readline_ROOT_DIR}/include
|
|
||||||
NO_DEFAULT_PATH
|
|
||||||
)
|
|
||||||
|
|
||||||
find_library(Readline_LIBRARY
|
|
||||||
NAMES readline
|
|
||||||
PATHS ${Readline_ROOT_DIR}/lib
|
|
||||||
NO_DEFAULT_PATH
|
|
||||||
)
|
|
||||||
|
|
||||||
find_library(Termcap_LIBRARY
|
|
||||||
NAMES tinfo termcap ncursesw ncurses cursesw curses
|
|
||||||
)
|
|
||||||
|
|
||||||
if(Readline_INCLUDE_DIR AND Readline_LIBRARY)
|
|
||||||
set(READLINE_FOUND TRUE)
|
|
||||||
else(Readline_INCLUDE_DIR AND Readline_LIBRARY)
|
|
||||||
FIND_LIBRARY(Readline_LIBRARY NAMES readline PATHS Readline_ROOT_DIR)
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Readline DEFAULT_MSG Readline_INCLUDE_DIR Readline_LIBRARY )
|
|
||||||
MARK_AS_ADVANCED(Readline_INCLUDE_DIR Readline_LIBRARY)
|
|
||||||
endif(Readline_INCLUDE_DIR AND Readline_LIBRARY)
|
|
||||||
|
|
||||||
mark_as_advanced(
|
|
||||||
Readline_ROOT_DIR
|
|
||||||
Readline_INCLUDE_DIR
|
|
||||||
Readline_LIBRARY
|
|
||||||
)
|
|
||||||
|
|
||||||
set(CMAKE_REQUIRED_INCLUDES ${Readline_INCLUDE_DIR})
|
|
||||||
set(CMAKE_REQUIRED_LIBRARIES ${Readline_LIBRARY})
|
|
||||||
|
|
||||||
include(CheckFunctionExists)
|
|
||||||
check_function_exists(rl_copy_text HAVE_COPY_TEXT)
|
|
||||||
check_function_exists(rl_filename_completion_function HAVE_COMPLETION_FUNCTION)
|
|
||||||
|
|
||||||
if(NOT HAVE_COMPLETION_FUNCTION)
|
|
||||||
if (Readline_LIBRARY)
|
|
||||||
set(CMAKE_REQUIRED_LIBRARIES ${Readline_LIBRARY} ${Termcap_LIBRARY})
|
|
||||||
endif(Readline_LIBRARY)
|
|
||||||
check_function_exists(rl_copy_text HAVE_COPY_TEXT_TC)
|
|
||||||
check_function_exists(rl_filename_completion_function HAVE_COMPLETION_FUNCTION_TC)
|
|
||||||
set(HAVE_COMPLETION_FUNCTION ${HAVE_COMPLETION_FUNCTION_TC})
|
|
||||||
set(HAVE_COPY_TEXT ${HAVE_COPY_TEXT_TC})
|
|
||||||
if(HAVE_COMPLETION_FUNCTION)
|
|
||||||
set(Readline_LIBRARY ${Readline_LIBRARY} ${Termcap_LIBRARY})
|
|
||||||
endif(HAVE_COMPLETION_FUNCTION)
|
|
||||||
endif(NOT HAVE_COMPLETION_FUNCTION)
|
|
||||||
|
|
||||||
set(LIBEDIT_LIBRARY "")
|
|
||||||
set(GNU_READLINE_LIBRARY "")
|
|
||||||
|
|
||||||
if(HAVE_COMPLETION_FUNCTION AND HAVE_COPY_TEXT)
|
|
||||||
set(GNU_READLINE_FOUND TRUE)
|
|
||||||
set(GNU_READLINE_LIBRARY ${Readline_LIBRARY})
|
|
||||||
elseif(READLINE_FOUND AND NOT HAVE_COPY_TEXT)
|
|
||||||
set(LIBEDIT_FOUND TRUE)
|
|
||||||
set(LIBEDIT_LIBRARY ${Readline_LIBRARY})
|
|
||||||
endif(HAVE_COMPLETION_FUNCTION AND HAVE_COPY_TEXT)
|
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
# Copyright (c) 2014-2019, The Monero Project
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without modification, are
|
|
||||||
# permitted provided that the following conditions are met:
|
|
||||||
#
|
|
||||||
# 1. Redistributions of source code must retain the above copyright notice, this list of
|
|
||||||
# conditions and the following disclaimer.
|
|
||||||
#
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
|
||||||
# of conditions and the following disclaimer in the documentation and/or other
|
|
||||||
# materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# 3. Neither the name of the copyright holder nor the names of its contributors may be
|
|
||||||
# used to endorse or promote products derived from this software without specific
|
|
||||||
# prior written permission.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
|
||||||
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
|
||||||
# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
|
||||||
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
MESSAGE(STATUS "Looking for libunbound")
|
|
||||||
|
|
||||||
FIND_PATH(UNBOUND_INCLUDE_DIR
|
|
||||||
NAMES unbound.h
|
|
||||||
PATH_SUFFIXES include/ include/unbound/
|
|
||||||
PATHS "${PROJECT_SOURCE_DIR}"
|
|
||||||
${UNBOUND_ROOT}
|
|
||||||
$ENV{UNBOUND_ROOT}
|
|
||||||
/usr/local/
|
|
||||||
/usr/
|
|
||||||
)
|
|
||||||
|
|
||||||
find_library(UNBOUND_LIBRARIES unbound)
|
|
29
cmake/FindZBAR.cmake
Normal file
29
cmake/FindZBAR.cmake
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
find_package(PkgConfig)
|
||||||
|
|
||||||
|
if(PkgConfig_FOUND)
|
||||||
|
pkg_check_modules(PC_ZBAR QUIET zbar)
|
||||||
|
if(PC_ZBAR_FOUND)
|
||||||
|
set(ZBAR_DEFINITIONS ${PC_ZBAR_CFLAGS_OTHER})
|
||||||
|
find_library(ZBAR_LIBRARIES NAMES zbar HINTS ${PC_ZBAR_LIBDIR} ${PC_ZBAR_LIBRARY_DIRS})
|
||||||
|
find_path(ZBAR_INCLUDE_DIR Decoder.h HINTS ${PC_ZBAR_INCLUDEDIR} ${PC_ZBAR_INCLUDE_DIRS})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT ZBAR_LIBRARIES AND ANDROID)
|
||||||
|
find_library(ZBARJNI_LIBRARY NAMES zbarjni)
|
||||||
|
find_library(ICONV_LIBRARY NAMES iconv)
|
||||||
|
if(ZBARJNI_LIBRARY AND ICONV_LIBRARY)
|
||||||
|
set(ZBAR_LIBRARIES ${ZBARJNI_LIBRARY} ${ICONV_LIBRARY})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT ZBAR_INCLUDE_DIR)
|
||||||
|
find_path(ZBAR_H_PATH zbar.h)
|
||||||
|
if(ZBAR_H_PATH)
|
||||||
|
set(ZBAR_INCLUDE_DIR "${ZBAR_H_PATH}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(ZBAR DEFAULT_MSG ZBAR_LIBRARIES ZBAR_INCLUDE_DIR)
|
||||||
|
message(STATUS "Found zbar libraries ${ZBAR_LIBRARIES}")
|
|
@ -1,22 +0,0 @@
|
||||||
# from http://code.google.com/p/low-cost-vision-2012/source/browse/CMakeModules/FindZBar0.cmake?name=2-helium-1&r=d61f248bd5565b3c086bf4769a04bfd98f7079df
|
|
||||||
# - Try to find ZBar
|
|
||||||
# This will define
|
|
||||||
#
|
|
||||||
# ZBAR_FOUND -
|
|
||||||
# ZBAR_LIBRARY_DIR -
|
|
||||||
# ZBAR_INCLUDE_DIR -
|
|
||||||
# ZBAR_LIBRARIES -
|
|
||||||
#
|
|
||||||
|
|
||||||
find_package(PkgConfig)
|
|
||||||
pkg_check_modules(PC_ZBAR QUIET zbar)
|
|
||||||
set(ZBAR_DEFINITIONS ${PC_ZBAR_CFLAGS_OTHER})
|
|
||||||
find_library(ZBAR_LIBRARIES NAMES zbar
|
|
||||||
HINTS ${PC_ZBAR_LIBDIR} ${PC_ZBAR_LIBRARY_DIRS} )
|
|
||||||
find_path(ZBAR_INCLUDE_DIR Decoder.h
|
|
||||||
HINTS ${PC_ZBAR_INCLUDEDIR} ${PC_ZBAR_INCLUDE_DIRS}
|
|
||||||
PATH_SUFFIXES zbar )
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
find_package_handle_standard_args(ZBAR DEFAULT_MSG ZBAR_LIBRARIES ZBAR_INCLUDE_DIR)
|
|
||||||
message(STATUS "Found zbar libraries ${ZBAR_LIBRARIES}")
|
|
||||||
|
|
154
cmake/FindZLIB.cmake
Normal file
154
cmake/FindZLIB.cmake
Normal file
|
@ -0,0 +1,154 @@
|
||||||
|
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||||
|
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||||
|
|
||||||
|
#[=======================================================================[.rst:
|
||||||
|
FindZLIB
|
||||||
|
--------
|
||||||
|
|
||||||
|
Find the native ZLIB includes and library.
|
||||||
|
|
||||||
|
IMPORTED Targets
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. versionadded:: 3.1
|
||||||
|
|
||||||
|
This module defines :prop_tgt:`IMPORTED` target ``ZLIB::ZLIB``, if
|
||||||
|
ZLIB has been found.
|
||||||
|
|
||||||
|
Result Variables
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
This module defines the following variables:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
ZLIB_INCLUDE_DIRS - where to find zlib.h, etc.
|
||||||
|
ZLIB_LIBRARIES - List of libraries when using zlib.
|
||||||
|
ZLIB_FOUND - True if zlib found.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
ZLIB_VERSION_STRING - The version of zlib found (x.y.z)
|
||||||
|
ZLIB_VERSION_MAJOR - The major version of zlib
|
||||||
|
ZLIB_VERSION_MINOR - The minor version of zlib
|
||||||
|
ZLIB_VERSION_PATCH - The patch version of zlib
|
||||||
|
ZLIB_VERSION_TWEAK - The tweak version of zlib
|
||||||
|
|
||||||
|
.. versionadded:: 3.4
|
||||||
|
Debug and Release variants are found separately.
|
||||||
|
|
||||||
|
Backward Compatibility
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
The following variable are provided for backward compatibility
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
ZLIB_MAJOR_VERSION - The major version of zlib
|
||||||
|
ZLIB_MINOR_VERSION - The minor version of zlib
|
||||||
|
ZLIB_PATCH_VERSION - The patch version of zlib
|
||||||
|
|
||||||
|
Hints
|
||||||
|
^^^^^
|
||||||
|
|
||||||
|
A user may set ``ZLIB_ROOT`` to a zlib installation root to tell this
|
||||||
|
module where to look.
|
||||||
|
#]=======================================================================]
|
||||||
|
|
||||||
|
set(_ZLIB_SEARCHES)
|
||||||
|
|
||||||
|
# Search ZLIB_ROOT first if it is set.
|
||||||
|
if(ZLIB_ROOT)
|
||||||
|
set(_ZLIB_SEARCH_ROOT PATHS ${ZLIB_ROOT} NO_DEFAULT_PATH)
|
||||||
|
list(APPEND _ZLIB_SEARCHES _ZLIB_SEARCH_ROOT)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Normal search.
|
||||||
|
set(_ZLIB_x86 "(x86)")
|
||||||
|
set(_ZLIB_SEARCH_NORMAL
|
||||||
|
PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Zlib;InstallPath]"
|
||||||
|
"$ENV{ProgramFiles}/zlib"
|
||||||
|
"$ENV{ProgramFiles${_ZLIB_x86}}/zlib")
|
||||||
|
unset(_ZLIB_x86)
|
||||||
|
list(APPEND _ZLIB_SEARCHES _ZLIB_SEARCH_NORMAL)
|
||||||
|
|
||||||
|
set(ZLIB_NAMES z zlib zdll zlib1 zlibstatic)
|
||||||
|
set(ZLIB_NAMES_DEBUG zd zlibd zdlld zlibd1 zlib1d zlibstaticd)
|
||||||
|
|
||||||
|
# Try each search configuration.
|
||||||
|
foreach(search ${_ZLIB_SEARCHES})
|
||||||
|
find_path(ZLIB_INCLUDE_DIR NAMES zlib.h ${${search}} PATH_SUFFIXES include)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
# Allow ZLIB_LIBRARY to be set manually, as the location of the zlib library
|
||||||
|
if(NOT ZLIB_LIBRARY)
|
||||||
|
foreach(search ${_ZLIB_SEARCHES})
|
||||||
|
find_library(ZLIB_LIBRARY_RELEASE NAMES ${ZLIB_NAMES} NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib)
|
||||||
|
find_library(ZLIB_LIBRARY_DEBUG NAMES ${ZLIB_NAMES_DEBUG} NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
|
||||||
|
select_library_configurations(ZLIB)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
unset(ZLIB_NAMES)
|
||||||
|
unset(ZLIB_NAMES_DEBUG)
|
||||||
|
|
||||||
|
mark_as_advanced(ZLIB_INCLUDE_DIR)
|
||||||
|
|
||||||
|
if(ZLIB_INCLUDE_DIR AND EXISTS "${ZLIB_INCLUDE_DIR}/zlib.h")
|
||||||
|
file(STRINGS "${ZLIB_INCLUDE_DIR}/zlib.h" ZLIB_H REGEX "^#define ZLIB_VERSION \"[^\"]*\"$")
|
||||||
|
|
||||||
|
string(REGEX REPLACE "^.*ZLIB_VERSION \"([0-9]+).*$" "\\1" ZLIB_VERSION_MAJOR "${ZLIB_H}")
|
||||||
|
string(REGEX REPLACE "^.*ZLIB_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" ZLIB_VERSION_MINOR "${ZLIB_H}")
|
||||||
|
string(REGEX REPLACE "^.*ZLIB_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" ZLIB_VERSION_PATCH "${ZLIB_H}")
|
||||||
|
set(ZLIB_VERSION_STRING "${ZLIB_VERSION_MAJOR}.${ZLIB_VERSION_MINOR}.${ZLIB_VERSION_PATCH}")
|
||||||
|
|
||||||
|
# only append a TWEAK version if it exists:
|
||||||
|
set(ZLIB_VERSION_TWEAK "")
|
||||||
|
if( "${ZLIB_H}" MATCHES "ZLIB_VERSION \"[0-9]+\\.[0-9]+\\.[0-9]+\\.([0-9]+)")
|
||||||
|
set(ZLIB_VERSION_TWEAK "${CMAKE_MATCH_1}")
|
||||||
|
string(APPEND ZLIB_VERSION_STRING ".${ZLIB_VERSION_TWEAK}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(ZLIB_MAJOR_VERSION "${ZLIB_VERSION_MAJOR}")
|
||||||
|
set(ZLIB_MINOR_VERSION "${ZLIB_VERSION_MINOR}")
|
||||||
|
set(ZLIB_PATCH_VERSION "${ZLIB_VERSION_PATCH}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
|
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(ZLIB REQUIRED_VARS ZLIB_LIBRARY ZLIB_INCLUDE_DIR
|
||||||
|
VERSION_VAR ZLIB_VERSION_STRING)
|
||||||
|
|
||||||
|
if(ZLIB_FOUND)
|
||||||
|
set(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR})
|
||||||
|
|
||||||
|
if(NOT ZLIB_LIBRARIES)
|
||||||
|
set(ZLIB_LIBRARIES ${ZLIB_LIBRARY})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT TARGET ZLIB::ZLIB)
|
||||||
|
add_library(ZLIB::ZLIB UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(ZLIB::ZLIB PROPERTIES
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${ZLIB_INCLUDE_DIRS}")
|
||||||
|
|
||||||
|
if(ZLIB_LIBRARY_RELEASE)
|
||||||
|
set_property(TARGET ZLIB::ZLIB APPEND PROPERTY
|
||||||
|
IMPORTED_CONFIGURATIONS RELEASE)
|
||||||
|
set_target_properties(ZLIB::ZLIB PROPERTIES
|
||||||
|
IMPORTED_LOCATION_RELEASE "${ZLIB_LIBRARY_RELEASE}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(ZLIB_LIBRARY_DEBUG)
|
||||||
|
set_property(TARGET ZLIB::ZLIB APPEND PROPERTY
|
||||||
|
IMPORTED_CONFIGURATIONS DEBUG)
|
||||||
|
set_target_properties(ZLIB::ZLIB PROPERTIES
|
||||||
|
IMPORTED_LOCATION_DEBUG "${ZLIB_LIBRARY_DEBUG}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT ZLIB_LIBRARY_RELEASE AND NOT ZLIB_LIBRARY_DEBUG)
|
||||||
|
set_property(TARGET ZLIB::ZLIB APPEND PROPERTY
|
||||||
|
IMPORTED_LOCATION "${ZLIB_LIBRARY}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
|
@ -1,43 +0,0 @@
|
||||||
// Copyright (c) 2014-2019, The Monero Project
|
|
||||||
//
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without modification, are
|
|
||||||
// permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// 1. Redistributions of source code must retain the above copyright notice, this list of
|
|
||||||
// conditions and the following disclaimer.
|
|
||||||
//
|
|
||||||
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
|
||||||
// of conditions and the following disclaimer in the documentation and/or other
|
|
||||||
// materials provided with the distribution.
|
|
||||||
//
|
|
||||||
// 3. Neither the name of the copyright holder nor the names of its contributors may be
|
|
||||||
// used to endorse or promote products derived from this software without specific
|
|
||||||
// prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
|
||||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
|
||||||
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
|
||||||
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <iostream>
|
|
||||||
#include <google/protobuf/message.h>
|
|
||||||
#include <google/protobuf/unknown_field_set.h>
|
|
||||||
#include "test-protobuf.pb.h"
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
|
||||||
google::protobuf::UnknownFieldSet ufs;
|
|
||||||
ufs.ClearAndFreeMemory();
|
|
||||||
|
|
||||||
Success sc;
|
|
||||||
sc.set_message("test");
|
|
||||||
sc.SerializeToOstream(&std::cerr);
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
syntax = "proto2";
|
|
||||||
|
|
||||||
import "google/protobuf/descriptor.proto";
|
|
||||||
|
|
||||||
message Success {
|
|
||||||
optional string message = 1;
|
|
||||||
}
|
|
|
@ -1,34 +0,0 @@
|
||||||
// Copyright (c) 2014-2019, The Monero Project
|
|
||||||
//
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without modification, are
|
|
||||||
// permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// 1. Redistributions of source code must retain the above copyright notice, this list of
|
|
||||||
// conditions and the following disclaimer.
|
|
||||||
//
|
|
||||||
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
|
||||||
// of conditions and the following disclaimer in the documentation and/or other
|
|
||||||
// materials provided with the distribution.
|
|
||||||
//
|
|
||||||
// 3. Neither the name of the copyright holder nor the names of its contributors may be
|
|
||||||
// used to endorse or promote products derived from this software without specific
|
|
||||||
// prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
|
||||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
|
||||||
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
|
||||||
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
static_assert(1, "FAIL");
|
|
||||||
int main(int argc, char *argv[]) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,34 +0,0 @@
|
||||||
// Copyright (c) 2014-2019, The Monero Project
|
|
||||||
//
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without modification, are
|
|
||||||
// permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// 1. Redistributions of source code must retain the above copyright notice, this list of
|
|
||||||
// conditions and the following disclaimer.
|
|
||||||
//
|
|
||||||
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
|
||||||
// of conditions and the following disclaimer in the documentation and/or other
|
|
||||||
// materials provided with the distribution.
|
|
||||||
//
|
|
||||||
// 3. Neither the name of the copyright holder nor the names of its contributors may be
|
|
||||||
// used to endorse or promote products derived from this software without specific
|
|
||||||
// prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
|
||||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
|
||||||
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
|
||||||
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
static_assert(1, "FAIL");
|
|
||||||
int main(int argc, char *argv[]) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -8,20 +8,35 @@ rm -rf $APPDIR
|
||||||
mkdir -p "$APPDIR"
|
mkdir -p "$APPDIR"
|
||||||
mkdir -p "$APPDIR/usr/share/applications/"
|
mkdir -p "$APPDIR/usr/share/applications/"
|
||||||
mkdir -p "$APPDIR/usr/bin"
|
mkdir -p "$APPDIR/usr/bin"
|
||||||
|
mkdir -p "$APPDIR/usr/lib"
|
||||||
|
mkdir -p "$APPDIR/usr/plugins"
|
||||||
|
|
||||||
cp "$PWD/../src/assets/feather.desktop" "$APPDIR/usr/share/applications/feather.desktop"
|
cp "$PWD/../src/assets/feather.desktop" "$APPDIR/usr/share/applications/feather.desktop"
|
||||||
cp "$PWD/../src/assets/images/appicons/64x64.png" "$APPDIR/feather.png"
|
cp "$PWD/../src/assets/images/appicons/64x64.png" "$APPDIR/feather.png"
|
||||||
cp "$PWD/bin/feather" "$APPDIR/usr/bin/feather"
|
cp "$PWD/bin/feather" "$APPDIR/usr/bin/feather"
|
||||||
|
chmod +x "$APPDIR/usr/bin/feather"
|
||||||
|
|
||||||
LD_LIBRARY_PATH=/usr/local/lib /linuxdeployqt/squashfs-root/AppRun feather.AppDir/usr/share/applications/feather.desktop -bundle-non-qt-libs
|
export LD_LIBRARY_PATH=/usr/local/lib/x86_64-linux-gnu/:/usr/local/lib/$LD_LIBRARY_PATH
|
||||||
|
linuxdeployqt feather.AppDir/usr/share/applications/feather.desktop -bundle-non-qt-libs
|
||||||
|
|
||||||
|
pushd feather.AppDir/usr/plugins
|
||||||
|
ln -s ../lib/ gstreamer
|
||||||
|
popd
|
||||||
|
|
||||||
|
cp -r /usr/lib/x86_64-linux-gnu/gstreamer-1.0/* feather.AppDir/usr/plugins/gstreamer/
|
||||||
|
cp /usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-plugin-scanner feather.AppDir/usr/plugins/gstreamer/
|
||||||
|
|
||||||
|
rm "$APPDIR/AppRun"
|
||||||
|
cp "$PWD/../contrib/AppImage/AppRun" "$APPDIR/"
|
||||||
|
chmod +x "$APPDIR/AppRun"
|
||||||
|
|
||||||
find feather.AppDir/ -exec touch -h -a -m -t 202101010100.00 {} \;
|
find feather.AppDir/ -exec touch -h -a -m -t 202101010100.00 {} \;
|
||||||
|
|
||||||
# Manually create AppImage (reproducibly)
|
# Manually create AppImage (reproducibly)
|
||||||
|
|
||||||
# download runtime
|
# download runtime
|
||||||
wget -nc https://github.com/AppImage/AppImageKit/releases/download/12/runtime-x86_64
|
wget -nc https://github.com/AppImage/AppImageKit/releases/download/13/runtime-x86_64
|
||||||
echo "24da8e0e149b7211cbfb00a545189a1101cb18d1f27d4cfc1895837d2c30bc30 runtime-x86_64" | sha256sum -c
|
echo "328e0d745c5c6817048c27bc3e8314871703f8f47ffa81a37cb06cd95a94b323 runtime-x86_64" | sha256sum -c
|
||||||
|
|
||||||
mksquashfs feather.AppDir feather.squashfs -info -root-owned -no-xattrs -noappend -fstime 0
|
mksquashfs feather.AppDir feather.squashfs -info -root-owned -no-xattrs -noappend -fstime 0
|
||||||
# mksquashfs writes a timestamp to the header
|
# mksquashfs writes a timestamp to the header
|
||||||
|
|
53
contrib/build-deps/Dockerfile.linux-builddeps
Normal file
53
contrib/build-deps/Dockerfile.linux-builddeps
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
FROM ubuntu:18.04
|
||||||
|
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
WORKDIR /deps
|
||||||
|
|
||||||
|
COPY sources.list /etc/apt/sources.list
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y wget xz-utils nano
|
||||||
|
|
||||||
|
COPY get-packages.sh .
|
||||||
|
RUN bash get-packages.sh
|
||||||
|
|
||||||
|
RUN apt-get install -y --no-install-recommends --no-install-suggests --reinstall --download-only \
|
||||||
|
# build tools
|
||||||
|
software-properties-common python3 build-essential automake libtool-bin git \
|
||||||
|
# ninja
|
||||||
|
unzip \
|
||||||
|
# GStreamer plugins
|
||||||
|
libjpeg-dev libvpx-dev libvorbis-dev \
|
||||||
|
# fontconfig
|
||||||
|
autopoint gettext gperf libpng-dev \
|
||||||
|
# libxkbcommon
|
||||||
|
bison \
|
||||||
|
# Qt 5.15
|
||||||
|
# https://doc.qt.io/qt-5/linux-requirements.html
|
||||||
|
libx11-dev \
|
||||||
|
libx11-xcb-dev \
|
||||||
|
libxext-dev \
|
||||||
|
libxfixes-dev \
|
||||||
|
libxi-dev \
|
||||||
|
libxrender-dev \
|
||||||
|
libxcb1-dev \
|
||||||
|
libxcb-keysyms1-dev \
|
||||||
|
libxcb-image0-dev \
|
||||||
|
libxcb-icccm4-dev \
|
||||||
|
libxcb-xfixes0-dev \
|
||||||
|
libxcb-render-util0-dev \
|
||||||
|
libxcb-xinerama0-dev \
|
||||||
|
libxkbcommon-dev \
|
||||||
|
libxkbcommon-x11-dev \
|
||||||
|
xutils-dev \
|
||||||
|
libxcb-util-dev \
|
||||||
|
libxcb-xinput-dev \
|
||||||
|
# libwallet
|
||||||
|
# libudev.so is included in AppImage
|
||||||
|
libudev1 libudev-dev \
|
||||||
|
# GStreamer
|
||||||
|
gstreamer1.0-plugins-good \
|
||||||
|
libgstreamer1.0-dev \
|
||||||
|
libgstreamer-plugins-base1.0-dev \
|
||||||
|
# git dependency
|
||||||
|
libpsl5
|
17
contrib/build-deps/get-packages.sh
Normal file
17
contrib/build-deps/get-packages.sh
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
for target in bionic bionic-updates bionic-security
|
||||||
|
do
|
||||||
|
mkdir "$target"
|
||||||
|
pushd "$target"
|
||||||
|
target_uri="http://archive.ubuntu.com/ubuntu/dists/$target/"
|
||||||
|
wget "$target_uri/Release"
|
||||||
|
wget "$target_uri/Release.gpg"
|
||||||
|
for repo in main multiverse restricted universe
|
||||||
|
do
|
||||||
|
mkdir "$repo"
|
||||||
|
pushd "$repo"
|
||||||
|
wget "$target_uri/$repo/binary-amd64/Packages.xz"
|
||||||
|
popd
|
||||||
|
done
|
||||||
|
popd
|
||||||
|
done
|
9
contrib/build-deps/sources.list
Normal file
9
contrib/build-deps/sources.list
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
deb http://archive.ubuntu.com/ubuntu/ bionic main restricted
|
||||||
|
deb http://archive.ubuntu.com/ubuntu/ bionic-updates main restricted
|
||||||
|
deb http://archive.ubuntu.com/ubuntu/ bionic universe
|
||||||
|
deb http://archive.ubuntu.com/ubuntu/ bionic-updates universe
|
||||||
|
deb http://archive.ubuntu.com/ubuntu/ bionic multiverse
|
||||||
|
deb http://archive.ubuntu.com/ubuntu/ bionic-updates multiverse
|
||||||
|
deb http://security.ubuntu.com/ubuntu/ bionic-security main restricted
|
||||||
|
deb http://security.ubuntu.com/ubuntu/ bionic-security universe
|
||||||
|
deb http://security.ubuntu.com/ubuntu/ bionic-security multiverse
|
34
contrib/build-deps/verify-packages.sh
Normal file
34
contrib/build-deps/verify-packages.sh
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
cd /deps
|
||||||
|
for target in bionic bionic-updates bionic-security
|
||||||
|
do
|
||||||
|
pushd "$target"
|
||||||
|
|
||||||
|
# Verify Releases
|
||||||
|
gpg --no-default-keyring --keyring /usr/share/keyrings/ubuntu-archive-keyring.gpg --verify Release.gpg Release
|
||||||
|
|
||||||
|
for repo in main multiverse restricted universe
|
||||||
|
do
|
||||||
|
pushd "$repo"
|
||||||
|
|
||||||
|
# Verify Packages.xz
|
||||||
|
sha256=`cat ../Release | grep "$repo/binary-amd64/Packages.xz" | tail -n 1 | awk '{print $1}'`
|
||||||
|
echo "$sha256 Packages.xz" | sha256sum -c
|
||||||
|
|
||||||
|
xz -d -c Packages.xz >> ../../Packages-all
|
||||||
|
popd
|
||||||
|
done
|
||||||
|
popd
|
||||||
|
done
|
||||||
|
|
||||||
|
# Verify individual .deb files
|
||||||
|
cd /archives
|
||||||
|
for deb in *.deb; do
|
||||||
|
file_name=`echo $deb | sed 's/[0-9]*%3a//g'` # --download-only uses this version format sometimes, not sure what that is all about
|
||||||
|
sha256=`sed -n "/\/${file_name}$"'/{:start /SHA256: /!{N;b start};//p}' /deps/Packages-all | tail -n 1 | awk '{print $2}'`
|
||||||
|
echo "$sha256 $deb" | sha256sum -c
|
||||||
|
done
|
||||||
|
|
||||||
|
dpkg -i --force-depends *.deb
|
|
@ -5,11 +5,24 @@ set(CMAKE_AUTOUIC ON)
|
||||||
# pthread
|
# pthread
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
find_package(Qt5 REQUIRED COMPONENTS Core Widgets Gui Network Svg Xml WebSockets)
|
set(QT5_COMPONENTS
|
||||||
|
Core
|
||||||
|
Widgets
|
||||||
|
Gui
|
||||||
|
Network
|
||||||
|
Svg
|
||||||
|
Xml
|
||||||
|
WebSockets
|
||||||
|
)
|
||||||
|
|
||||||
|
if (WITH_SCANNER)
|
||||||
|
list(APPEND QT5_COMPONENTS
|
||||||
|
Multimedia
|
||||||
|
MultimediaWidgets)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_package(Qt5 REQUIRED COMPONENTS ${QT5_COMPONENTS})
|
||||||
|
|
||||||
add_subdirectory(libwalletqt)
|
|
||||||
add_subdirectory(model)
|
|
||||||
add_subdirectory(utils)
|
|
||||||
add_subdirectory(openpgp)
|
add_subdirectory(openpgp)
|
||||||
|
|
||||||
qt5_add_resources(RESOURCES assets.qrc)
|
qt5_add_resources(RESOURCES assets.qrc)
|
||||||
|
@ -46,6 +59,15 @@ file(GLOB SOURCE_FILES
|
||||||
"dialog/*.cpp"
|
"dialog/*.cpp"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (WITH_SCANNER)
|
||||||
|
file(GLOB SCANNER_FILES
|
||||||
|
"qrcode_scanner/*.h"
|
||||||
|
"qrcode_scanner/*.cpp")
|
||||||
|
|
||||||
|
list(APPEND SOURCE_FILES
|
||||||
|
${SCANNER_FILES})
|
||||||
|
endif()
|
||||||
|
|
||||||
if(TOR_BIN)
|
if(TOR_BIN)
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
set(ASSETS_TOR "assets_tor_macos.qrc")
|
set(ASSETS_TOR "assets_tor_macos.qrc")
|
||||||
|
@ -90,12 +112,9 @@ set_target_properties(feather PROPERTIES
|
||||||
|
|
||||||
set_property(TARGET feather PROPERTY RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
set_property(TARGET feather PROPERTY RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
||||||
|
|
||||||
target_include_directories(feather PUBLIC ${OPENGL_INCLUDE_DIR})
|
#target_include_directories(feather PUBLIC ${OPENGL_INCLUDE_DIR})
|
||||||
target_include_directories(feather PUBLIC ${Qt5Gui_PRIVATE_INCLUDE_DIRS})
|
target_include_directories(feather PUBLIC ${Qt5Gui_PRIVATE_INCLUDE_DIRS})
|
||||||
|
|
||||||
file(GLOB_RECURSE SRC_SOURCES *.cpp)
|
|
||||||
file(GLOB_RECURSE SRC_HEADERS *.h)
|
|
||||||
|
|
||||||
target_include_directories(feather PUBLIC
|
target_include_directories(feather PUBLIC
|
||||||
${CMAKE_BINARY_DIR}/src/feather_autogen/include
|
${CMAKE_BINARY_DIR}/src/feather_autogen/include
|
||||||
${CMAKE_SOURCE_DIR}/monero/include
|
${CMAKE_SOURCE_DIR}/monero/include
|
||||||
|
@ -124,6 +143,14 @@ target_include_directories(feather PUBLIC
|
||||||
${LIBZIP_INCLUDE_DIRS}
|
${LIBZIP_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if(WITH_SCANNER)
|
||||||
|
target_include_directories(feather PUBLIC
|
||||||
|
${ZBAR_INCLUDE_DIR}
|
||||||
|
${Qt5Multimedia_INCLUDE_DIRS}
|
||||||
|
${Qt5MultimediaWidgets_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(DONATE_BEG)
|
if(DONATE_BEG)
|
||||||
target_compile_definitions(feather PRIVATE DONATE_BEG=1)
|
target_compile_definitions(feather PRIVATE DONATE_BEG=1)
|
||||||
endif()
|
endif()
|
||||||
|
@ -144,6 +171,10 @@ if(XMRIG)
|
||||||
target_compile_definitions(feather PRIVATE HAS_XMRIG=1)
|
target_compile_definitions(feather PRIVATE HAS_XMRIG=1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(WITH_SCANNER)
|
||||||
|
target_compile_definitions(feather PRIVATE WITH_SCANNER=1)
|
||||||
|
endif()
|
||||||
|
|
||||||
# TODO: PLACEHOLDER
|
# TODO: PLACEHOLDER
|
||||||
target_compile_definitions(feather PRIVATE HAS_WEBSOCKET=1)
|
target_compile_definitions(feather PRIVATE HAS_WEBSOCKET=1)
|
||||||
|
|
||||||
|
@ -172,7 +203,14 @@ target_compile_definitions(feather
|
||||||
${Qt5Svg_DEFINITIONS}
|
${Qt5Svg_DEFINITIONS}
|
||||||
${Qt5Xml_DEFINITIONS}
|
${Qt5Xml_DEFINITIONS}
|
||||||
${Qt5WebSockets_DEFINITIONS}
|
${Qt5WebSockets_DEFINITIONS}
|
||||||
|
)
|
||||||
|
|
||||||
|
if (WITH_SCANNER)
|
||||||
|
target_compile_definitions(feather PUBLIC
|
||||||
|
${Qt5Multimedia_DEFINITIONS}
|
||||||
|
${Qt5MultimediaWidgets_DEFINITIONS}
|
||||||
)
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
|
||||||
|
|
||||||
|
@ -212,6 +250,14 @@ target_link_libraries(feather
|
||||||
${LIBZIP_LIBRARIES}
|
${LIBZIP_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (WITH_SCANNER)
|
||||||
|
target_link_libraries(feather
|
||||||
|
Qt5::Multimedia
|
||||||
|
Qt5::MultimediaWidgets
|
||||||
|
${ZBAR_LIBRARIES}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
target_link_libraries(feather
|
target_link_libraries(feather
|
||||||
KDMacTouchBar
|
KDMacTouchBar
|
||||||
|
@ -247,4 +293,4 @@ endif()
|
||||||
|
|
||||||
install(TARGETS feather
|
install(TARGETS feather
|
||||||
DESTINATION ${CMAKE_INSTALL_PREFIX}
|
DESTINATION ${CMAKE_INSTALL_PREFIX}
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
file(GLOB_RECURSE SRC_SOURCES *.cpp)
|
|
||||||
file(GLOB_RECURSE SRC_HEADERS *.h)
|
|
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
#if defined(Q_OS_WIN)
|
#if defined(Q_OS_WIN)
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include <vfw.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(Q_OS_LINUX) && defined(STATIC)
|
#if defined(Q_OS_LINUX) && defined(STATIC)
|
||||||
|
|
|
@ -74,6 +74,7 @@ MainWindow::MainWindow(WindowManager *windowManager, Wallet *wallet, QWidget *pa
|
||||||
connect(m_windowSettings, &Settings::preferredFiatCurrencyChanged, m_sendWidget, QOverload<>::of(&SendWidget::onPreferredFiatCurrencyChanged));
|
connect(m_windowSettings, &Settings::preferredFiatCurrencyChanged, m_sendWidget, QOverload<>::of(&SendWidget::onPreferredFiatCurrencyChanged));
|
||||||
connect(m_windowSettings, &Settings::amountPrecisionChanged, m_ctx.get(), &AppContext::onAmountPrecisionChanged);
|
connect(m_windowSettings, &Settings::amountPrecisionChanged, m_ctx.get(), &AppContext::onAmountPrecisionChanged);
|
||||||
connect(m_windowSettings, &Settings::skinChanged, this, &MainWindow::skinChanged);
|
connect(m_windowSettings, &Settings::skinChanged, this, &MainWindow::skinChanged);
|
||||||
|
QTimer::singleShot(1, [this]{this->updateWidgetIcons();});
|
||||||
|
|
||||||
connect(m_windowManager, &WindowManager::torSettingsChanged, m_ctx.get(), &AppContext::onTorSettingsChanged);
|
connect(m_windowManager, &WindowManager::torSettingsChanged, m_ctx.get(), &AppContext::onTorSettingsChanged);
|
||||||
connect(torManager(), &TorManager::connectionStateChanged, this, &MainWindow::onTorConnectionStateChanged);
|
connect(torManager(), &TorManager::connectionStateChanged, this, &MainWindow::onTorConnectionStateChanged);
|
||||||
|
@ -791,11 +792,14 @@ void MainWindow::menuVerifyTxProof() {
|
||||||
void MainWindow::skinChanged(const QString &skinName) {
|
void MainWindow::skinChanged(const QString &skinName) {
|
||||||
m_windowManager->changeSkin(skinName);
|
m_windowManager->changeSkin(skinName);
|
||||||
ColorScheme::updateFromWidget(this);
|
ColorScheme::updateFromWidget(this);
|
||||||
|
this->updateWidgetIcons();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::updateWidgetIcons() {
|
||||||
|
m_sendWidget->skinChanged();
|
||||||
#ifdef HAS_LOCALMONERO
|
#ifdef HAS_LOCALMONERO
|
||||||
m_localMoneroWidget->skinChanged();
|
m_localMoneroWidget->skinChanged();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ui->conversionWidget->skinChanged();
|
ui->conversionWidget->skinChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -204,6 +204,7 @@ private:
|
||||||
void updateTitle();
|
void updateTitle();
|
||||||
void donationNag();
|
void donationNag();
|
||||||
void updateRecentlyOpened(const QString &filename);
|
void updateRecentlyOpened(const QString &filename);
|
||||||
|
void updateWidgetIcons();
|
||||||
|
|
||||||
Ui::MainWindow *ui;
|
Ui::MainWindow *ui;
|
||||||
WindowManager *m_windowManager;
|
WindowManager *m_windowManager;
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
file(GLOB_RECURSE SRC_SOURCES *.cpp)
|
|
||||||
file(GLOB_RECURSE SRC_HEADERS *.h)
|
|
||||||
|
|
||||||
|
|
3
src/qrcode_scanner/CMakeLists.txt
Normal file
3
src/qrcode_scanner/CMakeLists.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
file(GLOB_RECURSE SRC_SOURCES *.cpp)
|
||||||
|
file(GLOB_RECURSE SRC_HEADERS *.h)
|
||||||
|
|
123
src/qrcode_scanner/QrCodeScanDialog.cpp
Normal file
123
src/qrcode_scanner/QrCodeScanDialog.cpp
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
// Copyright (c) 2020-2021, The Monero Project.
|
||||||
|
|
||||||
|
#include "QrCodeScanDialog.h"
|
||||||
|
#include "ui_QrCodeScanDialog.h"
|
||||||
|
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QtMultimedia/QCamera>
|
||||||
|
#include <QtMultimedia/QCameraInfo>
|
||||||
|
|
||||||
|
QrCodeScanDialog::QrCodeScanDialog(QWidget *parent)
|
||||||
|
: QDialog(parent)
|
||||||
|
, ui(new Ui::QrCodeScanDialog)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
this->setWindowTitle("Scan QR Code");
|
||||||
|
|
||||||
|
QPixmap pixmap = QPixmap(":/assets/images/warning.png");
|
||||||
|
ui->icon_warning->setPixmap(pixmap.scaledToWidth(32, Qt::SmoothTransformation));
|
||||||
|
|
||||||
|
m_cameras = QCameraInfo::availableCameras();
|
||||||
|
if (m_cameras.count() < 1) {
|
||||||
|
QMessageBox::warning(parent, "QR code scanner", "No available cameras found.");
|
||||||
|
this->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const auto &camera : m_cameras) {
|
||||||
|
ui->combo_camera->addItem(camera.deviceName());
|
||||||
|
}
|
||||||
|
|
||||||
|
connect(ui->combo_camera, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &QrCodeScanDialog::onCameraSwitched);
|
||||||
|
|
||||||
|
this->onCameraSwitched(0);
|
||||||
|
|
||||||
|
m_thread = new QrScanThread(this);
|
||||||
|
m_thread->start();
|
||||||
|
|
||||||
|
connect(m_thread, &QrScanThread::decoded, this, &QrCodeScanDialog::onDecoded);
|
||||||
|
connect(m_thread, &QrScanThread::notifyError, this, &QrCodeScanDialog::notifyError);
|
||||||
|
|
||||||
|
connect(&m_imageTimer, &QTimer::timeout, this, &QrCodeScanDialog::takeImage);
|
||||||
|
m_imageTimer.start(500);
|
||||||
|
}
|
||||||
|
|
||||||
|
void QrCodeScanDialog::onCameraSwitched(int index) {
|
||||||
|
if (index >= m_cameras.size()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_camera.reset(new QCamera(m_cameras.at(index)));
|
||||||
|
|
||||||
|
auto captureMode = QCamera::CaptureStillImage;
|
||||||
|
if (m_camera->isCaptureModeSupported(captureMode)) {
|
||||||
|
m_camera->setCaptureMode(captureMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
connect(m_camera.data(), QOverload<QCamera::Error>::of(&QCamera::error), this, &QrCodeScanDialog::displayCameraError);
|
||||||
|
connect(m_camera.data(), &QCamera::statusChanged, [this](QCamera::Status status){
|
||||||
|
bool unloaded = (status == QCamera::Status::UnloadedStatus);
|
||||||
|
ui->frame_unavailable->setVisible(unloaded);
|
||||||
|
});
|
||||||
|
|
||||||
|
m_imageCapture.reset(new QCameraImageCapture(m_camera.data()));
|
||||||
|
if (!m_imageCapture->isCaptureDestinationSupported(QCameraImageCapture::CaptureToBuffer)) {
|
||||||
|
qDebug() << "Capture to buffer is NOT supported";
|
||||||
|
}
|
||||||
|
|
||||||
|
m_imageCapture->setCaptureDestination(QCameraImageCapture::CaptureToBuffer);
|
||||||
|
|
||||||
|
connect(m_imageCapture.data(), &QCameraImageCapture::imageAvailable, this, &QrCodeScanDialog::processAvailableImage);
|
||||||
|
connect(m_imageCapture.data(), QOverload<int, QCameraImageCapture::Error, const QString &>::of(&QCameraImageCapture::error),
|
||||||
|
this, &QrCodeScanDialog::displayCaptureError);
|
||||||
|
|
||||||
|
m_camera->setViewfinder(ui->viewfinder);
|
||||||
|
m_camera->start();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QrCodeScanDialog::displayCaptureError(int id, const QCameraImageCapture::Error error, const QString &errorString)
|
||||||
|
{
|
||||||
|
Q_UNUSED(id);
|
||||||
|
Q_UNUSED(error);
|
||||||
|
QMessageBox::warning(this, "Image Capture Error", errorString);
|
||||||
|
}
|
||||||
|
|
||||||
|
void QrCodeScanDialog::displayCameraError()
|
||||||
|
{
|
||||||
|
QMessageBox::warning(this, "Camera Error", m_camera->errorString());
|
||||||
|
}
|
||||||
|
|
||||||
|
void QrCodeScanDialog::processAvailableImage(int id, const QVideoFrame &frame) {
|
||||||
|
Q_UNUSED(id);
|
||||||
|
QImage img = frame.image();
|
||||||
|
img.convertTo(QImage::Format_RGB32);
|
||||||
|
m_thread->addImage(img);
|
||||||
|
}
|
||||||
|
|
||||||
|
void QrCodeScanDialog::takeImage()
|
||||||
|
{
|
||||||
|
if (m_imageCapture->isReadyForCapture()) {
|
||||||
|
m_imageCapture->capture();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void QrCodeScanDialog::onDecoded(int type, const QString &data) {
|
||||||
|
decodedString = data;
|
||||||
|
this->accept();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QrCodeScanDialog::notifyError(const QString &msg) {
|
||||||
|
qDebug() << "QrScanner error: " << msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
QrCodeScanDialog::~QrCodeScanDialog()
|
||||||
|
{
|
||||||
|
m_thread->stop();
|
||||||
|
m_thread->quit();
|
||||||
|
if (!m_thread->wait(5000))
|
||||||
|
{
|
||||||
|
m_thread->terminate();
|
||||||
|
m_thread->wait();
|
||||||
|
}
|
||||||
|
delete ui;
|
||||||
|
}
|
50
src/qrcode_scanner/QrCodeScanDialog.h
Normal file
50
src/qrcode_scanner/QrCodeScanDialog.h
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
// Copyright (c) 2020-2021, The Monero Project.
|
||||||
|
|
||||||
|
#ifndef FEATHER_QRCODESCANDIALOG_H
|
||||||
|
#define FEATHER_QRCODESCANDIALOG_H
|
||||||
|
|
||||||
|
#include <QDialog>
|
||||||
|
#include <QCamera>
|
||||||
|
#include <QCameraImageCapture>
|
||||||
|
#include <QTimer>
|
||||||
|
#include <QVideoFrame>
|
||||||
|
|
||||||
|
#include "QrScanThread.h"
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class QrCodeScanDialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
class QrCodeScanDialog : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit QrCodeScanDialog(QWidget *parent);
|
||||||
|
~QrCodeScanDialog() override;
|
||||||
|
|
||||||
|
QString decodedString = "";
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void onCameraSwitched(int index);
|
||||||
|
void onDecoded(int type, const QString &data);
|
||||||
|
void notifyError(const QString &msg);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void processAvailableImage(int id, const QVideoFrame &frame);
|
||||||
|
void displayCaptureError(int, QCameraImageCapture::Error, const QString &errorString);
|
||||||
|
void displayCameraError();
|
||||||
|
void takeImage();
|
||||||
|
|
||||||
|
Ui::QrCodeScanDialog *ui;
|
||||||
|
|
||||||
|
QScopedPointer<QCamera> m_camera;
|
||||||
|
QScopedPointer<QCameraImageCapture> m_imageCapture;
|
||||||
|
|
||||||
|
QrScanThread *m_thread;
|
||||||
|
QTimer m_imageTimer;
|
||||||
|
QList<QCameraInfo> m_cameras;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //FEATHER_QRCODESCANDIALOG_H
|
110
src/qrcode_scanner/QrCodeScanDialog.ui
Normal file
110
src/qrcode_scanner/QrCodeScanDialog.ui
Normal file
|
@ -0,0 +1,110 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>QrCodeScanDialog</class>
|
||||||
|
<widget class="QDialog" name="QrCodeScanDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>400</width>
|
||||||
|
<height>300</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QCameraViewfinder" name="viewfinder" native="true">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QFrame" name="frame_unavailable">
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Raised</enum>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="icon_warning">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>icon</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType">
|
||||||
|
<enum>QSizePolicy::Preferred</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>10</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Lost connection to camera. Please restart scan dialog.</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Camera:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="combo_camera"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>QCameraViewfinder</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header>qcameraviewfinder.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
96
src/qrcode_scanner/QrScanThread.cpp
Normal file
96
src/qrcode_scanner/QrScanThread.cpp
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
// Copyright (c) 2014-2020, The Monero Project.
|
||||||
|
|
||||||
|
#include "QrScanThread.h"
|
||||||
|
#include <QtGlobal>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
QrScanThread::QrScanThread(QObject *parent)
|
||||||
|
: QThread(parent)
|
||||||
|
, m_running(true)
|
||||||
|
{
|
||||||
|
m_scanner.set_handler(*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void QrScanThread::image_callback(zbar::Image &image)
|
||||||
|
{
|
||||||
|
qDebug() << "image_callback : Found Code ! " ;
|
||||||
|
for (zbar::Image::SymbolIterator sym = image.symbol_begin(); sym != image.symbol_end(); ++sym) {
|
||||||
|
if (!sym->get_count()) {
|
||||||
|
QString data = QString::fromStdString(sym->get_data());
|
||||||
|
emit decoded(sym->get_type(), data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void QrScanThread::processZImage(zbar::Image &image)
|
||||||
|
{
|
||||||
|
m_scanner.recycle_image(image);
|
||||||
|
zbar::Image tmp = image.convert(*(long*)"Y800");
|
||||||
|
m_scanner.scan(tmp);
|
||||||
|
image.set_symbols(tmp.get_symbols());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QrScanThread::zimageFromQImage(const QImage &qimg, zbar::Image &dst)
|
||||||
|
{
|
||||||
|
switch (qimg.format()) {
|
||||||
|
case QImage::Format_RGB32 :
|
||||||
|
case QImage::Format_ARGB32 :
|
||||||
|
case QImage::Format_ARGB32_Premultiplied :
|
||||||
|
break;
|
||||||
|
default :
|
||||||
|
qDebug() << "Format: " << qimg.format();
|
||||||
|
emit notifyError(QString("Invalid QImage Format !"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
unsigned int bpl( qimg.bytesPerLine() ), width( bpl / 4), height( qimg.height());
|
||||||
|
dst.set_size(width, height);
|
||||||
|
dst.set_format("BGR4");
|
||||||
|
unsigned long datalen = qimg.sizeInBytes();
|
||||||
|
dst.set_data(qimg.bits(), datalen);
|
||||||
|
if((width * 4 != bpl) || (width * height * 4 > datalen)){
|
||||||
|
emit notifyError(QString("QImage to Zbar::Image failed !"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QrScanThread::processQImage(const QImage &qimg)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
m_image = QSharedPointer<zbar::Image>(new zbar::Image());
|
||||||
|
if (!zimageFromQImage(qimg, *m_image))
|
||||||
|
return;
|
||||||
|
processZImage(*m_image);
|
||||||
|
}
|
||||||
|
catch(std::exception &e) {
|
||||||
|
qDebug() << "ERROR: " << e.what();
|
||||||
|
emit notifyError(e.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void QrScanThread::stop()
|
||||||
|
{
|
||||||
|
m_running = false;
|
||||||
|
m_waitCondition.wakeOne();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QrScanThread::addImage(const QImage &img)
|
||||||
|
{
|
||||||
|
QMutexLocker locker(&m_mutex);
|
||||||
|
m_queue.append(img);
|
||||||
|
m_waitCondition.wakeOne();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QrScanThread::run()
|
||||||
|
{
|
||||||
|
while (m_running) {
|
||||||
|
QMutexLocker locker(&m_mutex);
|
||||||
|
while (m_queue.isEmpty() && m_running) {
|
||||||
|
m_waitCondition.wait(&m_mutex);
|
||||||
|
}
|
||||||
|
if (!m_queue.isEmpty()) {
|
||||||
|
processQImage(m_queue.takeFirst());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
42
src/qrcode_scanner/QrScanThread.h
Normal file
42
src/qrcode_scanner/QrScanThread.h
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
// Copyright (c) 2020, The Monero Project.
|
||||||
|
|
||||||
|
#ifndef _QRSCANTHREAD_H_
|
||||||
|
#define _QRSCANTHREAD_H_
|
||||||
|
|
||||||
|
#include <QThread>
|
||||||
|
#include <QMutex>
|
||||||
|
#include <QWaitCondition>
|
||||||
|
#include <QEvent>
|
||||||
|
#include <QCamera>
|
||||||
|
#include <zbar.h>
|
||||||
|
|
||||||
|
class QrScanThread : public QThread, public zbar::Image::Handler
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
QrScanThread(QObject *parent = nullptr);
|
||||||
|
void addImage(const QImage &img);
|
||||||
|
virtual void stop();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void decoded(int type, const QString &data);
|
||||||
|
void notifyError(const QString &error, bool warning = false);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void run();
|
||||||
|
void processQImage(const QImage &);
|
||||||
|
void processZImage(zbar::Image &image);
|
||||||
|
virtual void image_callback(zbar::Image &image);
|
||||||
|
bool zimageFromQImage(const QImage&, zbar::Image &);
|
||||||
|
|
||||||
|
private:
|
||||||
|
zbar::ImageScanner m_scanner;
|
||||||
|
QSharedPointer<zbar::Image> m_image;
|
||||||
|
bool m_running;
|
||||||
|
QMutex m_mutex;
|
||||||
|
QWaitCondition m_waitCondition;
|
||||||
|
QList<QImage> m_queue;
|
||||||
|
};
|
||||||
|
#endif
|
|
@ -7,6 +7,12 @@
|
||||||
#include "ui_sendwidget.h"
|
#include "ui_sendwidget.h"
|
||||||
#include "constants.h"
|
#include "constants.h"
|
||||||
#include "utils/AppData.h"
|
#include "utils/AppData.h"
|
||||||
|
#include "Icons.h"
|
||||||
|
#include "ColorScheme.h"
|
||||||
|
|
||||||
|
#ifdef WITH_SCANNER
|
||||||
|
#include "qrcode_scanner/QrCodeScanDialog.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
SendWidget::SendWidget(QSharedPointer<AppContext> ctx, QWidget *parent)
|
SendWidget::SendWidget(QSharedPointer<AppContext> ctx, QWidget *parent)
|
||||||
: QWidget(parent)
|
: QWidget(parent)
|
||||||
|
@ -26,6 +32,7 @@ SendWidget::SendWidget(QSharedPointer<AppContext> ctx, QWidget *parent)
|
||||||
connect(m_ctx.get(), &AppContext::openAliasResolved, this, &SendWidget::onOpenAliasResolved);
|
connect(m_ctx.get(), &AppContext::openAliasResolved, this, &SendWidget::onOpenAliasResolved);
|
||||||
connect(m_ctx.get(), &AppContext::openAliasResolveError, this, &SendWidget::onOpenAliasResolveError);
|
connect(m_ctx.get(), &AppContext::openAliasResolveError, this, &SendWidget::onOpenAliasResolveError);
|
||||||
|
|
||||||
|
connect(ui->btnScan, &QPushButton::clicked, this, &SendWidget::scanClicked);
|
||||||
connect(ui->btnSend, &QPushButton::clicked, this, &SendWidget::sendClicked);
|
connect(ui->btnSend, &QPushButton::clicked, this, &SendWidget::sendClicked);
|
||||||
connect(ui->btnClear, &QPushButton::clicked, this, &SendWidget::clearClicked);
|
connect(ui->btnClear, &QPushButton::clicked, this, &SendWidget::clearClicked);
|
||||||
connect(ui->btnMax, &QPushButton::clicked, this, &SendWidget::btnMaxClicked);
|
connect(ui->btnMax, &QPushButton::clicked, this, &SendWidget::btnMaxClicked);
|
||||||
|
@ -103,6 +110,17 @@ void SendWidget::fillAddress(const QString &address) {
|
||||||
ui->lineAddress->moveCursor(QTextCursor::Start);
|
ui->lineAddress->moveCursor(QTextCursor::Start);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SendWidget::scanClicked() {
|
||||||
|
#ifdef WITH_SCANNER
|
||||||
|
auto *dialog = new QrCodeScanDialog(this);
|
||||||
|
dialog->exec();
|
||||||
|
ui->lineAddress->setText(dialog->decodedString);
|
||||||
|
dialog->deleteLater();
|
||||||
|
#else
|
||||||
|
QMessageBox::warning(this, "QR scanner", "Feather was built without webcam QR scanner support.");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void SendWidget::sendClicked() {
|
void SendWidget::sendClicked() {
|
||||||
if (!m_ctx->wallet->isConnected()) {
|
if (!m_ctx->wallet->isConnected()) {
|
||||||
QMessageBox::warning(this, "Error", "Unable to create transaction:\n\n"
|
QMessageBox::warning(this, "Error", "Unable to create transaction:\n\n"
|
||||||
|
@ -276,6 +294,14 @@ void SendWidget::onPreferredFiatCurrencyChanged() {
|
||||||
this->setupComboBox();
|
this->setupComboBox();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SendWidget::skinChanged() {
|
||||||
|
if (ColorScheme::hasDarkBackground(this)) {
|
||||||
|
ui->btnScan->setIcon(icons()->icon("camera_white.png"));
|
||||||
|
} else {
|
||||||
|
ui->btnScan->setIcon(icons()->icon("camera_dark.png"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
SendWidget::~SendWidget() {
|
SendWidget::~SendWidget() {
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,8 @@ public:
|
||||||
~SendWidget() override;
|
~SendWidget() override;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
void skinChanged();
|
||||||
|
void scanClicked();
|
||||||
void sendClicked();
|
void sendClicked();
|
||||||
void clearClicked();
|
void clearClicked();
|
||||||
void aliasClicked();
|
void aliasClicked();
|
||||||
|
|
|
@ -52,6 +52,11 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||||
|
<property name="spacing">
|
||||||
|
<number>10</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
<widget class="PayToEdit" name="lineAddress">
|
<widget class="PayToEdit" name="lineAddress">
|
||||||
<property name="horizontalScrollBarPolicy">
|
<property name="horizontalScrollBarPolicy">
|
||||||
<enum>Qt::ScrollBarAlwaysOff</enum>
|
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||||
|
@ -64,6 +69,35 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType">
|
||||||
|
<enum>QSizePolicy::Preferred</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="btnScan">
|
||||||
|
<property name="text">
|
||||||
|
<string>Scan</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="HelpLabel" name="label_Description">
|
<widget class="HelpLabel" name="label_Description">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
@ -208,6 +242,17 @@
|
||||||
<header>widgets/PayToEdit.h</header>
|
<header>widgets/PayToEdit.h</header>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
|
<tabstops>
|
||||||
|
<tabstop>lineAddress</tabstop>
|
||||||
|
<tabstop>lineDescription</tabstop>
|
||||||
|
<tabstop>lineAmount</tabstop>
|
||||||
|
<tabstop>comboCurrencySelection</tabstop>
|
||||||
|
<tabstop>btnMax</tabstop>
|
||||||
|
<tabstop>btn_openAlias</tabstop>
|
||||||
|
<tabstop>btnClear</tabstop>
|
||||||
|
<tabstop>btnSend</tabstop>
|
||||||
|
<tabstop>btnScan</tabstop>
|
||||||
|
</tabstops>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections/>
|
<connections/>
|
||||||
<slots>
|
<slots>
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
file(GLOB_RECURSE SRC_SOURCES *.cpp)
|
|
||||||
file(GLOB_RECURSE SRC_HEADERS *.h)
|
|
|
@ -15,7 +15,7 @@ class ChildProcess : public QProcess {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit ChildProcess(QObject* parent = nullptr);
|
explicit ChildProcess(QObject* parent = nullptr);
|
||||||
~ChildProcess();
|
~ChildProcess() override;
|
||||||
protected:
|
protected:
|
||||||
void setupChildProcess() override;
|
void setupChildProcess() override;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue