summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <luke@HP-dv6246us-u910.(none)>2010-03-28 12:25:08 -0400
committerLuke Shumaker <lukeshu@sbcglobal.net>2015-06-26 00:30:19 -0600
commit30f1fbf2aab8ae6c45907bab2eafdb0e09998c15 (patch)
tree9166382abde44ee694b209f60e0f75b4fccc6133
parentfb5ce668f909c96628df33f9cb9421032db8dfdc (diff)
Rework rvs a lot (no longer needs complex C dependency tracker!)
Rework ./configure, and how it uses `srcdir'. Probably broke all the other packages. Oh well, everything only half-works right now.
-rw-r--r--config7
-rw-r--r--main.mk.in44
-rw-r--r--plugins/filedata/bin/commit33
-rw-r--r--plugins/filedata/bin/commit.sh (renamed from plugins/filedata/commit.sh)2
-rw-r--r--plugins/filedata/bin/get (renamed from plugins/filedata/get.sh)0
-rw-r--r--plugins/filedata/bin/get.sh23
-rw-r--r--plugins/filedata/info.mk.in1
-rw-r--r--plugins/filedata/plugin.conf.in4
-rw-r--r--plugins/files/bin/commit36
-rw-r--r--plugins/files/bin/commit.d.sh (renamed from plugins/files/commit.d.sh)0
-rw-r--r--plugins/files/bin/commit.f.sh (renamed from plugins/files/commit.f.sh)0
-rw-r--r--plugins/files/bin/commit.sh36
-rw-r--r--plugins/files/bin/get.d.sh (renamed from plugins/files/get.d.sh)0
-rw-r--r--plugins/files/bin/get.f.sh (renamed from plugins/files/get.f.sh)0
-rw-r--r--plugins/files/bin/get.sh (renamed from plugins/files/get.sh)0
-rw-r--r--plugins/files/commit.sh41
-rw-r--r--plugins/files/etc/3-d.sh20
-rw-r--r--plugins/files/etc/5-f.sh20
-rw-r--r--plugins/files/info.mk.in1
-rw-r--r--plugins/files/lib/stdio.sh (renamed from plugins/files/stdio.sh)0
-rw-r--r--plugins/files/plugin.conf.in8
-rw-r--r--plugins/main.mk.in31
-rw-r--r--plugins/plugin.mk.in53
-rw-r--r--plugins/users/bin/commit.sh (renamed from plugins/users/commit.sh)0
-rw-r--r--plugins/users/bin/init.sh (renamed from plugins/users/init.sh)0
-rw-r--r--plugins/users/bin/login.sh (renamed from plugins/users/login.sh)0
-rw-r--r--plugins/users/bin/logout.sh (renamed from plugins/users/logout.sh)0
-rw-r--r--plugins/users/bin/mkuser.sh (renamed from plugins/users/mkuser.sh)0
-rw-r--r--plugins/users/bin/rmuser.sh (renamed from plugins/users/rmuser.sh)0
-rw-r--r--plugins/users/lib/stdio.sh (renamed from plugins/users/stdio.sh)0
-rw-r--r--plugins/users/plugin.conf.in7
-rw-r--r--wrapper/TODO18
-rw-r--r--wrapper/main.mk.in57
-rw-r--r--wrapper/plugin-depend.c146
-rw-r--r--wrapper/plugin-depend.h83
-rw-r--r--wrapper/plugin-find.c103
-rw-r--r--wrapper/plugin-find.h64
-rw-r--r--wrapper/plugin-load.c78
-rw-r--r--wrapper/plugin-load.h47
-rw-r--r--wrapper/plugin-parse.c132
-rw-r--r--wrapper/plugin-parse.h49
-rw-r--r--wrapper/plugin-run.c89
-rw-r--r--wrapper/plugin-run.h47
-rw-r--r--wrapper/plugins.c71
-rw-r--r--wrapper/plugins.h69
-rw-r--r--wrapper/runcom.c92
-rw-r--r--wrapper/rvs.c117
-rw-r--r--wrapper/rvs.h76
-rw-r--r--wrapper/rvs.sh138
49 files changed, 370 insertions, 1473 deletions
diff --git a/config b/config
index afce4b7..140c270 100644
--- a/config
+++ b/config
@@ -1,4 +1,9 @@
_name='rvs'
_RVS='$(bindir)/$(rvs)'
-vars="$vars name RVS"
+ _sysconfdir='$(prefix)/etc/$(name)'
+ _BINDIR='$(sysconfdir)/bin'
+ _TMPDIR='$(sysconfdir)/tmp'
+ _LIBDIR='$(sysconfdir)/lib'
+ _ETCDIR='$(sysconfdir)/etc'
+vars="$vars name RVS sysconfdir BINDIR TMPDIR LIBDIR ETCDIR"
diff --git a/main.mk.in b/main.mk.in
index 2d55793..11fca5c 100644
--- a/main.mk.in
+++ b/main.mk.in
@@ -17,11 +17,16 @@ ver = 0.9
# along with this program; see the file COPYING.
# If not, see <http://www.gnu.org/licenses>.
-rvs = $(name)
-dirs += $(libexecdir)/$(rvs)
+sysconfdir ?= @sysconfdir@
+BINDIR ?= @BINDIR@
+TMPDIR ?= @TMPDIR@
+LIBDIR ?= @LIBDIR@
+ETCDIR ?= @ETCDIR@
+dirs += $(sysconfdir) $(BINDIR) $(TMPDIR) $(LIBDIR) $(ETCDIR)
# phony targets ######################################################
-all : wrapper p-build
+.PHONY: all
+all : wrapper plugins
.SUFFIXES :
VPATH = $(srcdir)
filelist = \
@@ -35,25 +40,11 @@ filelist = \
$(patsubst $(srcdir)/%,%,$(shell find $(srcdir)/*/* -type f))
# install ############################################################
-install : install-wrapper libexec p-install
-
-# $(libexecdir)/rvs/*
-libexec : $(DESTDIR)$(libexecdir)/$(rvs)/plugins
-$(DESTDIR)$(libexecdir)/$(rvs)/plugins : $(DESTDIR)$(libexecdir)/$(rvs)
- touch $@
-
-# uninstall ##########################################################
-
-uninstall :
- $(RM) $(DESTDIR)$(bindir)/$(rvs)
- $(RM) -r $(DESTDIR)$(libexecdir)/$(rvs)
-
-# clean ##############################################################
-
-clean : $(clean-plugins) clean-wrapper
-
-distclean : clean $(distclean-plugins) distclean-wrapper
- $(RM) Makefile
+install : install-wrapper install-plugins
+uninstall : uninstall-wrapper uninstall-plugins
+clean : clean-wrapper clean-plugins
+distclean : clean distclean-wrapper distclean-plugins
+ $(RM) Makefile *.mk
# wrapper ############################################################
@@ -69,5 +60,12 @@ $(RVS) : install-wrapper
# plugins ############################################################
-p-% : plugins/Makefile ; $(MAKE) -C plugins $*
+plugins : build-plugins
+build-plugins : plugins/ plugins/Makefile ; $(MAKE) -C $<
+uninstall-plugins : plugins/ plugins/Makefile ; $(MAKE) -C $< uninstall
+clean-plugins : plugins/ plugins/Makefile ; $(MAKE) -C $< clean
+distclean-plugins : plugins/ plugins/Makefile ; $(MAKE) -C $< distclean
+dist-plugins : plugins/ plugins/Makefile ; $(MAKE) -C $< dist
+install-plugins : plugins/ plugins/Makefile \
+ plugins $(RVS) ; $(MAKE) -C $< install
diff --git a/plugins/filedata/bin/commit b/plugins/filedata/bin/commit
new file mode 100644
index 0000000..9b7f59a
--- /dev/null
+++ b/plugins/filedata/bin/commit
@@ -0,0 +1,33 @@
+#!/bin/sh
+name='rvs filedata commit'
+ver=0.9
+# Copyright (C) 2009 Luke Shumaker
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING.
+# If not, see <http://www.gnu.org/licenses>.
+
+out="$1"
+file="$2"
+hash="`cat /dev/stdin`"
+
+temp=`mktemp`
+echo "Hash: $hash" > "$temp"
+stat "$file" >> "$temp"
+
+meta=`sha1sum "$temp" | sed "s/ .*$//"`
+if [ ! -f "$REPO/@ID@/$hash" ]; then
+ install -m 644 -o $USER -g $USER -T "$temp" "$REPO/@ID@/$meta"
+fi
+echo "$meta"
+
diff --git a/plugins/filedata/commit.sh b/plugins/filedata/bin/commit.sh
index f046db4..9b7f59a 100644
--- a/plugins/filedata/commit.sh
+++ b/plugins/filedata/bin/commit.sh
@@ -25,7 +25,7 @@ temp=`mktemp`
echo "Hash: $hash" > "$temp"
stat "$file" >> "$temp"
-meta=`sha1sum $temp | sed "s/ .*$//"`
+meta=`sha1sum "$temp" | sed "s/ .*$//"`
if [ ! -f "$REPO/@ID@/$hash" ]; then
install -m 644 -o $USER -g $USER -T "$temp" "$REPO/@ID@/$meta"
fi
diff --git a/plugins/filedata/get.sh b/plugins/filedata/bin/get
index 321d5f8..321d5f8 100644
--- a/plugins/filedata/get.sh
+++ b/plugins/filedata/bin/get
diff --git a/plugins/filedata/bin/get.sh b/plugins/filedata/bin/get.sh
new file mode 100644
index 0000000..321d5f8
--- /dev/null
+++ b/plugins/filedata/bin/get.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+name='rvs filedata get'
+ver=0.9
+# Copyright (C) 2009 Luke Shumaker
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING.
+# If not, see <http://www.gnu.org/licenses>.
+
+out="$1"
+
+echo "yeah, this hasn't been coded yet, sorry!"
+
diff --git a/plugins/filedata/info.mk.in b/plugins/filedata/info.mk.in
index 77643cd..0746843 100644
--- a/plugins/filedata/info.mk.in
+++ b/plugins/filedata/info.mk.in
@@ -1,2 +1,3 @@
name = filedata
ver = 0.9
+priority = 1
diff --git a/plugins/filedata/plugin.conf.in b/plugins/filedata/plugin.conf.in
deleted file mode 100644
index d7c834c..0000000
--- a/plugins/filedata/plugin.conf.in
+++ /dev/null
@@ -1,4 +0,0 @@
-# rvs @name@ plugins.conf
-# ver=@ver@
-commit:repo-0.9/commit
-get
diff --git a/plugins/files/bin/commit b/plugins/files/bin/commit
new file mode 100644
index 0000000..63eaac1
--- /dev/null
+++ b/plugins/files/bin/commit
@@ -0,0 +1,36 @@
+#!/bin/sh
+name='rvs files commit'
+ver=0.9
+# Copyright (C) 2009-2010 Luke Shumaker
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING.
+# If not, see <http://www.gnu.org/licenses>.
+
+source "$libexecdir/@ID@/stdio"
+
+# commit FILE
+file=${1-.} # take arg1 as the file, default to the current directory
+
+if [ ! -e "$file" ]; then
+ error "file \`$file' does not exist";
+else
+ foundMod='false';
+ for type in select/*; do
+ if "$type" "$file"; then foundMod='true'; break; fi
+ done
+ if [ "$foundMod" == 'false' ]; then
+ error "cannot handle file type of \`$file'"
+ fi
+fi
+
diff --git a/plugins/files/commit.d.sh b/plugins/files/bin/commit.d.sh
index f5b432b..f5b432b 100644
--- a/plugins/files/commit.d.sh
+++ b/plugins/files/bin/commit.d.sh
diff --git a/plugins/files/commit.f.sh b/plugins/files/bin/commit.f.sh
index a86e5b5..a86e5b5 100644
--- a/plugins/files/commit.f.sh
+++ b/plugins/files/bin/commit.f.sh
diff --git a/plugins/files/bin/commit.sh b/plugins/files/bin/commit.sh
new file mode 100644
index 0000000..63eaac1
--- /dev/null
+++ b/plugins/files/bin/commit.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+name='rvs files commit'
+ver=0.9
+# Copyright (C) 2009-2010 Luke Shumaker
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING.
+# If not, see <http://www.gnu.org/licenses>.
+
+source "$libexecdir/@ID@/stdio"
+
+# commit FILE
+file=${1-.} # take arg1 as the file, default to the current directory
+
+if [ ! -e "$file" ]; then
+ error "file \`$file' does not exist";
+else
+ foundMod='false';
+ for type in select/*; do
+ if "$type" "$file"; then foundMod='true'; break; fi
+ done
+ if [ "$foundMod" == 'false' ]; then
+ error "cannot handle file type of \`$file'"
+ fi
+fi
+
diff --git a/plugins/files/get.d.sh b/plugins/files/bin/get.d.sh
index 46e1eeb..46e1eeb 100644
--- a/plugins/files/get.d.sh
+++ b/plugins/files/bin/get.d.sh
diff --git a/plugins/files/get.f.sh b/plugins/files/bin/get.f.sh
index e6b79d5..e6b79d5 100644
--- a/plugins/files/get.f.sh
+++ b/plugins/files/bin/get.f.sh
diff --git a/plugins/files/get.sh b/plugins/files/bin/get.sh
index 4d0d48f..4d0d48f 100644
--- a/plugins/files/get.sh
+++ b/plugins/files/bin/get.sh
diff --git a/plugins/files/commit.sh b/plugins/files/commit.sh
deleted file mode 100644
index 32d3042..0000000
--- a/plugins/files/commit.sh
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/bin/sh
-name='rvs files commit'
-ver=0.9
-# Copyright (C) 2009 Luke Shumaker
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; see the file COPYING.
-# If not, see <http://www.gnu.org/licenses>.
-
-source "$libexecdir/@ID@/stdio"
-
-# commit FILE
-file=${1-.}
-
-if [ ! -e $file ]; then error "file \`$file' does not exist";
-# START file type list
-elif [ -L $file ]; then type='l'; # symbolic link
-elif [ -b $file ]; then type='b'; # block (buffered) special
-elif [ -c $file ]; then type='c'; # character (unbuffered) special
-elif [ -d $file ]; then type='d'; # directory
-elif [ -p $file ]; then type='p'; # named pipe (FIFO)
-elif [ -f $file ]; then type='f'; # regular file
-elif [ -s $file ]; then type='s'; # socket
-#elif [ -D $file ]; then type='D'; # door (Solaris only)
-# END file type list
-else error "could not identify file type of \`$file'"
-fi
-
-out "+$type `pwd`/$file"
-"$RVS" commit.$type "$file"
-
diff --git a/plugins/files/etc/3-d.sh b/plugins/files/etc/3-d.sh
new file mode 100644
index 0000000..91163dc
--- /dev/null
+++ b/plugins/files/etc/3-d.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+#name=''
+#ver=0.9
+# Copyright (C) 2009-2010 Luke Shumaker
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING.
+# If not, see <http://www.gnu.org/licenses>.
+
+if [ -f $file ]; then echo 'd'; fi
diff --git a/plugins/files/etc/5-f.sh b/plugins/files/etc/5-f.sh
new file mode 100644
index 0000000..975992a
--- /dev/null
+++ b/plugins/files/etc/5-f.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+#name=''
+#ver=0.9
+# Copyright (C) 2009-2010 Luke Shumaker
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING.
+# If not, see <http://www.gnu.org/licenses>.
+
+if [ -f $file ]; then echo 'f'; fi
diff --git a/plugins/files/info.mk.in b/plugins/files/info.mk.in
index d7ccb97..7552306 100644
--- a/plugins/files/info.mk.in
+++ b/plugins/files/info.mk.in
@@ -1,2 +1,3 @@
name = files
ver = 0.9
+priority = 0
diff --git a/plugins/files/stdio.sh b/plugins/files/lib/stdio.sh
index 9062683..9062683 100644
--- a/plugins/files/stdio.sh
+++ b/plugins/files/lib/stdio.sh
diff --git a/plugins/files/plugin.conf.in b/plugins/files/plugin.conf.in
deleted file mode 100644
index 2359dd5..0000000
--- a/plugins/files/plugin.conf.in
+++ /dev/null
@@ -1,8 +0,0 @@
-# rvs @name@ plugins.conf
-# ver=@ver@
-commit
-commit.d
-commit.f
-get
-get.d
-get.f
diff --git a/plugins/main.mk.in b/plugins/main.mk.in
index f0401d1..3039c1f 100644
--- a/plugins/main.mk.in
+++ b/plugins/main.mk.in
@@ -17,22 +17,37 @@
# along with this program; see the file COPYING.
# If not, see <http://www.gnu.org/licenses>.
+sysconfdir ?= @sysconfdir@
+BINDIR ?= @BINDIR@
+TMPDIR ?= @TMPDIR@
+LIBDIR ?= @LIBDIR@
+ETCDIR ?= @ETCDIR@
+dirs += $(sysconfdir) $(BINDIR) $(TMPDIR) $(LIBDIR) $(ETCDIR)
+
mods = $(patsubst ./%,%,$(shell find ./* -maxdepth 0 -type d))
+mods-build = $(addprefix build-,$(mods))
+mods-install = $(addprefix install-,$(mods))
+mods-clean = $(addprefix clean-,$(mods))
+mods-distclean = $(addprefix distclean-,$(mods))
.PHONY : all
all : build
-.PHONY : install build
-install : $(addprefix install-,$(mods))
-build : $(addprefix build-,$(mods))
+.PHONY : build install clean distclean
+# $(mods-build) $(mods-install) $(mods-clean) $(mods-distclean)
+build : $(mods-build)
+install : $(mods-install)
+clean : $(mods-clean)
+distclean : $(mods-distclean)
+ $(RM) Makefile *.mk
.SECONDARY:
%/main.mk : plugin.mk %/; cp $< $@
-complete-% : %/ %/main.mk; :
-build-% : %/ complete-% %/main.mk; $(MAKE) -C $<
-install-% : %/ complete-% %/main.mk; $(MAKE) -C $< install
-clean-% : %/ complete-% %/main.mk; $(MAKE) -C $< clean
-distclean-% : %/ complete-% %/main.mk; $(MAKE) -C $< distclean
+complete-% : %/ %/main.mk; :
+build-% : %/ complete-% %/main.mk; $(MAKE) -C $<
+install-% : %/ complete-% %/main.mk; $(MAKE) -C $< install
+clean-% : %/ complete-% %/main.mk; -$(MAKE) -C $< clean
+distclean-% : %/ complete-% %/main.mk; $(MAKE) -C $< distclean
diff --git a/plugins/plugin.mk.in b/plugins/plugin.mk.in
index 6980538..8af5fcc 100644
--- a/plugins/plugin.mk.in
+++ b/plugins/plugin.mk.in
@@ -18,37 +18,51 @@ include info.mk # this contains the actuall name/version for the plugin
# along with this program; see the file COPYING.
# If not, see <http://www.gnu.org/licenses>.
+sysconfdir ?= @sysconfdir@
+BINDIR ?= @BINDIR@
+TMPDIR ?= @TMPDIR@
+LIBDIR ?= @LIBDIR@
+ETCDIR ?= @ETCDIR@
+dirs += $(sysconfdir) $(BINDIR) $(TMPDIR) $(LIBDIR) $(ETCDIR)
+
rvs = @name@
id = $(name)-$(ver)
# phony targets ####################################################
all : $(name)
-.PHONY : $(name) install uninstall clean distclean dist
+.PHONY : $(name) install uninstall clean distclean
.SUFFIXES :
# build ############################################################
-mysrcdir = $(srcdir)/plugins/$(name)
-myoutdir = out
+$(info srcdir:$(srcdir))
-srcFiles = $(filter-out %/Makefile.in,$(shell find $(mysrcdir)/ -type f))
+srcFiles = $(filter-out %/Makefile.in,$(shell find $(srcdir)/ -type f))
shSrcFiles = $(filter %.sh,$(srcFiles))
-shOutFiles = $(patsubst $(mysrcdir)/%,$(myoutdir)/%,$(basename $(shSrcFiles)))
+shOutFiles = $(patsubst $(srcdir)/%,%,$(basename $(shSrcFiles)))
-$(name) : $(myoutdir) $(shOutFiles) $(myoutdir)/plugin.conf
-
-$(myoutdir)/plugin.conf : $(mysrcdir)/plugin.conf.in
- $(INSTALL_DATA) $< $@
- $(SED) -i \
- -e 's/$bname@/$(subst /,\/,$(name))/g' \
- -e 's/$bver@/$(subst /,\/,$(ver))/g' \
- $@
+outFiles = $(shOutFiles)
+outBin = $(addprefix bin-,$(notdir $(filter bin/%,$(outFiles))))
+outEtc = $(addprefix $(ETCDIR)/$(name),$(notdir $(filter etc/%,$(outFiles))))
+outLib = $(addprefix $(LIBDIR)/$(name),$(notdir $(filter lib/%,$(outFiles))))
+$(name) : $(myoutdir) $(shOutFiles)
# (un)install ######################################################
-install : all
- $(RVS) install $(name)-$(ver) $(myoutdir)
+install : $(outBin) $(outEtc) $(outLib)
+
+unbin-% : bin/%
+ $(RVS) uninstall $(notdir $<) $(name)
+
+bin-% : bin/%
+ $(RVS) install $< $(notdir $<) $(name) $(priority)
+
+$(ECTDIR)/$(name)/% : etc/%
+ $(CP) $< $@
+
+$(LIBDIR)/$(name)/% : lib/%
+ $(CP) $< $@
uninstall :
$(RVS) uninstall $(name)
@@ -58,14 +72,14 @@ uninstall :
clean :
distclean : clean
- $(RM) Makefile
- $(RM) -r out
+ find ./ -name Makefile -exec $(RM) '{}' \;
+ find ./ -name '*.mk' -exec $(RM) '{}' \;
# implicit rules ###################################################
b := @
# build shell scripts
-$(myoutdir)/% : $(mysrcdir)/%.sh $(myoutdir)
+% : %.sh
$(INSTALL_PROGRAM) $< $@
$(SED) -i \
-e 's/$bSHELL@/$(subst /,\/,$(SHELL))/g' \
@@ -73,6 +87,3 @@ $(myoutdir)/% : $(mysrcdir)/%.sh $(myoutdir)
-e 's/$bID@/$(subst /,\/,$(id))/g' \
$@
-$(DESTDIR)$(libexecdir)/$(rvs) $(myoutdir) :
- $(MKDIR) $@
-
diff --git a/plugins/users/commit.sh b/plugins/users/bin/commit.sh
index 1fa2e52..1fa2e52 100644
--- a/plugins/users/commit.sh
+++ b/plugins/users/bin/commit.sh
diff --git a/plugins/users/init.sh b/plugins/users/bin/init.sh
index 142f54c..142f54c 100644
--- a/plugins/users/init.sh
+++ b/plugins/users/bin/init.sh
diff --git a/plugins/users/login.sh b/plugins/users/bin/login.sh
index 40a5830..40a5830 100644
--- a/plugins/users/login.sh
+++ b/plugins/users/bin/login.sh
diff --git a/plugins/users/logout.sh b/plugins/users/bin/logout.sh
index 260846e..260846e 100644
--- a/plugins/users/logout.sh
+++ b/plugins/users/bin/logout.sh
diff --git a/plugins/users/mkuser.sh b/plugins/users/bin/mkuser.sh
index 6f72ea9..6f72ea9 100644
--- a/plugins/users/mkuser.sh
+++ b/plugins/users/bin/mkuser.sh
diff --git a/plugins/users/rmuser.sh b/plugins/users/bin/rmuser.sh
index 604f359..604f359 100644
--- a/plugins/users/rmuser.sh
+++ b/plugins/users/bin/rmuser.sh
diff --git a/plugins/users/stdio.sh b/plugins/users/lib/stdio.sh
index edf7c01..edf7c01 100644
--- a/plugins/users/stdio.sh
+++ b/plugins/users/lib/stdio.sh
diff --git a/plugins/users/plugin.conf.in b/plugins/users/plugin.conf.in
deleted file mode 100644
index 9b1b35c..0000000
--- a/plugins/users/plugin.conf.in
+++ /dev/null
@@ -1,7 +0,0 @@
-# rvs @name@ plugins.conf
-# ver=@ver@
-commit:repo-0.9/commit
-login
-logout
-mkuser
-rmuser
diff --git a/wrapper/TODO b/wrapper/TODO
deleted file mode 100644
index b1ab1d9..0000000
--- a/wrapper/TODO
+++ /dev/null
@@ -1,18 +0,0 @@
-#! /bin/less
-
-* plugin-run.h:
- the function _plugin_sh_mktemp() is an ugly hack, it exists
- because
- a) it is secure
- b) it is easier to write a hack using methods I understand,
- than learn those I don't
- c) point `b' especially when I just want to get it working.
- d) point `b' especially since I think I coded it in
- studyhall one day, which means I didn't have internet
- access (no glibc documenation).
-* everything:
- with plugin commands, have arg1 be a file to write output to
-
-~ Luke Shumaker
-Happy Hacking!
-
diff --git a/wrapper/main.mk.in b/wrapper/main.mk.in
index ecc6cc6..0f24d6b 100644
--- a/wrapper/main.mk.in
+++ b/wrapper/main.mk.in
@@ -17,59 +17,48 @@ ver = 0.9
# along with this program; see the file COPYING.
# If not, see <http://www.gnu.org/licenses>.
-rvs = @name@
-dirs += $(libexecdir)/$(rvs)
-
-CFLAGS = -g \
- -DNAME=\"$(name)\" \
- -DVER=\"$(ver)\" \
- -Dlibexecdir=\"$(libexecdir)/$(rvs)\" \
- -Dplugin_conf=\"plugin.conf\"
+sysconfdir ?= @sysconfdir@
+BINDIR ?= @BINDIR@
+TMPDIR ?= @TMPDIR@
+LIBDIR ?= @LIBDIR@
+ETCDIR ?= @ETCDIR@
+dirs += $(sysconfdir) $(BINDIR) $(TMPDIR) $(LIBDIR) $(ETCDIR)
# phony targets ####################################################
-all : Makefiles rvs runcom
-.PHONY : install uninstall clean distclean dist install-runcom
-.SUFFIXES : .c .o
-VPATH = $(srcdir)/wrapper
-filelist=$(patsubst $(srcdir)/wrapper/%,%,$(shell find $(srcdir)/wrapper/* -type f))
+.PHONY : all
+all : Makefiles rvs
+VPATH = $(srcdir)
+filelist=$(patsubst $(srcdir)/%,%,$(shell find $(srcdir)/* -type f))
# most everything ##################################################
-RUNCOM = $(DESTDIR)$(libexecdir)/$(rvs)/runcom
-install : $(RVS) $(RUNCOM)
-$(RVS) : rvs $(dir $(RVS))
- $(INSTALL_PROGRAM) $< $@
-
-OBJ = runcom.o rvs.o plugins.o \
- plugin-depend.o \
- plugin-find.o \
- plugin-load.o \
- plugin-parse.o \
- plugin-run.o \
-runcom: $(OBJ)
- $(CC) -o $@ $^
-
-$(RUNCOM): runcom $(dir $(RUNCOM))
+# the installed wrapper
+$(RVS) : rvs $(dir $(RVS))
$(INSTALL_PROGRAM) $< $@
+# build the wrapper
b := @
-# build shell scripts
rvs : rvs.sh
$(INSTALL_PROGRAM) $< $@
$(SED) -i \
-e 's/$bSHELL@/$(subst /,\/,$(SHELL))/g' \
- -e 's/$bname@/$(rvs)/g' \
- -e 's/$blibexecdir@/$(subst /,\/,$(libexecdir))/g' \
+ -e 's/$bname@/$(subst /,\/,$(rvs))/g' \
+ -e 's/$bBINDIR@/$(subst /,\/,$(BINDIR))/' \
+ -e 's/$bTMPDIR@/$(subst /,\/,$(TMPDIR))/' \
+ -e 's/$bLIBDIR@/$(subst /,\/,$(LIBDIR))/' \
+ -e 's/$bETCDIR@/$(subst /,\/,$(ETCDIR))/' \
$@
+# standard targes ####################################################
+.PHONY : install uninstall clean distclean
+install : $(RVS)
+
uninstall :
$(RM) $(RVS)
- $(RM) $(DESTDIR)$(libexecdir)/$(rvs)/runcom
clean :
- $(RM) *.o *.d
distclean : clean
$(RM) rvs
- $(RM) Makefile
+ $(RM) Makefile *.mk
diff --git a/wrapper/plugin-depend.c b/wrapper/plugin-depend.c
deleted file mode 100644
index de21a93..0000000
--- a/wrapper/plugin-depend.c
+++ /dev/null
@@ -1,146 +0,0 @@
-/* wrapper/plugin-depend.c -- load a command dependancy tree
- system depends: <string.h> <error.h>
- Copyright (C) 2009 Luke Shumaker
-
- This file is part of rvs.
-
- rvs is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your
- option) any later version.
-
- rvs is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with rvs; see the file COPYING.
- If not, write to the Free Software Foundation,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <string.h>
-#include <error.h>
-
-#include "rvs.h"
-#include "plugin-find.h"
-
-#include "plugin-depend.h"
-
-/* translates a string in format `plugin/command' into a pointer to the command
- DON'T plan on using the string again, it will be mutilated!
- (so we go ahead and free() it and set the pointer to NULL) */
-struct plugin_command *
-plugin_depend_parse (char **string,
- struct plugin *plugins,
- struct plugin_command *root)
-{
- struct plugin_command *command=NULL;
-
- if (*string==NULL)
- command=root;
- else {
- /* *string is in the format `plugin/command' */
- /* char *del=delimeter */
- char *del=strchr(*string,'/');
- del[0]='\0';
- /* *string = PLUGIN_NAME */
- /* &del[1] = COMMAND_NAME */
- struct plugin *plugin;
- plugin =plugin_find_plugin(plugins, *string );
- if (plugin==NULL)
- error(EXIT_FAILURE,0,"cannot find plugin `%s'",*string);
- command=plugin_find_plugin_command(plugin->commands, &del[1] );
- if (command==NULL)
- error(EXIT_FAILURE,0,
- "plugin `%s' does not contain command `%s'",
- *string,&del[1]);
- xfree(*string);
- *string=NULL;
- }
- return command;
-}
-
-/* used by plugin_depend_add */
-void
-_plugin_depend_add (struct plugin_command *prev,
- struct plugin_command *next)
-{
- if (prev->d_next==NULL) {
- prev->d_next=next;
- } else {
- _plugin_depend_add(prev->d_next,next);
- }
-}
-
-/* plugin_depend_add(depend,depender) */
-void
-plugin_depend_add (struct plugin_command *depend,
- struct plugin_command *depender)
-{
- if (depend->d_child==NULL) {
- depend->d_child=depender;
- } else {
- _plugin_depend_add(depend->d_child,depender);
- }
-}
-
-/* take care of depends for `command' */
-void
-plugin_depend_command (struct plugin_command *command,
- struct plugin *plugins,
- struct plugin_command *root, int ind)
-{
- if (command!=NULL) {
- if (command->depend == NULL) {
- /* the depend still needs to be parsed */
- command->depend=plugin_depend_parse(
- &(command->depends),plugins,root);
- }
- plugin_depend_add(command->depend,command);
- }
-}
-
-/* take care of commands for a `plugin', and those after it (linked list) */
-void
-plugin_depend_plugin_all (struct plugin *plugin,
- struct plugin *plugins,
- struct plugin_command *root)
-{
- plugin_depend_command(plugin->commands,plugins,root,0);
- if (plugin->next != NULL) {
- plugin_depend_plugin_all(plugin->next,plugins,root);
- }
-}
-
-/* take care of all depends */
-struct plugin_command *
-plugin_depend_all (struct plugin *plugins)
-{
- struct plugin_command *root=plugin_mk_command();
-
- plugin_depend_plugin_all(plugins,plugins,root);
- return root;
-}
-
-void
-_plugin_depend_list (struct plugin_command_list *commands,
- struct plugin *plugins,
- struct plugin_command *root,int ind)
-{
- if (commands!=NULL) {
- plugin_depend_command(commands->command,plugins,root,ind++);
- _plugin_depend_list(commands->next,plugins,root,ind++);
- }
-}
-
-struct plugin_command *
-plugin_depend_list (struct plugin_command_list *commands,
- struct plugin *plugins)
-{
- struct plugin_command *root=plugin_mk_command();
- _plugin_depend_list(commands,plugins,root,0);
- return root;
-}
-
diff --git a/wrapper/plugin-depend.h b/wrapper/plugin-depend.h
deleted file mode 100644
index 580c03f..0000000
--- a/wrapper/plugin-depend.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* wrapper/plugin-parse.h -- parse rvs plugin config files
- system depends: <stdio.h> <string.h> <error.h>
- Copyright (C) 2009 Luke Shumaker
-
- This file is part of rvs.
-
- rvs is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your
- option) any later version.
-
- rvs is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with rvs; see the file COPYING.
- If not, write to the Free Software Foundation,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef FILE_plugin_depend_h_SEEN
-#define FILE_plugin_depend_h_SEEN
-
-#include "plugins.h"
-#include "plugin-find.h"
-
-/* translates a string in format `plugin/command' into a pointer to the command
- DON'T plan on using the string again, it will be mutilated!
- (so we go ahead and free() it and set the pointer to NULL) */
-extern
-struct plugin_command *
-plugin_depend_parse (char **string,
- struct plugin *plugins,
- struct plugin_command *root);
-
-/* used by plugin_depend_add */
-extern
-void
-_plugin_depend_add (struct plugin_command *prev,
- struct plugin_command *next);
-
-/* plugin_depend_add(depend,depender) */
-extern
-void
-plugin_depend_add (struct plugin_command *depend,
- struct plugin_command *depender);
-
-/* take care of depends for `command' */
-extern
-void
-plugin_depend_command (struct plugin_command *command,
- struct plugin *plugins,
- struct plugin_command *root, int ind);
-
-/* take care of commands for a `plugin', and those after it (linked list) */
-extern
-void
-plugin_depend_plugin_all (struct plugin *plugin,
- struct plugin *plugins,
- struct plugin_command *root);
-
-/* take care of all depends */
-extern
-struct plugin_command *
-plugin_depend_all (struct plugin *plugins);
-
-extern
-void
-_plugin_depend_list (struct plugin_command_list *commands,
- struct plugin *plugins,
- struct plugin_command *root,int ind);
-
-extern
-struct plugin_command *
-plugin_depend_list (struct plugin_command_list *commands,
- struct plugin *plugins);
-
-
-
-
-#endif
-
diff --git a/wrapper/plugin-find.c b/wrapper/plugin-find.c
deleted file mode 100644
index 98e16af..0000000
--- a/wrapper/plugin-find.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/* wrapper/plugin-find.h -- search functions for rvs plugins
- system depends: <string.h>
- Copyright (C) 2009 Luke Shumaker
-
- This file is part of rvs.
-
- rvs is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your
- option) any later version.
-
- rvs is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with rvs; see the file COPYING.
- If not, write to the Free Software Foundation,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <string.h> /* only uses `strcmp' */
-
-#include "rvs.h"
-#include "plugins.h"
-
-#include "plugin-find.h"
-
-/* returns first plugin with `name' (duplicates are... unwise) */
-struct plugin *
-plugin_find_plugin(struct plugin *node, char *name)
-{
-
- if (node==NULL)
- return node;
- else {
- if (strcmp(node->name,name) == 0)
- return node;
- else
- return plugin_find_plugin(node->next,name);
- }
-}
-
-/* returns plugin `name within plugin `node' */
-struct plugin_command *
-plugin_find_plugin_command(struct plugin_command *node, char *name)
-{
- if (node==NULL)
- return node;
- else {
- if (strcmp(node->name,name) == 0)
- return node;
- else
- return plugin_find_plugin_command(node->next,name);
- }
-}
-
-/* returns the first command with `name' it finds */
-struct plugin_command *
-plugin_find_command(struct plugin *plugin, char *name)
-{
- if (plugin==NULL)
- return NULL;
- else {
- struct plugin_command *ret;
- ret=plugin_find_plugin_command(plugin->commands,name);
- if (ret == NULL)
- ret=plugin_find_command(plugin->next,name);
- return ret;
- }
-}
-
-/* returns a linked list of all commands with `name' it finds */
-struct plugin_command_list *
-plugin_find_commands(struct plugin *plugin, char *name)
-{
- if (plugin==NULL)
- return NULL;
- else {
- struct plugin_command *command;
- command=plugin_find_command(plugin,name);
- struct plugin_command_list *node;
- if (command==NULL)
- node=plugin_find_commands(plugin->next,name);
- else {
- node=xmalloc( sizeof *node );
- node->command=command;
- node->next=plugin_find_commands(plugin->next,name);
- }
- return node;
- }
-}
-
-void
-plugin_free_list(struct plugin_command_list *node)
-{
- if (node!=NULL) {
- plugin_free_list(node->next);
- xfree(node);
- }
-}
-
diff --git a/wrapper/plugin-find.h b/wrapper/plugin-find.h
deleted file mode 100644
index 0185117..0000000
--- a/wrapper/plugin-find.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* wrapper/plugin-find.h -- search functions for rvs plugins
- system depends: <string.h>
- Copyright (C) 2009 Luke Shumaker
-
- This file is part of rvs.
-
- rvs is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your
- option) any later version.
-
- rvs is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with rvs; see the file COPYING.
- If not, write to the Free Software Foundation,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef FILE_plugin_find_h_SEEN
-#define FILE_plugin_find_h_SEEN
-
-#include <string.h> /* only uses `strcmp' */
-
-#include "rvs.h"
-#include "plugins.h"
-
-/*------------------------------struct------------------------------*/
-/* a linked list of commands, for use by `plugin_find_commands' */
-struct plugin_command_list
-{
- struct plugin_command *command;
- struct plugin_command_list *next;
-};
-
-/*-----------------------------function-----------------------------*/
-/* returns first plugin with `name' (duplicates are... unwise) */
-extern
-struct plugin *
-plugin_find_plugin(struct plugin *node, char *name);
-
-/* returns plugin `name within plugin `node' */
-extern
-struct plugin_command *
-plugin_find_plugin_command(struct plugin_command *node, char *name);
-
-/* returns the first command with `name' it finds */
-extern
-struct plugin_command *
-plugin_find_command(struct plugin *plugin, char *name);
-
-/* returns a linked list of all commands with `name' it finds */
-extern
-struct plugin_command_list *
-plugin_find_commands(struct plugin *plugin, char *name);
-
-extern
-void
-plugin_free_list(struct plugin_command_list *node);
-
-#endif
-
diff --git a/wrapper/plugin-load.c b/wrapper/plugin-load.c
deleted file mode 100644
index 142fcd5..0000000
--- a/wrapper/plugin-load.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* wrapper/plugin-load.h -- load rvs plugins into mem
- system depens: <stdio.h>, GNU <string.h>
- Copyright (C) 2009 Luke Shumaker
-
- This file is part of rvs.
-
- rvs is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your
- option) any later version.
-
- rvs is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with rvs; see the file COPYING.
- If not, write to the Free Software Foundation,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <stdio.h>
-#include <string.h>
-
-#include "rvs.h"
-#include "plugins.h"
-#include "plugin-parse.h"
-
-#include "plugin-load.h"
-
-/*- plugin_load ----------------------------------------------------*\
- now, load plugin plug_name,
-\* whose configuration file is plugin_conf */
-struct plugin *
-plugin_load (const char *plug_name)
-{
- struct plugin *plugin=xmalloc( sizeof(*plugin) );
- plugin->name=stralloc(plug_name);
- plugin->next=NULL;
-
- xchdir(plug_name);
- FILE *file = xfopen(plugin_conf,"r");
- plugin->commands=plugin_parse(plugin, file);
- fclose( file );
- xchdir("..");
-
- return plugin;
-}
-
-/*- load_plugins ---------------------------------------------------*\
- Load all the plugins
- assume we're in rvs's libexecdir, where plugins are
-\* Use `plugin_conf' as the name of the config file for each plugin */
-
-struct plugin *
-load_plugins (FILE *list)
-{
- struct plugin *first=NULL; /* we return this */
- struct plugin **prev=&first; /* this is the previous plugin->next */
- struct plugin *plugin; /* this is the current plugin */
-
- size_t nbytes = 10;
- char *plug_name=(char *)xmalloc(nbytes);
- while ( getline(&plug_name, &nbytes, list) > 0 ) {
- char *del=strchr(plug_name,'\n');
- del[0]='\0';
- /*if (strlen(plug_name)!=0) {*/
- if (plug_name[0]!='\0') {;
- plugin=plugin_load(plug_name);
- *prev=plugin;/* this sets the last's `next' */
- prev=&plugin->next;
- }
- }
-
- return first;
-}
-
diff --git a/wrapper/plugin-load.h b/wrapper/plugin-load.h
deleted file mode 100644
index f214151..0000000
--- a/wrapper/plugin-load.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* wrapper/plugin-load.h -- load rvs plugins into mem
- system depens: <stdio.h>, GNU <string.h>
- Copyright (C) 2009 Luke Shumaker
-
- This file is part of rvs.
-
- rvs is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your
- option) any later version.
-
- rvs is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with rvs; see the file COPYING.
- If not, write to the Free Software Foundation,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef FILE_plugin_load_h_SEEN
-#define FILE_plugin_load_h_SEEN
-
-#include <stdio.h>
-#include <string.h>
-
-#include "rvs.h"
-#include "plugins.h"
-#include "plugin-parse.h"
-
-/*- plugin_load ----------------------------------------------------*\
- now, load plugin plug_name,
-\* whose configuration file is plugin_conf */
-extern
-struct plugin *
-plugin_load (const char *plug_name);
-
-/*- load_plugins ---------------------------------------------------*\
- Load all the plugins
- assume we're in rvs's libexecdir, where plugins are
-\* Use `plugin_conf' as the name of the config file for each plugin */
-extern
-struct plugin *
-load_plugins (FILE *list);
-#endif
-
diff --git a/wrapper/plugin-parse.c b/wrapper/plugin-parse.c
deleted file mode 100644
index 4a35586..0000000
--- a/wrapper/plugin-parse.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/* wrapper/plugin-parse.c -- parse rvs plugin config files
- system depends: <stdio.h> <string.h> <error.h>
- Copyright (C) 2009 Luke Shumaker
-
- This file is part of rvs.
-
- rvs is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your
- option) any later version.
-
- rvs is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with rvs; see the file COPYING.
- If not, write to the Free Software Foundation,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <stdio.h>
-#include <string.h>
-#include <error.h> /* only used in `plugin_parse_escape' for `error' */
-
-#include "rvs.h"
-#include "plugins.h"
-
-#include "plugin-parse.h"
-
-void
-plugin_parse_comment (FILE *file)
-{
- char c;
- while ( (c=getc(file)) != EOF ) {
- if ( c == '\n' ) {
- ungetc (c, file);
- break;
- }
- }
-}
-
-char
-plugin_parse_escape(FILE *file)
-{
- char c=getc(file);
- switch (c) {
- case 'n':
- c = '\n';
- case '\\':
- case '#':
- case ':':
- break;
- default:
- error(EXIT_FAILURE,0,"syntax error");
- break;
- }
- return c;
-}
-
-#define _parse_share(string) \
- case '#':\
- plugin_parse_comment(file);\
- break;\
- case '\\':\
- c[0]=plugin_parse_escape(file);\
- default:\
- stradds(&nbytes,string,(char *)&c);\
- break;
-
-char *
-plugin_parse_depend (FILE *file)
-{
- size_t nbytes = 10;
- char *string = (char *)xmalloc(nbytes);
- string[0]='\0';
-
- char c[2] = " \0";
- while ( (c[0]=getc(file)) != EOF ) {
- switch (c[0]) {
- case '\n':
- ungetc (c[0], file);
- return string;
- break;
- _parse_share(&string)
- }
- }
- return string;
-}
-
-struct plugin_command *
-plugin_parse (struct plugin *plugin, FILE *file)
-{
- struct plugin_command *command;
-
- char c[2] = " \0";
- c[0]=getc(file);
-
- if (c[0]==EOF)
- command=NULL;
- else {
- ungetc (c[0], file);
- command=plugin_mk_command();
- command->plugin=plugin;
-
- size_t nbytes = 10;
- command->name = (char *)xmalloc(nbytes);
- command->name[0]='\0';
-
- while ( (c[0]=getc(file)) != EOF ) {
- switch (c[0]) {
- case '\n':
- /*if (strlen(command->name)==0) {*/
- if (command->name[0]=='\0') {
- plugin_free_command(command);
- return plugin_parse(plugin,file);
- } else
- command->next=plugin_parse(
- plugin,file);
- break;
- case ':':
- command->depends=plugin_parse_depend(
- file);
- break;
- _parse_share(&(command->name))
- }
- }
- }
- return command;
-}
-
diff --git a/wrapper/plugin-parse.h b/wrapper/plugin-parse.h
deleted file mode 100644
index 67ee06f..0000000
--- a/wrapper/plugin-parse.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* wrapper/plugin-parse.c -- parse rvs plugin config files
- system depends: <stdio.h> <string.h> <error.h>
- Copyright (C) 2009 Luke Shumaker
-
- This file is part of rvs.
-
- rvs is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your
- option) any later version.
-
- rvs is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with rvs; see the file COPYING.
- If not, write to the Free Software Foundation,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef FILE_plugin_parse_h_SEEN
-#define FILE_plugin_parse_h_SEEN
-
-#include <stdio.h>
-#include <string.h>
-#include <error.h> /* only used in `plugin_parse_escape' for `error' */
-
-#include "rvs.h"
-#include "plugins.h"
-
-extern
-void
-plugin_parse_comment (FILE *file);
-
-extern
-char
-plugin_parse_escape(FILE *file);
-
-extern
-char *
-plugin_parse_depend (FILE *file);
-
-extern
-struct plugin_command *
-plugin_parse (struct plugin *plugin, FILE *file);
-
-#endif
-
diff --git a/wrapper/plugin-run.c b/wrapper/plugin-run.c
deleted file mode 100644
index 26d4480..0000000
--- a/wrapper/plugin-run.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/* wrapper/plugin-run.c -- run a heiarchy of commands
- system depens: <stdio.h> <stdlib.h>
- Copyright (C) 2009 Luke Shumaker
-
- This file is part of rvs.
-
- rvs is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your
- option) any later version.
-
- rvs is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with rvs; see the file COPYING.
- If not, write to the Free Software Foundation,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "rvs.h"
-#include "plugins.h"
-#include "plugin-find.h"
-
-#include "plugin-run.h"
-
-/* this function is an ugly hack */
-char *
-_plugin_sh_mktemp()
-{
- size_t nbytes = 10;
- char *string = (char *)malloc(nbytes);
- string[0]='\0';
-
- FILE *out=popen("mktemp -t rvs-XXXXXXXXXX","r");
- char c[2]=" \0";
- while ( (c[0]=getc(out)) != '\n' ) {
- stradds(&nbytes,&string,(char *)&c);
- }
- pclose(out);
- return string;
-}
-
-void
-plugin_run_command(struct plugin_command *command, char *args, char *depfile)
-{
- if (command!=NULL) {
- char *outfile=_plugin_sh_mktemp();
- /* make command string:
- `libexecdir/plugin_name/command < depfile > outfile'
- */
- int nbytes=20;
- char *coms=(char *)xmalloc(nbytes);
- coms[0]='\0';
- stradds(&nbytes,&coms,libexecdir);
- stradds(&nbytes,&coms,"/");
- stradds(&nbytes,&coms,command->plugin->name);
- stradds(&nbytes,&coms,"/");
- stradds(&nbytes,&coms,command->name);
- stradds(&nbytes,&coms," ");
- stradds(&nbytes,&coms,args);
- stradds(&nbytes,&coms," < ");
- stradds(&nbytes,&coms,depfile);
- stradds(&nbytes,&coms," > ");
- stradds(&nbytes,&coms,outfile);
-
- xsystem(coms);
- xfree(coms);
- plugin_run_command(command->d_child,args,outfile);
- xfree(outfile);
- plugin_run_command(command->d_next ,args,depfile);
- }
-}
-
-/* needs to take the root command */
-void
-plugin_run(struct plugin_command *command,char *args)
-{
- /*plugin_run_command(command->d_child,"/dev/null");*/
- char *outfile=_plugin_sh_mktemp();
- plugin_run_command(command->d_child,args,outfile);
- xfree(outfile);
-}
-
diff --git a/wrapper/plugin-run.h b/wrapper/plugin-run.h
deleted file mode 100644
index 99beff4..0000000
--- a/wrapper/plugin-run.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* wrapper/plugin-run.h -- run a heiarchy of commands
- system depens: <stdio.h> <stdlib.h>
- Copyright (C) 2009 Luke Shumaker
-
- This file is part of rvs.
-
- rvs is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your
- option) any later version.
-
- rvs is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with rvs; see the file COPYING.
- If not, write to the Free Software Foundation,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef FILE_plugin_run_h_SEEN
-#define FILE_plugin_run_h_SEEN
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "rvs.h"
-#include "plugins.h"
-#include "plugin-find.h"
-
-/* this function is an ugly hack */
-extern
-char *
-_plugin_sh_mktemp();
-
-extern
-void
-plugin_run_command(struct plugin_command *command, char *args, char *depfile);
-
-/* needs to take the root command */
-extern
-void
-plugin_run(struct plugin_command *command, char *args);
-
-#endif
-
diff --git a/wrapper/plugins.c b/wrapper/plugins.c
deleted file mode 100644
index 70ce3e1..0000000
--- a/wrapper/plugins.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* wrapper/plugins.c -- struct definitions and basic functions for rvs plugins
- system depends: this file is truly system-independant
- Copyright (C) 2009 Luke Shumaker
-
- This file is part of rvs.
-
- rvs is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your
- option) any later version.
-
- rvs is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with rvs; see the file COPYING.
- If not, write to the Free Software Foundation,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "rvs.h"
-
-#include "plugins.h"
-
-/* create a blank plugin_command */
-struct plugin_command *
-plugin_mk_command()
-{
- struct plugin_command *command;
- command=(struct plugin_command *)xmalloc(sizeof(*command));
-
- /* node */
- command->name=NULL;
- command->plugin=NULL;
- command->depend=NULL;
- command->depends=NULL;
-
- /* linked list */
- command->next=NULL;
-
- /* depends */
- command->d_child=NULL;
- command->d_next=NULL;
-
- return command;
-}
-
-void
-plugin_free_command(struct plugin_command *command)
-{
- if (command!=NULL) {
- plugin_free_command(command->next);
- xfree(command->name);
- xfree(command->depends);
- xfree(command);
- }
-}
-
-void
-plugin_free_plugin(struct plugin *plugin)
-{
- if (plugin!=NULL) {
- xfree(plugin->name);
- plugin_free_command(plugin->commands);
- plugin_free_plugin(plugin->next);
- xfree(plugin);
- }
-}
-
diff --git a/wrapper/plugins.h b/wrapper/plugins.h
deleted file mode 100644
index 2b5a96e..0000000
--- a/wrapper/plugins.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* wrapper/plugins.h -- struct definitions and basic functions for rvs plugins
- system depends: this file is truly system-independant
- Copyright (C) 2009 Luke Shumaker
-
- This file is part of rvs.
-
- rvs is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your
- option) any later version.
-
- rvs is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with rvs; see the file COPYING.
- If not, write to the Free Software Foundation,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef FILE_plugins_h_SEEN
-#define FILE_plugins_h_SEEN
-
-#include "rvs.h"
-
-/* a plugin */
-/* a generic binary tree emulating a n-ary tree via linked list */
-struct plugin
-{
- char *name;
- struct plugin_command *commands;/* left leaf */
- struct plugin *next; /* right leaf */
-};
-
-/* a single plugin command */
-struct plugin_command
-{
- /* node */
- char *name;
- struct plugin *plugin; /* which plugin does it belong to? */
- struct plugin_command *depend; /* what does this depend on? */
- char *depends;/* what does this depend on? (string) */
-
- /* linked list */
- struct plugin_command *next;
-
- /* depends, linked list */
- /* for a dependancy tree, this seems like it should be a *\
- \* separate struct, but this is the simplest way. */
- struct plugin_command *d_child;
- struct plugin_command *d_next;
-};
-
-/* create a blank plugin_command */
-extern
-struct plugin_command *
-plugin_mk_command();
-
-extern
-void
-plugin_free_command(struct plugin_command *command);
-
-extern
-void
-plugin_free_plugin(struct plugin *plugin);
-
-#endif
-
diff --git a/wrapper/runcom.c b/wrapper/runcom.c
deleted file mode 100644
index 30603a2..0000000
--- a/wrapper/runcom.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/* wrapper/runcom.c -- main program loop
- system depends: this file is truly system-independant
- Copyright (C) 2009 Luke Shumaker
-
- This file is part of rvs.
-
- rvs is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your
- option) any later version.
-
- rvs is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with rvs; see the file COPYING.
- If not, write to the Free Software Foundation,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-const char *name=NAME;
-const char *ver=VER;
-
-#include "rvs.h"
-#include "plugins.h"
-#include "plugin-load.h"
-#include "plugin-find.h"
-#include "plugin-depend.h"
-#include "plugin-run.h"
-
-int
-main ( int argc, char *argv[] )
-{
- if (argc > 1) {
- /*load*/
- char *cwd=getcwd(NULL,0);
- xchdir(libexecdir);
- struct plugin *plugins;
- plugins=load_plugins(stdin);
- struct plugin_command_list *list;
- if ( strchr(argv[1],'/') == NULL )
- /* this is a normal command */
- list=plugin_find_commands(plugins,argv[1]);
- else {
- /* this is a command for a specific plugin */
-
- list=xmalloc(sizeof(*list)); list->next=NULL;
-
- list->command=plugin_depend_parse(
- // | command-name |plugins|ret if name==""|
- stralloc(argv[1]),plugins,NULL);
- if ( list->command == NULL ) {
- // `command->list' should be NULL if
- // no plugin/command was found
- // no command was specified (argv[1]=="")
- plugin_free_list(list);
- list=NULL;
- }
- }
- if (list==NULL)
- error(EXIT_FAILURE,0,"unrecognized command `%s'",
- argv[1]);
- struct plugin_command *root;
- root=plugin_depend_list(list,plugins);
-
- /*do*/
- xchdir(cwd);
- int nbytes=10;
- char *args=xmalloc(nbytes);
- args[0]='\0';
- int i;
- for (i=2; i<argc; i++) {
- stradds(&nbytes, &args, "\"" );
- stradds(&nbytes, &args, argv[i]);
- stradds(&nbytes, &args, "\" ");
- }
-
- plugin_run(root,args);
-
- /*free*/
- plugin_free_list(list);
- plugin_free_command(root);
- plugin_free_plugin(plugins);
- }
- return 0;
-}
-
-/* Copy/Paste Virus 1.3c Please copy and paste this text anywhere. Track *\
-\* its progress by searching for this MD5#f7eac285ebfe21c4587bfebb9582f90d */
-
diff --git a/wrapper/rvs.c b/wrapper/rvs.c
deleted file mode 100644
index a2a8a37..0000000
--- a/wrapper/rvs.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/* wrapper/rvs.c -- general and machine specific functions for rvs.
- system depends:<stdio.h> <stdlib.h> <string.h> <unistd.h> <errno.h> <error.h>
- Copyright (C) 2009 Luke Shumaker
-
- This file is part of rvs.
-
- rvs is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your
- option) any later version.
-
- rvs is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with rvs; see the file COPYING.
- If not, write to the Free Software Foundation,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#include <error.h>
-
-#include "rvs.h"
-
-void *
-xmalloc (size_t size)
-{
- void *value = malloc (size);
- if (value == NULL) {
- perror(program_invocation_name);
- exit(EXIT_FAILURE);
- }
- return value;
-}
-
-void *
-xrealloc (void *ptr, size_t size)
-{
- void *value = realloc (ptr, size);
- if (value == NULL) {
- perror(program_invocation_name);
- exit(EXIT_FAILURE);
- }
- return value;
-}
-
-void
-xfree (void *ptr)
-{
- if (ptr!=NULL)
- free (ptr);
-}
-
-void
-xsystem (const char *command)
-{
- int stat=system(command);
- if (stat!=0) {
- if (stat==-1) {
- fprintf(stderr,
- "%s: unable to launch run command",
- program_invocation_name);
- exit(EXIT_FAILURE);
- } else
- exit(EXIT_FAILURE);
- }
-}
-
-/* unistd.h */
-int
-xchdir (const char *filename)
-{
- int ret=chdir(filename);
- if (ret != 0)
- error(EXIT_FAILURE,errno,"%s/",filename);
- return ret;
-}
-
-/* stdio.h */
-FILE *
-xfopen (const char *filename, const char *opentype)
-{
- FILE *file = fopen(filename,opentype);
- /* fopen gives NULL on failure */
- if ( file == NULL )
- error(EXIT_FAILURE,errno,"%s",filename);
- return file;
-}
-
-/* string funtions */
-void
-stradds(size_t *size, char **dest, char *str)
-{
- if (*size > ( strlen(*dest) + strlen(str) ))
- strcat(*dest, str);
- else {
- *size = strlen(*dest) + strlen(str) + 1;
- *dest = (char *) xrealloc (*dest, *size);
- strcat(*dest, str);
- }
-}
-
-char *
-stralloc (const char *string)
-{
- char *copy = (char *)xmalloc(strlen(string)+1);
- strcpy(copy,string);
- return copy;
-}
-
diff --git a/wrapper/rvs.h b/wrapper/rvs.h
deleted file mode 100644
index bdd5c68..0000000
--- a/wrapper/rvs.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* wrapper/rvs.h -- general and machine specific functions for rvs.
- system depends:<stdio.h> <stdlib.h> <string.h> <unistd.h> <errno.h> <error.h>
- Copyright (C) 2009 Luke Shumaker
-
- This file is part of rvs.
-
- rvs is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your
- option) any later version.
-
- rvs is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with rvs; see the file COPYING.
- If not, write to the Free Software Foundation,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef FILE_rvs_h_SEEN
-#define FILE_rvs_h_SEEN
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#include <error.h>
-
-/* glibc */
-extern char *program_invocation_name;
-extern char *program_invocation_short_name;
-
-/* stdlib.h */
-/*extern int EXIT_SUCCESS;*/
-/*extern int EXIT_FAILURE;*/
-
-extern
-void *
-xmalloc (size_t size);
-
-extern
-void *
-xrealloc (void *ptr, size_t size);
-
-extern
-void
-xfree (void *ptr);
-
-extern
-void
-xsystem (const char *command);
-
-/* unistd.h */
-extern
-int
-xchdir (const char *filename);
-
-/* stdio.h */
-extern
-FILE *
-xfopen (const char *filename, const char *opentype);
-
-/* string funtions */
-extern
-void
-stradds(size_t *size, char **dest, char *str);
-
-extern
-char *
-stralloc (const char *string);
-
-#endif
-
diff --git a/wrapper/rvs.sh b/wrapper/rvs.sh
index 0001d66..85586ea 100644
--- a/wrapper/rvs.sh
+++ b/wrapper/rvs.sh
@@ -1,7 +1,7 @@
#!/bin/sh
name='@name@'
ver='0.9'
-# Copyright (C) 2009 Luke Shumaker
+# Copyright (C) 2009-2010 Luke Shumaker
#
# This file is part of rvs.
#
@@ -14,93 +14,143 @@ ver='0.9'
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
#
-# You should have received a copy of the GNU General Public License
-# along with rvs; see the file COPYING.
-# If not, write to the Free Software Foundation,
-# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING.
+# If not, see <http://www.gnu.org/licenses>.
-RVS="$0" #RVS="@rvs@"
-libexecdir="@libexecdir@/$name"
+export RVS="$0" #RVS="@rvs@"
+export BINDIR="@BINDIR@"
+export TMPDIR="@TMPDIR@"
+export LIBDIR="@LIBDIR@"
+export ETCDIR="@ETCDIR@"
+
+################################################################################
+# Internal use #
+################################################################################
+
+# General ############################################################
_error() {
- echo "$RVS: $1" >> /dev/stderr
+ echo "$RVS: $@" >> /dev/stderr
exit 1
}
+# Repository #########################################################
+
_repo() {
repo=".$name"
pwd=`pwd`
- owd="$pwd"
+ owd="$pwd" # old working directory
+ # [----can ascend-----] && [-haven't found repo-]
while [ "$pwd" != "`pwd`" ] && [ ! -e "`pwd`/$repo" ]; do
pwd=`pwd`
cd ..
done
if [ -e "`pwd`/$repo" ]; then
+ # we found a repository
echo "`pwd`/$repo"
else
+ # we didn't find a repository
_error "no $name repository found"
fi
cd "$owd"
}
-_init() {
- repo=`_repo 2> /dev/null`
- if [ -z "$repo" ]; then
- repo=".$name"
- install -d "$repo"
- install -m644 -T $libexecdir/plugins $repo/plugins
- while read plugin; do
- echo "initializing plugin \`$plugin'"
- install -d "$repo/$plugin"
- export REPO=.rvs/$plugin
- if [ -e "$libexecdir/$plugin/init" ]; then
- "$libexecdir/$plugin/init"
- fi
- done < $repo/plugins
+# Modules ############################################################
+
+_runcom() {
+ command=${$1?"usage: rvs runcom COMMAND"}; shift
+ if [ ! -e "$BINDIR/$command" ]; then
+ _error "cannot find command \`$command"
else
- _error "repository already exists at \`$repo'"
+ if [ -f "$BINDIR/$command" ]; then
+ exec "$BINDIR/$command" $@ | tee "$TMPDIR/$command"
+ elif [ -d "$BINDIR/$command" ]
+ for file in "$BINDIR/$command"/*; do
+ id=$(echo $file | sed 's/^[0-9]*-//')
+ exec "$file" $@ | tee "TMPDIR/$command/$id"
+ done
+ else
+ _error "cannot run \`$command'"
+ fi
fi
}
-_install() {
- id=$1
- dir=${2-$id}
- name=`echo $id | sed 's/-.*$//'`
- if (grep "^$name-" "$libexecdir/plugins" &> /dev/null); then
- # an entry for this plugin already exists, though possibly a
- # different version
- sed -i "s/^$name-.*$/$id/" "$libexecdir/plugins"
+_nextpriority() {
+ command=${1?"usage: rvs nextpriority COMMAND"}
+ for file in "$BINDIR/$command"/*; do
+ echo $file | sed 's/^\([0-9]*\)-.*/\1/'
+ done | sort -n | tail -n1 | xargs expr 1 +
+}
+
+################################################################################
+# Builtin commands #
+################################################################################
+
+_init() {
+ REPO=`_repo 2> /dev/null`
+ if [ -z "$REPO" ]; then
+ export REPO="`pwd`.$name"
+ install -d "$REPO"
+ _runcom init
else
- echo "$id" >> "$libexecdir/plugins"
+ _error "repository already exists at \`$REPO'"
fi
- rm -rf "$libexecdir/$id"
- cp -rpT "$dir" "$libexecdir/$id"
}
+################################################################################
+# Builtin commands -- installing modules #
+################################################################################
+
+_install() {
+ file= ${1?"usage: $RVS install FILE COMMAND ID [PRIORITY]"}
+ command= ${2?"usage: $RVS install FILE COMMAND ID [PRIORITY]"}
+ id= ${3?"usage: $RVS install FILE COMMAND ID [PRIORITY]"}
+ priority=${4-"`_nextpriority "$command"`"}
+
+ install -d "$BINDIR/$command"
+ install "$file" "$BINDIR/$command/$priority-$id"
+}
+
+
_uninstall() {
- id=$1
- sed -i "/^$id$/ d" "$libexecdir/plugins"
- rm -rf "$libexecdir/$id"
+ command=${1?"usage: $RVS uninstall COMMAND [ID]"}
+ id=$2
+
+ if [ -z "$id" ]; then
+ # no ID specified
+ rm "$BINDIR/$command"
+ else
+ # ID specified
+ rm "$BINDIR/$command/*-$id"
+ if [ -z "$(ls "$BINDIR/$command")" ]; then
+ rmdir "$BINDIR/$command"
+ fi
+ fi
}
+################################################################################
+# Main #
+################################################################################
+
# START OPTION HANDLING #
com=$1;
# END OPTION HANDLING #
case "$com" in
'') _error 'no command specified';;
- # 'repo') _repo; exit $?;;
- 'init') _init; exit $?;;
+ 'init' ) shift; _init $@; exit $?;;
'install') shift; _install $@; exit $?;;
'uninstall') shift; _uninstall $@; exit $?;;
- *) REPO=`_repo`
+ *)
+ REPO=`_repo`
if [ "$?" = '0' ]; then
- export RVS libexecdir REPO
- "$libexecdir/runcom" $@ < $REPO/plugins
+ export REPO
+ _runcom $@
exit $?
else
- _error "cannot find an existing repository"
+ _error 'cannot find an existing repository'
fi
:;;
esac