tons of updates, should have checked in sooner
[buildscripts] / emacs
diff --git a/emacs b/emacs
index 5300c3cbf32c1e0bc143a43685c68f3777585577..b9cc53b60824c2d67a1d73ee91a71690c173bdf4 100755 (executable)
--- a/emacs
+++ b/emacs
@@ -22,10 +22,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 ;;
@@ -42,7 +44,15 @@ export CFLAGS="-Og -g3"
 
 export DEBIAN_FRONTEND=noninteractive
 pupdate
+
+# some distros, the package name is like emacs25, some its just emacs
+ver=$(apt-cache showsrc emacs | sed -rn 's/^Version: 1:([0-9]+).*/\1/p' | sort -n | tail -n1) ||:
 for x in {35..25} ""; do
+  if [[ $ver ]] && (( ver >= x )); then
+    echo latest_emacs=emacs
+    latest_emacs=emacs
+    break
+  fi
   if apt-cache showsrc emacs$x 2>/dev/null |grep . &>/dev/null; then
     echo latest_emacs=$x
     latest_emacs=emacs$x
@@ -50,7 +60,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
@@ -70,6 +81,10 @@ fi
 
 #building emacs, INSTALL.BZR
 
+# gawk and attr were no longer automatically installed in stretch,
+# looking back, i assume i got some error.
+# autoconf-archive due to come error
+pi ${pkgs[@]}
 
 #git repo
 dir=/a/opt/emacs-$(distro-name)$(distro-num)
@@ -77,8 +92,11 @@ 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)
+
 
 if [[ -e $dir ]]; then
   m cd $dir
@@ -86,7 +104,6 @@ if [[ -e $dir ]]; then
   head=$(git rev-parse HEAD)
   if ! $recompile && ! $bootstrap && [[ $rev == "$head" ]]; then
     echo "already compiled, exiting"
-    exit 0
   fi
   if [[ $rev != "$head" ]]; then
     bootstrap=true
@@ -97,56 +114,60 @@ else
   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
 fi
 
-# gawk and attr were no longer automatically installed in stretch,
-# looking back, i assume i got some error.
-# autoconf-archive due to come error
-pi ${pkgs[@]}
+case $(distro-name) in
+  fedora )
+    logq s yum-builddep -y emacs
+    logq pi texlive-dvipng
+    ;;&
+  debian|ubuntu|trisquel)
+    # todo: unknown for other distros, this will fail
+    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
+    # this is satisfied by dvipng. the build-dep is just wrong
+    # minor bug I'm not going to bother reporting.
+    #
+    # note, useful command to see build dep packagages:
+    # apt-rdepends --build-depends --follow=DEPENDS emacs25
+    logq p -y build-dep $latest_emacs
+    ;;&
+esac
 
 if $recompile; then
-  case $(distro-name) in
-    fedora )
-      logq s yum-builddep -y emacs
-      logq pi texlive-dvipng
-      ;;&
-    debian|ubuntu|trisquel)
-      # todo: unknown for other distros, this will fail
-      logq p -y build-dep maildir-utils/$(debian-codename)
-      # 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
-      # this is satisfied by dvipng. the build-dep is just wrong
-      # minor bug I'm not going to bother reporting.
-      #
-      # note, useful command to see build dep packagages:
-      # apt-rdepends --build-depends --follow=DEPENDS emacs25
-      logq p -y build-dep $latest_emacs
-      ;;&
-  esac
-fi
 
-nox=false
-for d in ${dirs[@]}; do
-  if $nox; then
-    # todo: this doesnt account for
-    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
+  nox=false
+  for d in ${dirs[@]}; do
+    if $nox; then
+      # 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
+
+      #  instead of $mp above
+      m cd $d
+    else
+      m cd $d
     fi
-    m mkdir -p $mp
-    m sudo mount -o bind $d $mp
-    m sudo chown $USER:$USER $mp
-    m cd $mp
-  else
-    m cd $d
-  fi
-  if $recompile || [[ ! -e configure ]]; then
     # todo, consider when this should be uncommented
     #logq s make uninstall
     m find ~/.emacs.d/ -name '*.elc' -delete
@@ -171,31 +192,32 @@ for d in ${dirs[@]}; do
     export CFLAGS='-g3 -Og'
     #CFLAGS='-std=gnu99 -g3 -O2' logq ./configure --enable-link-time-optimization
     # on ubuntu 12.04, the above fails, says my c compiler won't work, so intead, just use defaults
-  fi
-  if $nox; then
-    # mix of flags from arch and debians build flags
-    # note, youd think we could just run make again, but the
-    # build system isnt smart enough, we have to recompile
-    # from scratch.
-    logq ./configure --without-x --without-sound --without-gsettings --without-gconf
-    ln -s ~/.emacs.d .
-  else
-    logq ./configure
-  fi
-  if $recompile; then
+    if $nox; then
+      # mix of flags from arch and debians build flags
+      # note, youd think we could just run make again, but the
+      # build system isnt smart enough, we have to recompile
+      # from scratch.
+      logq ./configure --without-x --without-sound --without-gsettings --without-gconf
+      ln -s ~/.emacs.d .
+    else
+      logq ./configure
+    fi
     logq make -j `nproc` bootstrap
-  fi
-
-  logq make -j `nproc`
-  if ! $nox; then
-    logq sudo make install
-    # make emacs always work for root
-    sudo /a/exe/lnf /usr/local/bin/emacs /usr/bin
-  fi
-  nox=true
-done
-echo $head >$last_build
-
+    logq make -j `nproc`
+    if ! $nox; then
+      logq sudo make install
+      # make emacs always work for root
+      sudo /a/exe/lnf /usr/local/bin/emacs /usr/bin
+    fi
+    nox=true
+  done
+  echo $head >$last_build
+else
+  m cd ${dirs[0]}
+  logq sudo make install
+  # make emacs always work for root
+  m sudo /a/exe/lnf /usr/local/bin/emacs /usr/bin
+fi
 
 #git clone https://github.com/djcb/mu
 # note: master failed on t8, i moved back to the commit before a bug
@@ -209,22 +231,30 @@ last_build=$PWD/iank-mu-build
 
 rev=$(cat $last_build 2>/dev/null) ||:
 head=$(git rev-parse HEAD)
-if $recompile || [[ $rev != "$head" ]]; then
 
-  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
-    # newer version than build-dep installs for buster
-    sudo apt-get -y install --purge --auto-remove libgmime-3.0-dev
-  fi
-  git clean -xfffd
-  ./autogen.sh
-  make
-  sudo make install
-  echo $head >~/.local/mu-build-git-revision
+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