overdue commit lots of changes
[buildscripts] / emacs
diff --git a/emacs b/emacs
index d6fd0c0b7c65ee2e2411f8718d626c5419a9007b..5fe4e2f4222a3e414aefa80d5385c58084d1501c 100755 (executable)
--- a/emacs
+++ b/emacs
@@ -1,5 +1,12 @@
 #!/bin/bash
-# Copyright (C) 2016 Ian Kelling
+# 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.
@@ -13,6 +20,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+
 if [[ -s ~/.bashrc ]];then . ~/.bashrc;fi
 
 #set -x
@@ -22,10 +30,12 @@ update=false
 bootstrap=false
 recompile=false
 show_pkgs=false
+dryrun=false
 
 while [[ $1 == -* ]]; do
   case $1 in
     -b) bootstrap=true; recompile=true ;;
+    -n) dryrun=true ;;
     -r) recompile=true ;;
     --no-r) recompile=false ;;
     -u) update=true ;;
@@ -58,7 +68,8 @@ for x in {35..25} ""; do
   fi
 done
 
-pkgs=(gawk attr autoconf-archive git install-info)
+# ccache is a missing build dep for mu
+pkgs=(gawk attr autoconf-archive git install-info ccache)
 ##### warning, apt-rdepends seems to look at the newest version of the package,
 ##### not the one that build-dep would install.
 if $show_pkgs; then
@@ -89,25 +100,41 @@ last_build=$dir/iank-emacs-build
 
 # e/e because autofs failing to mount will make it so
 # you cant ls whatever directory it is in, so we
-# need an extra directory
-dirs=($dir $dir-nox/.iank/e/e)
+# need an extra directory. i dunno why this was like this instead of just $dir-nox.
+#dirs=($dir $dir-nox/.iank/e/e)
+
+dirs=($dir $dir-nox)
+
+m cd /a/opt/emacs
 
 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, exiting"
+    echo "already compiled"
+    installed_info=$(file $(readlink -f $(type -P emacs)))
+    build_info=$(file $dir/src/emacs)
+    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
   if [[ $rev != "$head" ]]; then
     bootstrap=true
   fi
 else
-  m cd /a/opt/emacs
   head=$(git rev-parse HEAD)
   bootstrap=true
 fi
 
+if $dryrun; then
+  echo recompile=$recompile bootstrap=$bootstrap update=$update
+  exit 0
+fi
+
 if $bootstrap; then
   m rsync --delete -ra /a/opt/emacs/ $dir
   recompile=true
@@ -120,7 +147,7 @@ case $(distro-name) in
     ;;&
   debian|ubuntu|trisquel)
     # todo: unknown for other distros, this will fail
-    logq p -y build-dep maildir-utils/$(debian-codename)
+    logq p -y build-dep maildir-utils
     # oddly, on ubuntu 14.04 this installs postfix, but I dun care
     # ubuntu 14.04 gave this error message
     # Unable to satisfy the build-depends: Build-Depends: libpng-dev
@@ -138,17 +165,22 @@ if $recompile; then
   nox=false
   for d in ${dirs[@]}; do
     if $nox; then
-      # todo: this doesnt account for
-      m mkdir -p ${d%/*}
+      # Commented stuff in this block had something to do with ssh / autofs, im not really using nox right now,
+      # so unless I figure out why it was this way, ignore this.
+      # m mkdir -p ${d%/*}
       m rsync --delete -ra $dir/ $d
-      mp=$HOME/.iank/e/e
-      if mountpoint $mp &>/dev/null; then
-        m sudo umount $mp
-      fi
-      m mkdir -p $mp
-      m sudo mount -o bind $d $mp
-      m sudo chown $USER:$USER $mp
-      m cd $mp
+      #
+      # mp=$HOME/.iank/e/e
+      # if mountpoint $mp &>/dev/null; then
+      #   m sudo umount $mp
+      # fi
+      # m mkdir -p $mp
+      # m sudo mount -o bind $d $mp
+      # m sudo chown $USER:$USER $mp
+      # m cd $mp
+
+      #  instead of $mp above
+      m cd $d
     else
       m cd $d
     fi
@@ -195,7 +227,6 @@ if $recompile; then
     fi
     nox=true
   done
-  echo $head >$last_build
 else
   m cd ${dirs[0]}
   logq sudo make install
@@ -209,37 +240,6 @@ fi
 # from its HACKING file
 
 
-cd /a/opt/mu
-
-last_build=$PWD/iank-mu-build
-
-rev=$(cat $last_build 2>/dev/null) ||:
-head=$(git rev-parse HEAD)
-
-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
-  m sudo apt-get -y install --purge --auto-remove libgmime-3.0-dev meson
-fi
-if $recompile || [[ $rev != "$head" ]]; then
-  m git clean -xfffd
-  m ./autogen.sh && make -j`nproc`
-  # note uninstall is implemented
-  m sudo make install
-  echo $head >$last_build
-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
 
 if $recompile; then
   # note, not totally sure its right to put this within recompile, but its taking up most of the time, so going for it.
@@ -270,3 +270,5 @@ fi
 # logq make
 
 my-update-info-dir
+
+echo $head >$last_build