Skip to content

build-depends quickcheck-instances breaks new obelisk project #1073

Open
@o1lo01ol1o

Description

If quickcheck-instances is included as a dependency in common.cabal, building the ghcjs shell will complain about missing text-short:

$ nix-shell -A shells.ghcjs

Configuring quickcheck-instances-0.3.28...
Warning: Unknown/unsupported 'ghc' version detected (Cabal 3.2.1.0 supports
'ghc' version < 8.8):
/nix/store/d86qdapc72py8z00p569g09yjkmhyssg-ghcjs-8.10.7/bin/ghcjs is is based
on GHC version 8.10.7
CallStack (from HasCallStack):
  $, called at libraries/Cabal/Cabal/Distribution/Simple/Configure.hs:1024:20 in Cabal-3.2.1.0:Distribution.Simple.Configure
  configureFinalizedPackage, called at libraries/Cabal/Cabal/Distribution/Simple/Configure.hs:477:12 in Cabal-3.2.1.0:Distribution.Simple.Configure
  configure, called at libraries/Cabal/Cabal/Distribution/Simple.hs:625:20 in Cabal-3.2.1.0:Distribution.Simple
  confHook, called at libraries/Cabal/Cabal/Distribution/Simple/UserHooks.hs:65:5 in Cabal-3.2.1.0:Distribution.Simple.UserHooks
  configureAction, called at libraries/Cabal/Cabal/Distribution/Simple.hs:180:19 in Cabal-3.2.1.0:Distribution.Simple
  defaultMainHelper, called at libraries/Cabal/Cabal/Distribution/Simple.hs:116:27 in Cabal-3.2.1.0:Distribution.Simple
  defaultMain, called at Setup.hs:2:8 in main:Main
Setup: Encountered missing or private dependencies:
text-short >=0.1.3 && <0.2

This is unexpected since text-short is pinned in a set of overlays in reflex-platform and querying the store says that text-short is included as an input to the derivation:

nix-store -q --tree /nix/store/4xya277dhb9xvzgydyj0bn4hxj5mq2w5-quickcheck-instances-0.3.28.drv | grep text-short
│   │   │   │   ├───/nix/store/mqzdz7kpk7y4rg7l15qcc0r2fsrbgbkj-text-short-0.1.5.drv
│   │   │   │   │   ├───/nix/store/hi7sbnq9a59b8nnhvngfrwhdc7jv53zs-text-short-0.1.5.tar.gz.drv
│   │   │   │   │   ├───/nix/store/hr4ddyh5jdb2fk0rkv5s6fwgrhg0rga7-text-short-0.1.5-r1.cabal.drv
│   │   │   ├───/nix/store/mqzdz7kpk7y4rg7l15qcc0r2fsrbgbkj-text-short-0.1.5.drv [...]
│   │       │       │   ├───/nix/store/mph9ll0rwlv17wh395rv4gx6isspznw7-text-short-0.1.5.drv
│   │       │       │   │   ├───/nix/store/hi7sbnq9a59b8nnhvngfrwhdc7jv53zs-text-short-0.1.5.tar.gz.drv [...]
│   │       │       │   │   ├───/nix/store/hr4ddyh5jdb2fk0rkv5s6fwgrhg0rga7-text-short-0.1.5-r1.cabal.drv [...]
│   │       │   ├───/nix/store/mph9ll0rwlv17wh395rv4gx6isspznw7-text-short-0.1.5.drv [...]

Attempting to pin text-short in the local default.nix does not affect the outcome (and, I am generally unable to change the version of text-short referenced in the derivation.)

repro:

name: common
version: 0.1
cabal-version: >= 1.2
build-type: Simple

library
  hs-source-dirs: src
  build-depends: base
               , obelisk-route
               , text
               , quickcheck-instances
  exposed-modules:
    Common.Api
    Common.Route
  ghc-options: -Wall -O -fno-show-valid-hole-fits
               -- unsafe code
               -Wincomplete-record-updates -Wincomplete-uni-patterns -Wpartial-fields
               -- unneeded code
               -Widentities -Wredundant-constraints
  if impl(ghc >= 8.8)
    ghc-options:
               -Wmissing-deriving-strategies
{ system ? builtins.currentSystem
, obelisk ? import ./.obelisk/impl {
    inherit system;
    iosSdkVersion = "16.1";

    # You must accept the Android Software Development Kit License Agreement at
    # https://developer.android.com/studio/terms in order to build Android apps.
    # Uncomment and set this to `true` to indicate your acceptance:
    # config.android_sdk.accept_license = false;

    # In order to use Let's Encrypt for HTTPS deployments you must accept
    # their terms of service at https://letsencrypt.org/repository/.
    # Uncomment and set this to `true` to indicate your acceptance:
    # terms.security.acme.acceptTerms = false;
  }
}:
with obelisk;
project ./. ({ ... }: {
  android.applicationId = "systems.obsidian.obelisk.examples.minimal";
  android.displayName = "Obelisk Minimal Example";
  ios.bundleIdentifier = "systems.obsidian.obelisk.examples.minimal";
  ios.bundleName = "Obelisk Minimal Example";
  overrides = self: super: {
    text-short = self.callHackage "text-short" "0.1.5" { };
  };
})

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions