From 0c79706e1d253dd7a54fea2cf082d70dd93c1f9d Mon Sep 17 00:00:00 2001 From: Francesco Gazzetta Date: Wed, 19 Jul 2017 19:49:30 +0200 Subject: [PATCH 1/2] Add datadir env var before running the exe This enables the executale to find the datafiles in inplace builds. Fixes #4120 --- cabal-install/Distribution/Client/CmdRun.hs | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/cabal-install/Distribution/Client/CmdRun.hs b/cabal-install/Distribution/Client/CmdRun.hs index 34054992e1e..16b57431ec4 100644 --- a/cabal-install/Distribution/Client/CmdRun.hs +++ b/cabal-install/Distribution/Client/CmdRun.hs @@ -49,9 +49,12 @@ import Distribution.Types.Executable import Distribution.Types.UnqualComponentName ( UnqualComponentName, unUnqualComponentName ) import Distribution.Types.PackageDescription - ( PackageDescription(executables) ) + ( PackageDescription(executables, dataDir) ) import Distribution.Simple.Program.Run - ( runProgramInvocation, simpleProgramInvocation ) + ( runProgramInvocation, ProgramInvocation(..), + emptyProgramInvocation ) +import Distribution.Simple.Build.PathsModule + ( pkgPathEnvVar ) import Distribution.Types.PackageId ( PackageIdentifier(..) ) @@ -61,6 +64,8 @@ import Data.Function ( on ) import System.FilePath ( () ) +import System.Directory + ( getCurrentDirectory ) runCommand :: CommandUI (ConfigFlags, ConfigExFlags, InstallFlags, HaddockFlags) @@ -227,10 +232,17 @@ runAction (configFlags, configExFlags, installFlags, haddockFlags) pkg exe exe - let args = drop 1 targetStrings + curDir <- getCurrentDirectory + let dataDirEnvVar = (pkgPathEnvVar (elabPkgDescription pkg) "datadir", + Just $ curDir dataDir (elabPkgDescription pkg)) + args = drop 1 targetStrings runProgramInvocation verbosity - (simpleProgramInvocation exePath args) + emptyProgramInvocation { + progInvokePath = exePath, + progInvokeArgs = args, + progInvokeEnv = [dataDirEnvVar] + } where verbosity = fromFlagOrDefault normal (configVerbosity configFlags) cliConfig = commandLineFlagsToProjectConfig From de31b2af698fbd492f29933d86a08b271402b486 Mon Sep 17 00:00:00 2001 From: Francesco Gazzetta Date: Wed, 19 Jul 2017 22:02:02 +0200 Subject: [PATCH 2/2] Add test for #4120 Datafiles should work when running an inplace exe --- .../NewBuild/CmdRun/Datafiles/Datafiles.cabal | 11 +++++++++++ .../PackageTests/NewBuild/CmdRun/Datafiles/Main.hs | 4 ++++ .../PackageTests/NewBuild/CmdRun/Datafiles/cabal.out | 8 ++++++++ .../NewBuild/CmdRun/Datafiles/cabal.project | 1 + .../NewBuild/CmdRun/Datafiles/cabal.test.hs | 4 ++++ .../NewBuild/CmdRun/Datafiles/data/hello.txt | 1 + 6 files changed, 29 insertions(+) create mode 100644 cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/Datafiles.cabal create mode 100644 cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/Main.hs create mode 100644 cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/cabal.out create mode 100644 cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/cabal.project create mode 100644 cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/cabal.test.hs create mode 100644 cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/data/hello.txt diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/Datafiles.cabal b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/Datafiles.cabal new file mode 100644 index 00000000000..9c51162eb40 --- /dev/null +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/Datafiles.cabal @@ -0,0 +1,11 @@ +name: Datafiles +version: 1.0 +build-type: Simple +cabal-version: >= 1.10 +data-dir: data +data-files: hello.txt + +executable foo + main-is: Main.hs + build-depends: base + default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/Main.hs b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/Main.hs new file mode 100644 index 00000000000..aaea1c08884 --- /dev/null +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/Main.hs @@ -0,0 +1,4 @@ +import Paths_Datafiles + +main = putStrLn =<< readFile =<< getDataFileName "hello.txt" + diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/cabal.out b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/cabal.out new file mode 100644 index 00000000000..ac015ba7896 --- /dev/null +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/cabal.out @@ -0,0 +1,8 @@ +# cabal new-run +Resolving dependencies... +Build profile: with-compiler: ghc-, optimisation: NormalOptimisation +In order, the following will be built: + - Datafiles-1.0 (exe:foo) (first run) +Configuring executable 'foo' for Datafiles-1.0.. +Preprocessing executable 'foo' for Datafiles-1.0.. +Building executable 'foo' for Datafiles-1.0.. diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/cabal.project b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/cabal.project new file mode 100644 index 00000000000..e6fdbadb439 --- /dev/null +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/cabal.project @@ -0,0 +1 @@ +packages: . diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/cabal.test.hs b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/cabal.test.hs new file mode 100644 index 00000000000..db4906b6851 --- /dev/null +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/cabal.test.hs @@ -0,0 +1,4 @@ +import Test.Cabal.Prelude +main = cabalTest $ + cabal' "new-run" ["foo"] >>= assertOutputContains "Hello World" + diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/data/hello.txt b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/data/hello.txt new file mode 100644 index 00000000000..557db03de99 --- /dev/null +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/data/hello.txt @@ -0,0 +1 @@ +Hello World