Merge branch 'release' into 'master'
Reproducible build See merge request Librem5/squeekboard!413
This commit is contained in:
49
cargo_build.py
Normal file
49
cargo_build.py
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
"""This script manages Cargo builds
|
||||||
|
while keeping the artifact directory within the build tree
|
||||||
|
instead of the source tree.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
import shlex
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
source_dir = Path(__file__).absolute().parent
|
||||||
|
|
||||||
|
args = sys.argv[1:]
|
||||||
|
binary_dir = "debug"
|
||||||
|
|
||||||
|
if '--release' in args:
|
||||||
|
binary_dir = "release"
|
||||||
|
|
||||||
|
# The file produced by Cargo will have a special name
|
||||||
|
try:
|
||||||
|
i = args.index('--rename')
|
||||||
|
except ValueError:
|
||||||
|
filename = None
|
||||||
|
else:
|
||||||
|
args.pop(i)
|
||||||
|
filename = args.pop(i)
|
||||||
|
|
||||||
|
# The target destination of the produced file is a positional argument
|
||||||
|
out_path = [arg for arg in args if not arg.startswith('--')]
|
||||||
|
if out_path:
|
||||||
|
out_path = out_path[0]
|
||||||
|
i = args.index(out_path)
|
||||||
|
args.pop(i)
|
||||||
|
|
||||||
|
subprocess.run(['sh', "{}/cargo.sh".format(shlex.quote(source_dir.as_posix())), 'build']
|
||||||
|
+ args,
|
||||||
|
check=True)
|
||||||
|
|
||||||
|
if out_path:
|
||||||
|
out_path = Path(out_path).absolute()
|
||||||
|
out_basename = out_path.name
|
||||||
|
filename = filename or out_basename
|
||||||
|
subprocess.run(['cp', '-a',
|
||||||
|
'./{}/{}'.format(shlex.quote(binary_dir), shlex.quote(filename)),
|
||||||
|
out_path],
|
||||||
|
check=True)
|
||||||
|
|
||||||
@ -1,34 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# This script manages Cargo builds
|
|
||||||
# while keeping the artifact directory within the build tree
|
|
||||||
# instead of the source tree
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
SCRIPT_PATH="$(realpath "$0")"
|
|
||||||
SOURCE_DIR="$(dirname "$SCRIPT_PATH")"
|
|
||||||
|
|
||||||
RELEASE=""
|
|
||||||
BINARY_DIR="debug"
|
|
||||||
if [ "${1}" = "--release" ]; then
|
|
||||||
shift
|
|
||||||
BINARY_DIR="release"
|
|
||||||
RELEASE="--release"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${1}" = "--rename" ]; then
|
|
||||||
shift
|
|
||||||
FILENAME="${1}"
|
|
||||||
shift
|
|
||||||
fi
|
|
||||||
OUT_PATH="$(realpath "${1}")"
|
|
||||||
shift
|
|
||||||
OUT_BASENAME="$(basename "${OUT_PATH}")"
|
|
||||||
FILENAME="${FILENAME:-"${OUT_BASENAME}"}"
|
|
||||||
|
|
||||||
sh "$SOURCE_DIR"/cargo.sh build $RELEASE "$@"
|
|
||||||
|
|
||||||
if [ -n "${OUT_PATH}" ]; then
|
|
||||||
cp -a ./"${BINARY_DIR}"/"${FILENAME}" "${OUT_PATH}"
|
|
||||||
fi
|
|
||||||
1
debian/control
vendored
1
debian/control
vendored
@ -26,6 +26,7 @@ Build-Depends:
|
|||||||
librust-xkbcommon-0.4+wayland-dev (>= 0.4),
|
librust-xkbcommon-0.4+wayland-dev (>= 0.4),
|
||||||
libwayland-dev (>= 1.16),
|
libwayland-dev (>= 1.16),
|
||||||
lsb-release,
|
lsb-release,
|
||||||
|
python3,
|
||||||
rustc,
|
rustc,
|
||||||
wayland-protocols (>= 1.14),
|
wayland-protocols (>= 1.14),
|
||||||
Standards-Version: 4.1.3
|
Standards-Version: 4.1.3
|
||||||
|
|||||||
16
debian/rules
vendored
16
debian/rules
vendored
@ -8,6 +8,22 @@ ifeq ($(DEB_HOST_ARCH),mips64el)
|
|||||||
export RUSTFLAGS = -Ctarget-feature=+xgot
|
export RUSTFLAGS = -Ctarget-feature=+xgot
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# the below avoids an FTBFS on mips64el with a GOT > 64kb
|
||||||
|
DEB_HOST_ARCH := $(shell dpkg-architecture -qDEB_HOST_ARCH)
|
||||||
|
ifeq ($(DEB_HOST_ARCH),mips64el)
|
||||||
|
xgot = -Ctarget-feature=+xgot
|
||||||
|
else
|
||||||
|
xgot =
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Don't use paths that may change between builds.
|
||||||
|
# No need to care about $HOME
|
||||||
|
# because Cargo will not place any source in ~/.cargo.
|
||||||
|
# The build directory is a subdirectory of the source directory,
|
||||||
|
# so it doesn't need to be explicitly taken care of.
|
||||||
|
export RUSTFLAGS = --remap-path-prefix=$(CURDIR)=/remap-pwd $(xgot)
|
||||||
|
|
||||||
|
|
||||||
distrel := $(shell lsb_release --codename --short)
|
distrel := $(shell lsb_release --codename --short)
|
||||||
ifneq (,$(filter $(distrel),buster amber))
|
ifneq (,$(filter $(distrel),buster amber))
|
||||||
legacy = true
|
legacy = true
|
||||||
|
|||||||
@ -100,7 +100,7 @@ cargo_toml = custom_target(
|
|||||||
|
|
||||||
dep_cargo = find_program('cargo')
|
dep_cargo = find_program('cargo')
|
||||||
cargo_script = find_program('cargo.sh')
|
cargo_script = find_program('cargo.sh')
|
||||||
cargo_build = find_program('cargo_build.sh')
|
cargo_build = find_program('cargo_build.py')
|
||||||
|
|
||||||
subdir('data')
|
subdir('data')
|
||||||
subdir('protocols')
|
subdir('protocols')
|
||||||
|
|||||||
20
src/data.rs
20
src/data.rs
@ -746,13 +746,21 @@ mod tests {
|
|||||||
|
|
||||||
use ::logging::ProblemPanic;
|
use ::logging::ProblemPanic;
|
||||||
|
|
||||||
const THIS_FILE: &str = file!();
|
|
||||||
|
|
||||||
fn path_from_root(file: &'static str) -> PathBuf {
|
fn path_from_root(file: &'static str) -> PathBuf {
|
||||||
PathBuf::from(THIS_FILE)
|
let source_dir = env::var("SOURCE_DIR")
|
||||||
.parent().unwrap()
|
.map(PathBuf::from)
|
||||||
.parent().unwrap()
|
.unwrap_or_else(|e| {
|
||||||
.join(file)
|
if let env::VarError::NotPresent = e {
|
||||||
|
let this_file = file!();
|
||||||
|
PathBuf::from(this_file)
|
||||||
|
.parent().unwrap()
|
||||||
|
.parent().unwrap()
|
||||||
|
.into()
|
||||||
|
} else {
|
||||||
|
panic!("{:?}", e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
source_dir.join(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
@ -80,6 +80,7 @@ test(
|
|||||||
'rstest',
|
'rstest',
|
||||||
cargo_script,
|
cargo_script,
|
||||||
args: ['test'] + cargo_build_flags,
|
args: ['test'] + cargo_build_flags,
|
||||||
|
env: ['SOURCE_DIR=' + meson.source_root()],
|
||||||
# this is a whole Carg-based test suite, let it run for a while
|
# this is a whole Carg-based test suite, let it run for a while
|
||||||
timeout: 900,
|
timeout: 900,
|
||||||
depends: [build_rstests, cargo_toml],
|
depends: [build_rstests, cargo_toml],
|
||||||
|
|||||||
@ -78,12 +78,22 @@ foreach layout : [
|
|||||||
extra += ['allow_missing_return']
|
extra += ['allow_missing_return']
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Older Cargo seens to be sensitive to something
|
||||||
|
# about the RUST_FLAGS env var, and rebuilds all tests when it's set,
|
||||||
|
# increasing test time by 2 orders of magnitude.
|
||||||
|
# Let it have its way.
|
||||||
|
if get_option('legacy') == true
|
||||||
|
timeout = 300
|
||||||
|
else
|
||||||
|
timeout = 30
|
||||||
|
endif
|
||||||
test(
|
test(
|
||||||
'test_layout_' + layout,
|
'test_layout_' + layout,
|
||||||
cargo_script,
|
cargo_script,
|
||||||
args: ['run'] + cargo_build_flags
|
args: ['run'] + cargo_build_flags
|
||||||
+ ['--example', 'test_layout', '--', layout]
|
+ ['--example', 'test_layout', '--', layout]
|
||||||
+ extra,
|
+ extra,
|
||||||
|
timeout: timeout,
|
||||||
workdir: meson.build_root(),
|
workdir: meson.build_root(),
|
||||||
)
|
)
|
||||||
endforeach
|
endforeach
|
||||||
|
|||||||
Reference in New Issue
Block a user