Handle absolute paths to build roots in Hadrian.
authorP.C. Shyamshankar <shyam@galois.com>
Thu, 24 Jan 2019 18:07:34 +0000 (13:07 -0500)
committerMarge Bot <ben+marge-bot@smart-cactus.org>
Wed, 6 Mar 2019 14:17:22 +0000 (09:17 -0500)
commit2ff77b9894eecf51fa619ed2266ca196e296cd1e
tree656eaf880e2e76ffb39b2c24a21fc1ace11004bb
parentdb039a4a10fc8fa9e03e6781d1c0dc33151beda6
Handle absolute paths to build roots in Hadrian.

Fixes #16187.

This patch fixes various path concatenation issues to allow functioning
builds with hadrian when the build root location is specified with an
absolute path.

Remarks:

- The path concatenation operator (-/-) now handles absolute second operands
  appropriately. Its behavior should match that of POSIX (</>) in this
  regard.

- The `getDirectoryFiles*` family of functions only searches for matches
  under the directory tree rooted by its first argument; all of the
  results are also relative to this root. If the first argument is the
  empty string, the current working directory is used.

  This patch passes the appropriate directory (almost always either `top`
  or `root`), and subsequently attaches that directory prefix so that
  the paths refer to the appropriate files.

- Windows `tar` does not like colons (':') in paths to archive files, it
  tries to resolve them as remote paths. The `--force-local` option
  remedies this, and is applied on windows builds.
hadrian/hadrian.cabal
hadrian/src/Hadrian/Builder/Tar.hs
hadrian/src/Hadrian/Utilities.hs
hadrian/src/Rules/Gmp.hs
hadrian/src/Rules/Libffi.hs
hadrian/src/Rules/Selftest.hs