This is the mail archive of the cygwin mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Is setup.exe _supposed_ to delete the cygwin dll before attempting to run shell scripts?

On Fri, 24 Sep 2004, Brian Dessent wrote:

> 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.

Properly speaking, the depth-first order will be B, D, C, A...

> Then you run: preremove(D), remove-files(D), preremove(C),
> remove-files(C), preremove(B), remove-files(B), preremove(A),
> remove-files(A)

Unfortunately, this won't work when you have circular dependencies (e.g.,
cygwin <-> fileutils).  Furthermore, preremove dependencies can't always
be determined from package dependencies (see cygwin-apps archives if

I think Max's solution is probably the least complex short-term one (i.e.,
run all preremove scripts in batch *before* removing any files, and hope
for the best).

> 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.)

FWIW, it shouldn't matter whether the postinstall scripts are run after
each package's files are installed or at the end, as long as they're run
in dependency order.  This *is* the way it's supposed to happen in the
current method, but there's a bug in the script running code somewhere,
and scripts don't get run when packages are traversed, so they're picked
up and run afterwards.

Say it with me: <>... 0:)
      |\      _,,,---,,_
ZZZzz /,`.-'`'    -.  ;-;;,_
     |,4-  ) )-,_. ,\ (  `'-'		Igor Pechtchanski, Ph.D.
    '---''(_/--'  `-'\_) fL	a.k.a JaguaR-R-R-r-r-r-.-.-.  Meow!

"Happiness lies in being privileged to work hard for long hours in doing
whatever you think is worth doing."  -- Dr. Jubal Harshaw

Unsubscribe info:
Problem reports:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]