
And here is the newest after discussion with Duncan Coutts on #haskell. build-depends := bexp bexp = package-name-with-version | '(' bexp ')' | cexp '?' bexp | bexp ',' bexp | 'T' configuration := cexp cexp = '(' cexp ')' | cexp '|' cexp | cexp '&' cexp | 'T' | '!' cexp | 'Flag(' string ')' So dependencies are only on Flags. A new declaration like: default := 'default:' flag-name '=' (bexp | Os(...) | ...) configure takes the following flags: --no-default-flags Defaults are ignored and all flags default to False. --enable-foo Enable flag foo --disable-foo Disable flag foo --auto-foo Use default for foo Now we don't have any of those evil conditional package dependencies. fps would work like: default: old_fps = base < 2 build-depends: base, Flag(old_fps) ? fps configuration: Flag(old_fps) ghc-options: -DUSE_OLD_FPS - Einar Karttunen