#!/bin/bash # I, Ian Kelling, follow the GNU license recommendations at # https://www.gnu.org/licenses/license-recommendations.en.html. They # recommend that small programs, < 300 lines, be licensed under the # Apache License 2.0. This file contains or is part of one or more small # programs. If a small program grows beyond 300 lines, I plan to switch # its license to GPL. # Copyright 2024 Ian Kelling # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. if [[ -s ~/.bashrc ]];then . ~/.bashrc;fi cd /a/opt/mu recompile=false dryrun=false while [[ $1 == -* ]]; do case $1 in -n) dryrun=true ;; -r) recompile=true ;; --no-r) recompile=false ;; --) break ;; *) echo "$0: error: bad arg: $1" >&2; exit 1 ;; esac shift done bootstrap=false #git repo dir=/a/opt/mu-$(distro-name)$(distro-num) last_build=$dir/iank-mu-build if [[ -e $dir ]]; then m cd $dir rev=$(cat $last_build 2>/dev/null) ||: head=$(git rev-parse HEAD) if ! $recompile && ! $bootstrap && [[ $rev == "$head" ]]; then echo "already compiled" installed_info=$(file $(readlink -f $(type -P mu))) build_info=$(file $dir/build/mu/mu) if [[ $installed_info == "$build_info" ]]; then echo "already installed exiting" # this isn't perfect, because install could partially fail or the # command after it could exit 0 fi fi echo rev=$rev head=$head if [[ $rev != "$head" ]]; then bootstrap=true fi else head=$(git rev-parse HEAD) bootstrap=true fi if $dryrun; then e recompile=$recompile bootstrap=$bootstrap exit 0 fi if $bootstrap; then m rsync --delete -ra /a/opt/mu/ $dir recompile=true cd $dir fi if [[ $(debian-codename) == flidas ]]; then # use the flidas branch, stuck behind because # needs newer crypt libraries that are too troublesome. cd /a/opt/muflidas else # libgmime-3.0-dev is a newer version than build-dep installs for buster # note, currently, need newer meson than t10 m pi libgmime-3.0-dev meson fi if $recompile; then m git clean -xfffd m ./autogen.sh && make -j`nproc` # note uninstall is implemented m sudo make install else # Workaround for some indecipherable build error # that only happens after syncing the mu dir and not building from # scratch. It seems there is some state somewhere, like ~/.local # that doesn't get copied. Found the workaround by reading the Makefile, # then doing a more verbose build with: # ninja -C $PWD/build -v -d explain sudo touch -d @$(($(stat -c%Y build/build.ninja) - 100)) /usr/local/bin/emacs m sudo make install fi echo $head >$last_build