[racket-dev] info.rkt `deps` and new #:version keyword: Backward compatibility?

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Thu Oct 3 11:47:36 EDT 2013

This problem is related to the reference of a package-level "info.rkt"
from within a collection via a relative path. A relative path that
leaves a collection confuses the compilation manager.

So, it's a bug, but it's not related to dependency declarations --- or
even the package system, really.

At Thu, 3 Oct 2013 10:37:22 -0400, Sam Tobin-Hochstadt wrote:
> I'm pretty sure this is a bug in `setup/collects` (or maybe
> elsewhere), and I reported it as PR 14063.
> 
> Sam
> 
> On Thu, Oct 3, 2013 at 9:57 AM, Greg Hendershott
> <greghendershott at gmail.com> wrote:
> > Hmm, then maybe I'm misdiagnosing the error.
> >
> > If you were to try doing
> >
> >   raco pkg install frog
> >
> > using 5.3.90.9 from HEAD as of a few days ago, you would see something
> > like this:
> >
> > greg at halo:~$ ~/src/plt/racket/racket/bin/raco pkg install frog
> > Resolving "frog" via https://pkg.racket-lang.org
> > Downloading 
> https://github.com/greghendershott/frog/tarball/fecbe1d75632231eb7af70ef00ad31e
> 95dda2cad
> > The following uninstalled packages are listed as dependencies of frog:
> >    markdown
> > Would you like to install these dependencies? [Y/n/a/?] y
> > Resolving "markdown" via https://pkg.racket-lang.org
> > Downloading 
> https://github.com/greghendershott/markdown/tarball/6f1d1e6578c6d6f832357a81484
> ee427b6a2fc21
> > The following uninstalled packages were listed as dependencies
> > and they were installed:
> >  dependencies of frog:
> >    markdown
> > raco setup: version: 5.90.0.9 [3m]
> > raco setup: installation name: development
> > raco setup: variants: 3m
> > raco setup: main collects: /home/greg/src/plt/racket/racket/collects
> > raco setup: collects paths:
> > raco setup:   /home/greg/src/plt/racket/racket/collects
> > raco setup: main pkgs: /home/greg/src/plt/racket/racket/share/pkgs
> > raco setup: pkgs paths:
> > raco setup:   /home/greg/src/plt/racket/racket/share/pkgs
> > raco setup:   /home/greg/src/plt/racket/racket/share/devel-pkgs
> > raco setup:   /home/greg/.racket/development/pkgs
> > raco setup: links files:
> > raco setup:   /home/greg/src/plt/racket/racket/share/links.rktd
> > raco setup:   /home/greg/src/plt/racket/racket/share/devel-pkgs/links.rktd
> > raco setup:   /home/greg/.racket/development/links.rktd
> > raco setup: main docs: /home/greg/src/plt/racket/racket/doc
> > raco setup: --- updating info-domain tables ---
> > raco setup: updating: /home/greg/src/plt/racket/racket/share/info-cache.rktd
> > raco setup: --- pre-installing collections ---
> > raco setup: --- installing foreign libraries ---
> > raco setup: --- installing shared files ---
> > raco setup: --- compiling collections ---
> > raco setup: making: <pkgs>/frog/example
> > raco setup: making: <pkgs>/frog/example/_src
> > raco setup: making: <pkgs>/frog/example/_src/posts
> > raco setup: making: <pkgs>/frog/example/_src/subdir
> > raco setup: making: <pkgs>/frog/example/css
> > raco setup: making: <pkgs>/frog/example/fonts
> > raco setup: making: <pkgs>/frog/example/img
> > raco setup: making: <pkgs>/frog/example/js
> > raco setup: making: <pkgs>/frog/frog
> > raco setup:  in <pkgs>/frog/frog
> > raco setup:  in <pkgs>/markdown/markdown
> > raco setup:  in <pkgs>/frog
> > application: no case matching 1 non-keyword argument
> >   procedure: collection-file-path
> >   arguments...:
> >    "info.rkt"
> >    #:fail #<procedure:...tup/collects.rkt:31:32>
> > ...
> >
> >
> > Although I didn't know how to dig into that error message, I
> > remembered seeing "#:version" in Jay's presentation 30 minutes
> > previously, and I jumped to the conclusion it was due to this.
> >
> > The same `raco pkg install frog` works fine with 5.3.6, and IIRC
> > worked fine with 5.3.90.?? until recently.
> >
> >
> > On Thu, Oct 3, 2013 at 9:48 AM, Matthew Flatt <mflatt at cs.utah.edu> wrote:
> >> Yes, the `#:version` keyword is optional. The old format, as in
> >>
> >>  (define deps '(("markdown" "0.5")
> >>                 "rackjure"))
> >>
> >> is still supported.
> >>
> >> The old format is described as "deprecated" in the documentation, but
> >> it's fine to use it to support both v5.3.x and v.5.90.x.
> >>
> >> At Thu, 3 Oct 2013 09:40:56 -0400, Greg Hendershott wrote:
> >>> After I gave my Frog talk at RacketCon, in which I said a goal of Frog
> >>> was to make it easy to install, J. Ian Johnson tried to install it...
> >>> but couldn't.
> >>>
> >>> As best I understand, it's because he was using Racket from HEAD, and
> >>> at some point recently the `deps` expression for info.rkt changed for
> >>> the case where you specify a version. A case which I've been using
> >>> (recent versions of Frog need a >= version of Markdown).
> >>>
> >>> For 5.3.6 and (until fairly recently in HEAD) it was:
> >>>
> >>> # frog/info.rkt
> >>> #lang setup/infotab
> >>> (define version "0.7")
> >>> (define collection 'multi)
> >>> (define deps '(("markdown" "0.5")
> >>>                "rackjure"))
> >>>
> >>> But it recently changed to require a #:version keyword, therefore it
> >>> would have to be IIUC this for 5.3.900.???+:
> >>>
> >>> # frog/info.rkt
> >>> #lang setup/infotab
> >>> (define version "0.7")
> >>> (define collection 'multi)
> >>> (define deps '(("markdown" #:version "0.5")
> >>>                "rackjure"))
> >>>
> >>> But that wouldn't be compatible with 5.3.6 IIUC.
> >>>
> >>> As a result I would have to maintain two different packages, one for
> >>> 5.3.5 and 5.3.6, and another for 5.3.900.???+ and greater (yuck).
> >>>
> >>> Until now, even the major change to single-collection defaults was
> >>> done in a way that preserved backward compatibility (well, after
> >>> taking action to add `(define collection 'multi)`, but after taking
> >>> such action the same info.rkt works for old and new).
> >>>
> >>> 1. Am I understanding it correctly?  (Not a rhetorical question; I
> >>> have a lot of "IIUC"s above.)
> >>>
> >>> 2. If so, is it really the intent to break backward compatibility?
> >>>
> >>> 3. Instead couldn't the #version keyword simply be optional?
> >>> _________________________
> >>>   Racket Developers list:
> >>>   http://lists.racket-lang.org/dev
> > _________________________
> >   Racket Developers list:
> >   http://lists.racket-lang.org/dev

Posted on the dev mailing list.