To give a bit more of insight (and fill some holes in my explanation because I couldn't finish my coffee yet :)), actually, your baseline does not work because in the metacello spec you're saying that 'SmaCC-Reification' resides in Grace's repository, which is wrong I assume. So metacello will try to load that dependency (and fail) and so, it will fail to load Grace-Parser (transitivity...).
And now that I think it better, even putting spec package: 'Grace-Parser' with: [ spec requires: {'SmaCC' . 'SmaCC-Reification'. 'Grace-Scope'} ]. Is wrong. - First thing is to see if SmaCC exports SmaCC-Reification by default or in a separate group. - If SmaCC-Reification is downloaded by default, you just need spec package: 'Grace-Parser' with: [ spec requires: {'SmaCC' . 'Grace-Scope'} ]. - If SmaCC-Reification is in a non-default group, you probably want to add spec baseline: 'SmaCC-Reification' with: [ spec repository: 'github://apblack/SmaCC:working'; loads: #( 'NAME-OF-YOUR-REIFICATION-GROUP' ) ]. And then your packages can depend on it. - IF SmaCC-Reification is not in the SmaCC baseline, then, there is nothing you can do, but to add it :) On Mon, Jul 9, 2018 at 9:29 AM Guillermo Polito <guillermopol...@gmail.com> wrote: > Hi Andrew, > > I'd say you got almost everything right. Let me try to guide you to fix > what's not so well and see if you can make it work. > > On Sun, Jul 8, 2018 at 4:19 PM Andrew P. Black <apbl...@pdx.edu> wrote: > >> I have a baselineOfGrace that has been working fine for some time: >> >> baseline: spec >> <baseline> >> >> spec for: #'common' do: [ >> spec >> baseline: 'SmaCC' >> with: [ spec repository: 'github://apblack/SmaCC:working' ]. >> spec >> baseline: 'FileDialog' >> with: [ spec repository: 'github://peteruhnak/file-dialog/repository' ]. >> spec package: 'Grace-Scope'. >> spec package: 'Grace-Names' with: [ spec requires: {'Grace-Parser' . >> 'Grace-Scope'} ]. >> spec package: 'Grace-Parser' with: [ >> spec requires: {'SmaCC' . 'Grace-Scope'} ]. >> spec package: 'Grace-HValidator' with: [ spec requires: {'SmaCC' } ]. >> spec package: 'Grace-IDE' with: [ >> spec requires: {'FileDialog' . 'Grace-Compiler'} ]. >> spec package: 'Grace-Compiler' with: [ >> spec requires: {'Grace-Parser' . 'Grace-Names'} ]. >> spec package: 'Grace-Tests' with: [ >> spec requires: {'Grace-Parser' . 'Grace-Names' . 'Grace-HValidator'} ]. >> spec package: 'Grace-Types' with: [ >> spec requires: {'Grace-Parser' . 'Grace-Names' . 'Grace-Scope'} ]. >> spec package: 'Grace-TypeTests' with: [ >> spec requires: {'Grace-Tests' . 'Grace-Types' } ]. >> spec package: 'Grace-Ast' with: [ >> spec requires: {'Grace-Parser' . 'Grace-Names' . 'Grace-Scope' . >> 'Grace-Types'} ]. >> spec package: 'Grace-AstTests' with: [ >> spec requires: {'Grace-Tests' . 'Grace-Ast'} ]. >> ] >> >> >> Now I have added a dependency from the package ‘Grace-Parser’ on the >> package 'SmaCC-Reification’. The latter exists *only* within the branch >> SmaCC called ‘fglr’. So I have changed my >> baseline to the following: >> >> baseline: spec >> <baseline> >> >> spec for: #'common' do: [ >> spec >> baseline: 'SmaCC' >> with: [ spec repository: 'github://apblack/SmaCC:fglr' ]. >> >> 1) This is perfect. > >> spec >> baseline: 'FileDialog' >> with: [ spec repository: 'github://peteruhnak/file-dialog/repository' ]. >> spec package: 'Grace-Scope'. >> spec package: 'Grace-Names' with: [ spec requires: {'Grace-Parser' . >> 'Grace-Scope'} ]. >> spec package: 'Grace-Parser' with: [ >> spec requires: {'SmaCC' . 'SmaCC-Reification'. 'Grace-Scope'} ]. >> >> 2) This... It depends: Does the BaselineOfSmaCC export a package/group > with that name? > When you import another project, you should think a baseline as a kind of > black box, where the only things you can import are those declared in the > baseline. If that baseline loads other stuff you don't care. > > In other words, this means that the BaselineOfSmaCC that lives in the > `fglr` branch needs to have a `spec package: 'SmaCC-Reification'` > expression to work. > > >> spec package: 'Grace-HValidator' with: [ spec requires: {'SmaCC' } ]. >> spec package: 'Grace-IDE' with: [ >> spec requires: {'FileDialog' . 'Grace-Compiler'} ]. >> spec package: 'Grace-Compiler' with: [ >> spec requires: {'Grace-Parser' . 'Grace-Names'} ]. >> spec package: 'Grace-Tests' with: [ >> spec requires: {'Grace-Parser' . 'Grace-Names' . 'Grace-HValidator'} ]. >> spec package: 'Grace-Types' with: [ >> spec requires: {'Grace-Parser' . 'Grace-Names' . 'Grace-Scope'} ]. >> spec package: 'Grace-TypeTests' with: [ >> spec requires: {'Grace-Tests' . 'Grace-Types' } ]. >> spec package: 'Grace-Ast' with: [ >> spec requires: {'Grace-Parser' . 'Grace-Names' . 'Grace-Scope' . >> 'Grace-Types'} ]. >> spec package: 'Grace-AstTests' with: [ >> spec requires: {'Grace-Tests' . 'Grace-Ast'} ]. >> spec package: 'SmaCC-Reification'. >> >> 3) And this is wrong :). You don't need to specify external packages like > this. > It's not up to your baseline to load SmaCC stuff. Your baseline describes > things in your grace repository. > It's up to SmaCC's baseline to describe every loadable unit (package, > group...) that you can depend on. > > > So in summary, you should do 1) and 2) in BaselineOfGrace and make sure > that 3) is done in BaselineOfSmacc. > > Keep us posted! > Guille > -- Guille Polito Research Engineer Centre de Recherche en Informatique, Signal et Automatique de Lille CRIStAL - UMR 9189 French National Center for Scientific Research - *http://www.cnrs.fr <http://www.cnrs.fr>* *Web:* *http://guillep.github.io* <http://guillep.github.io> *Phone: *+33 06 52 70 66 13