Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Message-ID: <41549A76.221A8526@dessent.net> Date: Fri, 24 Sep 2004 15:06:46 -0700 From: Brian Dessent Organization: My own little world... MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: Re: Is setup.exe _supposed_ to delete the cygwin dll before attempting to run shell scripts? References: <20040924164839 DOT GJ674 AT trixie DOT casa DOT cgf DOT cx> <20040924170321 DOT GL12802 AT cygbert DOT vinschen DOT de> <011d01c4a266$19792470$78d96f83 AT robinson DOT cam DOT ac DOT uk> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Reply-To: cygwin AT cygwin DOT com Igor Pechtchanski wrote: > It'll work for simple programs, but not for packages where preremove > scripts erase files that are needed to run some programs from that > package. One example (not necessarily a perfect one) that comes to mind > right away is the base-files package, where the preremove script will > currently erase /etc/profile (so any script executing "bash -l" will not > get the expected results). I'm sure there are better examples... > > FWIW, this is probably somewhat similar to the issue of circular > dependencies of postinstall scripts -- there is no good general solution > if we assume monolithic scripts. Wouldn't the "proper" way to do this be to build the dependency tree then remove packages in depth-first order, running each preremove before removing each package list? Example: Dependency tree: A / \ B C \ D So lets say you want to remove and then upgrade new versions of A, B, C, and D. You first get the depth-first order: D, C, B, A. Then you run: preremove(D), remove-files(D), preremove(C), remove-files(C), preremove(B), remove-files(B), preremove(A), remove-files(A) To install you do the same thing, except you'd do breadth-first and you'd do postinstall(X) after each install-files(X). (I know this is not the current method, where all postinstalls are run in a batch at the end.) Brian -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/