chore: refactor Linux and macOS build/packaging steps
Replaces PR #105. Implement a `pkg-macos` target that ultimately results in `Status.dmg` being written to `pkg/`. Due to [limitations][limits] of the OpenSSL `.dylib`s in `/usr/lib/` on macOS, `libssl.a` and `libcrypto.a` are statically linked into `bin/nim_status_client` from a [Homebrew][brew] "bottle" that is compatible with macOS 10.13 (the oldest macOS version compatible with Qt v5.14). `pkg-macos` creates an `.app` bundle layout in `tmp/macos/dist` based partly on information in a very helpful [StackOverflow answer][so-answer]. Note the part of the answer (toward the end) that explains a problem with the working directory and how to fix it. That's the reason for the `nim_status_client.sh` script introduced in this commit (it gets copied into the bundle). It's also the reason for having `Info.plist` copied into the bundle before `macdeployqt` is run (see below) and then overwriting it with `Info.runner.plist` before creating the `.dmg` file. The app icons file `status-icon.icns` was taken from `deployment/macos/` in the [status-react][sr] repo. The [`macdeployqt`][macdeployqt] tool is used to copy the needed portions of Qt into the bundle; it automatically updates `rpath`, etc. so the `nim_status_client` executable in the bundle can locate the libs within the bundle. `macdeployqt` is run twice, for the "outer" and "inner" `.app` bundles, because of an apparent bug in `macdeployqt` that results in QtWebEngine related resources not being processed correctly on the first pass. This results in some bloat in the final bundle but it seems unavoidable at present. The [create-dmg][cdmg] tool is used to package the bundle into a `.dmg` file. There are two reasons for this: 1. It produces a nice looking icon for the `.dmg` that overlays the Status logo on an external disk icon. 2. `Info.plist` needs to be overwritten after running `macdeployqt` (see explanation above) but before creating the `.dmg` file. If we passed the `-dmg` cli option to `macdeployqt` to have it generate the `.dmg` file then it wouldn't be possible to overwrite `Info.plist`. So there is a cosmetic reason and a practical reason for using another tool. Probably the biggest downside is that `create-dmg` is implemented in Node.js so it needs to be installed with `npm`; that's the reason this commit introduces `package.json`, etc. Note that zero code from `node_modules` ends up in the `.app` bundle or the `.dmg` file. Code signing of the macOS `.app` bundle and `.dmg` is attempted if the environment variable `MACOS_CODESIGN_IDENT` is defined. In that case, the environment variable `MACOS_KEYCHAIN_OPT` may optionally be defined with the path to a preferred keychain database file. Refactor a number of sections in the Makefile for consistency's sake, e.g. the `appimage` target becomes `pkg-linux` and ultimately results in `NimStatusClient-x86_64.AppImage` being written to `pkg/`. Make a number of changes to bring the Linux packaging steps up-to-date and use the `-qmlimport` cli option of `linuxdeployqt` to simplify resolution of Qt plugins. Note that `make pkg` will correctly resolve to `make pkg-linux` or `make pkg-macos` depending on the OS in use. Consistently use lower-case "c" in the name of *components* directories and imports. [limits]: https://developer.apple.com/forums/thread/124782 [brew]: https://brew.sh/ [so-answer]: https://stackoverflow.com/a/3251285 [sr]: https://github.com/status-im/status-react/tree/develop/deployment/macos [macdeployqt]: https://doc.qt.io/qt-5/macos-deployment.html [cdmg]: https://github.com/sindresorhus/create-dmg
This commit is contained in:
parent
92862ef7ae
commit
ce7e6b8d51
|
@ -6,8 +6,18 @@ noBackup/
|
|||
*.qml.autosave
|
||||
.vscode
|
||||
bin/
|
||||
/bottles/
|
||||
pkg/
|
||||
vendor/.nimble
|
||||
*.AppImage
|
||||
tmp
|
||||
nimcache
|
||||
.DS_Store
|
||||
nim-status-client*.tgz
|
||||
node_modules
|
||||
npm-debug.log*
|
||||
npm-shrinkwrap.json
|
||||
/package/
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
yarn.lock
|
||||
|
|
2
AppRun
2
AppRun
|
@ -1,5 +1,5 @@
|
|||
#!/bin/bash
|
||||
APPDIR="$(dirname "$(readlink -f "${0}")")"
|
||||
export LD_LIBRARY_PATH=${APPDIR}/usr/lib/:$LD_LIBRARY_PATH
|
||||
export LD_LIBRARY_PATH="${APPDIR}/usr/lib/:${LD_LIBRARY_PATH}"
|
||||
|
||||
exec "${APPDIR}/usr/bin/nim_status_client" "$@"
|
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>Status Desktop</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>nim_status_client</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>status-icon.icns</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>im.Status.NimStatusClient</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>Status</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0.0</string>
|
||||
<key>IFMajorVersion</key>
|
||||
<integer>1</integer>
|
||||
<key>IFMinorVersion</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</plist>
|
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>Status Desktop</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>nim_status_client.sh</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>status-icon.icns</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>im.Status.NimStatusClient</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>Status</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0.0</string>
|
||||
<key>IFMajorVersion</key>
|
||||
<integer>1</integer>
|
||||
<key>IFMinorVersion</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</plist>
|
232
Makefile
232
Makefile
|
@ -15,10 +15,15 @@ BUILD_SYSTEM_DIR := vendor/nimbus-build-system
|
|||
|
||||
.PHONY: \
|
||||
all \
|
||||
appimage \
|
||||
bottles \
|
||||
bottles-dummy \
|
||||
bottles-macos \
|
||||
clean \
|
||||
deps \
|
||||
nim_status_client \
|
||||
pkg \
|
||||
pkg-linux \
|
||||
pkg-macos \
|
||||
run \
|
||||
update
|
||||
|
||||
|
@ -48,11 +53,52 @@ else
|
|||
detected_OS := $(strip $(shell uname))
|
||||
endif
|
||||
|
||||
ifeq ($(detected_OS), Darwin)
|
||||
BOTTLES_TARGET := bottles-macos
|
||||
PKG_TARGET := pkg-macos
|
||||
MACOSX_DEPLOYMENT_TARGET := 10.13
|
||||
export MACOSX_DEPLOYMENT_TARGET
|
||||
CGO_CFLAGS := -mmacosx-version-min=10.13
|
||||
export CGO_CFLAGS
|
||||
CFLAGS := -mmacosx-version-min=10.13
|
||||
export CFLAGS
|
||||
else
|
||||
BOTTLES_TARGET := bottles-dummy
|
||||
PKG_TARGET := pkg-linux
|
||||
endif
|
||||
|
||||
bottles: $(BOTTLES_TARGET)
|
||||
|
||||
bottles-dummy: ;
|
||||
|
||||
BOTTLE_OPENSSL := bottles/openssl/INSTALL_RECEIPT.json
|
||||
|
||||
$(BOTTLE_OPENSSL):
|
||||
rm -rf bottles/Downloads/openssl* bottles/openssl*
|
||||
mkdir -p bottles/Downloads
|
||||
cd bottles/Downloads && \
|
||||
wget -O openssl.tar.gz "https://bintray.com/homebrew/bottles/download_file?file_path=openssl%401.1-1.1.1g.high_sierra.bottle.tar.gz" && \
|
||||
tar xzf openssl* && \
|
||||
mv openssl@1.1/1.1.1g ../openssl
|
||||
|
||||
BOTTLE_PCRE := bottles/pcre/INSTALL_RECEIPT.json
|
||||
|
||||
$(BOTTLE_PCRE):
|
||||
rm -rf bottles/Downloads/pcre* bottles/pcre*
|
||||
mkdir -p bottles/Downloads
|
||||
cd bottles/Downloads && \
|
||||
wget -O pcre.tar.gz "https://bintray.com/homebrew/bottles/download_file?file_path=pcre-8.44.high_sierra.bottle.tar.gz" && \
|
||||
tar xzf pcre* && \
|
||||
mv pcre/8.44 ../pcre
|
||||
|
||||
bottles-macos: | $(BOTTLE_OPENSSL) $(BOTTLE_PCRE)
|
||||
rm -rf bottles/Downloads
|
||||
|
||||
ifeq ($(detected_OS), Darwin)
|
||||
NIM_PARAMS := $(NIM_PARAMS) -L:"-framework Foundation -framework Security -framework IOKit -framework CoreServices"
|
||||
endif
|
||||
|
||||
DOTHERSIDE := vendor/DOtherSide/lib/libDOtherSideStatic.a
|
||||
DOTHERSIDE := vendor/DOtherSide/build/lib/libDOtherSideStatic.a
|
||||
|
||||
# Qt5 dirs (we can't indent with tabs here)
|
||||
QT5_PCFILEDIR := $(shell pkg-config --variable=pcfiledir Qt5Core 2>/dev/null)
|
||||
|
@ -75,7 +121,7 @@ ifeq ($(QT5_PCFILEDIR),)
|
|||
endif
|
||||
export QT5_LIBDIR
|
||||
# order matters here, due to "-Wl,-as-needed"
|
||||
NIM_PARAMS += --passL:"$(DOTHERSIDE) $(shell PKG_CONFIG_PATH="$(QT5_PCFILEDIR)" pkg-config --libs Qt5Core Qt5Qml Qt5Gui Qt5Quick Qt5QuickControls2 Qt5Widgets)"
|
||||
NIM_PARAMS += --passL:"$(DOTHERSIDE) $(shell PKG_CONFIG_PATH="$(QT5_PCFILEDIR)" pkg-config --libs Qt5Core Qt5Qml Qt5Gui Qt5Quick Qt5QuickControls2 Qt5Widgets Qt5Svg)"
|
||||
|
||||
# TODO: control debug/release builds with a Make var
|
||||
# We need `-d:debug` to get Nim's default stack traces.
|
||||
|
@ -84,21 +130,17 @@ NIM_PARAMS += --outdir:./bin -d:debug
|
|||
CFLAGS += -g
|
||||
CXXFLAGS += -g
|
||||
|
||||
deps: | deps-common
|
||||
deps: | deps-common bottles
|
||||
|
||||
update: | update-common
|
||||
|
||||
APPIMAGETOOL := appimagetool-x86_64.AppImage
|
||||
|
||||
$(APPIMAGETOOL):
|
||||
wget https://github.com/AppImage/AppImageKit/releases/download/continuous/$(APPIMAGETOOL)
|
||||
chmod +x $(APPIMAGETOOL)
|
||||
|
||||
$(DOTHERSIDE): | deps
|
||||
echo -e $(BUILD_MSG) "DOtherSide"
|
||||
+ cd vendor/DOtherSide && \
|
||||
mkdir -p build && \
|
||||
cd build && \
|
||||
rm -f CMakeCache.txt && \
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_DOCS=OFF -DENABLE_TESTS=OFF -DENABLE_DYNAMIC_LIBS=OFF -DENABLE_STATIC_LIBS=ON . $(HANDLE_OUTPUT) && \
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_DOCS=OFF -DENABLE_TESTS=OFF -DENABLE_DYNAMIC_LIBS=OFF -DENABLE_STATIC_LIBS=ON .. $(HANDLE_OUTPUT) && \
|
||||
$(MAKE) VERBOSE=$(V) $(HANDLE_OUTPUT)
|
||||
|
||||
STATUSGO := vendor/status-go/build/bin/libstatus.a
|
||||
|
@ -112,47 +154,135 @@ nim_status_client: | $(DOTHERSIDE) $(STATUSGO) deps
|
|||
echo -e $(BUILD_MSG) "$@" && \
|
||||
$(ENV_SCRIPT) nim c $(NIM_PARAMS) --passL:"$(STATUSGO)" --passL:"-lm" src/nim_status_client.nim
|
||||
|
||||
_APPIMAGE_TOOL := appimagetool-x86_64.AppImage
|
||||
APPIMAGE_TOOL := tmp/linux/tools/$(_APPIMAGE_TOOL)
|
||||
|
||||
$(APPIMAGE_TOOL):
|
||||
rm -rf tmp/linux
|
||||
mkdir -p tmp/linux/tools
|
||||
wget https://github.com/AppImage/AppImageKit/releases/download/continuous/$(_APPIMAGE_TOOL)
|
||||
mv $(_APPIMAGE_TOOL) tmp/linux/tools/
|
||||
chmod +x $(APPIMAGE_TOOL)
|
||||
|
||||
APPIMAGE := pkg/NimStatusClient-x86_64.AppImage
|
||||
|
||||
$(APPIMAGE): nim_status_client $(APPIMAGE_TOOL) nim-status.desktop
|
||||
rm -rf pkg/*.AppImage
|
||||
mkdir -p tmp/linux/dist/usr/bin
|
||||
mkdir -p tmp/linux/dist/usr/lib
|
||||
mkdir -p tmp/linux/dist/usr/qml
|
||||
|
||||
# General Files
|
||||
cp bin/nim_status_client tmp/linux/dist/usr/bin
|
||||
cp nim-status.desktop tmp/linux/dist/.
|
||||
cp status.svg tmp/linux/dist/status.svg
|
||||
cp -R ui tmp/linux/dist/usr/.
|
||||
|
||||
echo -e $(BUILD_MSG) "AppImage"
|
||||
linuxdeployqt tmp/linux/dist/nim-status.desktop -no-translations -no-copy-copyright-files -qmldir=tmp/linux/dist/usr/ui -qmlimport=${QTDIR}/gcc_64/qml -bundle-non-qt-libs
|
||||
|
||||
rm tmp/linux/dist/AppRun
|
||||
cp AppRun tmp/linux/dist/.
|
||||
|
||||
mkdir -p pkg
|
||||
$(APPIMAGE_TOOL) tmp/linux/dist $(APPIMAGE)
|
||||
|
||||
DMG_TOOL := node_modules/.bin/create-dmg
|
||||
|
||||
$(DMG_TOOL):
|
||||
npm i
|
||||
|
||||
MACOS_OUTER_BUNDLE := tmp/macos/dist/Status.app
|
||||
MACOS_INNER_BUNDLE := $(MACOS_OUTER_BUNDLE)/Contents/Frameworks/QtWebEngineCore.framework/Versions/Current/Helpers/QtWebEngineProcess.app
|
||||
|
||||
DMG := pkg/Status.dmg
|
||||
|
||||
# it's not required to set MACOS_KEYCHAIN if MACOS_CODESIGN_IDENT can be found
|
||||
# in e.g. your login keychain; this environment variable is primarily useful
|
||||
# for CI; when specified MACOS_KEYCHAIN should be the path to a preferred
|
||||
# keychain database file
|
||||
ifneq ($(MACOS_KEYCHAIN),)
|
||||
MACOS_KEYCHAIN_OPT := --keychain "$(MACOS_KEYCHAIN)"
|
||||
endif
|
||||
|
||||
$(DMG): nim_status_client $(DMG_TOOL)
|
||||
rm -rf tmp/macos pkg/*.dmg
|
||||
mkdir -p $(MACOS_OUTER_BUNDLE)/Contents/MacOS
|
||||
mkdir -p $(MACOS_OUTER_BUNDLE)/Contents/Resources
|
||||
cp Info.plist $(MACOS_OUTER_BUNDLE)/Contents/
|
||||
cp bin/nim_status_client $(MACOS_OUTER_BUNDLE)/Contents/MacOS/
|
||||
cp nim_status_client.sh $(MACOS_OUTER_BUNDLE)/Contents/MacOS/
|
||||
chmod +x $(MACOS_OUTER_BUNDLE)/Contents/MacOS/nim_status_client.sh
|
||||
cp status-icon.icns $(MACOS_OUTER_BUNDLE)/Contents/Resources/
|
||||
cp -R ui $(MACOS_OUTER_BUNDLE)/Contents/
|
||||
|
||||
macdeployqt \
|
||||
$(MACOS_OUTER_BUNDLE) \
|
||||
-executable=$(MACOS_OUTER_BUNDLE)/Contents/MacOS/nim_status_client \
|
||||
-qmldir=ui
|
||||
cp Info.runner.plist $(MACOS_OUTER_BUNDLE)/Contents/Info.plist
|
||||
macdeployqt \
|
||||
$(MACOS_INNER_BUNDLE) \
|
||||
-executable=$(MACOS_INNER_BUNDLE)/Contents/MacOS/QtWebEngineProcess
|
||||
|
||||
# if MACOS_CODESIGN_IDENT is not set then the outer and inner .app
|
||||
# bundles are not signed
|
||||
[ -z "$(MACOS_CODESIGN_IDENT)" ] || \
|
||||
codesign \
|
||||
--sign "$(MACOS_CODESIGN_IDENT)" \
|
||||
$(MACOS_KEYCHAIN_OPT) \
|
||||
--options runtime \
|
||||
--deep \
|
||||
--force \
|
||||
--verbose=4 \
|
||||
$(MACOS_OUTER_BUNDLE)
|
||||
[ -z "$(MACOS_CODESIGN_IDENT)" ] || \
|
||||
codesign \
|
||||
--sign "$(MACOS_CODESIGN_IDENT)" \
|
||||
$(MACOS_KEYCHAIN_OPT) \
|
||||
--entitlements QtWebEngineProcess.plist \
|
||||
--options runtime \
|
||||
--deep \
|
||||
--force \
|
||||
--verbose=4 \
|
||||
$(MACOS_INNER_BUNDLE)
|
||||
|
||||
mkdir -p pkg
|
||||
# See: https://github.com/sindresorhus/create-dmg#dmg-icon
|
||||
# GraphicsMagick must be installed for create-dmg to make the custom
|
||||
# DMG icon based on app icon, but should otherwise work without it
|
||||
npx create-dmg \
|
||||
--identity="NOBODY" \
|
||||
$(MACOS_OUTER_BUNDLE) \
|
||||
pkg || true
|
||||
# `|| true` is used above because code signing will be done manually
|
||||
# below (to allow for MACOS_KEYCHAIN_OPT) but create-dmg doesn't have
|
||||
# an option to not attempt signing. To work around that limitation an
|
||||
# unlikely identity (NOBODY) is specified; this results in a non-zero
|
||||
# exit code even though the .dmg is created successfully (just not code
|
||||
# signed); if the above command failed to create a .dmg then the
|
||||
# following command should result in a non-zero exit code
|
||||
mv "`ls pkg/*.dmg`" pkg/Status.dmg
|
||||
|
||||
# if MACOS_CODESIGN_IDENT is not set then the .dmg is not signed
|
||||
[ -z "$(MACOS_CODESIGN_IDENT)" ] || \
|
||||
codesign \
|
||||
--sign "$(MACOS_CODESIGN_IDENT)" \
|
||||
$(MACOS_KEYCHAIN_OPT) \
|
||||
--verbose=4 \
|
||||
pkg/Status.dmg
|
||||
|
||||
pkg: $(PKG_TARGET)
|
||||
|
||||
pkg-linux: $(APPIMAGE)
|
||||
|
||||
pkg-macos: $(DMG)
|
||||
|
||||
clean: | clean-common
|
||||
rm -rf bin/* node_modules pkg/* tmp/* $(STATUSGO)
|
||||
+ $(MAKE) -C vendor/DOtherSide/build --no-print-directory clean
|
||||
|
||||
run:
|
||||
LD_LIBRARY_PATH="$(QT5_LIBDIR)" ./bin/nim_status_client
|
||||
|
||||
APPIMAGE := NimStatusClient-x86_64.AppImage
|
||||
|
||||
$(APPIMAGE): $(DEFAULT_TARGET) $(APPIMAGETOOL) nim-status.desktop
|
||||
rm -rf tmp/dist
|
||||
mkdir -p tmp/dist/usr/bin
|
||||
mkdir -p tmp/dist/usr/lib
|
||||
mkdir -p tmp/dist/usr/qml
|
||||
|
||||
# General Files
|
||||
cp bin/nim_status_client tmp/dist/usr/bin
|
||||
cp nim-status.desktop tmp/dist/.
|
||||
cp status.svg tmp/dist/status.svg
|
||||
cp -R ui tmp/dist/usr/.
|
||||
|
||||
# Libraries
|
||||
cp vendor/DOtherSide/build/lib/libDOtherSide* tmp/dist/usr/lib/.
|
||||
|
||||
# QML Plugins due to bug with linuxdeployqt finding qmlimportscanner
|
||||
# This list is obtained with qmlimportscanner -rootPath ui/ -importPath /opt/qt/5.12.6/gcc_64/qml/
|
||||
mkdir -p tmp/dist/usr/qml/Qt/labs/
|
||||
mkdir -p tmp/dist/usr/qml/QtQuick
|
||||
cp -R /opt/qt/5.12.6/gcc_64/qml/Qt/labs/platform tmp/dist/usr/qml/Qt/labs/.
|
||||
cp -R /opt/qt/5.12.6/gcc_64/qml/QtQuick.2 tmp/dist/usr/qml/.
|
||||
cp -R /opt/qt/5.12.6/gcc_64/qml/QtGraphicalEffects tmp/dist/usr/qml/.
|
||||
cp -R /opt/qt/5.12.6/gcc_64/qml/QtQuick/{Controls,Controls.2,Extras,Layouts,Templates.2,Window.2} tmp/dist/usr/qml/QtQuick/.
|
||||
|
||||
echo -e $(BUILD_MSG) "AppImage"
|
||||
linuxdeployqt tmp/dist/nim-status.desktop -no-translations -no-copy-copyright-files -qmldir=tmp/dist/usr/ui -bundle-non-qt-libs
|
||||
|
||||
rm tmp/dist/AppRun
|
||||
cp AppRun tmp/dist/.
|
||||
|
||||
./$(APPIMAGETOOL) tmp/dist
|
||||
|
||||
appimage: $(APPIMAGE)
|
||||
|
||||
clean: | clean-common
|
||||
rm -rf $(APPIMAGE) bin/* tmp/dist $(STATUSGO)
|
||||
+ $(MAKE) -C vendor/DOtherSide --no-print-directory clean
|
||||
|
||||
endif # "variables.mk" was not included
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.cs.disable-executable-page-protection</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,8 +1,11 @@
|
|||
#!/bin/bash
|
||||
|
||||
# This script assumes $PWD is the same dir in which this script is located
|
||||
|
||||
docker run -it --rm --device /dev/fuse \
|
||||
-v $PWD:/nim-status-client:Z \
|
||||
-v "${PWD}:/nim-status-client:Z" \
|
||||
-w /nim-status-client \
|
||||
--cap-add SYS_ADMIN \
|
||||
--privileged \
|
||||
a12e/docker-qt:5.12-gcc_64 \
|
||||
sh docker-linux-app-image.sh
|
||||
a12e/docker-qt:5.14-gcc_64 \
|
||||
./docker-linux-app-image.sh
|
||||
|
|
40
config.nims
40
config.nims
|
@ -6,28 +6,6 @@ if defined(release):
|
|||
else:
|
||||
switch("nimcache", "nimcache/debug/$projectName")
|
||||
|
||||
proc linkLib(name: string): string =
|
||||
var resLib = name
|
||||
|
||||
when defined(macosx):
|
||||
# In macOS Catalina, unversioned libraries may be broken stubs, so we need to
|
||||
# find a versioned one: https://github.com/status-im/nim-status-client/pull/209
|
||||
var matches: seq[string]
|
||||
for path in listFiles("/usr/lib"):
|
||||
# /usr/lib/libcrypto.0.9.8.dylib
|
||||
let file = path[9..^1]
|
||||
# libcrypto.0.9.8.dylib
|
||||
if file.startsWith("lib" & name) and file != "lib" & name & ".dylib":
|
||||
matches.add(path)
|
||||
matches.sort(order = SortOrder.Descending)
|
||||
if matches.len > 0:
|
||||
resLib = matches[0]
|
||||
# Passing "/usr/lib/libcrypto.44.dylib" directly to the linker works for
|
||||
# dynamic linking.
|
||||
return resLib
|
||||
|
||||
return "-l" & resLib
|
||||
|
||||
--threads:on
|
||||
--opt:speed # -O3
|
||||
--debugger:native # passes "-g" to the C compiler
|
||||
|
@ -36,16 +14,22 @@ proc linkLib(name: string): string =
|
|||
|
||||
if defined(macosx):
|
||||
--tlsEmulation:off
|
||||
switch("passL", "-lstdc++")
|
||||
# DYLD_LIBRARY_PATH doesn't seem to work with Qt5
|
||||
switch("passL", "-rpath" & " " & getEnv("QT5_LIBDIR"))
|
||||
switch("passL", "-lstdc++")
|
||||
# dynamically link these libs, since we're opting out of dlopen()
|
||||
switch("passL", linkLib("crypto"))
|
||||
switch("passL", linkLib("ssl"))
|
||||
# statically linke these libs
|
||||
switch("passL", "bottles/openssl/lib/libcrypto.a")
|
||||
switch("passL", "bottles/openssl/lib/libssl.a")
|
||||
switch("passL", "bottles/pcre/lib/libpcre.a")
|
||||
# https://code.videolan.org/videolan/VLCKit/-/issues/232
|
||||
switch("passL", "-Wl,-no_compact_unwind")
|
||||
# set the minimum supported macOS version to 10.13
|
||||
switch("passC", "-mmacosx-version-min=10.13")
|
||||
else:
|
||||
switch("passL", linkLib("crypto") & " " & linkLib("ssl")) # dynamically link these libs, since we're opting out of dlopen()
|
||||
switch("passL", "-Wl,-as-needed") # don't link libraries we're not actually using
|
||||
# dynamically link these libs, since we're opting out of dlopen()
|
||||
switch("passL", "-lcrypto")
|
||||
switch("passL", "-lssl")
|
||||
# don't link libraries we're not actually using
|
||||
switch("passL", "-Wl,-as-needed")
|
||||
|
||||
--define:chronicles_line_numbers # useful when debugging
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
|
||||
# Installing prerequisites
|
||||
# Probably should be part of a dockerfile
|
||||
sudo apt update
|
||||
sudo apt install -y software-properties-common
|
||||
sudo add-apt-repository -y ppa:git-core/ppa
|
||||
sudo apt update
|
||||
sudo apt install -y --fix-missing cmake build-essential git libpcre3-dev libssl-dev git
|
||||
|
||||
rm -Rf tmp
|
||||
make clean
|
||||
sudo apt install -y --fix-missing build-essential cmake git libpcre3-dev
|
||||
|
||||
# Installing GO
|
||||
# Probably should be part of a dockerfile
|
||||
wget https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz
|
||||
sudo tar -C /usr/local -xzf go1.14.2.linux-amd64.tar.gz
|
||||
rm ./go1.14.2.linux-amd64.tar.gz
|
||||
export PATH=$PATH:/usr/local/go/bin
|
||||
wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz
|
||||
sudo tar -C /usr/local -xzf go1.14.4.linux-amd64.tar.gz
|
||||
rm ./go1.14.4.linux-amd64.tar.gz
|
||||
export PATH="/usr/local/go/bin:${PATH}"
|
||||
|
||||
# the minor Qt version keeps getting updated inside the Docker image
|
||||
cd /nim-status-client/
|
||||
export PKG_CONFIG_PATH="$(echo /opt/qt/*/gcc_64/lib/pkgconfig)"
|
||||
export LD_LIBRARY_PATH="$(echo /opt/qt/*/gcc_64/lib/)"
|
||||
|
||||
make appimage
|
||||
|
||||
rm -Rf tmp
|
||||
# $QT_PATH and $QT_PLATFORM are provided by the docker image
|
||||
# $QT_PATH/$QT_VERSION/$QT_PLATFORM/bin is already prepended to $PATH
|
||||
# However $QT_VERSION is not exposed to environment so set it here
|
||||
export QT_VERSION=$(basename $(echo "${QT_PATH}/*"))
|
||||
export QTDIR="${QT_PATH}/${QT_VERSION}"
|
||||
# $OPENSSL_PREFIX is provided by the docker image
|
||||
export LIBRARY_PATH="${OPENSSL_PREFIX}/lib:${LIBRARY_PATH}"
|
||||
export LD_LIBRARY_PATH="${QTDIR}/${QT_PLATFORM}/lib:${LD_LIBRARY_PATH}"
|
||||
make clean; git clean -dfx && rm -rf vendor/*
|
||||
make pkg V=1
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/bash
|
||||
|
||||
cd "${0%/*}"
|
||||
./nim_status_client
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"name": "nim-status-client",
|
||||
"version": "0.0.0",
|
||||
"private": true,
|
||||
"files": [],
|
||||
"devDependencies": {
|
||||
"create-dmg": "5.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
}
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
|||
import QtQuick 2.13
|
||||
import "./Components"
|
||||
import "./components"
|
||||
import "../../../imports"
|
||||
import "../../../shared"
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ import QtQuick.Layouts 1.13
|
|||
import QtGraphicalEffects 1.13
|
||||
import "../../../imports"
|
||||
import "../../../shared"
|
||||
import "./Components"
|
||||
import "./components"
|
||||
|
||||
Item {
|
||||
property int selectedAccount: 0
|
||||
|
|
|
@ -4,7 +4,7 @@ import QtQuick.Controls 2.13
|
|||
//import Qt.labs.platform 1.1
|
||||
import "../../../imports"
|
||||
import "../../../shared"
|
||||
import "./Components"
|
||||
import "./components"
|
||||
|
||||
Item {
|
||||
function open() {
|
||||
|
|
|
@ -4,7 +4,7 @@ import QtQuick.Controls 2.13
|
|||
//import Qt.labs.platform 1.1
|
||||
import "../../../imports"
|
||||
import "../../../shared"
|
||||
import "./Components"
|
||||
import "./components"
|
||||
|
||||
Item {
|
||||
function open() {
|
||||
|
|
|
@ -2,7 +2,7 @@ import QtQuick 2.13
|
|||
import QtQuick.Controls 2.13
|
||||
import "../../../imports"
|
||||
import "../../../shared"
|
||||
import "./Components"
|
||||
import "./components"
|
||||
|
||||
ModalPopup {
|
||||
id: popup
|
||||
|
|
|
@ -24,7 +24,7 @@ Item {
|
|||
anchors.right: parent.right
|
||||
anchors.rightMargin: 16
|
||||
anchors.topMargin: 16
|
||||
source: "../../img/close.svg"
|
||||
source: "../../../../shared/img/close.svg"
|
||||
MouseArea {
|
||||
id: closeModalMouseArea
|
||||
cursorShape: Qt.PointingHandCursor
|
|
@ -27,7 +27,7 @@ SOURCES = *.qml \
|
|||
app/AppLayouts/Profile/Sections/*.qml \
|
||||
app/AppLayouts/Profile/Sections/Contacts/*.qml \
|
||||
app/AppLayouts/Wallet/*.qml \
|
||||
app/AppLayouts/Wallet/Components/*.qml \
|
||||
app/AppLayouts/Wallet/components/*.qml \
|
||||
app/AppLayouts/Wallet/data/*.qml \
|
||||
}
|
||||
|
||||
|
@ -108,17 +108,17 @@ DISTFILES += \
|
|||
app/AppLayouts/Wallet/AddCustomTokenModal.qml \
|
||||
app/AppLayouts/Wallet/AssetsTab.qml \
|
||||
app/AppLayouts/Wallet/CollectiblesTab.qml \
|
||||
app/AppLayouts/Wallet/Components/AccountSettingsModal.qml \
|
||||
app/AppLayouts/Wallet/Components/AddAccount.qml \
|
||||
app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml \
|
||||
app/AppLayouts/Wallet/Components/AddAccountWithSeed.qml \
|
||||
app/AppLayouts/Wallet/Components/AddWatchOnlyAccount \
|
||||
app/AppLayouts/Wallet/Components/AddWatchOnlyAccount.qml \
|
||||
app/AppLayouts/Wallet/Components/GenerateAccountModal.qml \
|
||||
app/AppLayouts/Wallet/Components/SendModalContent.qml \
|
||||
app/AppLayouts/Wallet/Components/SetCurrencyModalContent.qml \
|
||||
app/AppLayouts/Wallet/Components/TokenSettingsModalContent.qml \
|
||||
app/AppLayouts/Wallet/Components/qmldir \
|
||||
app/AppLayouts/Wallet/components/AccountSettingsModal.qml \
|
||||
app/AppLayouts/Wallet/components/AddAccount.qml \
|
||||
app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml \
|
||||
app/AppLayouts/Wallet/components/AddAccountWithSeed.qml \
|
||||
app/AppLayouts/Wallet/components/AddWatchOnlyAccount \
|
||||
app/AppLayouts/Wallet/components/AddWatchOnlyAccount.qml \
|
||||
app/AppLayouts/Wallet/components/GenerateAccountModal.qml \
|
||||
app/AppLayouts/Wallet/components/SendModalContent.qml \
|
||||
app/AppLayouts/Wallet/components/SetCurrencyModalContent.qml \
|
||||
app/AppLayouts/Wallet/components/TokenSettingsModalContent.qml \
|
||||
app/AppLayouts/Wallet/components/qmldir \
|
||||
app/AppLayouts/Wallet/HistoryTab.qml \
|
||||
app/AppLayouts/Profile/Sections/AboutContainer.qml \
|
||||
app/AppLayouts/Profile/Sections/AdvancedContainer.qml \
|
||||
|
@ -149,7 +149,6 @@ DISTFILES += \
|
|||
app/img/arrow-btn-inactive.svg \
|
||||
app/img/compass.svg \
|
||||
app/img/compassActive.svg \
|
||||
app/img/close.svg \
|
||||
app/img/group_chat.svg \
|
||||
app/img/hash.svg \
|
||||
app/img/message.svg \
|
||||
|
@ -211,5 +210,6 @@ DISTFILES += \
|
|||
shared/StyledTextEdit.qml \
|
||||
shared/StyledTextField.qml \
|
||||
shared/TextWithLabel.qml \
|
||||
shared/img/close.svg \
|
||||
shared/img/status-logo.png \
|
||||
shared/qmldir
|
||||
|
||||
|
|
|
@ -115,22 +115,22 @@
|
|||
<context>
|
||||
<name>AddAccount</name>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccount.qml" line="94"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccount.qml" line="94"/>
|
||||
<source>Generate an account</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccount.qml" line="101"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccount.qml" line="101"/>
|
||||
<source>Add a watch-only address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccount.qml" line="108"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccount.qml" line="108"/>
|
||||
<source>Enter a seed phrase</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccount.qml" line="115"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccount.qml" line="115"/>
|
||||
<source>Enter a private key</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -138,47 +138,47 @@
|
|||
<context>
|
||||
<name>AddAccountWithPrivateKey</name>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml" line="7"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml" line="7"/>
|
||||
<source>Add account from private key</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml" line="20"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml" line="20"/>
|
||||
<source>Enter your password…</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml" line="21"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml" line="21"/>
|
||||
<source>Password</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml" line="30"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml" line="30"/>
|
||||
<source>Paste the contents of your private key</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml" line="31"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml" line="31"/>
|
||||
<source>Private key</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml" line="39"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml" line="39"/>
|
||||
<source>Enter an account name...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml" line="40"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml" line="40"/>
|
||||
<source>Account name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml" line="48"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml" line="48"/>
|
||||
<source>Account color</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml" line="66"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml" line="66"/>
|
||||
<source>Add account ></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -186,42 +186,42 @@
|
|||
<context>
|
||||
<name>AddAccountWithSeed</name>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithSeed.qml" line="17"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithSeed.qml" line="17"/>
|
||||
<source>Add account with a seed phrase</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithSeed.qml" line="21"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithSeed.qml" line="21"/>
|
||||
<source>Enter your password…</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithSeed.qml" line="22"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithSeed.qml" line="22"/>
|
||||
<source>Password</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithSeed.qml" line="31"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithSeed.qml" line="31"/>
|
||||
<source>Enter your seed phrase, separate words with commas or spaces...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithSeed.qml" line="32"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithSeed.qml" line="32"/>
|
||||
<source>Seed phrase</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithSeed.qml" line="40"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithSeed.qml" line="40"/>
|
||||
<source>Enter an account name...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithSeed.qml" line="41"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithSeed.qml" line="41"/>
|
||||
<source>Account name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithSeed.qml" line="49"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithSeed.qml" line="49"/>
|
||||
<source>Account color</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -277,32 +277,32 @@
|
|||
<context>
|
||||
<name>AddWatchOnlyAccount</name>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddWatchOnlyAccount.qml" line="7"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddWatchOnlyAccount.qml" line="7"/>
|
||||
<source>Add a watch-only account</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddWatchOnlyAccount.qml" line="20"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddWatchOnlyAccount.qml" line="20"/>
|
||||
<source>Enter address...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddWatchOnlyAccount.qml" line="21"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddWatchOnlyAccount.qml" line="21"/>
|
||||
<source>Account address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddWatchOnlyAccount.qml" line="28"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddWatchOnlyAccount.qml" line="28"/>
|
||||
<source>Enter an account name...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddWatchOnlyAccount.qml" line="29"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddWatchOnlyAccount.qml" line="29"/>
|
||||
<source>Account name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddWatchOnlyAccount.qml" line="37"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddWatchOnlyAccount.qml" line="37"/>
|
||||
<source>Account color</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -396,32 +396,32 @@
|
|||
<context>
|
||||
<name>GenerateAccountModal</name>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/GenerateAccountModal.qml" line="7"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/GenerateAccountModal.qml" line="7"/>
|
||||
<source>Generate an account</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/GenerateAccountModal.qml" line="19"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/GenerateAccountModal.qml" line="19"/>
|
||||
<source>Enter your password…</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/GenerateAccountModal.qml" line="20"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/GenerateAccountModal.qml" line="20"/>
|
||||
<source>Password</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/GenerateAccountModal.qml" line="28"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/GenerateAccountModal.qml" line="28"/>
|
||||
<source>Enter an account name...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/GenerateAccountModal.qml" line="29"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/GenerateAccountModal.qml" line="29"/>
|
||||
<source>Account name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/GenerateAccountModal.qml" line="37"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/GenerateAccountModal.qml" line="37"/>
|
||||
<source>Account color</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -694,17 +694,17 @@
|
|||
<context>
|
||||
<name>SendModalContent</name>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/SendModalContent.qml" line="59"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/SendModalContent.qml" line="59"/>
|
||||
<source>Enter ETH</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/SendModalContent.qml" line="66"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/SendModalContent.qml" line="66"/>
|
||||
<source>Send from (account)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/SendModalContent.qml" line="79"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/SendModalContent.qml" line="79"/>
|
||||
<source>Send to</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -790,57 +790,57 @@
|
|||
<context>
|
||||
<name>TransactionModal</name>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="8"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="8"/>
|
||||
<source>Transaction Details</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="22"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="22"/>
|
||||
<source>9999 Confirmations</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="28"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="28"/>
|
||||
<source>When the transaction has 12 confirmations you can consider it settled.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="57"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="57"/>
|
||||
<source>Block</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="82"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="82"/>
|
||||
<source>Hash</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="109"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="109"/>
|
||||
<source>From</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="136"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="136"/>
|
||||
<source>To</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="163"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="163"/>
|
||||
<source>Gas limit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="188"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="188"/>
|
||||
<source>Gas price</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="213"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="213"/>
|
||||
<source>Gas used</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="238"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="238"/>
|
||||
<source>Nonce</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
|
|
@ -115,22 +115,22 @@
|
|||
<context>
|
||||
<name>AddAccount</name>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccount.qml" line="94"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccount.qml" line="94"/>
|
||||
<source>Generate an account</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccount.qml" line="101"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccount.qml" line="101"/>
|
||||
<source>Add a watch-only address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccount.qml" line="108"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccount.qml" line="108"/>
|
||||
<source>Enter a seed phrase</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccount.qml" line="115"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccount.qml" line="115"/>
|
||||
<source>Enter a private key</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -138,47 +138,47 @@
|
|||
<context>
|
||||
<name>AddAccountWithPrivateKey</name>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml" line="7"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml" line="7"/>
|
||||
<source>Add account from private key</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml" line="20"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml" line="20"/>
|
||||
<source>Enter your password…</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml" line="21"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml" line="21"/>
|
||||
<source>Password</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml" line="30"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml" line="30"/>
|
||||
<source>Paste the contents of your private key</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml" line="31"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml" line="31"/>
|
||||
<source>Private key</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml" line="39"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml" line="39"/>
|
||||
<source>Enter an account name...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml" line="40"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml" line="40"/>
|
||||
<source>Account name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml" line="48"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml" line="48"/>
|
||||
<source>Account color</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml" line="66"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml" line="66"/>
|
||||
<source>Add account ></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -186,42 +186,42 @@
|
|||
<context>
|
||||
<name>AddAccountWithSeed</name>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithSeed.qml" line="17"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithSeed.qml" line="17"/>
|
||||
<source>Add account with a seed phrase</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithSeed.qml" line="21"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithSeed.qml" line="21"/>
|
||||
<source>Enter your password…</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithSeed.qml" line="22"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithSeed.qml" line="22"/>
|
||||
<source>Password</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithSeed.qml" line="31"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithSeed.qml" line="31"/>
|
||||
<source>Enter your seed phrase, separate words with commas or spaces...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithSeed.qml" line="32"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithSeed.qml" line="32"/>
|
||||
<source>Seed phrase</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithSeed.qml" line="40"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithSeed.qml" line="40"/>
|
||||
<source>Enter an account name...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithSeed.qml" line="41"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithSeed.qml" line="41"/>
|
||||
<source>Account name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddAccountWithSeed.qml" line="49"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddAccountWithSeed.qml" line="49"/>
|
||||
<source>Account color</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -277,32 +277,32 @@
|
|||
<context>
|
||||
<name>AddWatchOnlyAccount</name>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddWatchOnlyAccount.qml" line="7"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddWatchOnlyAccount.qml" line="7"/>
|
||||
<source>Add a watch-only account</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddWatchOnlyAccount.qml" line="20"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddWatchOnlyAccount.qml" line="20"/>
|
||||
<source>Enter address...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddWatchOnlyAccount.qml" line="21"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddWatchOnlyAccount.qml" line="21"/>
|
||||
<source>Account address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddWatchOnlyAccount.qml" line="28"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddWatchOnlyAccount.qml" line="28"/>
|
||||
<source>Enter an account name...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddWatchOnlyAccount.qml" line="29"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddWatchOnlyAccount.qml" line="29"/>
|
||||
<source>Account name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/AddWatchOnlyAccount.qml" line="37"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/AddWatchOnlyAccount.qml" line="37"/>
|
||||
<source>Account color</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -396,32 +396,32 @@
|
|||
<context>
|
||||
<name>GenerateAccountModal</name>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/GenerateAccountModal.qml" line="7"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/GenerateAccountModal.qml" line="7"/>
|
||||
<source>Generate an account</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/GenerateAccountModal.qml" line="19"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/GenerateAccountModal.qml" line="19"/>
|
||||
<source>Enter your password…</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/GenerateAccountModal.qml" line="20"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/GenerateAccountModal.qml" line="20"/>
|
||||
<source>Password</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/GenerateAccountModal.qml" line="28"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/GenerateAccountModal.qml" line="28"/>
|
||||
<source>Enter an account name...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/GenerateAccountModal.qml" line="29"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/GenerateAccountModal.qml" line="29"/>
|
||||
<source>Account name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/GenerateAccountModal.qml" line="37"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/GenerateAccountModal.qml" line="37"/>
|
||||
<source>Account color</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -694,17 +694,17 @@
|
|||
<context>
|
||||
<name>SendModalContent</name>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/SendModalContent.qml" line="59"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/SendModalContent.qml" line="59"/>
|
||||
<source>Enter ETH</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/SendModalContent.qml" line="66"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/SendModalContent.qml" line="66"/>
|
||||
<source>Send from (account)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/SendModalContent.qml" line="79"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/SendModalContent.qml" line="79"/>
|
||||
<source>Send to</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -790,57 +790,57 @@
|
|||
<context>
|
||||
<name>TransactionModal</name>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="8"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="8"/>
|
||||
<source>Transaction Details</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="22"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="22"/>
|
||||
<source>9999 Confirmations</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="28"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="28"/>
|
||||
<source>When the transaction has 12 confirmations you can consider it settled.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="57"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="57"/>
|
||||
<source>Block</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="82"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="82"/>
|
||||
<source>Hash</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="109"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="109"/>
|
||||
<source>From</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="136"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="136"/>
|
||||
<source>To</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="163"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="163"/>
|
||||
<source>Gas limit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="188"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="188"/>
|
||||
<source>Gas price</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="213"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="213"/>
|
||||
<source>Gas used</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="app/AppLayouts/Wallet/Components/TransactionModal.qml" line="238"/>
|
||||
<location filename="app/AppLayouts/Wallet/components/TransactionModal.qml" line="238"/>
|
||||
<source>Nonce</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
|
Loading…
Reference in New Issue