mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-09-03 20:35:13 +00:00
Add script to build dmg on Linux
This commit is contained in:
parent
2886bf8a05
commit
f854232837
5 changed files with 210 additions and 26 deletions
|
@ -2,17 +2,35 @@ Building Mac OS binaries
|
||||||
========================
|
========================
|
||||||
|
|
||||||
This guide explains how to build Electrum binaries for macOS systems.
|
This guide explains how to build Electrum binaries for macOS systems.
|
||||||
We build our binaries on El Capitan (10.11.6) as building it on High Sierra
|
|
||||||
|
The build process consists of two steps:
|
||||||
|
|
||||||
|
## 1. Building the binary
|
||||||
|
|
||||||
|
This needs to be done on a system running macOS or OS X. We use El Capitan (10.11.6) as building it on High Sierra
|
||||||
makes the binaries incompatible with older versions.
|
makes the binaries incompatible with older versions.
|
||||||
|
|
||||||
This assumes that the Xcode command line tools (and thus git) are already installed.
|
Before starting, make sure that the Xcode command line tools are installed (e.g. you have `git`).
|
||||||
|
|
||||||
|
|
||||||
## 1. Run the script
|
cd electrum
|
||||||
|
./contrib/build-osx/make_osx
|
||||||
|
|
||||||
|
This creates a folder named Electrum.app.
|
||||||
|
|
||||||
|
## 2. Building the image
|
||||||
|
The usual way to distribute macOS applications is to use image files containing the
|
||||||
|
application. Although these images can be created on a Mac with the built-in `hdiutil`,
|
||||||
|
they are not deterministic.
|
||||||
|
|
||||||
$ cd electrum
|
Instead, we use the toolchain that Bitcoin uses: genisoimage and libdmg-hfsplus.
|
||||||
$ ./contrib/build-osx/make_osx
|
These tools do not work on macOS, so you need a separate Linux machine (or VM).
|
||||||
|
|
||||||
## 2. Done
|
Copy the Electrum.app directory over and install the dependencies, e.g.:
|
||||||
|
|
||||||
|
apt install libcap-dev cmake make gcc faketime
|
||||||
|
|
||||||
|
Then you can just invoke `package.sh` with the path to the app:
|
||||||
|
|
||||||
|
cd electrum
|
||||||
|
./contrib/build-osx/package.sh ~/Electrum.app/
|
15
contrib/build-osx/base.sh
Normal file
15
contrib/build-osx/base.sh
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
RED='\033[0;31m'
|
||||||
|
BLUE='\033[0,34m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
function info {
|
||||||
|
printf "\r💬 ${BLUE}INFO:${NC} ${1}\n"
|
||||||
|
}
|
||||||
|
function fail {
|
||||||
|
printf "\r🗯 ${RED}ERROR:${NC} ${1}\n"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
build_dir=$(dirname "$1")
|
||||||
|
test -n "$build_dir" -a -d "$build_dir" || exit
|
86
contrib/build-osx/cdrkit-deterministic.patch
Normal file
86
contrib/build-osx/cdrkit-deterministic.patch
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
--- cdrkit-1.1.11.old/genisoimage/tree.c 2008-10-21 19:57:47.000000000 -0400
|
||||||
|
+++ cdrkit-1.1.11/genisoimage/tree.c 2013-12-06 00:23:18.489622668 -0500
|
||||||
|
@@ -1139,8 +1139,9 @@
|
||||||
|
scan_directory_tree(struct directory *this_dir, char *path,
|
||||||
|
struct directory_entry *de)
|
||||||
|
{
|
||||||
|
- DIR *current_dir;
|
||||||
|
+ int current_file;
|
||||||
|
char whole_path[PATH_MAX];
|
||||||
|
+ struct dirent **d_list;
|
||||||
|
struct dirent *d_entry;
|
||||||
|
struct directory *parent;
|
||||||
|
int dflag;
|
||||||
|
@@ -1164,7 +1165,8 @@
|
||||||
|
this_dir->dir_flags |= DIR_WAS_SCANNED;
|
||||||
|
|
||||||
|
errno = 0; /* Paranoia */
|
||||||
|
- current_dir = opendir(path);
|
||||||
|
+ //current_dir = opendir(path);
|
||||||
|
+ current_file = scandir(path, &d_list, NULL, alphasort);
|
||||||
|
d_entry = NULL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -1173,12 +1175,12 @@
|
||||||
|
*/
|
||||||
|
old_path = path;
|
||||||
|
|
||||||
|
- if (current_dir) {
|
||||||
|
+ if (current_file >= 0) {
|
||||||
|
errno = 0;
|
||||||
|
- d_entry = readdir(current_dir);
|
||||||
|
+ d_entry = d_list[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (!current_dir || !d_entry) {
|
||||||
|
+ if (current_file < 0 || !d_entry) {
|
||||||
|
int ret = 1;
|
||||||
|
|
||||||
|
#ifdef USE_LIBSCHILY
|
||||||
|
@@ -1191,8 +1193,8 @@
|
||||||
|
de->isorec.flags[0] &= ~ISO_DIRECTORY;
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
- if (current_dir)
|
||||||
|
- closedir(current_dir);
|
||||||
|
+ if(d_list)
|
||||||
|
+ free(d_list);
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
#ifdef ABORT_DEEP_ISO_ONLY
|
||||||
|
@@ -1208,7 +1210,7 @@
|
||||||
|
errmsgno(EX_BAD, "use Rock Ridge extensions via -R or -r,\n");
|
||||||
|
errmsgno(EX_BAD, "or allow deep ISO9660 directory nesting via -D.\n");
|
||||||
|
}
|
||||||
|
- closedir(current_dir);
|
||||||
|
+ free(d_list);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@@ -1250,13 +1252,13 @@
|
||||||
|
* The first time through, skip this, since we already asked
|
||||||
|
* for the first entry when we opened the directory.
|
||||||
|
*/
|
||||||
|
- if (dflag)
|
||||||
|
- d_entry = readdir(current_dir);
|
||||||
|
+ if (dflag && current_file >= 0)
|
||||||
|
+ d_entry = d_list[current_file];
|
||||||
|
dflag++;
|
||||||
|
|
||||||
|
- if (!d_entry)
|
||||||
|
+ if (current_file < 0)
|
||||||
|
break;
|
||||||
|
-
|
||||||
|
+ current_file--;
|
||||||
|
/* OK, got a valid entry */
|
||||||
|
|
||||||
|
/* If we do not want all files, then pitch the backups. */
|
||||||
|
@@ -1348,7 +1350,7 @@
|
||||||
|
insert_file_entry(this_dir, whole_path, d_entry->d_name);
|
||||||
|
#endif /* APPLE_HYB */
|
||||||
|
}
|
||||||
|
- closedir(current_dir);
|
||||||
|
+ free(d_list);
|
||||||
|
|
||||||
|
#ifdef APPLE_HYB
|
||||||
|
/*
|
|
@ -1,28 +1,16 @@
|
||||||
#!/bin/bash
|
#!/usr/bin/env bash
|
||||||
RED='\033[0;31m'
|
|
||||||
BLUE='\033[0,34m'
|
|
||||||
NC='\033[0m' # No Color
|
|
||||||
function info {
|
|
||||||
printf "\r💬 ${BLUE}INFO:${NC} ${1}\n"
|
|
||||||
}
|
|
||||||
function fail {
|
|
||||||
printf "\r🗯 ${RED}ERROR:${NC} ${1}\n"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
build_dir=$(dirname "$0")
|
# Parameterize
|
||||||
test -n "$build_dir" -a -d "$build_dir" || exit
|
|
||||||
cd $build_dir/../..
|
|
||||||
|
|
||||||
export PYTHONHASHSEED=22
|
|
||||||
VERSION=`git describe --tags`
|
|
||||||
|
|
||||||
# Paramterize
|
|
||||||
PYTHON_VERSION=3.6.4
|
PYTHON_VERSION=3.6.4
|
||||||
BUILDDIR=/tmp/electrum-build
|
BUILDDIR=/tmp/electrum-build
|
||||||
PACKAGE=Electrum
|
PACKAGE=Electrum
|
||||||
GIT_REPO=https://github.com/spesmilo/electrum
|
GIT_REPO=https://github.com/spesmilo/electrum
|
||||||
|
|
||||||
|
. $(dirname "$0")/base.sh
|
||||||
|
cd $build_dir/../..
|
||||||
|
|
||||||
|
export PYTHONHASHSEED=22
|
||||||
|
VERSION=`git describe --tags`
|
||||||
|
|
||||||
info "Installing Python $PYTHON_VERSION"
|
info "Installing Python $PYTHON_VERSION"
|
||||||
export PATH="~/.pyenv/bin:~/.pyenv/shims:~/Library/Python/3.6/bin:$PATH"
|
export PATH="~/.pyenv/bin:~/.pyenv/shims:~/Library/Python/3.6/bin:$PATH"
|
||||||
|
|
77
contrib/build-osx/package.sh
Executable file
77
contrib/build-osx/package.sh
Executable file
|
@ -0,0 +1,77 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
cdrkit_version=1.1.11
|
||||||
|
cdrkit_download_path=http://distro.ibiblio.org/fatdog/source/600/c
|
||||||
|
cdrkit_file_name=cdrkit-${cdrkit_version}.tar.bz2
|
||||||
|
cdrkit_sha256_hash=b50d64c214a65b1a79afe3a964c691931a4233e2ba605d793eb85d0ac3652564
|
||||||
|
cdrkit_patches=cdrkit-deterministic.patch
|
||||||
|
genisoimage=genisoimage-$cdrkit_version
|
||||||
|
|
||||||
|
libdmg_url=https://github.com/theuni/libdmg-hfsplus
|
||||||
|
|
||||||
|
|
||||||
|
export LD_PRELOAD=$(locate libfaketime.so.1)
|
||||||
|
export FAKETIME="2000-01-22 00:00:00"
|
||||||
|
export PATH=$PATH:~/bin
|
||||||
|
|
||||||
|
. $(dirname "$0")/base.sh
|
||||||
|
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "Usage: $0 Electrum.app"
|
||||||
|
exit -127
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p ~/bin
|
||||||
|
|
||||||
|
if ! which ${genisoimage} > /dev/null 2>&1; then
|
||||||
|
mkdir -p /tmp/electrum-macos
|
||||||
|
cd /tmp/electrum-macos
|
||||||
|
info "Downloading cdrkit $cdrkit_version"
|
||||||
|
wget -nc ${cdrkit_download_path}/${cdrkit_file_name}
|
||||||
|
tar xvf ${cdrkit_file_name}
|
||||||
|
|
||||||
|
info "Patching genisoimage"
|
||||||
|
cd cdrkit-${cdrkit_version}
|
||||||
|
patch -p1 < ../cdrkit-deterministic.patch
|
||||||
|
|
||||||
|
info "Building genisoimage"
|
||||||
|
cmake . -Wno-dev
|
||||||
|
make genisoimage
|
||||||
|
cp genisoimage/genisoimage ~/bin/${genisoimage}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! which dmg > /dev/null 2>&1; then
|
||||||
|
mkdir -p /tmp/electrum-macos
|
||||||
|
cd /tmp/electrum-macos
|
||||||
|
info "Downloading libdmg"
|
||||||
|
LD_PRELOAD= git clone ${libdmg_url}
|
||||||
|
cd libdmg-hfsplus
|
||||||
|
info "Building libdmg"
|
||||||
|
cmake .
|
||||||
|
make
|
||||||
|
cp dmg/dmg ~/bin
|
||||||
|
fi
|
||||||
|
|
||||||
|
${genisoimage} -version || fail "Unable to install genisoimage"
|
||||||
|
dmg -|| fail "Unable to install libdmg"
|
||||||
|
|
||||||
|
rm -rf /tmp/electrum-macos/image > /dev/null 2>&1
|
||||||
|
mkdir /tmp/electrum-macos/image/
|
||||||
|
cp -r $1 /tmp/electrum-macos/image/
|
||||||
|
|
||||||
|
cd $build_dir
|
||||||
|
|
||||||
|
${genisoimage} \
|
||||||
|
-no-cache-inodes \
|
||||||
|
-D \
|
||||||
|
-l \
|
||||||
|
-probe \
|
||||||
|
-V "Electrum" \
|
||||||
|
-no-pad \
|
||||||
|
-r \
|
||||||
|
-dir-mode 0755 \
|
||||||
|
-apple \
|
||||||
|
-o Electrum_uncompressed.dmg \
|
||||||
|
/tmp/electrum-macos/image || fail "Unable to create uncompressed dmg"
|
||||||
|
|
||||||
|
dmg dmg Electrum_uncompressed.dmg Electrum.dmg || fail "Unable to create compressed dmg"
|
Loading…
Add table
Reference in a new issue