diff options
-rw-r--r-- | Build/Configure.hs | 30 | ||||
-rw-r--r-- | Build/TestConfig.hs | 14 | ||||
-rw-r--r-- | debian/changelog | 1 | ||||
-rw-r--r-- | doc/bugs/configure_mistakes_hashalot_bins_for_sha__63____63____63__sum_and_builds_a_broken_git-annex_executable.mdwn | 7 |
4 files changed, 37 insertions, 15 deletions
diff --git a/Build/Configure.hs b/Build/Configure.hs index 7fb195ad4..96582f923 100644 --- a/Build/Configure.hs +++ b/Build/Configure.hs @@ -19,7 +19,7 @@ tests = , testCp "cp_a" "-a" , testCp "cp_p" "-p" , testCp "cp_reflink_auto" "--reflink=auto" - , TestCase "uuid generator" $ selectCmd "uuid" ["uuid -m", "uuid", "uuidgen"] "" + , TestCase "uuid generator" $ selectCmd "uuid" [("uuid -m", ""), ("uuid", ""), ("uuidgen", "")] , TestCase "xargs -0" $ requireCmd "xargs_0" "xargs -0 </dev/null" , TestCase "rsync" $ requireCmd "rsync" "rsync --version >/dev/null" , TestCase "curl" $ testCmd "curl" "curl --version >/dev/null" @@ -28,19 +28,33 @@ tests = , TestCase "gpg" $ testCmd "gpg" "gpg --version >/dev/null" , TestCase "lsof" $ testCmd "lsof" "lsof -v >/dev/null 2>&1" , TestCase "ssh connection caching" getSshConnectionCaching - ] ++ shaTestCases [1, 256, 512, 224, 384] + ] ++ shaTestCases + [ (1, "da39a3ee5e6b4b0d3255bfef95601890afd80709") + , (256, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855") + , (512, "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e") + , (224, "d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f") + , (384, "38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b") + ] -shaTestCases :: [Int] -> [TestCase] +{- shaNsum are the program names used by coreutils. + - On some systems, shaN is used instead, but on other + - systems, it might be "hashalot", which does not produce + - usable checksums. Only accept programs that produce + - known-good hashes. -} +shaTestCases :: [(Int, String)] -> [TestCase] shaTestCases l = map make l where - make n = TestCase key $ maybeSelectCmd key (shacmds n) "</dev/null" + make (n, knowngood) = + TestCase key $ maybeSelectCmd key $ + zip (shacmds n) (repeat check) where key = "sha" ++ show n + check = "</dev/null | grep -q '" ++ knowngood ++ "'" shacmds n = concatMap (\x -> [x, osxpath </> x]) $ - map (\x -> "sha" ++ show n ++ x) ["", "sum"] - -- Max OSX puts GNU tools outside PATH, so look in - -- the location it uses, and remember where to run them - -- from. + map (\x -> "sha" ++ show n ++ x) ["sum", ""] + {- Max OSX puts GNU tools outside PATH, so look in + - the location it uses, and remember where to run them + - from. -} osxpath = "/opt/local/libexec/gnubin" tmpDir :: String diff --git a/Build/TestConfig.hs b/Build/TestConfig.hs index 0cc2019cf..eb920c13f 100644 --- a/Build/TestConfig.hs +++ b/Build/TestConfig.hs @@ -75,7 +75,7 @@ testCmd k cmdline = do {- Ensures that one of a set of commands is available by running each in - turn. The Config is set to the first one found. -} -selectCmd :: ConfigKey -> [String] -> String -> Test +selectCmd :: ConfigKey -> [(String, String)] -> Test selectCmd k = searchCmd (return . Config k . StringConfig) (\cmds -> do @@ -83,17 +83,17 @@ selectCmd k = searchCmd error $ "* need one of these commands, but none are available: " ++ show cmds ) -maybeSelectCmd :: ConfigKey -> [String] -> String -> Test +maybeSelectCmd :: ConfigKey -> [(String, String)] -> Test maybeSelectCmd k = searchCmd (return . Config k . MaybeStringConfig . Just) (\_ -> return $ Config k $ MaybeStringConfig Nothing) -searchCmd :: (String -> Test) -> ([String] -> Test) -> [String] -> String -> Test -searchCmd success failure cmds param = search cmds +searchCmd :: (String -> Test) -> ([String] -> Test) -> [(String, String)] -> Test +searchCmd success failure cmdsparams = search cmdsparams where - search [] = failure cmds - search (c:cs) = do - ret <- system $ quiet c ++ " " ++ param + search [] = failure $ fst $ unzip cmdsparams + search ((c, params):cs) = do + ret <- system $ quiet $ c ++ " " ++ params if ret == ExitSuccess then success c else search cs diff --git a/debian/changelog b/debian/changelog index 128adefef..246c0badc 100644 --- a/debian/changelog +++ b/debian/changelog @@ -21,6 +21,7 @@ git-annex (3.20121018) UNRELEASED; urgency=low does not accept that. * bugfix: Don't fail transferring content from read-only repos. Closes: #691341 + * configure: Check that checksum programs produce correct checksums. -- Joey Hess <joeyh@debian.org> Wed, 17 Oct 2012 14:24:10 -0400 diff --git a/doc/bugs/configure_mistakes_hashalot_bins_for_sha__63____63____63__sum_and_builds_a_broken_git-annex_executable.mdwn b/doc/bugs/configure_mistakes_hashalot_bins_for_sha__63____63____63__sum_and_builds_a_broken_git-annex_executable.mdwn index c7ed04c65..46dfa4f70 100644 --- a/doc/bugs/configure_mistakes_hashalot_bins_for_sha__63____63____63__sum_and_builds_a_broken_git-annex_executable.mdwn +++ b/doc/bugs/configure_mistakes_hashalot_bins_for_sha__63____63____63__sum_and_builds_a_broken_git-annex_executable.mdwn @@ -48,3 +48,10 @@ This is not a runtime bug, only compile time. Uninstalling Hashalot or simply r I found this bug on Gentoo when I installed git-annex on a system which already had hashalot installed. In the case of Gentoo, git-annex is compiled with hashalot's executables in the path, but normal users don't have /usr/sbin/ in their path so git-annex just fails to find the executable. If you put hashalot in the path, then git annex still fails to work as hashalot is not a replacement for sha1sum and friends. It may be enough to just prefer sha???sum over sha??? if they both exist. + +> Grr. There is no consistency across unixes as to the names of these +> programs and now something is installing shaN commands that don't +> generate a checksum?! +> +> Ok, fine, configure now checks that the program it finds outputs a known +> good checksum. [[done]] --[[Joey]] |