1import Test.Cabal.Prelude
2import Data.Foldable (traverse_)
3main = cabalTest $ do
4  -- Test the forbidden characters except NUL. Reference:
5  -- https://www.gnu.org/software/autoconf/manual/autoconf.html#File-System-Conventions
6  -- Most of these are magic on Windows, so don't bother testing there.
7  --
8  -- Note: we bundle the configure script so no need to autoreconf
9  -- while building
10  skipIf =<< isWindows
11  traverse_ check
12    [ "foo bar"
13    , "foo\tbar"
14    , "foo\nbar"
15    , "foo\"bar"
16    , "foo#bar"
17    , "foo$bar"
18    , "foo&bar"
19    , "foo'bar"
20    , "foo(bar"
21    , "foo)bar"
22    , "foo*bar"
23    , "foo;bar"
24    , "foo<bar"
25    , "foo=bar"
26    , "foo>bar"
27    , "foo?bar"
28    , "foo[bar"
29    , "foo\\bar"
30    , "foo`bar"
31    , "foo|bar"
32    ]
33  where
34    -- 'cabal' from the prelude requires the command to succeed; we
35    -- don't mind if it fails, so long as we get the warning. This is
36    -- an inlined+specialised version of 'cabal' for v1-configure.
37    check dir = withSourceCopyDir dir $
38      defaultRecordMode RecordMarked $ do
39        recordHeader ["cabal", "v1-configure"]
40        env <- getTestEnv
41        let args =
42              [ "v1-configure"
43              , "-vverbose +markoutput +nowrap"
44              , "--builddir"
45              , testDistDir env
46              ]
47        configured_prog <- requireProgramM cabalProgram
48        r <- liftIO $ run (testVerbosity env)
49                      (Just (testCurrentDir env))
50                      (testEnvironment env)
51                      (programPath configured_prog)
52                      args Nothing
53        recordLog r
54