mirror of
https://github.com/chromebrew/chromebrew.git
synced 2026-01-07 22:54:11 -05:00
95 lines
2.3 KiB
Bash
Executable File
95 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Usage: yes | bash generate_binaries.sh [directory] [start]
|
|
#
|
|
# [directory] Optional directory where the binaries will be stored.
|
|
# If not provided, a directory relative to the current
|
|
# directory will be created using the current date.
|
|
#
|
|
# [start] Optional package name of the first binary build.
|
|
# Useful if you want to continue where you left off
|
|
# if the script aborts on a previous attempt.
|
|
#
|
|
# Search for required commands
|
|
cmds="crew git"
|
|
for c in $cmds; do
|
|
command -v $c > /dev/null && continue || { echo "$c command not found."; exit 1; }
|
|
done
|
|
|
|
# Determine if a packages directory exists from the cloned repository
|
|
packages_dir=$(echo $(git rev-parse --git-dir 2> /dev/null) | sed -e 's,.git,packages,')
|
|
if [ ! -d "$packages_dir" ]; then
|
|
echo "Not a valid Chromebrew repository."
|
|
exit 1
|
|
fi
|
|
|
|
# Generate working directory
|
|
if test $1; then
|
|
workdir=$1
|
|
if [ ! -d "$workdir" ]; then
|
|
mkdir -p $workdir
|
|
fi
|
|
else
|
|
workdir=$(date +%Y%m%d%H%M)
|
|
mkdir $workdir
|
|
fi
|
|
|
|
# Get architecture
|
|
arch=$(uname -m)
|
|
|
|
# Exclude fake packages
|
|
exclusions="buildessential glibc parallel wayland xorg_proto"
|
|
|
|
# Exclude packages without architecture support
|
|
if [[ "$arch" == "aarch64" || "$arch" == "armv7l" ]]; then
|
|
exclusions="$exclusions cbase dropbox freebasic google_cloud_sdk lldb mesa misctools"
|
|
fi
|
|
|
|
# Packages that need binary builds
|
|
packages=$(grep -L "$arch:" $packages_dir/*.rb | sed -e "s,$packages_dir/,,g" | cut -d'.' -f1 | xargs)
|
|
|
|
# Determine the starting package, if necessary
|
|
start=
|
|
if test $2; then
|
|
for p in $packages; do
|
|
if [[ "$2" == "$p" ]]; then
|
|
start=$2
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# Continue unless there is a starting package
|
|
continue=1
|
|
if test $start; then
|
|
continue=
|
|
fi
|
|
|
|
# Change to the working directory
|
|
cd $workdir
|
|
|
|
# Loop through packages that need a binary build
|
|
for p in $packages; do
|
|
package=$(ls $p-*.xz 2> /dev/null)
|
|
# Operate only on packages that don't already have a build
|
|
if [ ! -f "$package" ]; then
|
|
if [[ "$start" == "$p" ]]; then
|
|
continue=1
|
|
fi
|
|
# Determine if the package should be excluded
|
|
exclude=
|
|
for e in $exclusions; do
|
|
if [[ "$e" == "$p" ]]; then
|
|
exclude=1
|
|
break
|
|
fi
|
|
done
|
|
# Build only if necessary
|
|
if test $continue; then
|
|
if ! test $exclude; then
|
|
crew build $p
|
|
fi
|
|
fi
|
|
fi
|
|
done
|