mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-11 14:02:52 +02:00
c16b28efad
if you copy a symlink, you create a whole new file with the contents of what that symlink points to. what we need to do instead is re-create the symlinks. this is relevant for all symlinks to the main lbmk script, from the main directory of lbmk.git. this avoids there being multiple copies of the main lbmk script, in release archives. Signed-off-by: Leah Rowe <leah@libreboot.org>
192 lines
5.9 KiB
Bash
Executable File
192 lines
5.9 KiB
Bash
Executable File
#!/usr/bin/env sh
|
|
|
|
# helper script: generate release archive (source code)
|
|
#
|
|
# Copyright (C) 2020,2021,2023 Leah Rowe <info@minifree.org>
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
|
|
[ "x${DEBUG+set}" = 'xset' ] && set -v
|
|
set -u -e
|
|
|
|
. "include/err.sh"
|
|
|
|
read projectname < projectname
|
|
|
|
trees_fetch_list="coreboot u-boot seabios"
|
|
simple_fetch_list="flashrom grub memtest86plus me_cleaner uefitool"
|
|
simple_fetch_list="${simple_fetch_list} bios_extract biosutilities"
|
|
|
|
dirlist="config util script include"
|
|
linklist="build update handle" # symlinks in main directory, to script: lbmk
|
|
filelist="lbmk README.md COPYING version versiondate projectname checkgit"
|
|
filelist="${filelist} checkversion"
|
|
|
|
version="version-unknown"
|
|
versiondate="version-date-unknown"
|
|
reldir=""
|
|
dirname=""
|
|
srcdir=""
|
|
|
|
printf "Building source code archive, version %s\n" "${version}"
|
|
|
|
main()
|
|
{
|
|
[ -f version ] && \
|
|
read version < version
|
|
[ -f versiondate ] && \
|
|
read versiondate < versiondate
|
|
|
|
create_release_directory
|
|
download_modules
|
|
copy_files
|
|
purge_files
|
|
|
|
create_release_archive
|
|
|
|
printf "Source code archive available at %s.tar.xz\n\n" "${srcdir}"
|
|
}
|
|
|
|
create_release_directory()
|
|
{
|
|
reldir="release/${version}"
|
|
dirname="${projectname}-${version}_src"
|
|
srcdir="${reldir}/${dirname}"
|
|
|
|
[ -d "release/" ] || mkdir -p release/ || \
|
|
err "create_release_directory: !mkdir -p release/"
|
|
[ -d "${reldir}/" ] || mkdir -p "${reldir}/" || \
|
|
err "create_release_directory: !mkdir -p ${reldir}/"
|
|
[ ! -d "${srcdir}/" ] || rm -Rf "${srcdir}/" || \
|
|
err "create_release_directory: !rm -Rf ${srcdir}/"
|
|
[ ! -f "${srcdir}.tar.xz" ] || \
|
|
rm -f "${srcdir}.tar.xz/" || \
|
|
err "create_release_directory: !rm -f ${srcdir}.tar.xz/"
|
|
|
|
mkdir -p "${srcdir}/" || \
|
|
err "create_release_directory: !mkdir -p ${srcdir}/"
|
|
printf "%s" "${version}" > "${srcdir}"/version || \
|
|
err "create_release_directory: ${srcdir}/version: can't create file"
|
|
}
|
|
|
|
download_modules()
|
|
{
|
|
for modname in ${trees_fetch_list}; do
|
|
[ -d "${modname}" ] || ./update project trees ${modname} || \
|
|
err "download_modules: couldn't download ${modname} trees"
|
|
done
|
|
for modname in ${simple_fetch_list}; do
|
|
[ -d "${modname}/" ] || ./update project repo ${modname} || \
|
|
err "download_modules: couldn't download ${modname} repo"
|
|
done
|
|
}
|
|
|
|
copy_files()
|
|
{
|
|
for dir in ${trees_fetch_list}; do
|
|
[ -d "${dir}" ] || continue
|
|
for subdir in "${dir}"/*; do
|
|
[ -d "${subdir}" ] || continue
|
|
[ "${subdir##*/}" = "${dir}" ] && continue
|
|
mkdir -p "${srcdir}/${dir}" || \
|
|
err "copy_files: !mkdir -p ${srcdir}/${dir}"
|
|
[ ! -d "${srcdir}/${dir}/${subdir##*/}" ] || \
|
|
rm -Rf "${srcdir}/${dir}/${subdir##*/}" || \
|
|
err "copy_f:can't rm ${srcdir}/${dir}/${subdir##*/}"
|
|
cp -R "${subdir}" "${srcdir}/${dir}/${subdir##*/}" || \
|
|
err "copy_f:can't cp ${srcdir}/${dir}/${subdir##*/}"
|
|
done
|
|
done
|
|
for dir in ${simple_fetch_list} ${dirlist}; do
|
|
cp -R "${dir}/" "${srcdir}/" || \
|
|
err "copy_files: !cp -R ${dir}/ ${srcdir}/"
|
|
done
|
|
|
|
for i in ${filelist}; do
|
|
if [ ! -f "${i}" ]; then
|
|
rm -Rf "${srcdir}" || \
|
|
err "copy_files: !rm -Rf ${srcdir}"
|
|
err "copy_files: file '${i}' does not exist"
|
|
fi
|
|
cp "${i}" "${srcdir}/" || \
|
|
err "copy_files: !cp ${i} ${srcdir}/"
|
|
done
|
|
(
|
|
cd "${srcdir}/" || err "copy_files: can't enter dir: ${srcdir}/"
|
|
for i in ${linklist}; do
|
|
ln -s lbmk "${i}" || \
|
|
err "copy_files: cannot create symlink: ${i} -> lbmk"
|
|
done
|
|
)
|
|
}
|
|
|
|
purge_files()
|
|
{
|
|
(
|
|
cd "${srcdir}/" || \
|
|
err "purge_files 3: !cd ${srcdir}/"
|
|
|
|
[ ! -d "coreboot/default/util/kbc1126" ] || \
|
|
./handle make file -c "coreboot/default/util/kbc1126" || \
|
|
err "purge_files 1: default/util/kbc1126: ! make clean"
|
|
./handle make config -x coreboot || \
|
|
err "purge_files: coreboot: cannot clean crossgcc files"
|
|
for p in u-boot seabios coreboot; do
|
|
./handle make config -c "${p}" || \
|
|
err "purge_files: ${p}: cannot clean the source trees"
|
|
done
|
|
|
|
for p in bios_extract flashrom grub uefitool; do
|
|
./handle make file -c "${p}" || \
|
|
err "purge_files: !./handle make file -c ${p}"
|
|
done
|
|
for p in 32 64; do
|
|
./handle make file -c "memtest86plus/build${p}" || \
|
|
err "purge_files: cannot clean memtest86+ build${p}"
|
|
done
|
|
for p in "nvmutil" "spkmodem_recv" "e6400-flash-unlock"; do
|
|
make clean -C "util/${p}" || \
|
|
err "purge_files 2: !make clean -C ${util}/p"
|
|
done
|
|
for p in ${trees_fetch_list}; do
|
|
rm -Rf "${p}/${p}" "${p}"/*/.git* || \
|
|
err "purge_files 1: cannot clean ${p} project files"
|
|
done
|
|
rm -Rf .git .gitignore */.git* coreboot/*/3rdparty/*/.git* \
|
|
coreboot/*/util/nvidia/cbootimage/.git* || \
|
|
err "purge_files rm-rf2: can't purge .git files/directories"
|
|
)
|
|
}
|
|
|
|
create_release_archive()
|
|
{
|
|
(
|
|
cd "${reldir}/" || \
|
|
err "create_release_archive 4: !cd ${reldir}/"
|
|
printf "%s\n" "${version}" > "${dirname}/version" || \
|
|
err "create_release_archive: can't create ${dirname}/version"
|
|
printf "%s\n" "${versiondate}" > "${dirname}/versiondate" || \
|
|
err "create_release_archive: can't create ${dirname}/versiondate"
|
|
printf "%s\n" "${projectname}" > "${dirname}/projectname" || \
|
|
err "create_release_archive: can't create ${dirname}/projectname"
|
|
tar -c "${dirname}/" | xz -T0 -9e >"${dirname}.tar.xz" || \
|
|
err "create_release_archive: can't create ${dirname}.tar.xz"
|
|
rm -Rf "${dirname}/" || \
|
|
err "create_release_archive 5: !rm -Rf ${dirname}/"
|
|
)
|
|
}
|
|
|
|
main $@
|