summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@sbcglobal.net>2015-06-29 00:43:52 -0600
committerLuke Shumaker <lukeshu@sbcglobal.net>2015-06-29 00:43:52 -0600
commitf50a0e73d77bfcfb8b458840b8b7a440cca9770c (patch)
tree59d9da35753ecdf88a0b85518a3c7ebffcc32a22
parent2a020d78f993f6834a7482f757d524d5a95afb2f (diff)
Start re-jiggering RVS.
-rw-r--r--.gitignore4
-rw-r--r--COPYING661
-rw-r--r--Makefile27
-rw-r--r--README41
-rw-r--r--common.bottom.mk105
-rw-r--r--common.each.mk27
-rw-r--r--common.once.mk38
-rw-r--r--common.top.mk47
-rw-r--r--config11
-rw-r--r--config.mk46
-rwxr-xr-xconfigure99
-rw-r--r--main.mk.in80
-rw-r--r--wrapper/.gitignore2
-rw-r--r--wrapper/Makefile32
-rw-r--r--wrapper/Makefile.in90
-rw-r--r--wrapper/inner.sh145
-rw-r--r--wrapper/main.mk.in66
-rw-r--r--wrapper/outer.c63
-rw-r--r--wrapper/runcom.mk.in12
-rw-r--r--wrapper/rvs.sh165
20 files changed, 1317 insertions, 444 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..bbcb9a2
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+/config.h
+/config.sh
+*.o
+.*.mk
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..dba13ed
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,661 @@
+ GNU AFFERO GENERAL PUBLIC LICENSE
+ Version 3, 19 November 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU Affero General Public License is a free, copyleft license for
+software and other kinds of works, specifically designed to ensure
+cooperation with the community in the case of network server software.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+our General Public Licenses are intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ Developers that use our General Public Licenses protect your rights
+with two steps: (1) assert copyright on the software, and (2) offer
+you this License which gives you legal permission to copy, distribute
+and/or modify the software.
+
+ A secondary benefit of defending all users' freedom is that
+improvements made in alternate versions of the program, if they
+receive widespread use, become available for other developers to
+incorporate. Many developers of free software are heartened and
+encouraged by the resulting cooperation. However, in the case of
+software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and
+letting the public access it on a server without ever releasing its
+source code to the public.
+
+ The GNU Affero General Public License is designed specifically to
+ensure that, in such cases, the modified source code becomes available
+to the community. It requires the operator of a network server to
+provide the source code of the modified version running there to the
+users of that server. Therefore, public use of a modified version, on
+a publicly accessible server, gives the public access to the source
+code of the modified version.
+
+ An older license, called the Affero General Public License and
+published by Affero, was designed to accomplish similar goals. This is
+a different license, not a version of the Affero GPL, but Affero has
+released a new version of the Affero GPL which permits relicensing under
+this license.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU Affero General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Remote Network Interaction; Use with the GNU General Public License.
+
+ Notwithstanding any other provision of this License, if you modify the
+Program, your modified version must prominently offer all users
+interacting with it remotely through a computer network (if your version
+supports such interaction) an opportunity to receive the Corresponding
+Source of your version by providing access to the Corresponding Source
+from a network server at no charge, through some standard or customary
+means of facilitating copying of software. This Corresponding Source
+shall include the Corresponding Source for any work covered by version 3
+of the GNU General Public License that is incorporated pursuant to the
+following paragraph.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the work with which it is combined will remain governed by version
+3 of the GNU General Public License.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU Affero General Public License from time to time. Such new versions
+will be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU Affero General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU Affero General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU Affero General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If your software can interact with users remotely through a computer
+network, you should also make sure that it provides a way for users to
+get its source. For example, if your program is a web application, its
+interface could display a "Source" link that leads users to an archive
+of the code. There are many ways you could offer source, and different
+solutions will be better for different programs; see section 13 for the
+specific requirements.
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU AGPL, see
+<http://www.gnu.org/licenses/>.
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..1f84a37
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,27 @@
+#!/usr/bin/make -f
+# Copyright (C) 2015 Luke Shumaker
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+include $(dir $(lastword $(MAKEFILE_LIST)))/config.mk
+include $(topsrcdir)/common.top.mk
+
+#subdirs = wrapper plugins
+subdirs = wrapper
+
+src_files = Makefile
+src_files += common.top.mk common.bottom.mk config.mk configure
+src_files += COPYING HACKING README
+
+include $(topsrcdir)/common.bottom.mk
diff --git a/README b/README
index ebd7daf..bb8e7c6 100644
--- a/README
+++ b/README
@@ -1,4 +1,3 @@
-#!/bin/less
//////////////////////////////////////////////////////////////////////
rvs 0.8c r54
retroactive versioning system
@@ -9,22 +8,21 @@
introduction
rvs is about being able to go back and edit *anything* that has
- already been committed. Yes, some other SCMs do this, but fuck
- things proper if someone else has a copy of the old version.
+ already been committed. Yes, some other SCMs do this, but get
+ nasty if someone else has a copy of the old version.
- Why would you want to do this? Take for example the Bazaar
+ Why would you want to do this? Take for example the Bazaar
repository rvs is hosted on: It starts at 0.6.0, what if I later
- want to import 0.0.0 - 0.5.10? Or if I'm trying to construct a
- history of BSD, and import all the BSDs I can find, such as
- 1,3,4, then latter find 2?
+ want to import 0.0.0 - 0.5.10? Or if I'm trying to construct a
+ history of BSD, and import all the BSDs I can find, such as 1,3,4,
+ then latter find 2?
system requirements
- Pretty much any *nix system should be able to run rvs. If you
- need to use a shell other than /bin/sh, run ./configure with
- the --SHELL=YOUR_SHELL option. rvs is not designed for Windows,
- but should be able to run in bash if you have some *nix pack
- installed.
+ Pretty much any *nix system should be able to run rvs. If you need
+ to use a shell other than `/bin/sh`, run `./configure` with the
+ `--SHELL=YOUR_SHELL` option. rvs is not designed for Windows, but
+ should be able to run in bash if you have some *nix pack installed.
To my knowledge, this is the absolute requirements (all but the
shell need to be in your PATH):
@@ -42,24 +40,27 @@ system requirements
building
- rvs doesn't exactly use the GNU build system, but acts much like
- it does. To build rvs with default configuration, simply run:
+ rvs doesn't exactly use the GNU build system, but acts much like it
+ does. To build rvs with default configuration, simply run:
+
$ ./configure
$ make
# make install
It's generally considered good practice to build in another
- directory than the source directory. If you would still like to do
- this, it can be done in rvs-0.6.1 and up.
+ directory than the source directory. If you would like to do this,
+ it can be done in rvs-0.6.1 and up.
Configuration
- There are several configuration variables that can be set. You can
- modify these configuration variables by running ./configure such
+ There are several configuration variables that can be set. You can
+ modify these configuration variables by running `./configure` such
as:
+
$ ./configure --VAR_NAME=VALUE
The different configuration variables are as follows:
+
name='rvs'
The name of the program. Note that unlike most
variables, you should NOT call this in Makefiles
@@ -89,6 +90,6 @@ building
Where the source code is. The default value evaluates
to the directory of the `configure' script.
+--
+Happy hacking!
~ Luke Shumaker <LukeShu@sbcglobal.net>
-Happy Hacking!
-
diff --git a/common.bottom.mk b/common.bottom.mk
new file mode 100644
index 0000000..0e2c039
--- /dev/null
+++ b/common.bottom.mk
@@ -0,0 +1,105 @@
+# Copyright (C) 2015 Luke Shumaker
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+include $(topsrcdir)/common.each.mk
+
+
+# Aggregate variables
+
+# Add some more defaults to the *_files variables
+clean_files += $(obj_files)
+conf_files += Makefile $(topobjdir)/config.mk
+# Now namespace the *_files variables
+$(module)_src_files := $(addprefix $(srcdir)/,$(src_files))
+$(module)_obj_files := $(addprefix $(objdir)/,$(obj_files))
+$(module)_sys_files := $(addprefix $(DESTDIR)/,$(sys_files))
+$(module)_clean_files := $(addprefix $(objdir)/,$(clean_files))
+$(module)_slow_files := $(addprefix $(objdir)/,$(slow_files))
+$(module)_conf_files := $(addprefix $(objdir)/,$(conf_files))
+$(module)_dist_files := $(addprefix $(objdir)/,$(dist_files))
+
+# And add them to the $(parent)_*_files variables (if applicable)
+ifneq ($(parent),)
+$(parent)_src_files := $($(parent)_src_files) $($(module)_src_files)
+$(parent)_obj_files := $($(parent)_obj_files) $($(module)_obj_files)
+$(parent)_sys_files := $($(parent)_sys_files) $($(module)_sys_files)
+$(parent)_clean_files := $($(parent)_clean_files) $($(module)_clean_files)
+$(parent)_slow_files := $($(parent)_slow_files) $($(module)_slow_files)
+$(parent)_conf_files := $($(parent)_conf_files) $($(module)_conf_files)
+$(parent)_dist_files := $($(parent)_dist_files) $($(module)_dist_files)
+$(info added <$(module)> to <$(parent)>)
+$(info $(parent)_clean_files => $($(parent)_clean_files))
+$(info $(parent)_obj_files => $($(parent)_obj_files))
+endif
+
+modules := $(modules) $(module)
+
+
+# Include Makefiles from other directories
+
+define _nl
+
+
+endef
+$(eval \
+ _COMMON_MK_NOONCE = n$(_nl)\
+ $(foreach dir,$(subdirs),parent=$(module)$(_nl)include $(objdir)/$(dir)/Makefile$(_nl)) \
+ $(foreach dir,$(depdirs),parent=dep $(_nl)include $(objdir)/$(dir)/Makefile$(_nl)) \
+ _COMMON_MK_NOONCE = $(_COMMON_MK_NOONCE))
+
+
+# This only gets evaluated once, after all of the other Makefiles a read
+ifeq ($(_COMMON_MK_NOONCE),)
+
+.phony = build install uninstall mostlyclean clean distclean maintainer-clean check
+
+# Declare phony targets
+define module_rules
+.PHONY: $(addsuffix -%(module),$(.phony))
+# Constructive phony targets
+build-%(module): $(%(module)_obj_files)
+install-%(module): $(%(module)_sys_files)
+# Destructive phony targets
+_%(module)_uninstall = $(%(module)_sys_files))
+_%(module)_mostlyclean = $(filter-out $(%(module)_slow_files) $(%(module)_conf_files) $(%(module)_dist_files),$(%(module)_clean_files))
+_%(module)_clean = $(filter-out $(%(module)_conf_files) $(%(module)_dist_files),$(%(module)_clean_files))
+_%(module)_distclean = $(filter-out $(%(module)_dist_files),$(%(module)_clean_files))
+_%(module)_maintainer-clean = $(%(module)_clean_files)
+uninstall-%(module) mostlyclean-%(module) clean-%(module) distclean-%(module) maintainer-clean-%(module): %-%(module):
+ $(RM) -- $(sort $(_%(module)_$*))
+ $(RMDIRS) $(sort $(dir $(_%(module)_$*))) 2>/dev/null || $(TRUE)
+endef
+$(foreach module,$(modules),$(eval $(subst %(module),$(module),$(value module_rules))))
+
+# Alias each bare phony target to itself with the `-all` suffix
+$(foreach t,$(.phony),$(eval $t: $t-all))
+
+# Add the `dist` target
+.PHONY: dist
+dist: $(topobjdir)/$(PACKAGE)-$(VERSION).tar.gz
+$(topobjdir)/$(PACKAGE)-$(VERSION).tar.gz: $(topobjdir)/$(PACKAGE)-$(VERSION)
+ $(TAR) czf $@ -C $(<D) $(<F)
+_copyfile = $(MKDIRS) $(dir $2) && $(CP) $1 $2
+_addfile = $(call _copyfile,$3,$2/$(call _relto,$1,$3))
+$(topobjdir)/$(PACKAGE)-$(VERSION): $(all_src_files) $(all_dist_files)
+ $(RM) -r $@
+ $(MKDIR) $(@D)/tmp.$(@F).$$$$ && \
+ $(foreach f,$(all_src_files),$(call _addfile,$(topsrcdir),$(@D)/tmp.$(@F).$$$$,$f) &&) \
+ $(foreach f,$(all_dist_files),$(call _addfile,$(topobjdir),$(@D)/tmp.$(@F).$$$$,$f) &&) \
+ $(MV) $(@D)/tmp.$(@F).$$$$ $@ || $(RM) -r $(@D)/tmp.$(@F).$$$$
+
+include $(topsrcdir)/common.once.mk
+
+endif
diff --git a/common.each.mk b/common.each.mk
new file mode 100644
index 0000000..a02f6e5
--- /dev/null
+++ b/common.each.mk
@@ -0,0 +1,27 @@
+# Copyright (C) 2015 Luke Shumaker
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+clean_files += .*.mk *.o
+ifneq ($(AUTODEPS),)
+-include $(wildcard $(objdir)/.*.mk)
+endif
+
+$(objdir)/% : $(srcdir)/%.sh
+ $(M4) -P $(M4FLAGS) $< | $(INSTALL_PROGRAM) /dev/stdin $@
+
+$(objdir)/%.o : $(srcdir)/%.c $(topobjdir)/config.mk
+ $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
+$(objdir)/%: $(objdir)/%.o
+ $(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS)
diff --git a/common.once.mk b/common.once.mk
new file mode 100644
index 0000000..fc0aeb5
--- /dev/null
+++ b/common.once.mk
@@ -0,0 +1,38 @@
+# Copyright (C) 2015 Luke Shumaker
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Make directories
+dirs += $(addprefix $(DESTDIR),$(bindir) $(libexedir) $(datarootdir) $(datadir) $(sysconfdir) $(sharedstatedir) $(localstatedir) $(runstatedir) $(pkgdatadir) $(pkglibexecdir))
+$(sort $(dirs)):
+ $(MKDIRS) $@
+
+# Have GCC generate header dependency info (pair this with `-include`
+# in common.each.mk
+ifneq ($(AUTODEPS),)
+CFLAGS += -MD -MF $(patsubst $(@D)/%.o,$(@D)/.%.mk,$@) -MP
+endif
+
+CPPFLAGS += -I$(topobjdir)
+M4FLAGS += -I$(topobjdir)
+
+all_clean_files += $(topobjdir)/config.sh $(topobjdir)/config.h
+config_vars = $(shell $(SED) -n 's/^\s*\([a-z][^ !?:=]*\).*=.*/\1/p' $(topobjdir)/config.mk) PACKAGE VERSION DESTDIR
+$(topobjdir)/config.sh: $(topobjdir)/config.mk
+ $(PRINTF) '%s=%s\n' $(foreach v,$(config_vars),$v $($v)) | LC_ALL=C $(SORT) > $@
+$(topobjdir)/config.h: $(topobjdir)/config.sh
+ . $(abspath $<) && $(PRINTF) '#define %s "%s"\n' $(foreach v,$(config_vars),$v '$($v)') PACKAGE_UPPER $${PACKAGE^^} | LC_ALL=C $(SORT) > $@
+
+# Should be on by default
+.DELETE_ON_ERROR:
diff --git a/common.top.mk b/common.top.mk
new file mode 100644
index 0000000..931bc84
--- /dev/null
+++ b/common.top.mk
@@ -0,0 +1,47 @@
+# Copyright (C) 2015 Luke Shumaker
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Both of these have the argument order "parent,child"
+_noslash = $(patsubst %/,%,$1)
+_relto = $(call _noslash,$(patsubst $(abspath $1)/%,%,$(abspath $2)/))
+_is_subdir = $(filter $(abspath $1)/%,$(abspath $2)/)
+
+## Declare the standard targets
+all: build
+.PHONY: all
+
+## Set topobjdir, objdir, and srcdir (assumes that topsrcdir is already set)
+ifeq ($(topobjdir),)
+topobjdir := $(call _noslash,$(dir $(lastword $(filter %/config.mk config.mk,$(MAKEFILE_LIST)))))
+endif
+ objdir := $(call _noslash,$(dir $(lastword $(filter-out %.mk,$(MAKEFILE_LIST)))))
+ srcdir := $(firstword $(call _relto,., $(topsrcdir)/$(call _relto,$(topobjdir),$(objdir)) ) .)
+
+## Set module name
+module := $(firstword $(subst /,_,$(if $(call _is_subdir,.,$(objdir)),$(call _relto,.,$(objdir)),dep-$(call _relto,$(topobjdir),$(objdir)))) all)
+
+## Empty variables for use by the module
+subdirs =
+depdirs =
+
+src_files =
+obj_files =
+sys_files =
+
+clean_files =
+
+slow_files =
+conf_files =
+dist_files =
diff --git a/config b/config
deleted file mode 100644
index b1512ab..0000000
--- a/config
+++ /dev/null
@@ -1,11 +0,0 @@
- _name='rvs'
- _rvs='rvs'
- _RVS='$(bindir)/$(rvs)'
- _sysconfdir='$(prefix)/etc/$(rvs)'
- _BINDIR='$(sysconfdir)/bin'
- _TMPDIR='/tmp/rvs'
- _LIBDIR='$(sysconfdir)/lib'
- _ETCDIR='$(sysconfdir)/etc'
- _DEPDIR='$(sysconfdir)/dep'
-vars="$vars name rvs RVS sysconfdir BINDIR TMPDIR LIBDIR ETCDIR DEPDIR"
-
diff --git a/config.mk b/config.mk
new file mode 100644
index 0000000..a64243b
--- /dev/null
+++ b/config.mk
@@ -0,0 +1,46 @@
+ifeq ($(topsrcdir),)
+topsrcdir := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST))))
+endif
+
+PACKAGE = rvs
+VERSION = 0.10
+pkgtextdomain = $(PACKAGE)
+
+DESTDIR =
+prefix = /usr/local
+exec_prefix = $(prefix)
+
+bindir = $(exec_prefix)/bin
+sbindir = $(exec_prefix)/sbin
+libexecdir = $(exec_prefix)/libexec
+datarootdir = $(prefix)/share
+datadir = $(datarootdir)
+sysconfdir = $(prefix)/etc
+sharedstatedir = $(prefix)/com
+localstatedir = $(prefix)/var
+runstatedir = $(localstatedir)/run
+localedir = $(datarootdir)/locale
+
+pkgdatadir = $(datadir)/$(PACKAGE)
+pkglibexecdir = $(libexecdir)/$(PACKAGE)
+
+CFLAGS = -std=c99 -Werror -Wall -Wextra -pedantic -O2
+CPPFLAGS = -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE
+
+CC = cc
+M4 = m4
+MKDIR = mkdir
+MKDIRS = mkdir -p
+RMDIRS = rmdir -p
+INSTALL_DATA = install -m644
+INSTALL_PROGRAM = install -m755
+CP = cp
+MV = mv
+RM = rm -f
+SED = sed
+SORT = sort
+TAR = tar
+TRUE = true
+PRINTF = printf
+
+AUTODEPS = t
diff --git a/configure b/configure
new file mode 100755
index 0000000..15b52cf
--- /dev/null
+++ b/configure
@@ -0,0 +1,99 @@
+#!/usr/bin/env bash
+name='configure' # Luke's configureation script
+#version='1.0'
+# 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>.
+
+srcdir=$(readlink -f `dirname "$0"`)
+
+ _DESTDIR=''
+ _prefix='/usr/local'
+_exec_prefix='$(prefix)'
+ _bindir='$(exec_prefix)/bin'
+ _sbindir='$(exec_prefix)/sbin'
+ _libexecdir='$(exec_prefix)/libexec'
+ _CONFIG="$@"
+vars='DESTDIR prefix exec_prefix bindir sbindir libexecdir CONFIG'
+if [ -f "$srcdir/config" ]; then . "$srcdir/config"; fi
+
+error() {
+ echo "$name: $1" >> /dev/stderr
+ exit 1
+}
+
+varargs=`echo "$vars " | sed -e 's/ */:,/g' -e 's/,$//'`
+args=`getopt -n "$name" -o "${sopt}" -l "${lopt}${varargs}" -- "$@"`
+if [ $? == 0 ]; then
+ set -- $args
+ while [ $# -gt 0 ]; do case "$1" in
+ --) break;;
+ --srcdir) srcdir="$2"; shift;;
+ --*)
+ var0="${1/--/}"
+ match='false'
+ for var1 in $vars; do
+ if [ "$var0" == "$var1" ]; then
+ match='true'
+ break;
+ fi
+ done
+ if [ "$match" == 'true' ]; then
+ shift
+ val="$1"
+ eval _$var0=$val
+ else
+ error "unrecognized option \`$1'";
+ fi
+ :;;
+ *) error "unrecognized option \`$1'";
+ esac
+ shift
+ done
+else
+ error 'unable to parse command line arguments'
+fi
+
+echo '#!/bin/sed -f' > var.sed
+for var in $vars; do
+ var1="_$var"
+ val=${!var1}
+
+ # GNU bash optimized version
+ var=${var//:/\\:}
+ val=${val//:/\\:}
+ # POSIX version
+ #var=`echo "$var" | sed 's@:@\\:@g'`
+ #val=`echo "$val" | sed 's@:@\\:@g'`
+
+ echo "s:@$var@:$val:g" >> var.sed
+done
+
+Makefiles="`find "$srcdir/" -type f -name 'Makefile.in'`"
+Makefiles="`find "$srcdir/" -type f -name '*.mk.in'` $Makefiles"
+for orig in $Makefiles; do
+ new=${orig/%.in/} #bashism
+ new=${new/#$srcdir\//} #bashism
+ path=`dirname "$orig"`
+ mkdir -p `dirname "$new"`
+ sed -f var.sed "${orig}" | sed \
+-e "s:@srcdir@:${path//:/\\:}/:g" \
+-e '19 a# DO NOT edit this file, it has been generated by configure, and will' \
+-e "19 a# be overwritten. Instead, edit the file \``basename ${orig}`'" \
+-e "19 a
+ " > "${new}"
+done
+rm var.sed
+
diff --git a/main.mk.in b/main.mk.in
deleted file mode 100644
index cf47a81..0000000
--- a/main.mk.in
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/usr/bin/make -f
-name = @name@
-ver = 0.9-beta1
-# 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>.
-
-sysconfdir = @sysconfdir@
-BINDIR = @BINDIR@
-TMPDIR = @TMPDIR@
-LIBDIR = @LIBDIR@
-ETCDIR = @ETCDIR@
-dirs += $(sysconfdir) $(BINDIR) $(TMPDIR) $(LIBDIR) $(ETCDIR)
-
-rvs = @rvs@
-RVS = @RVS@
-
-# phony targets ######################################################
-.PHONY: all
-all : wrapper plugins
-.SUFFIXES :
-filelist = \
- COPYING \
- configure \
- Makefile.in \
- main.mk.in \
- config \
- HACKING \
- README \
- $(patsubst $(srcdir)/%,%,$(shell find $(srcdir)/*/* -type f))
-# install ############################################################
-
-clean : clean-wrapper clean-plugins
-distclean : clean distclean-wrapper distclean-plugins
- $(RM) Makefile *.mk
- $(RM) -r $(name)-$(ver)
-install : install-wrapper install-plugins
-uninstall :
- $(MAKE) uninstall-plugins
- $(MAKE) uninstall-wrapper
- -rmdir $(BINDIR)
- -rmdir $(ETCDIR)
- -rmdir $(LIBDIR)
- -rmdir $(sysconfdir)
-
-# wrapper ############################################################
-
-wrapper : build-wrapper
-build-wrapper : wrapper/ wrapper/Makefile; $(MAKE) -C $<
-uninstall-wrapper : wrapper/ wrapper/Makefile; $(MAKE) -C $< uninstall
-clean-wrapper : wrapper/ wrapper/Makefile; $(MAKE) -C $< clean
-distclean-wrapper : wrapper/ wrapper/Makefile; $(MAKE) -C $< distclean
-dist-wrapper : wrapper/ wrapper/Makefile; $(MAKE) -C $< dist
-
-install-wrapper : wrapper/ wrapper/Makefile wrapper; $(MAKE) -C $< install
-$(RVS) : install-wrapper
-
-# plugins ############################################################
-
-plugins : build-plugins
-build-plugins : plugins/ plugins/Makefile ; $(MAKE) -C $<
-clean-plugins : plugins/ plugins/Makefile ; $(MAKE) -C $< clean
-distclean-plugins : plugins/ plugins/Makefile ; $(MAKE) -C $< distclean
-dist-plugins : plugins/ plugins/Makefile ; $(MAKE) -C $< dist
-uninstall-plugins : plugins/ plugins/Makefile $(RVS) ; $(MAKE) -C $< uninstall
-install-plugins : plugins/ plugins/Makefile $(RVS) \
- plugins ; $(MAKE) -C $< install
-
diff --git a/wrapper/.gitignore b/wrapper/.gitignore
new file mode 100644
index 0000000..6141a28
--- /dev/null
+++ b/wrapper/.gitignore
@@ -0,0 +1,2 @@
+/outer
+/inner \ No newline at end of file
diff --git a/wrapper/Makefile b/wrapper/Makefile
new file mode 100644
index 0000000..f316cc0
--- /dev/null
+++ b/wrapper/Makefile
@@ -0,0 +1,32 @@
+#!/usr/bin/make -f
+# Copyright (C) 2009, 2015 Luke Shumaker
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+include $(dir $(lastword $(MAKEFILE_LIST)))/../config.mk
+include $(topsrcdir)/common.top.mk
+
+src_files += Makefile outer.c inner.sh
+obj_files += outer inner
+install_files += $(bindir)/$(PACKAGE) $(pkglibexecdir)/$(PACKAGE)
+
+$(objdir)/outer.o: $(topobjdir)/config.h
+$(objdir)/inner: $(topobjdir)/config.sh
+
+$(DESTDIR)$(bindir)/$(PACKAGE) : $(objdir)/outer | $(DESTDIR)$(bindir)
+ $(INSTALL_PROGRAM) $< $@
+$(DESTDIR)$(pkglibexecdir)/$(PACKAGE) : $(objdir)/inner | $(DESTDIR)$(bindir)
+ $(INSTALL_PROGRAM) $< $@
+
+include $(topsrcdir)/common.bottom.mk
diff --git a/wrapper/Makefile.in b/wrapper/Makefile.in
deleted file mode 100644
index cfe9772..0000000
--- a/wrapper/Makefile.in
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/make -f
-#name = Luke's Makefile
-#ver = 1.0
-# 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>.
-
-# Directories ########################################################
-DESTDIR = @DESTDIR@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-dirs = $(DESTDIR) $(prefix) $(exec_prefix) $(bindir) $(sbindir) $(libexecdir)
-srcdir = @srcdir@
-VPATH = $(srcdir)
-
-# Programs ###########################################################
-SHELL = /bin/sh
-CC = gcc
-INSTALL = install
-INSTALL_PROGRAM = $(INSTALL)
-INSTALL_DATA = $(INSTALL) -m 644
-MKDIR = $(INSTALL) -d #mkdir -p
-RM = rm -f
-SED = sed
-
-include main.mk
-
-# dist ###############################################################
-d = $(name)-$(ver)
-.PHONY : dist
-dist : $(d).tar.gz
-
-$(d).tar.gz : $(d) $(addprefix $(d)/,$(filelist))
- tar -czf $@ $<
-
-$(d) :
- $(INSTALL) -m 777 -d $@
-
-$(d)/% : $(srcdir)/% $(d)
- $(INSTALL) -m 777 -d $(dir $@)
- cp $< $@
-
-# implicit rules #####################################################
-$(addprefix $(DESTDIR),$(dirs)) :
- $(MKDIR) $@
-
-% : %.sh
- $(SED) 's/@VER@/$(ver)/g' < $< > $@
-
-$(DESTDIR)$(bindir)/% : % $(DESTDIR)$(bindir)
- $(INSTALL_PROGRAM) $< $@
-
-.PHONY : dist Makefiles
-
-csources = $(filter %.c,$(filelist))
-Makefiles : $(shell find '$(srcdir)' -type f -name Makefile.in) \
- $(shell find '$(srcdir)' -type f -name Makefile.in) \
- $(csources:.c=.d)
-
-%Makefile %.mk : $(srcdir)/configure
- $< @CONFIG@
-
-# This is taken straight from the GNU `make' manual.
-# That makes it GFDL, which is incompatible with the GPL
-# I claim `fair-use'
-%.d: %.c
- @set -e; rm -f $@; \
- $(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
- sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
- rm -f $@.$$$$
-
-ifneq ($(shell ls -d $(csources:.c=.d) 2>/dev/null),)
- include $(csources:.c=.d)
-endif
-
diff --git a/wrapper/inner.sh b/wrapper/inner.sh
new file mode 100644
index 0000000..b1dc718
--- /dev/null
+++ b/wrapper/inner.sh
@@ -0,0 +1,145 @@
+#!/usr/bin/env bash
+# rvs inner.sh - The main RVS program
+# Copyright (C) 2009-2010, 2015 Luke Shumaker
+#
+# This file is part of rvs.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+set -u
+
+m4_include(config.sh)
+
+declare -r varname_REPO="${PACKAGE^^}_REPO"
+declare -r varname_EXEC_PATH="${PACKAGE^^}_EXEC_PATH"
+
+declare -r program_name="$1"; shift
+
+
+
+_() {
+ if type gettext &>/dev/null; then
+ TEXTDOMAINDIR=$localedir gettext "$pkgtextdomain" "$1";
+ else
+ echo "$1";
+ fi
+}
+
+sighandler_exit() {
+ local signal=$1; shift
+ echo
+ error 0 "$@"
+ trap -- "$signal"
+ kill -"$signal" "$$"
+}
+
+install_sighandlers() {
+ set -E
+ for signal in TERM HUP QUIT; do
+ trap "signalhandler_exit $signal '%s signal cought. Exiting...'" $signal
+ done
+ trap 'signalhandler_exit INT "Aborted by user. Exiting..."' INT
+ trap 'kill -USR1 "$$"' ERR
+}
+
+# Like GLibC's error(3), but call gettext on the format string
+error() {
+ >&2 printf "%s: $(_ "$2")\n" "$RVS" "${@:3}"
+ [[ $1 -eq 0 ]] || exit $1
+}
+
+_runcmd() {
+ [[ $# -ge 1 ]] || error 1 'Usage: %s <command> [<args>]' "$program_name"
+ local cmd=$1
+
+ local exec_path="${!varname_EXEC_PATH:-$pkglibexecdir}"
+
+ if [ ! -e "$exec_path/$cmd" ] || [ "$cmd" = "${PACKAGE}" ]; then
+ error 127 '%s: Not a %s command' "$cmd" "$PACKAGE"
+ else
+ trap '[ -z "${TMPDIR:-}" ] || rm -rf -- "$TMPDIR"' EXIT
+ export TMPDIR="$(mktemp -dt "${PACKAGE}.XXXXXXXXXX")"
+
+ repo="$(_repo)"
+ export "$varname_REPO=$repo"
+
+ set -o pipefail
+
+ if [ -f "$exec_path/$cmd" ]; then
+ "$exec_path/$cmd" "$@" | tee -- "$TMPDIR/$cmd"
+ elif [ -d "$exec_path/$cmd" ]; then
+ mkdir -p -- "$TMPDIR/$cmd"
+ local file
+ for file in "$exec_path/$command"/*; do
+ "$file" "$@" | tee -- "$TMPDIR/$command/${file##*/}" ||
+ error 127 'Aborting: error encountered while running: %s' "$file"
+ done
+ else
+ error 127 '%s: Could not execute' "$exec_path/$cmd"
+ fi
+ fi
+}
+
+_repo() {
+ [[ $# -ne 0 ]] || error 1 'Usage: %s repo' "$program_name"
+ if [ -z "${!varname_REPO:-}" ]; then # we aren't getting a value from then env
+ local repo=".${PACKAGE,,}"
+
+ # [------can ascend-----] && ! [-not found repo--]
+ while [ "$PWD" != "$OLDPWD" ] && ! [ -d "$PWD/$repo" ]; do
+ cd ..
+ done
+
+ if [ -d "$PWD/$repo" ]; then
+ # we found a repository
+ printf '%s\n' "$PWD/$repo"
+ else
+ # we didn't find a repository
+ error 128 "No %s repository found" "$PACKAGE"
+ fi
+ else
+ printf '%s\n' "${!varname_REPO}"
+ fi
+}
+
+_init() {
+ [[ $# -gt 1 ]] || error 1 'Usage: %s init [directory]' "$program_name"
+ local dir="${1:-$PWD}"
+ mkdir -p -- "$dir"
+ cd "$dir"
+ repo="$(_repo 2> /dev/null)" || true
+ if [ -n "${repo:-}" ]; then
+ _error 129 "Repository already exists at \`%s'" "$repo"
+ fi
+ export "$varname_REPO=$PWD/.${PACKAGE,,}"
+ mkdir "${!varname_REPO}"
+ _runcmd init "$dir"
+}
+
+main() {
+ install_sighandlers
+ [[ $# -ge 1 ]] || error 'No command specified';;
+ export "${PACKAGE^^}=$program_name"
+
+ local cmd=$1; shift
+ case "$cmd" in
+ repo) _repo "$@";;
+ init) _init "$@";;
+ *) _runcmd "$cmd" "$@";;
+ esac
+}
+
+main "$@"
+
+# 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/main.mk.in b/wrapper/main.mk.in
deleted file mode 100644
index 0ba00d7..0000000
--- a/wrapper/main.mk.in
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/usr/bin/make -f
-name = @name@
-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>.
-
-sysconfdir = @sysconfdir@
-BINDIR = @BINDIR@
-TMPDIR = @TMPDIR@
-LIBDIR = @LIBDIR@
-ETCDIR = @ETCDIR@
-dirs += $(sysconfdir) $(BINDIR) $(TMPDIR) $(LIBDIR) $(ETCDIR)
-
-rvs = @rvs@
-RVS = @RVS@
-
-# phony targets ####################################################
-.PHONY : all
-all : Makefiles rvs
-filelist=$(patsubst $(srcdir)/%,%,$(shell find $(srcdir)/* -type f))
-
-# most everything ##################################################
-
-# the installed wrapper
-$(RVS) : rvs $(dir $(RVS))
- $(INSTALL_PROGRAM) $< $@
-
-# build the wrapper
-b := @
-rvs : rvs.sh
- $(INSTALL_PROGRAM) $< $@
- $(SED) -i \
- -e 's/$bSHELL@/$(subst /,\/,$(SHELL))/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)
-
-clean :
-
-distclean : clean
- $(RM) rvs
- $(RM) Makefile *.mk
-
diff --git a/wrapper/outer.c b/wrapper/outer.c
new file mode 100644
index 0000000..4bc2d2f
--- /dev/null
+++ b/wrapper/outer.c
@@ -0,0 +1,63 @@
+/* RVS outer.c - A wrapper for $(bindir) to call the main RVS program
+ * Copyright (C) 2015 Luke Shumaker
+ *
+ * This file is part of rvs.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include <errno.h> /* for errno */
+#include <error.h> /* for error(3) */
+#include <libintl.h> /* for dgettext(3) */
+#include <locale.h> /* for bindtextdomain(3) and textdomain(3) */
+#include <stdio.h> /* for asprintf(3) */
+#include <stdlib.h> /* for getenv(3), calloc(3) */
+#include <string.h> /* for mempcy(3) */
+#include <unistd.h> /* for execv(3) */
+
+#include "config.h"
+#define _ gettext
+
+#define EXIT_FAILURE_OOM 126
+#define EXIT_FAILURE_EXEC 127
+
+int
+main(int argc, char *argv[]) {
+ bindtextdomain(pkgtextdomain, localedir);
+ textdomain(pkgtextdomain);
+
+ unsetenv("ENV");
+ unsetenv("BASH_ENV");
+
+ const char *varname = PACKAGE_UPPER "_EXEC_PATH";
+
+ char *exec_path = getenv(varname);
+ if (!exec_path)
+ exec_path = pkglibexecdir;
+
+ char *exec_file = NULL;
+ if (asprintf(&exec_file, "%s/" PACKAGE, exec_path) < 0)
+ error(EXIT_FAILURE_OOM, errno,
+ _("Could not allocate memory for string"));
+
+ char **args = calloc(argc+2, sizeof(char*));
+ if (!args)
+ error(EXIT_FAILURE_OOM, errno,
+ _("Could not allocate cleared memory"));
+ args[0] = exec_file;
+ memcpy(&args[1], argv, sizeof(char*) * argc);
+
+ execv(exec_file, args);
+ error(EXIT_FAILURE_EXEC, errno, _("Could not execute: %s"), exec_file);
+ return EXIT_FAILURE_EXEC;
+}
diff --git a/wrapper/runcom.mk.in b/wrapper/runcom.mk.in
deleted file mode 100644
index 55782f0..0000000
--- a/wrapper/runcom.mk.in
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/make -f
-
-FIND = $(patsubst $(1)/%,%,$(wildcard $(2)/*))
-
-COMMANDS = $(call FIND,$(BINDIR),$(BINDIR))
-$(COMMANDS): % : $(call FIND,$(BINDIR),$(BINDIR)/%)
-
-% ::
- "$(BINDIR)/$@" $(ARGS)
-
-include $(wildcard $(DEPDIR)/*)
-
diff --git a/wrapper/rvs.sh b/wrapper/rvs.sh
deleted file mode 100644
index 19a8188..0000000
--- a/wrapper/rvs.sh
+++ /dev/null
@@ -1,165 +0,0 @@
-#!/bin/sh
-name='@name@'
-ver='0.9'
-# Copyright (C) 2009-2010 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 this program; see the file COPYING.
-# If not, see <http://www.gnu.org/licenses>.
-
-export RVS="$0" #RVS='@RVS@'
- BINDIR='@BINDIR@'
- DEPDIR='@DEPDIR@'
- baseTMPDIR='@TMPDIR@'
-export LIBDIR='@LIBDIR@'
-export ETCDIR='@ETCDIR@'
-
-################################################################################
-# Internal use #
-################################################################################
-
-# General ############################################################
-
-_error() {
- echo "$RVS: $1" >> /dev/stderr
- exit ${2-1}
-}
-
-# Repository #########################################################
-
-_repo() {
- if [ -z "$REPO" ]; then # we aren't getting a value from then env
- repo=".$name"
- 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"
- else
- echo "$REPO"
- fi
-}
-
-# Modules ############################################################
-
-_runcom() {
- # exit states
- # 0 - fine
- # 1 - could not find command
- # 2 - could not run command
- usage="usage: $RVS runcom COMMAND"
- command=${1?"$usage"}; shift
-
- if [ ! -e "$BINDIR/$command" ]; then
- exit 1
- else
- mkdir -p "$baseTMPDIR"
- export TMPDIR="`mktemp -d --tmpdir="$baseTMPDIR"`"
-
- if [ -z "$RVS_LEVEL" ]; then
- export RVS_LEVEL=0;
- else
- export RVS_LEVEL=`expr $RVS_LEVEL + 1`
- fi
-
- if [ -f "$BINDIR/$command" ]; then
- exec "$BINDIR/$command" $@ | tee "$TMPDIR/$command"
- elif [ -d "$BINDIR/$command" ]; then
- mkdir -p "$TMPDIR/$command"
- for file in "$BINDIR/$command"/*; do
- id="`basename "$file" | sed 's/^[0-9]*-//'`"
- "$file" $@ | tee "$TMPDIR/$command/$id"
- done
- else
- exit 2
- fi
- rm -rf "$TMPDIR"
- fi
-}
-
-_nextpriority() {
- usage="usage: $RVS nextpriority COMMAND"
- command=${1?"$usage"}
- for file in "$BINDIR/$command"/*; do
- echo "$file" | sed 's/^\([0-9]*\)-.*/\1/'
- done | sort -n | tail -n1 | xargs expr 1 +
-}
-
-################################################################################
-# Builtin commands #
-################################################################################
-
-_init() {
- # exit states:
- # 0 - fine
- # 1 - repo already exists
- # 2 - error running init commands
- REPO="`_repo 2> /dev/null`"
- if [ -z "$REPO" ]; then
- export REPO="`pwd`/.$name"
- install -d "$REPO"
- _runcom init
- case "$?" in
- 0) exit 0;;
- 1) exit 0;;
- 2) _error 'error running init scripts' 2;;
- esac
- else
- _error "repository already exists at \`$REPO'" 1
- fi
-}
-
-################################################################################
-# Main #
-################################################################################
-
-# START OPTION HANDLING #
-com=$1;
-# END OPTION HANDLING #
-case "$com" in
- '') _error 'no command specified';;
- repo) _repo; exit $?;;
- 'init' ) shift; _init $@; exit $?;;
- 'install') shift; _install $@; exit $?;;
- 'uninstall') shift; _uninstall $@; exit $?;;
- *)
- REPO=`_repo`
- if [ "$?" = '0' ]; then
- export REPO
- _runcom $@
- case "$?" in
- 0) exit 0;;
- 1) _error "could not find command \`$1'" 1;;
- 2) _error "could not run command \`$1'" 2;;
- esac
- else
- exit 1
- fi
- :;;
-esac
-
-# Copy/Paste Virus 1.3c Please copy and paste this text anywhere. Track
-# its progress by searching for this MD5#f7eac285ebfe21c4587bfebb9582f90d
-