commit ddde8021b371c7e519e8dfbca5c1f403af7099dd
Author:     Roberto E. Vargas Caballero <[email protected]>
AuthorDate: Tue Sep 26 23:09:34 2023 +0200
Commit:     Roberto E. Vargas Caballero <[email protected]>
CommitDate: Wed Sep 27 07:59:27 2023 +0200

    Simplify install/uninstall

diff --git a/Makefile b/Makefile
index 0bae170..bd2e5b1 100644
--- a/Makefile
+++ b/Makefile
@@ -210,19 +210,18 @@ getconf.o: getconf.h
 getconf.h:
        scripts/getconf.sh > $@
 
-install: all
-       mkdir -p $(DESTDIR)$(PREFIX)/bin
-       cp -f $(BIN) $(DESTDIR)$(PREFIX)/bin
-       cd $(DESTDIR)$(PREFIX)/bin && ln -f test [ && chmod 755 $(BIN)
-       mv -f $(DESTDIR)$(PREFIX)/bin/xinstall $(DESTDIR)$(PREFIX)/bin/install
-       mkdir -p $(DESTDIR)$(MANPREFIX)/man1
-       for m in $(MAN); do sed "s/^\.Os sbase/.Os sbase $(VERSION)/g" < "$$m" 
> $(DESTDIR)$(MANPREFIX)/man1/"$$m"; done
-       cd $(DESTDIR)$(MANPREFIX)/man1 && chmod 644 $(MAN)
-       mv -f $(DESTDIR)$(MANPREFIX)/man1/xinstall.1 
$(DESTDIR)$(MANPREFIX)/man1/install.1
-
-uninstall:
-       cd $(DESTDIR)$(PREFIX)/bin && rm -f $(BIN) [ install
-       cd $(DESTDIR)$(MANPREFIX)/man1 && rm -f $(MAN) install.1
+install uninstall:
+       scripts/mkproto $@ $(DESTDIR)$(PREFIX) $(DESTDIR)$(MANPREFIX) proto
+       scripts/$@ proto
+
+sbase-box-install: sbase-box
+       scripts/mkproto $@ $(DESTDIR)$(PREFIX) $(DESTDIR)$(MANPREFIX) proto
+       scripts/$@ proto
+       $(DESTDIR)$(PREFIX)/bin/sbase-box -i $(DESTDIR)$(PREFIX)/bin/
+
+sbase-box-uninstall: sbase-box
+       $(DESTDIR)$(PREFIX)/bin/sbase-box -d $(DESTDIR)$(PREFIX)/bin/
+       $(MAKE) uninstall
 
 dist: clean
        mkdir -p sbase-$(VERSION)
@@ -235,21 +234,10 @@ sbase-box: $(BIN)
        scripts/mkbox
        $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ build/*.c $(LIB)
 
-sbase-box-install: sbase-box
-       mkdir -p $(DESTDIR)$(PREFIX)/bin
-       mkdir -p $(DESTDIR)$(MANPREFIX)/man1
-       cp -f sbase-box $(DESTDIR)$(PREFIX)/bin
-       chmod 755 $(DESTDIR)$(PREFIX)/bin/sbase-box
-       $(DESTDIR)$(PREFIX)/bin/sbase-box -i $(DESTDIR)$(PREFIX)/bin/
-       cp -f $(MAN) $(DESTDIR)$(MANPREFIX)/man1/
-       mv -f $(DESTDIR)$(MANPREFIX)/man1/xinstall.1 
$(DESTDIR)$(MANPREFIX)/man1/install.1
-
-sbase-box-uninstall: uninstall
-       cd $(DESTDIR)$(PREFIX)/bin && rm -f sbase-box
-
 clean:
        rm -f $(BIN) $(OBJ) $(LIB) sbase-box sbase-$(VERSION).tar.gz
        rm -f getconf.h
+       rm -f proto
        rm -rf build
 
 .PHONY: all install uninstall dist sbase-box-install sbase-box-uninstall clean
diff --git a/scripts/install b/scripts/install
new file mode 100755
index 0000000..b391715
--- /dev/null
+++ b/scripts/install
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+set -e
+
+while read type src dst perm
+do
+       case $type in
+       d)
+               mkdir -p $src
+               ;;
+       c)
+               cp $src $dst
+               ;;
+       *)
+               echo install: wrong entry type >&2
+               exit 1
+               ;;
+       esac
+
+       chmod $perm $dst
+done < $1
diff --git a/scripts/mkproto b/scripts/mkproto
new file mode 100755
index 0000000..0b2deb3
--- /dev/null
+++ b/scripts/mkproto
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+usage()
+{
+       echo mkproto: prefix manprefix proto>&2
+       exit 1
+}
+
+prefix=${1?$(usage)}
+manprefix=${2?$(usage)}
+proto=${3?$(usage)}
+
+trap "rm -f scripts/proto" EXIT INT QUIT TERM
+
+(set -e
+echo d $prefix/bin $prefix/bin 755
+find . -maxdepth 1 -type f -perm /111 |
+sed "s@.*@c & $prefix/bin/& 755@"
+
+echo d $manprefix/man1 $manprefix/man1 755
+find . -maxdepth 1 -name '*.1' |
+sed "s@.*@c & $manprefix/man1/& 644@") > $proto
+
+trap "" EXIT INT QUIT TERM
diff --git a/scripts/uninstall b/scripts/uninstall
new file mode 100755
index 0000000..e9c74f2
--- /dev/null
+++ b/scripts/uninstall
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+set -e
+
+while read type src dst perm
+do
+       case $type in
+       d)
+               echo $type $src $dst $perm
+               continue
+               ;;
+       c)
+               rm -f $dst
+               ;;
+       *)
+               echo uninstall: wrong entry type >&2
+               exit 1
+               ;;
+       esac
+done < $1 |
+sort -r |
+while read type src dst perm
+do
+       case $type in
+       d)
+               if test `ls $dst | wc -l` -eq 0
+               then
+                       rmdir $dst
+               fi
+               ;;
+       esac
+done

Reply via email to