lyx_mirror/development/lyx-tester/mylyx
Scott Kostyshak 6cc9638dc2 Initial commit of lyx-tester
These scripts help with building and testing LyX, mostly with the
ctest framework.

"lyxbuild" is a build script that has different options (e.g., to
compile with Clang/GCC, Qt 5/6, CMake/autotools). The build script
also has an option to cherry-pick compiler fixes which make it
easier to build older commits on newer compiler versions (useful
when performing a "git bisect"). See "lyxbuild --help" for more
information.

The previous home of lyx-tester was:

  https://gitlab.com/scottkosty/lyx-tester
2024-11-18 16:20:40 +01:00

170 lines
5.9 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# set to 0 to disable.
#
# If set to 1 (or currently any non-zero value), mylyx will read the file and
# open with the appropriate LyX version. If the format is less than the master
# format, we don't open with master because we want to know when the file
# format changes (and when to review lyx2lyx diff).
_mylyx_veropen_=1
# TODO: create and use a variable _mylyx_dir_
# _mylyx_dir_="~/lyxbuilds/"
function _validate_requested_mylyx ()
{
potential_dir="/home/${USER}/lyxbuilds/${requested_build}"
if [ ! -d "${potential_dir}" ]; then
echo "ERROR: the requested mylyx build does not exist: ${potential_dir}" >&2
return 1
fi
return 0
}
function mylyx ()
{
if [ "${_mylyx_veropen_}" = "0" ]; then
requested_build="$1"
_validate_requested_mylyx "$1" || return 1
shift
else
if [ -f "$1" ]; then
# TODO: need to fix tab expansion.
# we assume user wants the default build
lyxformat="$( head -n2 "$1" | grep -o -P "\d\d\d" )"
echo "lyxformat is: ${lyxformat}"
if [ "${lyxformat}" = "544" ]; then
requested_build="2.3.x"
elif [ "${lyxformat}" = "474" ]; then
requested_build="2.1.0"
elif [ "${lyxformat}" = "620" ]; then
requested_build="2.4.x"
else
# now we see what format my current master build is in
master_frmt="$( grep "LYX_FORMAT_LYX" ~/lyxbuilds/master/repo/src/version.h | grep -P -o "\d\d\d" )"
if [ "${lyxformat}" = "${master_frmt}" ]; then
requested_build="master"
else
echo "No build associated with LyX format ${lyxformat}." >&2
return 1
fi
fi
echo "Auto-selecting ${requested_build}"
else
requested_build="$1"
shift
fi
_validate_requested_mylyx "${requested_build}" || return 1
fi
if [ -e ~/lyxbuilds/$requested_build/repo/src/lyx ]; then
echo "starting local autotools binary"
# This assumes we're using --qt-build-dir when building. Otherwise,
# mismatch could happen.
# not sure why need to set LD_LIBRARY_PATH for autotools and not for CMake
# how does CMake find it?
LD_LIBRARY_PATH='/usr/BUILD/BuildQt5-dev/qtbase/lib' ~/lyxbuilds/$requested_build/repo/src/lyx -userdir ~/lyxbuilds/$requested_build/user-dir/ "$@"
else
# the regex "^lyx(\d\.\d)?" allows for both lyx2.3 and lyx. Depends on what the user sets for -DLYX_PROGRAM_SUFFIX
LYX_VER="$( ls ~/lyxbuilds/$requested_build/CMakeBuild/bin/ | grep -oP "^lyx(\d\.\d)?$" )"
if [ -e ~/lyxbuilds/$requested_build/CMakeBuild/bin/${LYX_VER} ]; then
echo "starting local cmake binary for ${LYX_VER}"
# Adding the build's bin dir to PATH makes it so e.g., the local build's
# tex2lyx is used, rather than a system-installed tex2lyx.
PATH="/home/${USER}/lyxbuilds/${requested_build}/CMakeBuild/bin:${PATH}" ~/lyxbuilds/$requested_build/CMakeBuild/bin/${LYX_VER} -userdir ~/lyxbuilds/$requested_build/user-dir/ "$@"
else
echo "ERROR: no autotools or cmake binary available" >&2
fi
fi
}
_mylyx()
{
local cur
cur=${COMP_WORDS[COMP_CWORD]}
if [ "$COMP_CWORD" == "1" ]; then
COMPREPLY=( $( compgen -W '`ls ~/lyxbuilds`' -- $cur ) )
if [ "${_mylyx_veropen_}" != "0" ]; then
# need to protect against an empty directory, otherwise get the following
# error:
# mylyx find: *: No such file or directory
if [ "$(ls -A .)" ]; then
# for find command:
# https://stackoverflow.com/a/2596474/1376404
# for case insenstivity, replace ${cur} with ${cur,,}:
# (this messed something else up so I changed back.
# https://unix.stackexchange.com/a/128390/197212
# This one is also useful:
# https://stackoverflow.com/a/10981916/1376404
COMPREPLY+=( $( compgen -W '`find * -maxdepth 0 -type f -name "*.lyx"`' -- "${cur}" ) )
fi
fi
else
_filedir '@(lyx)'
fi
}
complete -F _mylyx ${filenames:-} mylyx
function mylyxcd ()
{
requested_build="$1"
_validate_requested_mylyx "$1" || return 1
# TODO could allow for 'repo' to be named anything. Just check for a git folder.
cd ~/lyxbuilds/$requested_build/repo
}
_mylyxcd()
{
local cur
cur=${COMP_WORDS[COMP_CWORD]}
if [ "$COMP_CWORD" == "1" ]; then
COMPREPLY=( $( compgen -W '`ls ~/lyxbuilds`' -- $cur ) )
fi
}
complete -F _mylyxcd ${filenames:-} mylyxcd
function mylyx-gdb ()
{
# (https://stackoverflow.com/questions/9057387/process-all-arguments-except-the-first-one-in-a-bash-script)
# the "${@:2}" relays all arguments except the first.
requested_build="$1"
_validate_requested_mylyx "$1" || return 1
PATH="/home/${USER}/lyxbuilds/${requested_build}/CMakeBuild/bin:${PATH}" gdb --args ~/"lyxbuilds/${requested_build}/CMakeBuild/bin/lyx" -userdir ~/"lyxbuilds/${requested_build}/user-dir" "${@:2}"
}
complete -F _mylyxcd ${filenames:-} mylyx-gdb
function mylyx-valgrind ()
{
# (https://stackoverflow.com/questions/9057387/process-all-arguments-except-the-first-one-in-a-bash-script)
# the "${@:2}" relays all arguments except the first.
requested_build="$1"
_validate_requested_mylyx "$1" || return 1
PATH="/home/${USER}/lyxbuilds/${requested_build}/CMakeBuild/bin:${PATH}" valgrind --track-origins=yes --log-file=valgrind.log ~/lyxbuilds/${requested_build}/CMakeBuild/bin/lyx -userdir ~/"lyxbuilds/${requested_build}/user-dir" "${@:2}"
}
complete -F _mylyxcd ${filenames:-} mylyx-valgrind
function mylyx-valgrind-leak-check-full ()
{
# (https://stackoverflow.com/questions/9057387/process-all-arguments-except-the-first-one-in-a-bash-script)
# the "${@:2}" relays all arguments except the first.
requested_build="$1"
_validate_requested_mylyx "$1" || return 1
PATH="/home/${USER}/lyxbuilds/${requested_build}/CMakeBuild/bin:${PATH}" valgrind --track-origins=yes --log-file=valgrind.log --leak-check=full ~/lyxbuilds/${requested_build}/CMakeBuild/bin/lyx -userdir ~/"lyxbuilds/${requested_build}/user-dir" "${@:2}"
}
complete -F _mylyxcd ${filenames:-} mylyx-valgrind-leak-check-full