mirror of
https://github.com/CringeStudios/element-desktop.git
synced 2025-01-18 15:34:59 +01:00
Build statically-linked sqlcipher for Unix (#334)
This commit is contained in:
parent
1caa4aeb1b
commit
042d8b1427
@ -12,9 +12,7 @@ RUN apt-get -qq update && apt-get -qq dist-upgrade && \
|
|||||||
# libsecret-1-dev and libgnome-keyring-dev are required even for prebuild keytar
|
# libsecret-1-dev and libgnome-keyring-dev are required even for prebuild keytar
|
||||||
apt-get -qq install --no-install-recommends qtbase5-dev bsdtar build-essential autoconf libssl-dev gcc-multilib g++-multilib lzip rpm python libcurl4 git git-lfs ssh unzip \
|
apt-get -qq install --no-install-recommends qtbase5-dev bsdtar build-essential autoconf libssl-dev gcc-multilib g++-multilib lzip rpm python libcurl4 git git-lfs ssh unzip \
|
||||||
libsecret-1-dev libgnome-keyring-dev \
|
libsecret-1-dev libgnome-keyring-dev \
|
||||||
libopenjp2-tools \
|
libopenjp2-tools && \
|
||||||
# Used by Seshat
|
|
||||||
libsqlcipher-dev && \
|
|
||||||
# git-lfs
|
# git-lfs
|
||||||
git lfs install && \
|
git lfs install && \
|
||||||
apt-get purge -y --auto-remove && rm -rf /var/lib/apt/lists/*
|
apt-get purge -y --auto-remove && rm -rf /var/lib/apt/lists/*
|
||||||
|
@ -3,7 +3,7 @@ License: Apache-2.0
|
|||||||
Vendor: support@element.io
|
Vendor: support@element.io
|
||||||
Architecture: amd64
|
Architecture: amd64
|
||||||
Maintainer: support@element.io
|
Maintainer: support@element.io
|
||||||
Depends: libgtk-3-0, libnotify4, libnss3, libxss1, libxtst6, xdg-utils, libatspi2.0-0, libuuid1, libsecret-1-0, libsqlcipher0
|
Depends: libgtk-3-0, libnotify4, libnss3, libxss1, libxtst6, xdg-utils, libatspi2.0-0, libuuid1, libsecret-1-0
|
||||||
Recommends: libappindicator3-1
|
Recommends: libappindicator3-1
|
||||||
Section: net
|
Section: net
|
||||||
Priority: extra
|
Priority: extra
|
||||||
|
@ -3,7 +3,7 @@ License: Apache-2.0
|
|||||||
Vendor: support@element.io
|
Vendor: support@element.io
|
||||||
Architecture: amd64
|
Architecture: amd64
|
||||||
Maintainer: support@element.io
|
Maintainer: support@element.io
|
||||||
Depends: libgtk-3-0, libnotify4, libnss3, libxss1, libxtst6, xdg-utils, libatspi2.0-0, libuuid1, libsecret-1-0, libsqlcipher0
|
Depends: libgtk-3-0, libnotify4, libnss3, libxss1, libxtst6, xdg-utils, libatspi2.0-0, libuuid1, libsecret-1-0
|
||||||
Recommends: libappindicator3-1
|
Recommends: libappindicator3-1
|
||||||
Replaces: riot-desktop (<< 1.7.0), riot-web (<< 1.7.0)
|
Replaces: riot-desktop (<< 1.7.0), riot-web (<< 1.7.0)
|
||||||
Breaks: riot-desktop (<< 1.7.0), riot-web (<< 1.7.0)
|
Breaks: riot-desktop (<< 1.7.0), riot-web (<< 1.7.0)
|
||||||
|
@ -26,7 +26,7 @@ export default async function(hakEnv: HakEnv, moduleInfo: DependencyInfo): Promi
|
|||||||
if (hakEnv.isWin()) {
|
if (hakEnv.isWin()) {
|
||||||
await buildOpenSslWin(hakEnv, moduleInfo);
|
await buildOpenSslWin(hakEnv, moduleInfo);
|
||||||
await buildSqlCipherWin(hakEnv, moduleInfo);
|
await buildSqlCipherWin(hakEnv, moduleInfo);
|
||||||
} else if (hakEnv.isMac()) {
|
} else {
|
||||||
await buildSqlCipherUnix(hakEnv, moduleInfo);
|
await buildSqlCipherUnix(hakEnv, moduleInfo);
|
||||||
}
|
}
|
||||||
await buildMatrixSeshat(hakEnv, moduleInfo);
|
await buildMatrixSeshat(hakEnv, moduleInfo);
|
||||||
@ -179,12 +179,17 @@ async function buildSqlCipherUnix(hakEnv, moduleInfo) {
|
|||||||
'--prefix=' + moduleInfo.depPrefix + '',
|
'--prefix=' + moduleInfo.depPrefix + '',
|
||||||
'--enable-tempstore=yes',
|
'--enable-tempstore=yes',
|
||||||
'--enable-shared=no',
|
'--enable-shared=no',
|
||||||
|
'--enable-tcl=no',
|
||||||
];
|
];
|
||||||
|
|
||||||
if (hakEnv.isMac()) {
|
if (hakEnv.isMac()) {
|
||||||
args.push('--with-crypto-lib=commoncrypto');
|
args.push('--with-crypto-lib=commoncrypto');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hakEnv.isLinux()) {
|
||||||
|
args.push('--with-pic=yes');
|
||||||
|
}
|
||||||
|
|
||||||
if (!hakEnv.isHost()) {
|
if (!hakEnv.isHost()) {
|
||||||
// In the nonsense world of `configure`, it is assumed you are building
|
// In the nonsense world of `configure`, it is assumed you are building
|
||||||
// a compiler like `gcc`, so the `host` option actually means the target
|
// a compiler like `gcc`, so the `host` option actually means the target
|
||||||
@ -265,12 +270,29 @@ async function buildMatrixSeshat(hakEnv, moduleInfo) {
|
|||||||
// it for now: we should confirm how much of this it still actually needs.
|
// it for now: we should confirm how much of this it still actually needs.
|
||||||
const env = hakEnv.makeGypEnv();
|
const env = hakEnv.makeGypEnv();
|
||||||
|
|
||||||
if (!hakEnv.isLinux()) {
|
Object.assign(env, {
|
||||||
Object.assign(env, {
|
SQLCIPHER_STATIC: 1,
|
||||||
SQLCIPHER_STATIC: 1,
|
SQLCIPHER_LIB_DIR: path.join(moduleInfo.depPrefix, 'lib'),
|
||||||
SQLCIPHER_LIB_DIR: path.join(moduleInfo.depPrefix, 'lib'),
|
SQLCIPHER_INCLUDE_DIR: path.join(moduleInfo.depPrefix, 'include'),
|
||||||
SQLCIPHER_INCLUDE_DIR: path.join(moduleInfo.depPrefix, 'include'),
|
});
|
||||||
});
|
|
||||||
|
if (hakEnv.isLinux()) {
|
||||||
|
// Ensure Element uses the statically-linked seshat build, and prevent other applications
|
||||||
|
// from attempting to use this one. Detailed explanation:
|
||||||
|
//
|
||||||
|
// RUSTFLAGS
|
||||||
|
// An environment variable containing a list of arguments to pass to rustc.
|
||||||
|
// -Clink-arg=VALUE
|
||||||
|
// A rustc argument to pass a single argument to the linker.
|
||||||
|
// -Wl,
|
||||||
|
// gcc syntax to pass an argument (from gcc) to the linker (ld).
|
||||||
|
// -Bsymbolic:
|
||||||
|
// Prefer local/statically linked symbols over those in the environment.
|
||||||
|
// Prevent overriding native libraries by LD_PRELOAD etc.
|
||||||
|
// --exclude-libs ALL
|
||||||
|
// Prevent symbols from being exported by any archive libraries.
|
||||||
|
// Reduces output filesize and prevents being dynamically linked against.
|
||||||
|
env.RUSTFLAGS = '-Clink-arg=-Wl,-Bsymbolic -Clink-arg=-Wl,--exclude-libs,ALL';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hakEnv.isWin()) {
|
if (hakEnv.isWin()) {
|
||||||
|
@ -22,21 +22,19 @@ import { DependencyInfo } from '../../scripts/hak/dep';
|
|||||||
|
|
||||||
export default async function(hakEnv: HakEnv, moduleInfo: DependencyInfo): Promise<void> {
|
export default async function(hakEnv: HakEnv, moduleInfo: DependencyInfo): Promise<void> {
|
||||||
// of course tcl doesn't have a --version
|
// of course tcl doesn't have a --version
|
||||||
if (!hakEnv.isLinux()) {
|
await new Promise<void>((resolve, reject) => {
|
||||||
await new Promise<void>((resolve, reject) => {
|
const proc = childProcess.spawn('tclsh', [], {
|
||||||
const proc = childProcess.spawn('tclsh', [], {
|
stdio: ['pipe', 'ignore', 'ignore'],
|
||||||
stdio: ['pipe', 'ignore', 'ignore'],
|
|
||||||
});
|
|
||||||
proc.on('exit', (code) => {
|
|
||||||
if (code !== 0) {
|
|
||||||
reject("Can't find tclsh - have you installed TCL?");
|
|
||||||
} else {
|
|
||||||
resolve();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
proc.stdin.end();
|
|
||||||
});
|
});
|
||||||
}
|
proc.on('exit', (code) => {
|
||||||
|
if (code !== 0) {
|
||||||
|
reject("Can't find tclsh - have you installed TCL?");
|
||||||
|
} else {
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
proc.stdin.end();
|
||||||
|
});
|
||||||
|
|
||||||
const tools = [
|
const tools = [
|
||||||
['rustc', '--version'],
|
['rustc', '--version'],
|
||||||
|
@ -25,9 +25,7 @@ import HakEnv from '../../scripts/hak/hakEnv';
|
|||||||
import { DependencyInfo } from '../../scripts/hak/dep';
|
import { DependencyInfo } from '../../scripts/hak/dep';
|
||||||
|
|
||||||
export default async function(hakEnv: HakEnv, moduleInfo: DependencyInfo): Promise<void> {
|
export default async function(hakEnv: HakEnv, moduleInfo: DependencyInfo): Promise<void> {
|
||||||
if (!hakEnv.isLinux()) {
|
await getSqlCipher(hakEnv, moduleInfo);
|
||||||
await getSqlCipher(hakEnv, moduleInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hakEnv.isWin()) {
|
if (hakEnv.isWin()) {
|
||||||
await getOpenSsl(hakEnv, moduleInfo);
|
await getOpenSsl(hakEnv, moduleInfo);
|
||||||
|
Loading…
Reference in New Issue
Block a user