1
1
mirror of https://github.com/github/semantic.git synced 2024-12-18 20:31:55 +03:00
semantic/script/ghci-flags

82 lines
2.5 KiB
Plaintext
Raw Normal View History

#!/bin/bash
# Computes the flags for ghcide to pass to ghci. You probably wont be running this yourself, but rather ghcide will via configuration in hie.yaml.
2019-11-01 18:01:17 +03:00
set -e
2019-12-18 17:00:13 +03:00
cd "$(dirname "$0")/.."
2019-11-01 18:01:17 +03:00
ghc_version="$(ghc --numeric-version)"
2019-12-18 01:06:11 +03:00
# recent hie-bios requires us to output to the file at $HIE_BIOS_OUTPUT, but older builds & script/repl dont set that var, so we default it to stdout
2019-12-18 00:49:45 +03:00
output_file="${HIE_BIOS_OUTPUT:-/dev/stdout}"
2019-12-18 17:05:44 +03:00
# do a build of dependencies up front to ensure theyre all available
2019-12-18 17:00:23 +03:00
cabal v2-build -v0 all --only-dependencies
2019-12-18 17:03:30 +03:00
build_products_dir="dist-newstyle/build/x86_64-osx/ghc-$ghc_version/build-repl"
2019-12-18 00:50:26 +03:00
function flags {
2019-12-18 17:12:38 +03:00
# disable optimizations for faster loading
2019-12-18 00:50:26 +03:00
echo "-O0"
2019-12-18 17:12:38 +03:00
# dont load .ghci files (for ghcide)
2019-12-18 00:50:26 +03:00
echo "-ignore-dot-ghci"
2019-12-18 17:12:38 +03:00
# where to put build products
2019-12-18 17:03:30 +03:00
echo "-outputdir $build_products_dir"
echo "-odir $build_products_dir"
echo "-hidir $build_products_dir"
echo "-stubdir $build_products_dir"
2019-12-18 00:50:26 +03:00
2019-12-18 17:12:38 +03:00
# preprocessor options, for -XCPP
2019-12-18 17:04:01 +03:00
echo "-optP-include"
echo "-optP$build_products_dir/autogen/cabal_macros.h"
2019-12-18 17:12:38 +03:00
# autogenerated sources, both .hs and .h (e.g. Foo_paths.hs)
2019-12-18 17:07:01 +03:00
echo "-i$build_products_dir/autogen"
echo "-I$build_products_dir/autogen"
2019-12-18 17:12:38 +03:00
# .hs source dirs
2019-12-18 17:10:33 +03:00
# TODO: would be nice to figure this out from cabal.project & the .cabal files
2019-12-18 17:01:45 +03:00
echo "-isemantic-analysis/src"
echo "-isemantic-ast/src"
echo "-isemantic-core/src"
echo "-isemantic-java/src"
echo "-isemantic-json/src"
echo "-isemantic-python/src"
echo "-isemantic-ruby/src"
2019-12-18 17:01:45 +03:00
echo "-isemantic-tags/src"
echo "-iapp"
echo "-isrc"
echo "-ibench"
echo "-itest"
2019-12-18 00:50:26 +03:00
2019-12-18 17:12:38 +03:00
# disable automatic selection of packages
2019-12-18 00:50:26 +03:00
echo "-hide-all-packages"
2019-12-18 17:12:38 +03:00
# run cabal and emit package flags from the environment file, removing comments & prefixing with -
2019-12-18 17:00:23 +03:00
cabal v2-exec -v0 bash -- -c 'cat "$GHC_ENVIRONMENT"' | grep -v '^--' | sed -e 's/^/-/'
2019-12-18 00:50:26 +03:00
2019-12-18 17:12:38 +03:00
# default language extensions
2019-12-18 00:50:26 +03:00
echo "-XHaskell2010"
echo "-XStrictData"
2019-12-18 17:12:38 +03:00
# treat warnings as warnings
2019-12-18 00:50:26 +03:00
echo "-Wwarn"
2019-12-18 17:12:38 +03:00
# default warning flags
2019-12-18 00:50:26 +03:00
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
2019-12-18 00:50:26 +03:00
}
flags > "$output_file"