#!/bin/bash # Computes the flags for ghcide to pass to ghci. You probably won’t be running this yourself, but rather ghcide will via configuration in hie.yaml. set -e cd "$(dirname "$0")/.." ghc_version="$(ghc --numeric-version)" # recent hie-bios requires us to output to the file at $HIE_BIOS_OUTPUT, but older builds & script/repl don’t set that var, so we default it to stdout output_file="${HIE_BIOS_OUTPUT:-/dev/stdout}" build_dir="dist-newstyle/build/x86_64-osx/ghc-$ghc_version" build_products_dir="$build_dir/build-repl" function add_autogen_includes { echo "-optP-include" echo "-optP$1/cabal_macros.h" # autogenerated files, .h and .hs echo "-i$1" echo "-I$1" } cores=$(sysctl -n machdep.cpu.core_count || echo 4) function flags { # disable optimizations for faster loading echo "-O0" # don’t load .ghci files (for ghcide) echo "-ignore-dot-ghci" # use as many jobs as there are physical cores echo "-j$cores" # where to put build products echo "-outputdir $build_products_dir" echo "-odir $build_products_dir" echo "-hidir $build_products_dir" echo "-stubdir $build_products_dir" if [ -d "$build_dir/semantic-0.10.0.0/build/autogen" ] then add_autogen_includes "$build_dir/semantic-0.10.0.0/build/autogen" elif [ -d "$build_dir/semantic-0.10.0.0/noopt/build/autogen" ] then add_autogen_includes "$build_dir/semantic-0.10.0.0/noopt/build/autogen" fi echo "-optP-Wno-macro-redefined" # .hs source dirs # TODO: would be nice to figure this out from cabal.project & the .cabal files echo "-isemantic-analysis/src" echo "-isemantic-ast/src" echo "-isemantic-core/src" echo "-isemantic-go/src" echo "-isemantic-java/src" echo "-isemantic-json/src" echo "-isemantic-parse/src" echo "-isemantic-php/src" echo "-isemantic-python/src" echo "-isemantic-python/test" echo "-isemantic-ruby/src" echo "-isemantic-scope-graph/src" echo "-isemantic-tsx/src" echo "-isemantic-typescript/src" echo "-isemantic-tags/src" echo "-iapp" echo "-isrc" echo "-ibench" echo "-itest" # disable automatic selection of packages echo "-hide-all-packages" # run cabal and emit package flags from the environment file, removing comments & prefixing with - cabal v2-exec -v0 bash -- -c 'cat "$GHC_ENVIRONMENT"' | grep -v '^--' | sed -e 's/^/-/' # default language extensions echo "-XHaskell2010" echo "-XStrictData" # treat warnings as warnings echo "-Wwarn" # default warning flags echo "-Weverything" echo "-Wno-all-missed-specialisations" echo "-Wno-implicit-prelude" echo "-Wno-missed-specialisations" echo "-Wno-missing-import-lists" echo "-Wno-missing-local-signatures" echo "-Wno-monomorphism-restriction" echo "-Wno-name-shadowing" echo "-Wno-safe" echo "-Wno-unsafe" [[ "$ghc_version" = 8.6.* ]] || [[ "$ghc_version" = 8.8.* ]] && echo "-Wno-star-is-type" || true [[ "$ghc_version" = 8.8.* ]] && echo "-Wno-missing-deriving-strategies" || true } flags > "$output_file"