mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-05 08:25:32 +00:00
Previously we tried to include all necessary files in the Linux source tarball, so that a user would be able to successfully run the top-level `build.sh` file. However, that causes problems when new dependencies between sub-projects get introduced that would require adding additional sub-projects to the tarball. This change modifies the tarball to only include files that are necessary to run the `linux/build.sh` file, i.e. necessary to build Keyman for Linux. This is likely what users would expect when they download a source tarball for Linux. If users want to build other parts of Keyman that are buildable on Linux they can download the source tarball that the GitHub releases page provides, or clone the repo. In order to be able to still run the top-level `build.sh` script, this change replaces the top-level `build.sh` with a script that simply forwards the arguments to `linux/build.sh`. This change also reverts the recent introduction of a *.pkg.tar.xz file that contained all files necessary to build a Debian/Ubuntu package. There wouldn't be a difference anymore between the two .tar.xz files. Fixes: #16004 Fixes: #16005 Build-bot: skip build:linux Test-bot: skip
121 lines
4.1 KiB
Bash
Executable file
121 lines
4.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# This script serves two purposes:
|
|
# - Verify Keyman builds from source tarball
|
|
# - Verify source package (that will be uploaded to Launchpad) does not
|
|
# produce lintian errors
|
|
|
|
## START STANDARD BUILD SCRIPT INCLUDE
|
|
# adjust relative paths as necessary
|
|
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
|
# shellcheck source=resources/build/builder-full.inc.sh
|
|
. "${THIS_SCRIPT%/*}/../../resources/build/builder-full.inc.sh"
|
|
## END STANDARD BUILD SCRIPT INCLUDE
|
|
|
|
. "${KEYMAN_ROOT}/resources/locate_emscripten.inc.sh"
|
|
|
|
builder_describe \
|
|
"Verify source tarball and source package" \
|
|
build \
|
|
"--no-create-tarball Skip creating a new tarball. Instead use existing one." \
|
|
"--source-only Only check that it's possible to build Keyman from the source tarball." \
|
|
"--launchpad-only Only check that lintian doesn't produce errors when run on the source package." \
|
|
"--target-dir=TARGET_DIR Directory where to put generate files. Default: /tmp/keyman-<version>."
|
|
|
|
builder_parse "$@"
|
|
|
|
if ! builder_has_option --target-dir; then
|
|
TARGET_DIR="/tmp/keyman-${KEYMAN_VERSION}"
|
|
fi
|
|
|
|
create_source_tarball() {
|
|
local target_dir="$1"
|
|
|
|
builder_echo heading "Create source tarball"
|
|
mkdir -p "${target_dir}"
|
|
rm -rf dist
|
|
./scripts/reconf.sh
|
|
PKG_CONFIG_PATH="${KEYMAN_ROOT}/core/build/arch/release/meson-private" ./scripts/dist.sh
|
|
mv "dist/keyman-${KEYMAN_VERSION}.tar.xz" "${target_dir}"
|
|
}
|
|
|
|
extract_source_tarball() {
|
|
local target_dir="$1"
|
|
|
|
builder_echo heading "Extract source tarball"
|
|
cd "${target_dir}"
|
|
rm -rf "keyman"
|
|
tar -xvf "keyman-${KEYMAN_VERSION}.tar.xz"
|
|
}
|
|
|
|
verify_can_build() {
|
|
local target_dir="$1"
|
|
builder_echo heading "Verifying build of tarball"
|
|
cd "${target_dir}"
|
|
./build.sh configure,build
|
|
}
|
|
|
|
create_source_package() {
|
|
local target_dir="$1"
|
|
|
|
builder_echo heading "Creating source package"
|
|
# Production code uses uscan to download the latest tarball from
|
|
# downloads.keyman.com/linux and then basically copies the debian
|
|
# directory from the source repo. Since we want to work on code that
|
|
# is not released yet we do similar steps here and then skip the
|
|
# download in the launchpad script.
|
|
cd "${target_dir}"
|
|
mkdir -p launchpad
|
|
cd launchpad
|
|
cp -r "../keyman-${KEYMAN_VERSION}" .
|
|
cp -r "${KEYMAN_ROOT}/linux/debian" "keyman-${KEYMAN_VERSION}"
|
|
cp "${target_dir}/keyman-${KEYMAN_VERSION}.tar.xz" "keyman_${KEYMAN_VERSION}.orig.tar.xz"
|
|
"keyman-${KEYMAN_VERSION}/linux/scripts/launchpad.sh" --no-download \
|
|
--dist "$(lsb_release -c -s)" --outputdir "${target_dir}/launchpad" --no-lintian --no-sign
|
|
}
|
|
|
|
verify_lintian() {
|
|
builder_echo heading "Running lintian"
|
|
lintian "keyman_${KEYMAN_VERSION}"*source.changes
|
|
}
|
|
|
|
install_emscripten() {
|
|
local target_dir="$1"
|
|
if [[ ! -d "${target_dir}/emsdk" ]]; then
|
|
builder_echo heading "Installing Emscripten for build verification"
|
|
install_emscripten_into "${target_dir}/emsdk"
|
|
else
|
|
builder_echo heading "Emscripten already exists in ${target_dir}/emsdk, skipping installation"
|
|
fi
|
|
EMSCRIPTEN_BASE="${target_dir}/emsdk/upstream/emscripten"
|
|
export EMSCRIPTEN_BASE
|
|
}
|
|
|
|
cd "${KEYMAN_ROOT}/linux"
|
|
|
|
if ! builder_has_option --no-create-tarball; then
|
|
builder_echo start tarball "Building source tarball"
|
|
create_source_tarball "${TARGET_DIR}"
|
|
builder_echo end tarball success "Finished building source tarball"
|
|
fi
|
|
|
|
if ! builder_has_option --launchpad-only; then
|
|
builder_echo start verifySource "Verifying source tarball"
|
|
extract_source_tarball "${TARGET_DIR}"
|
|
if builder_is_ci_test_build; then
|
|
install_emscripten "${TARGET_DIR}"
|
|
fi
|
|
verify_can_build "${TARGET_DIR}/keyman"
|
|
rm -rf "${TARGET_DIR}/keyman"
|
|
builder_echo end verifySource success "Finished verifying source tarball"
|
|
fi
|
|
|
|
if ! builder_has_option --source-only; then
|
|
builder_echo start lintian "Verifying Launchpad source package"
|
|
extract_source_tarball "${TARGET_DIR}"
|
|
mv "${TARGET_DIR}/keyman" "${TARGET_DIR}/keyman-${KEYMAN_VERSION}"
|
|
create_source_package "${TARGET_DIR}"
|
|
verify_lintian
|
|
rm -rf "${TARGET_DIR}/keyman-${KEYMAN_VERSION}"
|
|
rm -rf "${TARGET_DIR}/launchpad"
|
|
builder_echo end lintian success "Finished verifying Launchpad source package"
|
|
fi
|