diff --git a/Annex.hs b/Annex.hs
--- a/Annex.hs
+++ b/Annex.hs
@@ -5,7 +5,7 @@
  - Licensed under the GNU GPL version 3 or higher.
  -}
 
-{-# LANGUAGE CPP, GeneralizedNewtypeDeriving, PackageImports, BangPatterns #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving, PackageImports, BangPatterns #-}
 
 module Annex (
 	Annex,
@@ -30,6 +30,7 @@
 	getGitConfig,
 	changeGitConfig,
 	changeGitRepo,
+	adjustGitRepo,
 	getRemoteGitConfig,
 	withCurrentState,
 	changeDirectory,
@@ -61,9 +62,7 @@
 import Types.DesktopNotify
 import Types.CleanupActions
 import qualified Database.Keys.Handle as Keys
-#ifdef WITH_QUVI
 import Utility.Quvi (QuviVersion)
-#endif
 import Utility.InodeCache
 import Utility.Url
 
@@ -95,6 +94,7 @@
 -- internal state storage
 data AnnexState = AnnexState
 	{ repo :: Git.Repo
+	, repoadjustment :: (Git.Repo -> IO Git.Repo)
 	, gitconfig :: GitConfig
 	, backends :: [BackendA Annex]
 	, remotes :: [Types.Remote.RemoteA Annex]
@@ -128,9 +128,7 @@
 	, errcounter :: Integer
 	, unusedkeys :: Maybe (S.Set Key)
 	, tempurls :: M.Map Key URLString
-#ifdef WITH_QUVI
 	, quviversion :: Maybe QuviVersion
-#endif
 	, existinghooks :: M.Map Git.Hook.Hook Bool
 	, desktopnotify :: DesktopNotify
 	, workers :: [Either AnnexState (Async AnnexState)]
@@ -141,6 +139,7 @@
 newState :: GitConfig -> Git.Repo -> AnnexState
 newState c r = AnnexState
 	{ repo = r
+	, repoadjustment = return
 	, gitconfig = c
 	, backends = []
 	, remotes = []
@@ -174,9 +173,7 @@
 	, errcounter = 0
 	, unusedkeys = Nothing
 	, tempurls = M.empty
-#ifdef WITH_QUVI
 	, quviversion = Nothing
-#endif
 	, existinghooks = M.empty
 	, desktopnotify = mempty
 	, workers = []
@@ -295,10 +292,20 @@
 
 {- Changing the git Repo data also involves re-extracting its GitConfig. -}
 changeGitRepo :: Git.Repo -> Annex ()
-changeGitRepo r = changeState $ \s -> s
-	{ repo = r
-	, gitconfig = extractGitConfig r
-	}
+changeGitRepo r = do
+	adjuster <- getState repoadjustment
+	r' <- liftIO $ adjuster r
+	changeState $ \s -> s
+		{ repo = r'
+		, gitconfig = extractGitConfig r'
+		}
+
+{- Adds an adjustment to the Repo data. Adjustments persist across reloads
+ - of the repo's config. -}
+adjustGitRepo :: (Git.Repo -> IO Git.Repo) -> Annex ()
+adjustGitRepo a = do
+	changeState $ \s -> s { repoadjustment = \r -> repoadjustment s r >>= a }
+	changeGitRepo =<< gitRepo
 
 {- Gets the RemoteGitConfig from a remote, given the Git.Repo for that
  - remote. -}
diff --git a/Annex/Action.hs b/Annex/Action.hs
--- a/Annex/Action.hs
+++ b/Annex/Action.hs
@@ -14,7 +14,7 @@
 import System.Posix.Signals
 #endif
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import Annex.Content
 
diff --git a/Annex/AutoMerge.hs b/Annex/AutoMerge.hs
--- a/Annex/AutoMerge.hs
+++ b/Annex/AutoMerge.hs
@@ -11,7 +11,7 @@
 	, commitResolvedMerge
 	) where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex.Queue
 import Annex.Direct
 import Annex.CatFile
diff --git a/Annex/BloomFilter.hs b/Annex/BloomFilter.hs
--- a/Annex/BloomFilter.hs
+++ b/Annex/BloomFilter.hs
@@ -7,7 +7,7 @@
 
 module Annex.BloomFilter where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import Utility.Bloom
 
diff --git a/Annex/Branch.hs b/Annex/Branch.hs
--- a/Annex/Branch.hs
+++ b/Annex/Branch.hs
@@ -32,7 +32,7 @@
 import Data.Bits.Utils
 import Control.Concurrent (threadDelay)
 
-import Common.Annex
+import Annex.Common
 import Annex.BranchState
 import Annex.Journal
 import Annex.Index
diff --git a/Annex/BranchState.hs b/Annex/BranchState.hs
--- a/Annex/BranchState.hs
+++ b/Annex/BranchState.hs
@@ -9,7 +9,7 @@
 
 module Annex.BranchState where
 
-import Common.Annex
+import Annex.Common
 import Types.BranchState
 import qualified Annex
 
diff --git a/Annex/CatFile.hs b/Annex/CatFile.hs
--- a/Annex/CatFile.hs
+++ b/Annex/CatFile.hs
@@ -23,7 +23,7 @@
 import qualified Data.Map as M
 import System.PosixCompat.Types
 
-import Common.Annex
+import Annex.Common
 import qualified Git
 import qualified Git.CatFile
 import qualified Annex
diff --git a/Annex/CheckAttr.hs b/Annex/CheckAttr.hs
--- a/Annex/CheckAttr.hs
+++ b/Annex/CheckAttr.hs
@@ -11,7 +11,7 @@
 	checkAttrStop,
 ) where
 
-import Common.Annex
+import Annex.Common
 import qualified Git.CheckAttr as Git
 import qualified Annex
 
diff --git a/Annex/CheckIgnore.hs b/Annex/CheckIgnore.hs
--- a/Annex/CheckIgnore.hs
+++ b/Annex/CheckIgnore.hs
@@ -12,7 +12,7 @@
 	checkIgnoreStop
 ) where
 
-import Common.Annex
+import Annex.Common
 import qualified Git.CheckIgnore as Git
 import qualified Annex
 
diff --git a/Annex/Common.hs b/Annex/Common.hs
new file mode 100644
--- /dev/null
+++ b/Annex/Common.hs
@@ -0,0 +1,9 @@
+module Annex.Common (module X) where
+
+import Common as X
+import Types as X
+import Types.Key as X
+import Types.UUID as X
+import Annex as X (gitRepo, inRepo, fromRepo, calcRepo)
+import Annex.Locations as X
+import Messages as X
diff --git a/Annex/Concurrent.hs b/Annex/Concurrent.hs
--- a/Annex/Concurrent.hs
+++ b/Annex/Concurrent.hs
@@ -7,7 +7,7 @@
 
 module Annex.Concurrent where
 
-import Common.Annex
+import Annex.Common
 import Annex
 import Annex.CatFile
 import Annex.CheckAttr
diff --git a/Annex/Content.hs b/Annex/Content.hs
--- a/Annex/Content.hs
+++ b/Annex/Content.hs
@@ -52,7 +52,7 @@
 import System.IO.Unsafe (unsafeInterleaveIO)
 import qualified Data.Set as S
 
-import Common.Annex
+import Annex.Common
 import Logs.Location
 import Logs.Transfer
 import qualified Git
@@ -62,7 +62,6 @@
 import Utility.DiskFree
 import Utility.FileMode
 import qualified Annex.Url as Url
-import Types.Key
 import Utility.DataUnits
 import Utility.CopyFile
 import Utility.Metered
@@ -336,12 +335,12 @@
 	, return True
 	)
   where
-	verifysize = case Types.Key.keySize k of
+	verifysize = case keySize k of
 		Nothing -> return True
 		Just size -> do
 			size' <- liftIO $ catchDefaultIO 0 $ getFileSize f
 			return (size' == size)
-	verifycontent = case Types.Backend.verifyKeyContent =<< Backend.maybeLookupBackendName (Types.Key.keyBackendName k) of
+	verifycontent = case Types.Backend.verifyKeyContent =<< Backend.maybeLookupBackendName (keyBackendName k) of
 		Nothing -> return True
 		Just verifier -> verifier k f
 
diff --git a/Annex/Content/Direct.hs b/Annex/Content/Direct.hs
--- a/Annex/Content/Direct.hs
+++ b/Annex/Content/Direct.hs
@@ -29,7 +29,7 @@
 	addContentWhenNotPresent,
 ) where
 
-import Common.Annex
+import Annex.Common
 import Annex.Perms
 import qualified Git
 import Utility.Tmp
diff --git a/Annex/Difference.hs b/Annex/Difference.hs
--- a/Annex/Difference.hs
+++ b/Annex/Difference.hs
@@ -10,7 +10,7 @@
 	setDifferences,
 ) where
 
-import Common.Annex
+import Annex.Common
 import Types.Difference
 import Logs.Difference
 import Config
diff --git a/Annex/Direct.hs b/Annex/Direct.hs
--- a/Annex/Direct.hs
+++ b/Annex/Direct.hs
@@ -10,7 +10,7 @@
 
 module Annex.Direct where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import qualified Git
 import qualified Git.LsFiles
diff --git a/Annex/Drop.hs b/Annex/Drop.hs
--- a/Annex/Drop.hs
+++ b/Annex/Drop.hs
@@ -7,11 +7,11 @@
 
 module Annex.Drop where
 
-import Common.Annex
+import Annex.Common
+import qualified Annex
 import Logs.Trust
 import Annex.NumCopies
 import Types.Remote (uuid)
-import Types.Key (key2file)
 import qualified Remote
 import qualified Command.Drop
 import Command
@@ -50,9 +50,13 @@
 handleDropsFrom locs rs reason fromhere key afile preverified runner = do
 	l <- ifM isDirect
 		( associatedFilesRelative key
-		, mapM getTopFilePath <$> Database.Keys.getAssociatedFiles key
+		, do
+			g <- Annex.gitRepo
+			map (`fromTopFilePath` g) <$> Database.Keys.getAssociatedFiles key
 		)
-	let fs = if null l then maybeToList afile else l
+	let fs = case afile of
+		Just f -> nub (f : l)
+		Nothing -> l
 	n <- getcopies fs
 	void $ if fromhere && checkcopies n Nothing
 		then go fs rs n >>= dropl fs
diff --git a/Annex/Environment.hs b/Annex/Environment.hs
--- a/Annex/Environment.hs
+++ b/Annex/Environment.hs
@@ -9,7 +9,7 @@
 
 module Annex.Environment where
 
-import Common.Annex
+import Annex.Common
 import Utility.UserInfo
 import qualified Git.Config
 import Config
diff --git a/Annex/FileMatcher.hs b/Annex/FileMatcher.hs
--- a/Annex/FileMatcher.hs
+++ b/Annex/FileMatcher.hs
@@ -9,7 +9,7 @@
 
 import qualified Data.Map as M
 
-import Common.Annex
+import Annex.Common
 import Limit
 import Utility.Matcher
 import Types.Group
diff --git a/Annex/Hook.hs b/Annex/Hook.hs
--- a/Annex/Hook.hs
+++ b/Annex/Hook.hs
@@ -11,7 +11,7 @@
 
 module Annex.Hook where
 
-import Common.Annex
+import Annex.Common
 import qualified Git.Hook as Git
 import Config
 import qualified Annex
diff --git a/Annex/Index.hs b/Annex/Index.hs
--- a/Annex/Index.hs
+++ b/Annex/Index.hs
@@ -14,7 +14,7 @@
 
 import qualified Control.Exception as E
 
-import Common.Annex
+import Annex.Common
 import Git.Types
 import qualified Annex
 import Utility.Env
diff --git a/Annex/Ingest.hs b/Annex/Ingest.hs
--- a/Annex/Ingest.hs
+++ b/Annex/Ingest.hs
@@ -21,7 +21,7 @@
 	forceParams,
 ) where
 
-import Common.Annex
+import Annex.Common
 import Types.KeySource
 import Backend
 import Annex.Content
diff --git a/Annex/Init.hs b/Annex/Init.hs
--- a/Annex/Init.hs
+++ b/Annex/Init.hs
@@ -16,7 +16,7 @@
 	probeCrippledFileSystem,
 ) where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import qualified Git
 import qualified Git.LsFiles
diff --git a/Annex/InodeSentinal.hs b/Annex/InodeSentinal.hs
--- a/Annex/InodeSentinal.hs
+++ b/Annex/InodeSentinal.hs
@@ -9,7 +9,7 @@
 
 module Annex.InodeSentinal where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import Utility.InodeCache
 import Annex.Perms
diff --git a/Annex/Journal.hs b/Annex/Journal.hs
--- a/Annex/Journal.hs
+++ b/Annex/Journal.hs
@@ -13,7 +13,7 @@
 
 module Annex.Journal where
 
-import Common.Annex
+import Annex.Common
 import qualified Git
 import Annex.Perms
 import Annex.LockFile
diff --git a/Annex/Link.hs b/Annex/Link.hs
--- a/Annex/Link.hs
+++ b/Annex/Link.hs
@@ -14,14 +14,13 @@
 
 module Annex.Link where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import qualified Git.HashObject
 import qualified Git.UpdateIndex
 import qualified Annex.Queue
 import Git.Types
 import Git.FilePath
-import Types.Key
 
 import qualified Data.ByteString.Lazy as L
 
diff --git a/Annex/Locations.hs b/Annex/Locations.hs
new file mode 100644
--- /dev/null
+++ b/Annex/Locations.hs
@@ -0,0 +1,476 @@
+{- git-annex file locations
+ -
+ - Copyright 2010-2015 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Annex.Locations (
+	keyFile,
+	fileKey,
+	keyPaths,
+	keyPath,
+	annexDir,
+	objectDir,
+	gitAnnexLocation,
+	gitAnnexLocationDepth,
+	gitAnnexLink,
+	gitAnnexContentLock,
+	gitAnnexMapping,
+	gitAnnexInodeCache,
+	gitAnnexInodeSentinal,
+	gitAnnexInodeSentinalCache,
+	annexLocations,
+	gitAnnexDir,
+	gitAnnexObjectDir,
+	gitAnnexTmpMiscDir,
+	gitAnnexTmpObjectDir,
+	gitAnnexTmpObjectLocation,
+	gitAnnexBadDir,
+	gitAnnexBadLocation,
+	gitAnnexUnusedLog,
+	gitAnnexKeysDb,
+	gitAnnexKeysDbLock,
+	gitAnnexFsckState,
+	gitAnnexFsckDbDir,
+	gitAnnexFsckDbLock,
+	gitAnnexFsckResultsLog,
+	gitAnnexScheduleState,
+	gitAnnexTransferDir,
+	gitAnnexCredsDir,
+	gitAnnexWebCertificate,
+	gitAnnexWebPrivKey,
+	gitAnnexFeedStateDir,
+	gitAnnexFeedState,
+	gitAnnexMergeDir,
+	gitAnnexJournalDir,
+	gitAnnexJournalLock,
+	gitAnnexPreCommitLock,
+	gitAnnexMergeLock,
+	gitAnnexIndex,
+	gitAnnexIndexStatus,
+	gitAnnexViewIndex,
+	gitAnnexViewLog,
+	gitAnnexIgnoredRefs,
+	gitAnnexPidFile,
+	gitAnnexPidLockFile,
+	gitAnnexDaemonStatusFile,
+	gitAnnexLogFile,
+	gitAnnexFuzzTestLogFile,
+	gitAnnexHtmlShim,
+	gitAnnexUrlFile,
+	gitAnnexTmpCfgFile,
+	gitAnnexSshDir,
+	gitAnnexRemotesDir,
+	gitAnnexAssistantDefaultDir,
+	isLinkToAnnex,
+	HashLevels(..),
+	hashDirMixed,
+	hashDirLower,
+	preSanitizeKeyName,
+
+	prop_isomorphic_fileKey
+) where
+
+import Data.Char
+import Data.Default
+
+import Common
+import Types.Key
+import Types.UUID
+import Types.GitConfig
+import Types.Difference
+import qualified Git
+import Git.FilePath
+import Annex.DirHashes
+import Annex.Fixup
+
+{- Conventions:
+ -
+ - Functions ending in "Dir" should always return values ending with a
+ - trailing path separator. Most code does not rely on that, but a few
+ - things do. 
+ -
+ - Everything else should not end in a trailing path sepatator. 
+ -
+ - Only functions (with names starting with "git") that build a path
+ - based on a git repository should return full path relative to the git
+ - repository. Everything else returns path segments.
+ -}
+
+{- The directory git annex uses for local state, relative to the .git
+ - directory -}
+annexDir :: FilePath
+annexDir = addTrailingPathSeparator "annex"
+
+{- The directory git annex uses for locally available object content,
+ - relative to the .git directory -}
+objectDir :: FilePath
+objectDir = addTrailingPathSeparator $ annexDir </> "objects"
+
+{- Annexed file's possible locations relative to the .git directory.
+ - There are two different possibilities, using different hashes.
+ -
+ - Also, some repositories have a Difference in hash directory depth.
+ -}
+annexLocations :: GitConfig -> Key -> [FilePath]
+annexLocations config key = map (annexLocation config key) dirHashes
+
+annexLocation :: GitConfig -> Key -> (HashLevels -> Hasher) -> FilePath
+annexLocation config key hasher = objectDir </> keyPath key (hasher $ objectHashLevels config)
+
+{- Number of subdirectories from the gitAnnexObjectDir
+ - to the gitAnnexLocation. -}
+gitAnnexLocationDepth :: GitConfig -> Int
+gitAnnexLocationDepth config = hashlevels + 1
+  where
+	HashLevels hashlevels = objectHashLevels config
+
+{- Annexed object's location in a repository.
+ -
+ - When there are multiple possible locations, returns the one where the
+ - file is actually present.
+ -
+ - When the file is not present, returns the location where the file should
+ - be stored.
+ -
+ - This does not take direct mode into account, so in direct mode it is not
+ - the actual location of the file's content.
+ -}
+gitAnnexLocation :: Key -> Git.Repo -> GitConfig -> IO FilePath
+gitAnnexLocation key r config = gitAnnexLocation' key r config (annexCrippledFileSystem config) doesFileExist (Git.localGitDir r)
+gitAnnexLocation' :: Key -> Git.Repo -> GitConfig -> Bool -> (FilePath -> IO Bool) -> FilePath -> IO FilePath
+gitAnnexLocation' key r config crippled checker gitdir
+	{- Bare repositories default to hashDirLower for new
+	 - content, as it's more portable.
+	 -
+	 - Repositories on filesystems that are crippled also use
+	 - hashDirLower, since they do not use symlinks and it's
+	 - more portable.
+	 -}
+	| Git.repoIsLocalBare r || crippled =
+		check $ map inrepo $ annexLocations config key
+	| hasDifference ObjectHashLower (annexDifferences config) =
+		return $ inrepo $ annexLocation config key hashDirLower
+	{- Non-bare repositories only use hashDirMixed, so
+	 - don't need to do any work to check if the file is
+	 - present. -}
+	| otherwise = return $ inrepo $ annexLocation config key hashDirMixed
+  where
+	inrepo d = gitdir </> d
+	check locs@(l:_) = fromMaybe l <$> firstM checker locs
+	check [] = error "internal"
+
+{- Calculates a symlink target to link a file to an annexed object. -}
+gitAnnexLink :: FilePath -> Key -> Git.Repo -> GitConfig -> IO FilePath
+gitAnnexLink file key r config = do
+	currdir <- getCurrentDirectory
+	let absfile = fromMaybe whoops $ absNormPathUnix currdir file
+	let gitdir = getgitdir currdir
+	loc <- gitAnnexLocation' key r config False (\_ -> return True) gitdir
+	toInternalGitPath <$> relPathDirToFile (parentDir absfile) loc
+  where
+	getgitdir currdir
+		{- This special case is for git submodules on filesystems not
+		 - supporting symlinks; generate link target that will
+		 - work portably. -}
+		| not (coreSymlinks config) && needsSubmoduleFixup r =
+			fromMaybe whoops $ absNormPathUnix currdir $
+				Git.repoPath r </> ".git"
+		| otherwise = Git.localGitDir r
+	whoops = error $ "unable to normalize " ++ file
+
+{- File used to lock a key's content. -}
+gitAnnexContentLock :: Key -> Git.Repo -> GitConfig -> IO FilePath
+gitAnnexContentLock key r config = do
+	loc <- gitAnnexLocation key r config
+	return $ loc ++ ".lck"
+
+{- File that maps from a key to the file(s) in the git repository.
+ - Used in direct mode. -}
+gitAnnexMapping :: Key -> Git.Repo -> GitConfig -> IO FilePath
+gitAnnexMapping key r config = do
+	loc <- gitAnnexLocation key r config
+	return $ loc ++ ".map"
+
+{- File that caches information about a key's content, used to determine
+ - if a file has changed.
+ - Used in direct mode. -}
+gitAnnexInodeCache :: Key -> Git.Repo -> GitConfig -> IO FilePath
+gitAnnexInodeCache key r config  = do
+	loc <- gitAnnexLocation key r config
+	return $ loc ++ ".cache"
+
+gitAnnexInodeSentinal :: Git.Repo -> FilePath
+gitAnnexInodeSentinal r = gitAnnexDir r </> "sentinal"
+
+gitAnnexInodeSentinalCache :: Git.Repo -> FilePath
+gitAnnexInodeSentinalCache r = gitAnnexInodeSentinal r ++ ".cache"
+
+{- The annex directory of a repository. -}
+gitAnnexDir :: Git.Repo -> FilePath
+gitAnnexDir r = addTrailingPathSeparator $ Git.localGitDir r </> annexDir
+
+{- The part of the annex directory where file contents are stored. -}
+gitAnnexObjectDir :: Git.Repo -> FilePath
+gitAnnexObjectDir r = addTrailingPathSeparator $ Git.localGitDir r </> objectDir
+
+{- .git/annex/misctmp/ is used for random temp files -}
+gitAnnexTmpMiscDir :: Git.Repo -> FilePath
+gitAnnexTmpMiscDir r = addTrailingPathSeparator $ gitAnnexDir r </> "misctmp"
+
+{- .git/annex/tmp/ is used for temp files for key's contents -}
+gitAnnexTmpObjectDir :: Git.Repo -> FilePath
+gitAnnexTmpObjectDir r = addTrailingPathSeparator $ gitAnnexDir r </> "tmp"
+
+{- The temp file to use for a given key's content. -}
+gitAnnexTmpObjectLocation :: Key -> Git.Repo -> FilePath
+gitAnnexTmpObjectLocation key r = gitAnnexTmpObjectDir r </> keyFile key
+
+{- .git/annex/bad/ is used for bad files found during fsck -}
+gitAnnexBadDir :: Git.Repo -> FilePath
+gitAnnexBadDir r = addTrailingPathSeparator $ gitAnnexDir r </> "bad"
+
+{- The bad file to use for a given key. -}
+gitAnnexBadLocation :: Key -> Git.Repo -> FilePath
+gitAnnexBadLocation key r = gitAnnexBadDir r </> keyFile key
+
+{- .git/annex/foounused is used to number possibly unused keys -}
+gitAnnexUnusedLog :: FilePath -> Git.Repo -> FilePath
+gitAnnexUnusedLog prefix r = gitAnnexDir r </> (prefix ++ "unused")
+
+{- .git/annex/keys/ contains a database of information about keys. -}
+gitAnnexKeysDb :: Git.Repo -> FilePath
+gitAnnexKeysDb r = gitAnnexDir r </> "keys"
+
+{- Lock file for the keys database. -}
+gitAnnexKeysDbLock :: Git.Repo -> FilePath
+gitAnnexKeysDbLock r = gitAnnexKeysDb r ++ ".lck"
+
+{- .git/annex/fsck/uuid/ is used to store information about incremental
+ - fscks. -}
+gitAnnexFsckDir :: UUID -> Git.Repo -> FilePath
+gitAnnexFsckDir u r = gitAnnexDir r </> "fsck" </> fromUUID u
+
+{- used to store information about incremental fscks. -}
+gitAnnexFsckState :: UUID -> Git.Repo -> FilePath
+gitAnnexFsckState u r = gitAnnexFsckDir u r </> "state"
+
+{- Directory containing database used to record fsck info. -}
+gitAnnexFsckDbDir :: UUID -> Git.Repo -> FilePath
+gitAnnexFsckDbDir u r = gitAnnexFsckDir u r </> "db"
+
+{- Lock file for the fsck database. -}
+gitAnnexFsckDbLock :: UUID -> Git.Repo -> FilePath
+gitAnnexFsckDbLock u r = gitAnnexFsckDir u r </> "fsck.lck"
+
+{- .git/annex/fsckresults/uuid is used to store results of git fscks -}
+gitAnnexFsckResultsLog :: UUID -> Git.Repo -> FilePath
+gitAnnexFsckResultsLog u r = gitAnnexDir r </> "fsckresults" </> fromUUID u
+
+{- .git/annex/schedulestate is used to store information about when
+ - scheduled jobs were last run. -}
+gitAnnexScheduleState :: Git.Repo -> FilePath
+gitAnnexScheduleState r = gitAnnexDir r </> "schedulestate"
+
+{- .git/annex/creds/ is used to store credentials to access some special
+ - remotes. -}
+gitAnnexCredsDir :: Git.Repo -> FilePath
+gitAnnexCredsDir r = addTrailingPathSeparator $ gitAnnexDir r </> "creds"
+
+{- .git/annex/certificate.pem and .git/annex/key.pem are used by the webapp
+ - when HTTPS is enabled -}
+gitAnnexWebCertificate :: Git.Repo -> FilePath
+gitAnnexWebCertificate r = gitAnnexDir r </> "certificate.pem"
+gitAnnexWebPrivKey :: Git.Repo -> FilePath
+gitAnnexWebPrivKey r = gitAnnexDir r </> "privkey.pem"
+
+{- .git/annex/feeds/ is used to record per-key (url) state by importfeeds -}
+gitAnnexFeedStateDir :: Git.Repo -> FilePath
+gitAnnexFeedStateDir r = addTrailingPathSeparator $ gitAnnexDir r </> "feedstate"
+
+gitAnnexFeedState :: Key -> Git.Repo -> FilePath
+gitAnnexFeedState k r = gitAnnexFeedStateDir r </> keyFile k
+
+{- .git/annex/merge/ is used for direct mode merges. -}
+gitAnnexMergeDir :: Git.Repo -> FilePath
+gitAnnexMergeDir r = addTrailingPathSeparator $ gitAnnexDir r </> "merge"
+
+{- .git/annex/transfer/ is used to record keys currently
+ - being transferred, and other transfer bookkeeping info. -}
+gitAnnexTransferDir :: Git.Repo -> FilePath
+gitAnnexTransferDir r = addTrailingPathSeparator $ gitAnnexDir r </> "transfer"
+
+{- .git/annex/journal/ is used to journal changes made to the git-annex
+ - branch -}
+gitAnnexJournalDir :: Git.Repo -> FilePath
+gitAnnexJournalDir r = addTrailingPathSeparator $ gitAnnexDir r </> "journal"
+
+{- Lock file for the journal. -}
+gitAnnexJournalLock :: Git.Repo -> FilePath
+gitAnnexJournalLock r = gitAnnexDir r </> "journal.lck"
+
+{- Lock file for the pre-commit hook. -}
+gitAnnexPreCommitLock :: Git.Repo -> FilePath
+gitAnnexPreCommitLock r = gitAnnexDir r </> "precommit.lck"
+
+{- Lock file for direct mode merge. -}
+gitAnnexMergeLock :: Git.Repo -> FilePath
+gitAnnexMergeLock r = gitAnnexDir r </> "merge.lck"
+
+{- .git/annex/index is used to stage changes to the git-annex branch -}
+gitAnnexIndex :: Git.Repo -> FilePath
+gitAnnexIndex r = gitAnnexDir r </> "index"
+
+{- Holds the ref of the git-annex branch that the index was last updated to.
+ -
+ - The .lck in the name is a historical accident; this is not used as a
+ - lock. -}
+gitAnnexIndexStatus :: Git.Repo -> FilePath
+gitAnnexIndexStatus r = gitAnnexDir r </> "index.lck"
+
+{- The index file used to generate a filtered branch view._-}
+gitAnnexViewIndex :: Git.Repo -> FilePath
+gitAnnexViewIndex r = gitAnnexDir r </> "viewindex"
+
+{- File containing a log of recently accessed views. -}
+gitAnnexViewLog :: Git.Repo -> FilePath
+gitAnnexViewLog r = gitAnnexDir r </> "viewlog"
+
+{- List of refs that should not be merged into the git-annex branch. -}
+gitAnnexIgnoredRefs :: Git.Repo -> FilePath
+gitAnnexIgnoredRefs r = gitAnnexDir r </> "ignoredrefs"
+
+{- Pid file for daemon mode. -}
+gitAnnexPidFile :: Git.Repo -> FilePath
+gitAnnexPidFile r = gitAnnexDir r </> "daemon.pid"
+
+{- Pid lock file for pidlock mode -}
+gitAnnexPidLockFile :: Git.Repo -> FilePath
+gitAnnexPidLockFile r = gitAnnexDir r </> "pidlock"
+
+{- Status file for daemon mode. -}
+gitAnnexDaemonStatusFile :: Git.Repo -> FilePath
+gitAnnexDaemonStatusFile r = gitAnnexDir r </> "daemon.status"
+
+{- Log file for daemon mode. -}
+gitAnnexLogFile :: Git.Repo -> FilePath
+gitAnnexLogFile r = gitAnnexDir r </> "daemon.log"
+
+{- Log file for fuzz test. -}
+gitAnnexFuzzTestLogFile :: Git.Repo -> FilePath
+gitAnnexFuzzTestLogFile r = gitAnnexDir r </> "fuzztest.log"
+
+{- Html shim file used to launch the webapp. -}
+gitAnnexHtmlShim :: Git.Repo -> FilePath
+gitAnnexHtmlShim r = gitAnnexDir r </> "webapp.html"
+
+{- File containing the url to the webapp. -}
+gitAnnexUrlFile :: Git.Repo -> FilePath
+gitAnnexUrlFile r = gitAnnexDir r </> "url"
+
+{- Temporary file used to edit configuriation from the git-annex branch. -}
+gitAnnexTmpCfgFile :: Git.Repo -> FilePath
+gitAnnexTmpCfgFile r = gitAnnexDir r </> "config.tmp"
+
+{- .git/annex/ssh/ is used for ssh connection caching -}
+gitAnnexSshDir :: Git.Repo -> FilePath
+gitAnnexSshDir r = addTrailingPathSeparator $ gitAnnexDir r </> "ssh"
+
+{- .git/annex/remotes/ is used for remote-specific state. -}
+gitAnnexRemotesDir :: Git.Repo -> FilePath
+gitAnnexRemotesDir r = addTrailingPathSeparator $ gitAnnexDir r </> "remotes"
+
+{- This is the base directory name used by the assistant when making
+ - repositories, by default. -}
+gitAnnexAssistantDefaultDir :: FilePath
+gitAnnexAssistantDefaultDir = "annex"
+
+{- Checks a symlink target to see if it appears to point to annexed content.
+ -
+ - We only look at paths inside the .git directory, and not at the .git
+ - directory itself, because GIT_DIR may cause a directory name other
+ - than .git to be used.
+ -}
+isLinkToAnnex :: FilePath -> Bool
+isLinkToAnnex s = (pathSeparator:objectDir) `isInfixOf` s
+
+{- Sanitizes a String that will be used as part of a Key's keyName,
+ - dealing with characters that cause problems on substandard filesystems.
+ -
+ - This is used when a new Key is initially being generated, eg by getKey.
+ - Unlike keyFile and fileKey, it does not need to be a reversable
+ - escaping. Also, it's ok to change this to add more problimatic
+ - characters later. Unlike changing keyFile, which could result in the
+ - filenames used for existing keys changing and contents getting lost.
+ -
+ - It is, however, important that the input and output of this function
+ - have a 1:1 mapping, to avoid two different inputs from mapping to the
+ - same key.
+ -}
+preSanitizeKeyName :: String -> String
+preSanitizeKeyName = concatMap escape
+  where
+	escape c
+		| isAsciiUpper c || isAsciiLower c || isDigit c = [c]
+		| c `elem` ".-_ " = [c] -- common, assumed safe
+		| c `elem` "/%:" = [c] -- handled by keyFile
+		-- , is safe and uncommon, so will be used to escape
+		-- other characters. By itself, it is escaped to 
+		-- doubled form.
+		| c == ',' = ",,"
+		| otherwise = ',' : show (ord c)
+
+{- Converts a key into a filename fragment without any directory.
+ -
+ - Escape "/" in the key name, to keep a flat tree of files and avoid
+ - issues with keys containing "/../" or ending with "/" etc. 
+ -
+ - "/" is escaped to "%" because it's short and rarely used, and resembles
+ -     a slash
+ - "%" is escaped to "&s", and "&" to "&a"; this ensures that the mapping
+ -     is one to one.
+ - ":" is escaped to "&c", because it seemed like a good idea at the time.
+ -
+ - Changing what this function escapes and how is not a good idea, as it
+ - can cause existing objects to get lost.
+ -}
+keyFile :: Key -> FilePath
+keyFile key = replace "/" "%" $ replace ":" "&c" $
+	replace "%" "&s" $ replace "&" "&a"  $ key2file key
+
+{- Reverses keyFile, converting a filename fragment (ie, the basename of
+ - the symlink target) into a key. -}
+fileKey :: FilePath -> Maybe Key
+fileKey file = file2key $
+	replace "&a" "&" $ replace "&s" "%" $
+		replace "&c" ":" $ replace "%" "/" file
+
+{- for quickcheck -}
+prop_isomorphic_fileKey :: String -> Bool
+prop_isomorphic_fileKey s
+	| null s = True -- it's not legal for a key to have no keyName
+	| otherwise= Just k == fileKey (keyFile k)
+  where
+	k = stubKey { keyName = s, keyBackendName = "test" }
+
+{- A location to store a key on a special remote that uses a filesystem.
+ - A directory hash is used, to protect against filesystems that dislike
+ - having many items in a single directory.
+ -
+ - The file is put in a directory with the same name, this allows
+ - write-protecting the directory to avoid accidental deletion of the file.
+ -}
+keyPath :: Key -> Hasher -> FilePath
+keyPath key hasher = hasher key </> f </> f
+  where
+	f = keyFile key
+
+{- All possibile locations to store a key in a special remote
+ - using different directory hashes.
+ -
+ - This is compatible with the annexLocations, for interoperability between
+ - special remotes and git-annex repos.
+ -}
+keyPaths :: Key -> [FilePath]
+keyPaths key = map (\h -> keyPath key (h def)) dirHashes
diff --git a/Annex/LockFile.hs b/Annex/LockFile.hs
--- a/Annex/LockFile.hs
+++ b/Annex/LockFile.hs
@@ -15,7 +15,7 @@
 	tryExclusiveLock,
 ) where
 
-import Common.Annex
+import Annex.Common
 import Annex
 import Types.LockCache
 import qualified Git
diff --git a/Annex/LockPool/PosixOrPid.hs b/Annex/LockPool/PosixOrPid.hs
--- a/Annex/LockPool/PosixOrPid.hs
+++ b/Annex/LockPool/PosixOrPid.hs
@@ -20,7 +20,9 @@
 	checkSaneLock,
 ) where
 
-import Common.Annex
+import Common
+import Types
+import Annex.Locations
 import qualified Annex
 import qualified Utility.LockPool.Posix as Posix
 import qualified Utility.LockPool.PidLock as Pid
@@ -58,7 +60,7 @@
 
 pidLockFile :: Annex (Maybe FilePath)
 pidLockFile = ifM (annexPidLock <$> Annex.getGitConfig)
-	( Just <$> fromRepo gitAnnexPidLockFile
+	( Just <$> Annex.fromRepo gitAnnexPidLockFile
 	, pure Nothing
 	)
 
diff --git a/Annex/MetaData.hs b/Annex/MetaData.hs
--- a/Annex/MetaData.hs
+++ b/Annex/MetaData.hs
@@ -11,7 +11,7 @@
 	module X
 ) where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import Types.MetaData as X
 import Annex.MetaData.StandardFields as X
diff --git a/Annex/Notification.hs b/Annex/Notification.hs
--- a/Annex/Notification.hs
+++ b/Annex/Notification.hs
@@ -9,7 +9,7 @@
 
 module Annex.Notification (NotifyWitness, notifyTransfer, notifyDrop) where
 
-import Common.Annex
+import Annex.Common
 import Logs.Transfer
 #ifdef WITH_DBUS_NOTIFICATIONS
 import qualified Annex
diff --git a/Annex/NumCopies.hs b/Annex/NumCopies.hs
--- a/Annex/NumCopies.hs
+++ b/Annex/NumCopies.hs
@@ -22,7 +22,7 @@
 	UnVerifiedCopy(..),
 ) where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import Types.NumCopies
 import Logs.NumCopies
diff --git a/Annex/Perms.hs b/Annex/Perms.hs
--- a/Annex/Perms.hs
+++ b/Annex/Perms.hs
@@ -18,7 +18,7 @@
 	withShared,
 ) where
 
-import Common.Annex
+import Annex.Common
 import Utility.FileMode
 import Git.SharedRepository
 import qualified Annex
diff --git a/Annex/Queue.hs b/Annex/Queue.hs
--- a/Annex/Queue.hs
+++ b/Annex/Queue.hs
@@ -16,7 +16,7 @@
 	mergeFrom,
 ) where
 
-import Common.Annex
+import Annex.Common
 import Annex hiding (new)
 import qualified Git.Queue
 import qualified Git.UpdateIndex
diff --git a/Annex/Quvi.hs b/Annex/Quvi.hs
--- a/Annex/Quvi.hs
+++ b/Annex/Quvi.hs
@@ -9,7 +9,7 @@
 
 module Annex.Quvi where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import Utility.Quvi
 import Utility.Url
diff --git a/Annex/ReplaceFile.hs b/Annex/ReplaceFile.hs
--- a/Annex/ReplaceFile.hs
+++ b/Annex/ReplaceFile.hs
@@ -7,7 +7,7 @@
 
 module Annex.ReplaceFile where
 
-import Common.Annex
+import Annex.Common
 import Annex.Perms
 import Utility.Tmp
 
diff --git a/Annex/SpecialRemote.hs b/Annex/SpecialRemote.hs
--- a/Annex/SpecialRemote.hs
+++ b/Annex/SpecialRemote.hs
@@ -7,7 +7,7 @@
 
 module Annex.SpecialRemote where
 
-import Common.Annex
+import Annex.Common
 import Remote (remoteTypes, remoteMap)
 import Types.Remote (RemoteConfig, RemoteConfigKey, typename, setup)
 import Logs.Remote
diff --git a/Annex/Ssh.hs b/Annex/Ssh.hs
--- a/Annex/Ssh.hs
+++ b/Annex/Ssh.hs
@@ -24,7 +24,7 @@
 import Data.Hash.MD5
 import System.Exit
 
-import Common.Annex
+import Annex.Common
 import Annex.LockFile
 import qualified Build.SysConfig as SysConfig
 import qualified Annex
diff --git a/Annex/TaggedPush.hs b/Annex/TaggedPush.hs
--- a/Annex/TaggedPush.hs
+++ b/Annex/TaggedPush.hs
@@ -7,7 +7,7 @@
 
 module Annex.TaggedPush where
 
-import Common.Annex
+import Annex.Common
 import qualified Remote
 import qualified Annex.Branch
 import qualified Git
diff --git a/Annex/Transfer.hs b/Annex/Transfer.hs
--- a/Annex/Transfer.hs
+++ b/Annex/Transfer.hs
@@ -18,7 +18,7 @@
 	forwardRetry,
 ) where
 
-import Common.Annex
+import Annex.Common
 import Logs.Transfer as X
 import Annex.Notification as X
 import Annex.Perms
diff --git a/Annex/UUID.hs b/Annex/UUID.hs
--- a/Annex/UUID.hs
+++ b/Annex/UUID.hs
@@ -6,7 +6,7 @@
  - UUIDs of remotes are cached in git config, using keys named
  - remote.<name>.annex-uuid
  -
- - Copyright 2010-2013 Joey Hess <id@joeyh.name>
+ - Copyright 2010-2016 Joey Hess <id@joeyh.name>
  -
  - Licensed under the GNU GPL version 3 or higher.
  -}
@@ -28,7 +28,8 @@
 	bitTorrentUUID,
 ) where
 
-import Common.Annex
+import Annex.Common
+import qualified Annex
 import qualified Git
 import qualified Git.Config
 import Config
@@ -58,9 +59,10 @@
 
 {- Get current repository's UUID. -}
 getUUID :: Annex UUID
-getUUID = getRepoUUID =<< gitRepo
+getUUID = annexUUID <$> Annex.getGitConfig 
 
-{- Looks up a repo's UUID, caching it in .git/config if it's not already. -}
+{- Looks up a remote repo's UUID, caching it in .git/config if
+ - it's not already. -}
 getRepoUUID :: Git.Repo -> Annex UUID
 getRepoUUID r = do
 	c <- toUUID <$> getConfig cachekey ""
@@ -78,7 +80,9 @@
 	cachekey = remoteConfig r "uuid"
 
 removeRepoUUID :: Annex ()
-removeRepoUUID = unsetConfig configkey
+removeRepoUUID = do
+	unsetConfig configkey
+	storeUUID NoUUID
 
 getUncachedUUID :: Git.Repo -> UUID
 getUncachedUUID = toUUID . Git.Config.get key ""
@@ -98,7 +102,9 @@
 	storeUUID =<< liftIO genUUID
 
 storeUUID :: UUID -> Annex ()
-storeUUID = storeUUIDIn configkey
+storeUUID u = do
+	Annex.changeGitConfig $ \c -> c { annexUUID = u }
+	storeUUIDIn configkey u
 
 storeUUIDIn :: ConfigKey -> UUID -> Annex ()
 storeUUIDIn configfield = setConfig configfield . fromUUID
diff --git a/Annex/Url.hs b/Annex/Url.hs
--- a/Annex/Url.hs
+++ b/Annex/Url.hs
@@ -13,7 +13,7 @@
 	getUserAgent,
 ) where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import Utility.Url as U
 import qualified Build.SysConfig as SysConfig
diff --git a/Annex/VariantFile.hs b/Annex/VariantFile.hs
--- a/Annex/VariantFile.hs
+++ b/Annex/VariantFile.hs
@@ -7,8 +7,7 @@
 
 module Annex.VariantFile where
 
-import Common.Annex
-import Types.Key
+import Annex.Common
 
 import Data.Hash.MD5
 
diff --git a/Annex/Version.hs b/Annex/Version.hs
--- a/Annex/Version.hs
+++ b/Annex/Version.hs
@@ -9,7 +9,7 @@
 
 module Annex.Version where
 
-import Common.Annex
+import Annex.Common
 import Config
 import qualified Annex
 
diff --git a/Annex/View.hs b/Annex/View.hs
--- a/Annex/View.hs
+++ b/Annex/View.hs
@@ -7,7 +7,7 @@
 
 module Annex.View where
 
-import Common.Annex
+import Annex.Common
 import Annex.View.ViewedFile
 import Types.View
 import Types.MetaData
diff --git a/Annex/View/ViewedFile.hs b/Annex/View/ViewedFile.hs
--- a/Annex/View/ViewedFile.hs
+++ b/Annex/View/ViewedFile.hs
@@ -16,7 +16,7 @@
 	prop_viewedFile_roundtrips,
 ) where
 
-import Common.Annex
+import Annex.Common
 
 type FileName = String
 type ViewedFile = FileName
diff --git a/Annex/Wanted.hs b/Annex/Wanted.hs
--- a/Annex/Wanted.hs
+++ b/Annex/Wanted.hs
@@ -7,7 +7,7 @@
 
 module Annex.Wanted where
 
-import Common.Annex
+import Annex.Common
 import Logs.PreferredContent
 import Annex.UUID
 
diff --git a/Annex/WorkTree.hs b/Annex/WorkTree.hs
--- a/Annex/WorkTree.hs
+++ b/Annex/WorkTree.hs
@@ -7,7 +7,7 @@
 
 module Annex.WorkTree where
 
-import Common.Annex
+import Annex.Common
 import Annex.Link
 import Annex.CatFile
 import Annex.Version
diff --git a/Assistant/Alert.hs b/Assistant/Alert.hs
--- a/Assistant/Alert.hs
+++ b/Assistant/Alert.hs
@@ -9,7 +9,7 @@
 
 module Assistant.Alert where
 
-import Common.Annex
+import Annex.Common
 import Assistant.Types.Alert
 import Assistant.Alert.Utility
 import qualified Remote
diff --git a/Assistant/Alert/Utility.hs b/Assistant/Alert/Utility.hs
--- a/Assistant/Alert/Utility.hs
+++ b/Assistant/Alert/Utility.hs
@@ -7,7 +7,7 @@
 
 module Assistant.Alert.Utility where
 
-import Common.Annex
+import Annex.Common
 import Assistant.Types.Alert
 import Utility.Tense
 
diff --git a/Assistant/Common.hs b/Assistant/Common.hs
--- a/Assistant/Common.hs
+++ b/Assistant/Common.hs
@@ -7,7 +7,7 @@
 
 module Assistant.Common (module X) where
 
-import Common.Annex as X
+import Annex.Common as X
 import Assistant.Monad as X
 import Assistant.Types.DaemonStatus as X
 import Assistant.Types.NamedThread as X
diff --git a/Assistant/Monad.hs b/Assistant/Monad.hs
--- a/Assistant/Monad.hs
+++ b/Assistant/Monad.hs
@@ -28,7 +28,7 @@
 import "mtl" Control.Monad.Reader
 import System.Log.Logger
 
-import Common.Annex
+import Annex.Common
 import Assistant.Types.ThreadedMonad
 import Assistant.Types.DaemonStatus
 import Assistant.Types.ScanRemotes
diff --git a/Assistant/NamedThread.hs b/Assistant/NamedThread.hs
--- a/Assistant/NamedThread.hs
+++ b/Assistant/NamedThread.hs
@@ -9,7 +9,7 @@
 
 module Assistant.NamedThread where
 
-import Common.Annex
+import Annex.Common
 import Assistant.Types.NamedThread
 import Assistant.Types.ThreadName
 import Assistant.Types.DaemonStatus
diff --git a/Assistant/Pairing.hs b/Assistant/Pairing.hs
--- a/Assistant/Pairing.hs
+++ b/Assistant/Pairing.hs
@@ -9,7 +9,7 @@
 
 module Assistant.Pairing where
 
-import Common.Annex
+import Annex.Common
 import Utility.Verifiable
 import Assistant.Ssh
 
diff --git a/Assistant/Ssh.hs b/Assistant/Ssh.hs
--- a/Assistant/Ssh.hs
+++ b/Assistant/Ssh.hs
@@ -7,7 +7,7 @@
 
 module Assistant.Ssh where
 
-import Common.Annex
+import Annex.Common
 import Utility.Tmp
 import Utility.Shell
 import Utility.Rsync
diff --git a/Assistant/Threads/MountWatcher.hs b/Assistant/Threads/MountWatcher.hs
--- a/Assistant/Threads/MountWatcher.hs
+++ b/Assistant/Threads/MountWatcher.hs
@@ -48,7 +48,7 @@
 dbusThread :: UrlRenderer -> Assistant ()
 dbusThread urlrenderer = do
 	runclient <- asIO1 go
-	r <- liftIO $ E.try $ runClient getSessionAddress runclient
+	r <- liftIO $ E.try $ runClient getSystemAddress runclient
 	either onerr (const noop) r
   where
 	go client = ifM (checkMountMonitor client)
@@ -71,11 +71,6 @@
 		)
 	onerr :: E.SomeException -> Assistant ()
 	onerr e = do
-		{- If the session dbus fails, the user probably
-		 - logged out of their desktop. Even if they log
-		 - back in, we won't have access to the dbus
-		 - session key, so polling is the best that can be
-		 - done in this situation. -}
 		liftAnnex $
 			warning $ "dbus failed; falling back to mtab polling (" ++ show e ++ ")"
 		pollingThread urlrenderer
@@ -95,11 +90,9 @@
 				]
 			return True
   where
-	startableservices = [gvfs, gvfsgdu]
-	usableservices = startableservices ++ [kde]
-	gvfs = "org.gtk.Private.UDisks2VolumeMonitor"
-	gvfsgdu = "org.gtk.Private.GduVolumeMonitor"
-	kde = "org.kde.DeviceNotifications"
+	startableservices = [udisks2]
+	usableservices = startableservices
+	udisks2 = "org.freedesktop.UDisks2"
 
 startOneService :: Client -> [ServiceName] -> Assistant Bool
 startOneService _ [] = return False
@@ -118,27 +111,18 @@
 
 {- Filter matching events recieved when drives are mounted and unmounted. -}	
 mountChanged :: [MatchRule]
-mountChanged = [gvfs True, gvfs False, kde, kdefallback]
+mountChanged = [udisks2mount, udisks2umount]
   where
-	{- gvfs reliably generates this event whenever a
-	 - drive is mounted/unmounted, whether automatically, or manually -}
-	gvfs mount = matchAny
-		{ matchInterface = Just "org.gtk.Private.RemoteVolumeMonitor"
-		, matchMember = Just $ if mount then "MountAdded" else "MountRemoved"
-		}
-	{- This event fires when KDE prompts the user what to do with a drive,
-	 - but maybe not at other times. And it's not received -}
-	kde = matchAny
-		{ matchInterface = Just "org.kde.Solid.Device"
-		, matchMember = Just "setupDone"
+	udisks2mount = matchAny
+		{ matchPath = Just "/org/freedesktop/UDisks2"
+		, matchInterface = Just "org.freedesktop.DBus.ObjectManager"
+		, matchMember = Just "InterfacesAdded"
 		}
-	{- This event may not be closely related to mounting a drive, but it's
-	 - observed reliably when a drive gets mounted or unmounted. -}
-	kdefallback = matchAny
-		{ matchInterface = Just "org.kde.KDirNotify"
-		, matchMember = Just "enteredDirectory"
+	udisks2umount = matchAny
+		{ matchPath = Just "/org/freedesktop/UDisks2"
+		, matchInterface = Just "org.freedesktop.DBus.ObjectManager"
+		, matchMember = Just "InterfacesRemoved"
 		}
-
 #endif
 
 pollingThread :: UrlRenderer -> Assistant ()
diff --git a/Assistant/Threads/SanityChecker.hs b/Assistant/Threads/SanityChecker.hs
--- a/Assistant/Threads/SanityChecker.hs
+++ b/Assistant/Threads/SanityChecker.hs
@@ -40,7 +40,6 @@
 import Logs.Unused
 import Logs.Transfer
 import Annex.Path
-import Types.Key (keyBackendName)
 import qualified Annex
 #ifdef WITH_WEBAPP
 import Assistant.WebApp.Types
diff --git a/Assistant/Threads/WebApp.hs b/Assistant/Threads/WebApp.hs
--- a/Assistant/Threads/WebApp.hs
+++ b/Assistant/Threads/WebApp.hs
@@ -127,13 +127,9 @@
 
 getTlsSettings :: Annex (Maybe TLS.TLSSettings)
 getTlsSettings = do
-#ifdef WITH_WEBAPP_SECURE
 	cert <- fromRepo gitAnnexWebCertificate
 	privkey <- fromRepo gitAnnexWebPrivKey
 	ifM (liftIO $ allM doesFileExist [cert, privkey])
 		( return $ Just $ TLS.tlsSettings cert privkey
 		, return Nothing
 		)
-#else
-	return Nothing
-#endif
diff --git a/Assistant/Types/Buddies.hs b/Assistant/Types/Buddies.hs
--- a/Assistant/Types/Buddies.hs
+++ b/Assistant/Types/Buddies.hs
@@ -9,7 +9,7 @@
 
 module Assistant.Types.Buddies where
 
-import Common.Annex
+import Annex.Common
 
 import qualified Data.Map as M
 import Control.Concurrent.STM
diff --git a/Assistant/Types/DaemonStatus.hs b/Assistant/Types/DaemonStatus.hs
--- a/Assistant/Types/DaemonStatus.hs
+++ b/Assistant/Types/DaemonStatus.hs
@@ -7,7 +7,7 @@
 
 module Assistant.Types.DaemonStatus where
 
-import Common.Annex
+import Annex.Common
 import Assistant.Pairing
 import Utility.NotificationBroadcaster
 import Logs.Transfer
diff --git a/Assistant/Types/NetMessager.hs b/Assistant/Types/NetMessager.hs
--- a/Assistant/Types/NetMessager.hs
+++ b/Assistant/Types/NetMessager.hs
@@ -7,7 +7,7 @@
 
 module Assistant.Types.NetMessager where
 
-import Common.Annex
+import Annex.Common
 import Assistant.Pairing
 import Git.Types
 
diff --git a/Assistant/Types/Pushes.hs b/Assistant/Types/Pushes.hs
--- a/Assistant/Types/Pushes.hs
+++ b/Assistant/Types/Pushes.hs
@@ -7,7 +7,7 @@
 
 module Assistant.Types.Pushes where
 
-import Common.Annex
+import Annex.Common
 
 import Control.Concurrent.STM
 import Data.Time.Clock
diff --git a/Assistant/Types/ScanRemotes.hs b/Assistant/Types/ScanRemotes.hs
--- a/Assistant/Types/ScanRemotes.hs
+++ b/Assistant/Types/ScanRemotes.hs
@@ -7,7 +7,7 @@
 
 module Assistant.Types.ScanRemotes where
 
-import Common.Annex
+import Annex.Common
 
 import Control.Concurrent.STM
 import qualified Data.Map as M
diff --git a/Assistant/Types/ThreadedMonad.hs b/Assistant/Types/ThreadedMonad.hs
--- a/Assistant/Types/ThreadedMonad.hs
+++ b/Assistant/Types/ThreadedMonad.hs
@@ -7,7 +7,7 @@
 
 module Assistant.Types.ThreadedMonad where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 
 import Control.Concurrent
diff --git a/Assistant/Types/TransferQueue.hs b/Assistant/Types/TransferQueue.hs
--- a/Assistant/Types/TransferQueue.hs
+++ b/Assistant/Types/TransferQueue.hs
@@ -7,7 +7,7 @@
 
 module Assistant.Types.TransferQueue where
 
-import Common.Annex
+import Annex.Common
 import Logs.Transfer
 
 import Control.Concurrent.STM
diff --git a/Assistant/Types/TransferrerPool.hs b/Assistant/Types/TransferrerPool.hs
--- a/Assistant/Types/TransferrerPool.hs
+++ b/Assistant/Types/TransferrerPool.hs
@@ -7,7 +7,7 @@
 
 module Assistant.Types.TransferrerPool where
 
-import Common.Annex
+import Annex.Common
 import Utility.NotificationBroadcaster
 import Assistant.Types.DaemonStatus
 
diff --git a/Assistant/Unused.hs b/Assistant/Unused.hs
--- a/Assistant/Unused.hs
+++ b/Assistant/Unused.hs
@@ -13,7 +13,6 @@
 
 import Assistant.Common
 import qualified Git
-import Types.Key
 import Logs.Unused
 import Logs.Location
 import Annex.Content
diff --git a/Assistant/WebApp/DashBoard.hs b/Assistant/WebApp/DashBoard.hs
--- a/Assistant/WebApp/DashBoard.hs
+++ b/Assistant/WebApp/DashBoard.hs
@@ -19,7 +19,6 @@
 import Logs.Transfer
 import Utility.Percentage
 import Utility.DataUnits
-import Types.Key
 import qualified Remote
 import qualified Git
 
diff --git a/Assistant/WebApp/RepoId.hs b/Assistant/WebApp/RepoId.hs
--- a/Assistant/WebApp/RepoId.hs
+++ b/Assistant/WebApp/RepoId.hs
@@ -7,7 +7,7 @@
 
 module Assistant.WebApp.RepoId where
 
-import Common.Annex
+import Annex.Common
 import Git.Types (RemoteName)
 import qualified Remote
 
diff --git a/Assistant/XMPP/Buddies.hs b/Assistant/XMPP/Buddies.hs
--- a/Assistant/XMPP/Buddies.hs
+++ b/Assistant/XMPP/Buddies.hs
@@ -8,7 +8,7 @@
 module Assistant.XMPP.Buddies where
 
 import Assistant.XMPP
-import Common.Annex
+import Annex.Common
 import Assistant.Types.Buddies
 
 import Network.Protocol.XMPP
diff --git a/Backend.hs b/Backend.hs
--- a/Backend.hs
+++ b/Backend.hs
@@ -16,10 +16,9 @@
 	isStableKey,
 ) where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import Annex.CheckAttr
-import Types.Key
 import Types.KeySource
 import qualified Types.Backend as B
 
diff --git a/Backend/Hash.hs b/Backend/Hash.hs
--- a/Backend/Hash.hs
+++ b/Backend/Hash.hs
@@ -12,10 +12,9 @@
 	testKeyBackend,
 ) where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import Types.Backend
-import Types.Key
 import Types.KeySource
 import Utility.Hash
 import Utility.ExternalSHA
diff --git a/Backend/URL.hs b/Backend/URL.hs
--- a/Backend/URL.hs
+++ b/Backend/URL.hs
@@ -10,9 +10,8 @@
 	fromUrl
 ) where
 
-import Common.Annex
+import Annex.Common
 import Types.Backend
-import Types.Key
 import Backend.Utilities
 
 backends :: [Backend]
diff --git a/Backend/Utilities.hs b/Backend/Utilities.hs
--- a/Backend/Utilities.hs
+++ b/Backend/Utilities.hs
@@ -9,7 +9,7 @@
 
 import Data.Hash.MD5
 
-import Common.Annex
+import Annex.Common
 
 {- Generates a keyName from an input string. Takes care of sanitizing it.
  - If it's not too long, the full string is used as the keyName.
diff --git a/Backend/WORM.hs b/Backend/WORM.hs
--- a/Backend/WORM.hs
+++ b/Backend/WORM.hs
@@ -7,9 +7,8 @@
 
 module Backend.WORM (backends) where
 
-import Common.Annex
+import Annex.Common
 import Types.Backend
-import Types.Key
 import Types.KeySource
 import Backend.Utilities
 import Git.FilePath
diff --git a/Build/DistributionUpdate.hs b/Build/DistributionUpdate.hs
--- a/Build/DistributionUpdate.hs
+++ b/Build/DistributionUpdate.hs
@@ -8,7 +8,7 @@
  - Also gpg signs the files.
  -}
 
-import Common.Annex
+import Annex.Common
 import Types.Distribution
 import Build.Version (getChangelogVersion, Version)
 import Utility.UserInfo
@@ -16,7 +16,7 @@
 import qualified Git.Construct
 import qualified Annex
 import Annex.Content
-import Backend
+import Annex.WorkTree
 import Git.Command
 
 import Data.Time.Clock
diff --git a/Build/OSXMkLibs.hs b/Build/OSXMkLibs.hs
--- a/Build/OSXMkLibs.hs
+++ b/Build/OSXMkLibs.hs
@@ -12,6 +12,7 @@
 import System.FilePath
 import System.Directory
 import Control.Monad
+import Control.Monad.IfElse
 import Data.List
 import Data.String.Utils
 import Control.Applicative
@@ -53,9 +54,10 @@
 			, do
 				createDirectoryIfMissing True (parentDir dest)
 				putStrLn $ "installing " ++ pathlib ++ " as " ++ shortlib
-				_ <- boolSystem "cp" [File pathlib, File dest]
-				_ <- boolSystem "chmod" [Param "644", File dest]
-				_ <- boolSystem "ln" [Param "-s", File fulllib, File symdest]
+				unlessM (boolSystem "cp" [File pathlib, File dest]
+					<&&> boolSystem "chmod" [Param "644", File dest]
+					<&&> boolSystem "ln" [Param "-s", File fulllib, File symdest]) $
+					error "library install failed"
 				return $ Just appbase
 			)
 	return (catMaybes libs, replacement_libs', libmap')
diff --git a/BuildFlags.hs b/BuildFlags.hs
--- a/BuildFlags.hs
+++ b/BuildFlags.hs
@@ -22,9 +22,6 @@
 #else
 #warning Building without the webapp. You probably need to install Yesod..
 #endif
-#ifdef WITH_WEBAPP_SECURE
-	, "Webapp-secure"
-#endif
 #ifdef WITH_PAIRING
 	, "Pairing"
 #else
@@ -76,26 +73,14 @@
 #else
 #warning Building without ConcurrentOutput
 #endif
-#ifdef WITH_DNS
-	, "DNS"
-#endif
-#ifdef WITH_FEED
-	, "Feeds"
-#else
-#warning Building without Feeds.
-#endif
-#ifdef WITH_QUVI
-	, "Quvi"
-#else
-#warning Building without quvi.
-#endif
-#ifdef WITH_TDFA
-	, "TDFA"
-#endif
 #ifdef WITH_TORRENTPARSER
 	, "TorrentParser"
 #endif
 #ifdef WITH_EKG
 	, "EKG"
 #endif
+	-- Always enabled now, but users may be used to seeing these flags
+	-- listed.
+	, "Feeds"
+	, "Quvi"
 	]
diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,35 @@
+git-annex (6.20160126) unstable; urgency=medium
+
+  * Fix nasty reversion in the last release that broke sync --content's
+    handling of many preferred content expressions.
+  * whereis --json: Urls are now listed inside the remote that claims them,
+    rather than all together at the end.
+  * info, add, whereis, find: Support --batch mode.
+  * Force output to be line-buffered, even when it's not connected to the
+    terminal. This is particuarly important for commands with --batch
+    output, which was not always being flushed at an appropriate time.
+  * add, import: Support --json output.
+  * addurl --json: Include field for added key (unless the file was
+    added directly to git due to annex.largefiles configuration.)
+    (Also done by add --json and import --json)
+  * registerurl: Check if a remote claims the url, same as addurl does.
+  * Bug fix: Git config settings passed to git-annex -c did not always take
+    effect.
+  * assistant: Use udisks2 dbus events to detect when disks are mounted,
+    instead of relying on gnome/kde stuff that is not stable.
+  * Fix build with QuickCheck 2.8.2
+  * matchexpression: New plumbing command to check if a preferred content
+    expression matches some data.
+  * Removed the webapp-secure build flag, rolling it into the webapp build
+    flag.
+  * Removed the quvi, tahoe, feed, and tfds build flags, adding
+    aeson feed and regex-tdfa to the core dependencies.
+  * Roll the dns build flag into the assistant build flag.
+  * Debian: Avoid building debug package, since gdb is not often useful
+    to debug haskell programs.
+
+ -- Joey Hess <id@joeyh.name>  Tue, 26 Jan 2016 14:57:42 -0400
+
 git-annex (6.20160114) unstable; urgency=medium
 
   "hexapodia as the key insight"
diff --git a/COPYRIGHT b/COPYRIGHT
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -2,11 +2,11 @@
 Source: native package
 
 Files: *
-Copyright: © 2010-2015 Joey Hess <id@joeyh.name>
+Copyright: © 2010-2016 Joey Hess <id@joeyh.name>
 License: GPL-3+
 
 Files: Assistant/WebApp.hs Assistant/WebApp/* templates/* static/*
-Copyright: © 2012-2014 Joey Hess <id@joeyh.name>
+Copyright: © 2012-2016 Joey Hess <id@joeyh.name>
            © 2014 Sören Brunk
 License: AGPL-3+
 
@@ -21,7 +21,7 @@
 License: BSD-2-clause
 
 Files: Utility/*
-Copyright: 2012-2015 Joey Hess <id@joeyh.name>
+Copyright: 2012-2016 Joey Hess <id@joeyh.name>
 License: BSD-2-clause
 
 Files: Utility/Gpg.hs Utility/DirWatcher*
@@ -38,6 +38,11 @@
 Files: Utility/Mounts.hsc
 Copyright: Volker Wysk <hsss@volker-wysk.de>
 License: LGPL-2.1+
+
+Files: Annex/DirHashes.hs
+Copyright: 2001 Ian Lynagh
+           2010-2015 Joey Hess <id@joeyh.name>
+License: GPL-3+
 
 Files: Utility/libmounts.c
 Copyright: 1980, 1989, 1993, 1994 The Regents of the University of California
diff --git a/Checks.hs b/Checks.hs
deleted file mode 100644
--- a/Checks.hs
+++ /dev/null
@@ -1,49 +0,0 @@
-{- git-annex command checks
- -
- - Common sanity checks for commands, and an interface to selectively
- - remove them, or add others.
- - 
- - Copyright 2011-2013 Joey Hess <id@joeyh.name>
- -
- - Licensed under the GNU GPL version 3 or higher.
- -}
-
-module Checks where
-
-import Common.Annex
-import Types.Command
-import Annex.Init
-import Config
-import Utility.Daemon
-import qualified Git
-
-commonChecks :: [CommandCheck]
-commonChecks = [repoExists]
-
-repoExists :: CommandCheck
-repoExists = CommandCheck 0 ensureInitialized
-
-notDirect :: Command -> Command
-notDirect = addCheck $ whenM isDirect $
-	error "You cannot run this command in a direct mode repository."
-
-notBareRepo :: Command -> Command
-notBareRepo = addCheck $ whenM (fromRepo Git.repoIsLocalBare) $
-	error "You cannot run this command in a bare repository."
-
-noDaemonRunning :: Command -> Command
-noDaemonRunning = addCheck $ whenM (isJust <$> daemonpid) $
-	error "You cannot run this command while git-annex watch or git-annex assistant is running."
-  where
-	daemonpid = liftIO . checkDaemon =<< fromRepo gitAnnexPidFile
-
-dontCheck :: CommandCheck -> Command -> Command
-dontCheck check cmd = mutateCheck cmd $ \c -> filter (/= check) c
-
-addCheck :: Annex () -> Command -> Command
-addCheck check cmd = mutateCheck cmd $ \c ->
-	CommandCheck (length c + 100) check : c
-
-mutateCheck :: Command -> ([CommandCheck] -> [CommandCheck]) -> Command
-mutateCheck cmd@(Command { cmdcheck = c }) a = cmd { cmdcheck = a c }
-
diff --git a/CmdLine.hs b/CmdLine.hs
--- a/CmdLine.hs
+++ b/CmdLine.hs
@@ -15,7 +15,7 @@
 import qualified Control.Exception as E
 import Control.Exception (throw)
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import qualified Git
 import qualified Git.AutoCorrect
@@ -39,8 +39,10 @@
 			(cmd, seek, globalconfig) <- parsewith False cmdparser
 				(\a -> inRepo $ a . Just)
 				(liftIO . O.handleParseResult)
-			when (cmdnomessages cmd) $ 
+			when (cmdnomessages cmd) $ do
 				Annex.setOutput QuietOutput
+				Annex.changeState $ \s -> s 
+					{ Annex.output = (Annex.output s) { implicitMessages = False } }
 			getParsed globalconfig
 			whenM (annexDebug <$> Annex.getGitConfig) $
 				liftIO enableDebugOutput
diff --git a/CmdLine/Action.hs b/CmdLine/Action.hs
--- a/CmdLine/Action.hs
+++ b/CmdLine/Action.hs
@@ -9,7 +9,7 @@
 
 module CmdLine.Action where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import Annex.Concurrent
 import Types.Command
@@ -124,7 +124,7 @@
 	account (Right False) = incerr
 	account (Left err) = do
 		toplevelWarning True (show err)
-		showEndFail
+		implicitMessage showEndFail
 		incerr
 	incerr = do
 		Annex.incError
@@ -134,15 +134,20 @@
  - stages, without catching errors. Useful if one command wants to run
  - part of another command. -}
 callCommandAction :: CommandStart -> CommandCleanup
-callCommandAction = start
+callCommandAction = fromMaybe True <$$> callCommandAction' 
+
+{- Like callCommandAction, but returns Nothing when the command did not
+ - perform any action. -}
+callCommandAction' :: CommandStart -> Annex (Maybe Bool)
+callCommandAction' = start
   where
 	start   = stage $ maybe skip perform
 	perform = stage $ maybe failure cleanup
 	cleanup = stage $ status
 	stage = (=<<)
-	skip = return True
-	failure = showEndFail >> return False
-	status r = showEndResult r >> return r
+	skip = return Nothing
+	failure = implicitMessage showEndFail >> return (Just False)
+	status r = implicitMessage (showEndResult r) >> return (Just r)
 
 {- Do concurrent output when that has been requested. -}
 allowConcurrentOutput :: Annex a -> Annex a
diff --git a/CmdLine/Batch.hs b/CmdLine/Batch.hs
--- a/CmdLine/Batch.hs
+++ b/CmdLine/Batch.hs
@@ -7,8 +7,11 @@
 
 module CmdLine.Batch where
 
-import Common.Annex
-import Command
+import Annex.Common
+import Types.Command
+import CmdLine.Action
+import CmdLine.GitAnnex.Options
+import Options.Applicative
 
 data BatchMode = Batch | NoBatch
 
@@ -54,3 +57,19 @@
 			batchInput parser a
   where
 	parseerr s = error $ "Batch input parse failure: " ++ s
+
+-- Runs a CommandStart in batch mode.
+--
+-- The batch mode user expects to read a line of output, and it's up to the
+-- CommandStart to generate that output as it succeeds or fails to do its
+-- job. However, if it stops without doing anything, it won't generate
+-- any output, so in that case, batchBadInput is used to provide the caller
+-- with an empty line.
+batchCommandAction :: CommandStart -> Annex ()
+batchCommandAction a = maybe (batchBadInput Batch) (const noop)
+	=<< callCommandAction' a
+
+-- Reads lines of batch input and passes the filepaths to a CommandStart
+-- to handle them.
+batchFiles :: (FilePath -> CommandStart) -> Annex ()
+batchFiles a = batchInput Right $ batchCommandAction . a
diff --git a/CmdLine/GitAnnex.hs b/CmdLine/GitAnnex.hs
--- a/CmdLine/GitAnnex.hs
+++ b/CmdLine/GitAnnex.hs
@@ -27,6 +27,7 @@
 import qualified Command.LookupKey
 import qualified Command.ContentLocation
 import qualified Command.ExamineKey
+import qualified Command.MatchExpression
 import qualified Command.FromKey
 import qualified Command.RegisterUrl
 import qualified Command.SetKey
@@ -84,9 +85,7 @@
 import qualified Command.Sync
 import qualified Command.Mirror
 import qualified Command.AddUrl
-#ifdef WITH_FEED
 import qualified Command.ImportFeed
-#endif
 import qualified Command.RmUrl
 import qualified Command.Import
 import qualified Command.Map
@@ -137,9 +136,7 @@
 	, Command.Sync.cmd
 	, Command.Mirror.cmd
 	, Command.AddUrl.cmd
-#ifdef WITH_FEED
 	, Command.ImportFeed.cmd
-#endif
 	, Command.RmUrl.cmd
 	, Command.Import.cmd
 	, Command.Init.cmd
@@ -166,6 +163,7 @@
 	, Command.LookupKey.cmd
 	, Command.ContentLocation.cmd
 	, Command.ExamineKey.cmd
+	, Command.MatchExpression.cmd
 	, Command.FromKey.cmd
 	, Command.RegisterUrl.cmd
 	, Command.SetKey.cmd
diff --git a/CmdLine/GitAnnex/Options.hs b/CmdLine/GitAnnex/Options.hs
--- a/CmdLine/GitAnnex/Options.hs
+++ b/CmdLine/GitAnnex/Options.hs
@@ -11,14 +11,13 @@
 import Options.Applicative.Builder.Internal
 import Control.Concurrent
 
-import Common.Annex
+import Annex.Common
 import qualified Git.Config
 import qualified Git.Construct
 import Git.Types
 import Types.TrustLevel
 import Types.NumCopies
 import Types.Messages
-import Types.Key
 import Types.Command
 import Types.DeferredParse
 import Types.DesktopNotify
@@ -88,9 +87,8 @@
   where
 	setnumcopies n = Annex.changeState $ \s -> s { Annex.forcenumcopies = Just $ NumCopies n }
 	setuseragent v = Annex.changeState $ \s -> s { Annex.useragent = Just v }
-	setgitconfig v = inRepo (Git.Config.store v)
-		>>= pure . (\r -> r { gitGlobalOpts = gitGlobalOpts r ++ [Param "-c", Param v] })
-		>>= Annex.changeGitRepo
+	setgitconfig v = Annex.adjustGitRepo $ \r -> Git.Config.store v $ 
+		r { gitGlobalOpts = gitGlobalOpts r ++ [Param "-c", Param v] }
 	setdesktopnotify v = Annex.changeState $ \s -> s { Annex.desktopnotify = Annex.desktopnotify s <> v }
 
 {- Parser that accepts all non-option params. -}
diff --git a/CmdLine/GitAnnexShell.hs b/CmdLine/GitAnnexShell.hs
--- a/CmdLine/GitAnnexShell.hs
+++ b/CmdLine/GitAnnexShell.hs
@@ -7,7 +7,7 @@
 
 module CmdLine.GitAnnexShell where
 
-import Common.Annex
+import Annex.Common
 import qualified Git.Construct
 import qualified Git.Config
 import CmdLine
diff --git a/CmdLine/GitAnnexShell/Checks.hs b/CmdLine/GitAnnexShell/Checks.hs
--- a/CmdLine/GitAnnexShell/Checks.hs
+++ b/CmdLine/GitAnnexShell/Checks.hs
@@ -7,7 +7,7 @@
 
 module CmdLine.GitAnnexShell.Checks where
 
-import Common.Annex
+import Annex.Common
 import Command
 import qualified Annex
 import Annex.Init
diff --git a/CmdLine/GitAnnexShell/Fields.hs b/CmdLine/GitAnnexShell/Fields.hs
--- a/CmdLine/GitAnnexShell/Fields.hs
+++ b/CmdLine/GitAnnexShell/Fields.hs
@@ -7,7 +7,7 @@
 
 module CmdLine.GitAnnexShell.Fields where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import Git.FilePath
 
diff --git a/CmdLine/Option.hs b/CmdLine/Option.hs
--- a/CmdLine/Option.hs
+++ b/CmdLine/Option.hs
@@ -9,7 +9,7 @@
 
 import Options.Applicative
 
-import Common.Annex
+import Annex.Common
 import CmdLine.Usage
 import CmdLine.GlobalSetter
 import qualified Annex
diff --git a/CmdLine/Seek.hs b/CmdLine/Seek.hs
--- a/CmdLine/Seek.hs
+++ b/CmdLine/Seek.hs
@@ -11,9 +11,8 @@
 
 module CmdLine.Seek where
 
-import Common.Annex
+import Annex.Common
 import Types.Command
-import Types.Key
 import Types.FileMatcher
 import qualified Annex
 import qualified Git
diff --git a/CmdLine/Usage.hs b/CmdLine/Usage.hs
--- a/CmdLine/Usage.hs
+++ b/CmdLine/Usage.hs
@@ -7,7 +7,7 @@
 
 module CmdLine.Usage where
 
-import Common.Annex
+import Annex.Common
 import Types.Command
 
 usageMessage :: String -> String
diff --git a/Command.hs b/Command.hs
--- a/Command.hs
+++ b/Command.hs
@@ -6,39 +6,26 @@
  -}
 
 module Command (
-	command,
-	withParams,
-	(<--<),
-	noRepo,
-	noCommit,
-	noMessages,
-	withGlobalOptions,
-	next,
-	stop,
-	stopUnless,
-	whenAnnexed,
-	ifAnnexed,
-	lookupFile,
-	isBareRepo,
+	module Command,
 	module ReExported
 ) where
 
-import Common.Annex
-import Annex.WorkTree
-import qualified Git
+import Annex.Common as ReExported
+import Annex.WorkTree as ReExported (whenAnnexed, ifAnnexed)
 import Types.Command as ReExported
-import Types.Option as ReExported
 import Types.DeferredParse as ReExported
 import CmdLine.Seek as ReExported
-import Checks as ReExported
 import CmdLine.Usage as ReExported
 import CmdLine.Action as ReExported
 import CmdLine.Option as ReExported
 import CmdLine.GlobalSetter as ReExported
 import CmdLine.GitAnnex.Options as ReExported
+import CmdLine.Batch as ReExported
 import Options.Applicative as ReExported hiding (command)
-
-import qualified Options.Applicative as O
+import qualified Git
+import Annex.Init
+import Config
+import Utility.Daemon
 
 {- Generates a normal Command -}
 command :: String -> CommandSection -> String -> CmdParamsDesc -> (CmdParamsDesc -> CommandParser) -> Command
@@ -47,7 +34,7 @@
 		section desc (mkparser paramdesc) Nothing
 
 {- Simple option parser that takes all non-option params as-is. -}
-withParams :: (CmdParams -> v) -> CmdParamsDesc -> O.Parser v
+withParams :: (CmdParams -> v) -> CmdParamsDesc -> Parser v
 withParams mkseek paramdesc = mkseek <$> cmdParams paramdesc
 
 {- Uses the supplied option parser, which yields a deferred parse,
@@ -66,14 +53,17 @@
 noCommit :: Command -> Command
 noCommit c = c { cmdnocommit = True }
 
-{- Indicates that a command should not output anything other than what
- - it directly sends to stdout. (--json can override this). -}
+{- Indicates that a command should not output the usual messages when
+ - starting or stopping processing a file or other item. Unless --json mode
+ - is enabled, this also enables quiet output mode, so only things
+ - explicitly output by the command are shown and not progress messages
+ - etc. -}
 noMessages :: Command -> Command
 noMessages c = c { cmdnomessages = True }
 
 {- Adds a fallback action to a command, that will be run if it's used
  - outside a git repository. -}
-noRepo :: (String -> O.Parser (IO ())) -> Command -> Command
+noRepo :: (String -> Parser (IO ())) -> Command -> Command
 noRepo a c = c { cmdnorepo = Just (a (cmdparamdesc c)) }
 
 {- Adds global options to a command's option parser, and modifies its seek
@@ -103,3 +93,33 @@
 
 isBareRepo :: Annex Bool
 isBareRepo = fromRepo Git.repoIsLocalBare
+
+commonChecks :: [CommandCheck]
+commonChecks = [repoExists]
+
+repoExists :: CommandCheck
+repoExists = CommandCheck 0 ensureInitialized
+
+notDirect :: Command -> Command
+notDirect = addCheck $ whenM isDirect $
+	error "You cannot run this command in a direct mode repository."
+
+notBareRepo :: Command -> Command
+notBareRepo = addCheck $ whenM (fromRepo Git.repoIsLocalBare) $
+	error "You cannot run this command in a bare repository."
+
+noDaemonRunning :: Command -> Command
+noDaemonRunning = addCheck $ whenM (isJust <$> daemonpid) $
+	error "You cannot run this command while git-annex watch or git-annex assistant is running."
+  where
+	daemonpid = liftIO . checkDaemon =<< fromRepo gitAnnexPidFile
+
+dontCheck :: CommandCheck -> Command -> Command
+dontCheck check cmd = mutateCheck cmd $ \c -> filter (/= check) c
+
+addCheck :: Annex () -> Command -> Command
+addCheck check cmd = mutateCheck cmd $ \c ->
+	CommandCheck (length c + 100) check : c
+
+mutateCheck :: Command -> ([CommandCheck] -> [CommandCheck]) -> Command
+mutateCheck cmd@(Command { cmdcheck = c }) a = cmd { cmdcheck = a c }
diff --git a/Command/Add.hs b/Command/Add.hs
--- a/Command/Add.hs
+++ b/Command/Add.hs
@@ -7,7 +7,6 @@
 
 module Command.Add where
 
-import Common.Annex
 import Command
 import Annex.Ingest
 import Logs.Location
@@ -16,20 +15,21 @@
 import Annex.Link
 import qualified Annex
 import qualified Annex.Queue
+import qualified Database.Keys
 import Config
 import Utility.InodeCache
 import Annex.FileMatcher
 import Annex.Version
-import qualified Database.Keys
 
 cmd :: Command
-cmd = notBareRepo $ withGlobalOptions (jobsOption : fileMatchingOptions) $
+cmd = notBareRepo $ withGlobalOptions (jobsOption : jsonOption : fileMatchingOptions) $
 	command "add" SectionCommon "add files to annex"
 		paramPaths (seek <$$> optParser)
 
 data AddOptions = AddOptions
 	{ addThese :: CmdParams
 	, includeDotFiles :: Bool
+	, batchOption :: BatchMode
 	}
 
 optParser :: CmdParamsDesc -> Parser AddOptions
@@ -39,6 +39,7 @@
 		( long "include-dotfiles"
 		<> help "don't skip dotfiles"
 		)
+	<*> parseBatchOption
 
 {- Add acts on both files not checked into git yet, and unlocked files.
  -
@@ -46,15 +47,19 @@
 seek :: AddOptions -> CommandSeek
 seek o = allowConcurrentOutput $ do
 	matcher <- largeFilesMatcher
-	let go a = flip a (addThese o) $ \file -> ifM (checkFileMatcher matcher file <||> Annex.getState Annex.force)
+	let gofile file = ifM (checkFileMatcher matcher file <||> Annex.getState Annex.force)
 		( start file
 		, startSmall file
 		)
-	go $ withFilesNotInGit (not $ includeDotFiles o)
-	ifM (versionSupportsUnlockedPointers <||> isDirect)
-		( go withFilesMaybeModified
-		, go withFilesOldUnlocked
-		)
+	case batchOption o of
+		Batch -> batchFiles gofile
+		NoBatch -> do
+			let go a = a gofile (addThese o)
+			go (withFilesNotInGit (not $ includeDotFiles o))
+			ifM (versionSupportsUnlockedPointers <||> isDirect)
+				( go withFilesMaybeModified
+				, go withFilesOldUnlocked
+				)
 
 {- Pass file off to git-add. -}
 startSmall :: FilePath -> CommandStart
@@ -126,6 +131,7 @@
 
 cleanup :: FilePath -> Key -> Maybe InodeCache -> Bool -> CommandCleanup
 cleanup file key mcache hascontent = do
+	maybeShowJSON [("key", key2file key)]
 	ifM (isDirect <&&> pure hascontent)
 		( do
 			l <- calcRepo $ gitAnnexLink file key
diff --git a/Command/AddUnused.hs b/Command/AddUnused.hs
--- a/Command/AddUnused.hs
+++ b/Command/AddUnused.hs
@@ -7,12 +7,10 @@
 
 module Command.AddUnused where
 
-import Common.Annex
 import Logs.Location
 import Command
 import Annex.Ingest
 import Command.Unused (withUnusedMaps, UnusedMaps(..), startUnused)
-import Types.Key
 
 cmd :: Command
 cmd = notDirect $ 
diff --git a/Command/AddUrl.hs b/Command/AddUrl.hs
--- a/Command/AddUrl.hs
+++ b/Command/AddUrl.hs
@@ -5,13 +5,10 @@
  - Licensed under the GNU GPL version 3 or higher.
  -}
 
-{-# LANGUAGE CPP #-}
-
 module Command.AddUrl where
 
 import Network.URI
 
-import Common.Annex
 import Command
 import Backend
 import qualified Annex
@@ -25,7 +22,6 @@
 import Annex.Ingest
 import Annex.UUID
 import Logs.Web
-import Types.Key
 import Types.KeySource
 import Types.UrlContents
 import Config
@@ -33,12 +29,9 @@
 import Annex.FileMatcher
 import Logs.Location
 import Utility.Metered
-import CmdLine.Batch
 import qualified Annex.Transfer as Transfer
-#ifdef WITH_QUVI
 import Annex.Quvi
 import qualified Utility.Quvi as Quvi
-#endif
 
 cmd :: Command
 cmd = notBareRepo $ withGlobalOptions [jobsOption, jsonOption] $
@@ -195,15 +188,10 @@
 		Url.parseURIRelaxed $ urlstring
 	go url = case downloader of
 		QuviDownloader -> usequvi
-		_ -> 
-#ifdef WITH_QUVI
-			ifM (quviSupported urlstring)
-				( usequvi
-				, regulardownload url
-				)
-#else
-			regulardownload url
-#endif
+		_ -> ifM (quviSupported urlstring)
+			( usequvi
+			, regulardownload url
+			)
 	regulardownload url = do
 		pathmax <- liftIO $ fileNameLengthLimit "."
 		urlinfo <- if relaxedOption o
@@ -222,7 +210,6 @@
 						)
 		showStart "addurl" file
 		next $ performWeb (relaxedOption o) urlstring file urlinfo
-#ifdef WITH_QUVI
 	badquvi = error $ "quvi does not know how to download url " ++ urlstring
 	usequvi = do
 		page <- fromMaybe badquvi
@@ -234,9 +221,6 @@
 				Quvi.pageTitle page ++ "." ++ fromMaybe "m" (Quvi.linkSuffix link)
 		showStart "addurl" file
 		next $ performQuvi (relaxedOption o) urlstring (Quvi.linkUrl link) file
-#else
-	usequvi = error "not built with quvi support"
-#endif
 
 performWeb :: Bool -> URLString -> FilePath -> Url.UrlInfo -> CommandPerform
 performWeb relaxed url file urlinfo = ifAnnexed file addurl geturl
@@ -245,7 +229,6 @@
 	addurl = addUrlChecked relaxed url webUUID $ \k -> return $
 		(Url.urlExists urlinfo, Url.urlSize urlinfo == keySize k)
 
-#ifdef WITH_QUVI
 performQuvi :: Bool -> URLString -> URLString -> FilePath -> CommandPerform
 performQuvi relaxed pageurl videourl file = ifAnnexed file addurl geturl
   where
@@ -254,12 +237,9 @@
 		cleanup webUUID quviurl file key Nothing
 		return True
 	geturl = next $ isJust <$> addUrlFileQuvi relaxed quviurl videourl file
-#endif
 
-#ifdef WITH_QUVI
 addUrlFileQuvi :: Bool -> URLString -> URLString -> FilePath -> Annex (Maybe Key)
-addUrlFileQuvi relaxed quviurl videourl file = do
-	checkDoesNotExist file
+addUrlFileQuvi relaxed quviurl videourl file = stopUnless (doesNotExist file) $ do
 	let key = Backend.URL.fromUrl quviurl Nothing
 	ifM (pure relaxed <||> Annex.getState Annex.fast)
 		( do
@@ -286,7 +266,6 @@
 						return (Just key)
 					else return Nothing
 		)
-#endif
 
 addUrlChecked :: Bool -> URLString -> UUID -> (Key -> Annex (Bool, Bool)) -> Key -> CommandPerform
 addUrlChecked relaxed url u checkexistssize key
@@ -309,19 +288,20 @@
 		)
 
 addUrlFile :: Bool -> URLString -> Url.UrlInfo -> FilePath -> Annex (Maybe Key)
-addUrlFile relaxed url urlinfo file = do
-	checkDoesNotExist file
+addUrlFile relaxed url urlinfo file = stopUnless (doesNotExist file) $ do
 	liftIO $ createDirectoryIfMissing True (parentDir file)
 	ifM (Annex.getState Annex.fast <||> pure relaxed)
 		( nodownload url urlinfo file
 		, downloadWeb url urlinfo file
 		)
 
-checkDoesNotExist :: FilePath -> Annex ()
-checkDoesNotExist file = go =<< liftIO (catchMaybeIO $ getSymbolicLinkStatus file)
+doesNotExist :: FilePath -> Annex Bool
+doesNotExist file = go =<< liftIO (catchMaybeIO $ getSymbolicLinkStatus file)
   where
-	go Nothing = return ()
-	go (Just _) = error $ file ++ " already exists and is not annexed; not overwriting"
+	go Nothing = return True
+	go (Just _) = do
+		warning $ file ++ " already exists and is not annexed; not overwriting"
+		return False
 
 downloadWeb :: URLString -> Url.UrlInfo -> FilePath -> Annex (Maybe Key)
 downloadWeb url urlinfo file = do
@@ -379,6 +359,7 @@
 			)
   where
 	go = do
+		maybeShowJSON [("key", key2file key)]
 		when (isJust mtmp) $
 			logStatus key InfoPresent
 		setUrlPresent u key url
diff --git a/Command/Assistant.hs b/Command/Assistant.hs
--- a/Command/Assistant.hs
+++ b/Command/Assistant.hs
@@ -7,7 +7,6 @@
 
 module Command.Assistant where
 
-import Common.Annex
 import Command
 import qualified Command.Watch
 import Annex.Init
diff --git a/Command/CheckPresentKey.hs b/Command/CheckPresentKey.hs
--- a/Command/CheckPresentKey.hs
+++ b/Command/CheckPresentKey.hs
@@ -7,9 +7,7 @@
 
 module Command.CheckPresentKey where
 
-import Common.Annex
 import Command
-import Types.Key
 import qualified Remote
 import Annex
 import Types.Messages
diff --git a/Command/Commit.hs b/Command/Commit.hs
--- a/Command/Commit.hs
+++ b/Command/Commit.hs
@@ -7,7 +7,6 @@
 
 module Command.Commit where
 
-import Common.Annex
 import Command
 import qualified Annex.Branch
 import qualified Git
diff --git a/Command/ConfigList.hs b/Command/ConfigList.hs
--- a/Command/ConfigList.hs
+++ b/Command/ConfigList.hs
@@ -7,7 +7,6 @@
 
 module Command.ConfigList where
 
-import Common.Annex
 import Command
 import Annex.UUID
 import Annex.Init
diff --git a/Command/ContentLocation.hs b/Command/ContentLocation.hs
--- a/Command/ContentLocation.hs
+++ b/Command/ContentLocation.hs
@@ -7,14 +7,11 @@
 
 module Command.ContentLocation where
 
-import Common.Annex
 import Command
-import CmdLine.Batch
 import Annex.Content
-import Types.Key
 
 cmd :: Command
-cmd = noCommit $ noMessages $
+cmd = noCommit $ 
 	command "contentlocation" SectionPlumbing 
 		"looks up content for a key"
 		(paramRepeating paramKey)
diff --git a/Command/Copy.hs b/Command/Copy.hs
--- a/Command/Copy.hs
+++ b/Command/Copy.hs
@@ -7,7 +7,6 @@
 
 module Command.Copy where
 
-import Common.Annex
 import Command
 import qualified Command.Move
 import qualified Remote
diff --git a/Command/Dead.hs b/Command/Dead.hs
--- a/Command/Dead.hs
+++ b/Command/Dead.hs
@@ -8,9 +8,7 @@
 module Command.Dead where
 
 import Command
-import Common.Annex
 import Types.TrustLevel
-import Types.Key
 import Command.Trust (trustCommand)
 import Logs.Location
 import Remote (keyLocations)
diff --git a/Command/Describe.hs b/Command/Describe.hs
--- a/Command/Describe.hs
+++ b/Command/Describe.hs
@@ -7,7 +7,6 @@
 
 module Command.Describe where
 
-import Common.Annex
 import Command
 import qualified Remote
 import Logs.UUID
diff --git a/Command/DiffDriver.hs b/Command/DiffDriver.hs
--- a/Command/DiffDriver.hs
+++ b/Command/DiffDriver.hs
@@ -7,7 +7,6 @@
 
 module Command.DiffDriver where
 
-import Common.Annex
 import Command
 import Annex.Content
 import Annex.Link
diff --git a/Command/Direct.hs b/Command/Direct.hs
--- a/Command/Direct.hs
+++ b/Command/Direct.hs
@@ -7,7 +7,6 @@
 
 module Command.Direct where
 
-import Common.Annex
 import Command
 import qualified Git
 import qualified Git.LsFiles
diff --git a/Command/Drop.hs b/Command/Drop.hs
--- a/Command/Drop.hs
+++ b/Command/Drop.hs
@@ -7,7 +7,6 @@
 
 module Command.Drop where
 
-import Common.Annex
 import Command
 import qualified Remote
 import qualified Annex
diff --git a/Command/DropKey.hs b/Command/DropKey.hs
--- a/Command/DropKey.hs
+++ b/Command/DropKey.hs
@@ -7,7 +7,6 @@
 
 module Command.DropKey where
 
-import Common.Annex
 import Command
 import qualified Annex
 import Logs.Location
diff --git a/Command/DropUnused.hs b/Command/DropUnused.hs
--- a/Command/DropUnused.hs
+++ b/Command/DropUnused.hs
@@ -7,7 +7,6 @@
 
 module Command.DropUnused where
 
-import Common.Annex
 import Command
 import qualified Command.Drop
 import qualified Remote
diff --git a/Command/EnableRemote.hs b/Command/EnableRemote.hs
--- a/Command/EnableRemote.hs
+++ b/Command/EnableRemote.hs
@@ -7,7 +7,6 @@
 
 module Command.EnableRemote where
 
-import Common.Annex
 import Command
 import qualified Logs.Remote
 import qualified Types.Remote as R
diff --git a/Command/ExamineKey.hs b/Command/ExamineKey.hs
--- a/Command/ExamineKey.hs
+++ b/Command/ExamineKey.hs
@@ -7,15 +7,12 @@
 
 module Command.ExamineKey where
 
-import Common.Annex
 import Command
-import CmdLine.Batch
 import qualified Utility.Format
 import Command.Find (parseFormatOption, showFormatted, keyVars)
-import Types.Key
 
 cmd :: Command
-cmd = noCommit $ noMessages $ withGlobalOptions [jsonOption] $
+cmd = noCommit $ withGlobalOptions [jsonOption] $
 	command "examinekey" SectionPlumbing 
 		"prints information from a key"
 		(paramRepeating paramKey)
diff --git a/Command/Expire.hs b/Command/Expire.hs
--- a/Command/Expire.hs
+++ b/Command/Expire.hs
@@ -7,7 +7,6 @@
 
 module Command.Expire where
 
-import Common.Annex
 import Command
 import Logs.Activity
 import Logs.UUID
diff --git a/Command/Find.hs b/Command/Find.hs
--- a/Command/Find.hs
+++ b/Command/Find.hs
@@ -10,13 +10,11 @@
 import Data.Default
 import qualified Data.Map as M
 
-import Common.Annex
 import Command
 import Annex.Content
 import Limit
 import qualified Utility.Format
 import Utility.DataUnits
-import Types.Key
 
 cmd :: Command
 cmd = withGlobalOptions annexedMatchingOptions $ mkCommand $
@@ -29,12 +27,14 @@
 data FindOptions = FindOptions
 	{ findThese :: CmdParams
 	, formatOption :: Maybe Utility.Format.Format
+	, batchOption :: BatchMode
 	}
 
 optParser :: CmdParamsDesc -> Parser FindOptions
 optParser desc = FindOptions
 	<$> cmdParams desc
 	<*> optional parseFormatOption
+	<*> parseBatchOption
 
 parseFormatOption :: Parser Utility.Format.Format
 parseFormatOption = 
@@ -48,15 +48,21 @@
 		)
 
 seek :: FindOptions -> CommandSeek
-seek o = withFilesInGit (whenAnnexed $ start o) (findThese o)
+seek o = case batchOption o of
+	NoBatch -> withFilesInGit go (findThese o)
+	Batch -> batchFiles go
+  where
+	go = whenAnnexed $ start o
 
+-- only files inAnnex are shown, unless the user has requested
+-- others via a limit
 start :: FindOptions -> FilePath -> Key -> CommandStart
-start o file key = do
-	-- only files inAnnex are shown, unless the user has requested
-	-- others via a limit
-	whenM (limited <||> inAnnex key) $
+start o file key = ifM (limited <||> inAnnex key)
+	( do
 		showFormatted (formatOption o) file $ ("file", file) : keyVars key
-	stop
+		next $ next $ return True
+	, stop
+	)
 
 showFormatted :: Maybe Utility.Format.Format -> String -> [(String, String)] -> Annex ()
 showFormatted format unformatted vars =
diff --git a/Command/FindRef.hs b/Command/FindRef.hs
--- a/Command/FindRef.hs
+++ b/Command/FindRef.hs
@@ -7,7 +7,6 @@
 
 module Command.FindRef where
 
-import Common.Annex
 import Command
 import qualified Command.Find as Find
 
diff --git a/Command/Fix.hs b/Command/Fix.hs
--- a/Command/Fix.hs
+++ b/Command/Fix.hs
@@ -9,7 +9,6 @@
 
 module Command.Fix where
 
-import Common.Annex
 import Command
 import Config
 import qualified Annex
diff --git a/Command/Forget.hs b/Command/Forget.hs
--- a/Command/Forget.hs
+++ b/Command/Forget.hs
@@ -7,7 +7,6 @@
 
 module Command.Forget where
 
-import Common.Annex
 import Command
 import qualified Annex.Branch as Branch
 import Logs.Transitions
diff --git a/Command/FromKey.hs b/Command/FromKey.hs
--- a/Command/FromKey.hs
+++ b/Command/FromKey.hs
@@ -9,11 +9,9 @@
 
 module Command.FromKey where
 
-import Common.Annex
 import Command
 import qualified Annex.Queue
 import Annex.Content
-import Types.Key
 import qualified Annex
 import qualified Backend.URL
 
diff --git a/Command/Fsck.hs b/Command/Fsck.hs
--- a/Command/Fsck.hs
+++ b/Command/Fsck.hs
@@ -9,12 +9,10 @@
 
 module Command.Fsck where
 
-import Common.Annex
 import Command
 import qualified Annex
 import qualified Remote
 import qualified Types.Backend
-import qualified Types.Key
 import qualified Backend
 import Annex.Content
 import Annex.Content.Direct
@@ -29,7 +27,6 @@
 import Annex.UUID
 import Utility.DataUnits
 import Config
-import Types.Key
 import Utility.HumanTime
 import Utility.CopyFile
 import Git.FilePath
@@ -177,7 +174,7 @@
 
 startKey :: Incremental -> Key -> NumCopies -> CommandStart
 startKey inc key numcopies =
-	case Backend.maybeLookupBackendName (Types.Key.keyBackendName key) of
+	case Backend.maybeLookupBackendName (keyBackendName key) of
 		Nothing -> stop
 		Just backend -> runFsck inc (key2file key) key $
 			performKey key backend numcopies
@@ -309,7 +306,7 @@
 	checkKeySizeOr (badContentRemote remote file) key file
 
 checkKeySizeOr :: (Key -> Annex String) -> Key -> FilePath -> Annex Bool
-checkKeySizeOr bad key file = case Types.Key.keySize key of
+checkKeySizeOr bad key file = case keySize key of
 	Nothing -> return True
 	Just size -> do
 		size' <- liftIO $ getFileSize file
diff --git a/Command/FuzzTest.hs b/Command/FuzzTest.hs
--- a/Command/FuzzTest.hs
+++ b/Command/FuzzTest.hs
@@ -7,9 +7,8 @@
 
 module Command.FuzzTest where
 
-import Common.Annex
-import qualified Annex
 import Command
+import qualified Annex
 import qualified Git.Config
 import Config
 import Utility.ThreadScheduler
diff --git a/Command/GCryptSetup.hs b/Command/GCryptSetup.hs
--- a/Command/GCryptSetup.hs
+++ b/Command/GCryptSetup.hs
@@ -7,7 +7,6 @@
 
 module Command.GCryptSetup where
 
-import Common.Annex
 import Command
 import Annex.UUID
 import qualified Remote.GCrypt
diff --git a/Command/Get.hs b/Command/Get.hs
--- a/Command/Get.hs
+++ b/Command/Get.hs
@@ -7,7 +7,6 @@
 
 module Command.Get where
 
-import Common.Annex
 import Command
 import qualified Remote
 import Annex.Content
diff --git a/Command/Group.hs b/Command/Group.hs
--- a/Command/Group.hs
+++ b/Command/Group.hs
@@ -7,7 +7,6 @@
 
 module Command.Group where
 
-import Common.Annex
 import Command
 import qualified Remote
 import Logs.Group
diff --git a/Command/GroupWanted.hs b/Command/GroupWanted.hs
--- a/Command/GroupWanted.hs
+++ b/Command/GroupWanted.hs
@@ -7,7 +7,6 @@
 
 module Command.GroupWanted where
 
-import Common.Annex
 import Command
 import Logs.PreferredContent
 import Command.Wanted (performGet, performSet)
diff --git a/Command/Help.hs b/Command/Help.hs
--- a/Command/Help.hs
+++ b/Command/Help.hs
@@ -7,7 +7,6 @@
 
 module Command.Help where
 
-import Common.Annex
 import Command
 import qualified Command.Init
 import qualified Command.Add
diff --git a/Command/Import.hs b/Command/Import.hs
--- a/Command/Import.hs
+++ b/Command/Import.hs
@@ -7,7 +7,6 @@
 
 module Command.Import where
 
-import Common.Annex
 import Command
 import qualified Git
 import qualified Annex
@@ -16,14 +15,13 @@
 import Backend
 import Remote
 import Types.KeySource
-import Types.Key
 import Annex.CheckIgnore
 import Annex.NumCopies
 import Types.FileMatcher
 import Annex.FileMatcher
 
 cmd :: Command
-cmd = withGlobalOptions (jobsOption : fileMatchingOptions) $ notBareRepo $
+cmd = withGlobalOptions (jobsOption : jsonOption : fileMatchingOptions) $ notBareRepo $
 	command "import" SectionCommon 
 		"move and add files from outside git working copy"
 		paramPaths (seek <$$> optParser)
diff --git a/Command/ImportFeed.hs b/Command/ImportFeed.hs
--- a/Command/ImportFeed.hs
+++ b/Command/ImportFeed.hs
@@ -20,9 +20,8 @@
 import System.Locale
 #endif
 
-import Common.Annex
-import qualified Annex
 import Command
+import qualified Annex
 import qualified Annex.Url as Url
 import qualified Remote
 import qualified Types.Remote as Remote
@@ -34,11 +33,9 @@
 import Annex.Perms
 import Annex.UUID
 import Backend.URL (fromUrl)
-#ifdef WITH_QUVI
 import Annex.Quvi
 import qualified Utility.Quvi as Quvi
 import Command.AddUrl (addUrlFileQuvi)
-#endif
 import Types.MetaData
 import Logs.MetaData
 import Annex.MetaData
@@ -140,16 +137,12 @@
 		Just (enclosureurl, _, _) -> return $ 
 			Just $ ToDownload f u i $ Enclosure enclosureurl
 		Nothing -> mkquvi f i
-#ifdef WITH_QUVI
 	mkquvi f i = case getItemLink i of
 		Just link -> ifM (quviSupported link)
 			( return $ Just $ ToDownload f u i $ QuviLink link
 			, return Nothing
 			)
 		Nothing -> return Nothing
-#else
-	mkquvi _ _ = return Nothing
-#endif
 
 {- Feeds change, so a feed download cannot be resumed. -}
 downloadFeed :: URLString -> Annex (Maybe Feed)
@@ -194,7 +187,6 @@
 								else []
 							
 	QuviLink pageurl -> do
-#ifdef WITH_QUVI
 		let quviurl = setDownloader pageurl QuviDownloader
 		checkknown quviurl $ do
 			mp <- withQuviOptions Quvi.query [Quvi.quiet, Quvi.httponly] pageurl
@@ -207,9 +199,6 @@
 						checkknown videourl $
 							rundownload videourl ("." ++ fromMaybe "m" (Quvi.linkSuffix link)) $ \f ->
 								maybeToList <$> addUrlFileQuvi (relaxedOption opts) quviurl videourl f
-#else
-		return False
-#endif
   where
 	forced = Annex.getState Annex.force
 
diff --git a/Command/InAnnex.hs b/Command/InAnnex.hs
--- a/Command/InAnnex.hs
+++ b/Command/InAnnex.hs
@@ -7,7 +7,6 @@
 
 module Command.InAnnex where
 
-import Common.Annex
 import Command
 import Annex.Content
 
diff --git a/Command/Indirect.hs b/Command/Indirect.hs
--- a/Command/Indirect.hs
+++ b/Command/Indirect.hs
@@ -7,7 +7,6 @@
 
 module Command.Indirect where
 
-import Common.Annex
 import Command
 import qualified Git
 import qualified Git.Branch
diff --git a/Command/Info.hs b/Command/Info.hs
--- a/Command/Info.hs
+++ b/Command/Info.hs
@@ -14,16 +14,14 @@
 import Text.JSON
 import Data.Ord
 
-import Common.Annex
+import Command
 import qualified Git
 import qualified Annex
 import qualified Remote
 import qualified Types.Remote as Remote
-import Command
 import Utility.DataUnits
 import Utility.DiskFree
 import Annex.Content
-import Types.Key
 import Logs.UUID
 import Logs.Trust
 import Logs.Location
@@ -86,6 +84,7 @@
 data InfoOptions = InfoOptions
 	{ infoFor :: CmdParams
 	, bytesOption :: Bool
+	, batchOption :: BatchMode
 	}
 
 optParser :: CmdParamsDesc -> Parser InfoOptions
@@ -95,9 +94,12 @@
 		( long "bytes"
 		<> help "display file sizes in bytes"
 		)
+	<*> parseBatchOption
 
 seek :: InfoOptions -> CommandSeek
-seek o = withWords (start o) (infoFor o)
+seek o = case batchOption o of
+	NoBatch -> withWords (start o) (infoFor o)
+	Batch -> batchInput Right (itemInfo o)
 
 start :: InfoOptions -> [String] -> CommandStart
 start o [] = do
@@ -125,12 +127,19 @@
 				v' <- Remote.nameToUUID' p
 				case v' of
 					Right u -> uuidInfo o u
-					Left _ -> ifAnnexed p (fileInfo o p) noinfo
+					Left _ -> ifAnnexed p 
+						(fileInfo o p)
+						(noInfo p)
 	)
   where
 	isdir = liftIO . catchBoolIO . (isDirectory <$$> getFileStatus)
-	noinfo = error $ p ++ " is not a directory or an annexed file or a remote or a uuid"
 
+noInfo :: String -> Annex ()
+noInfo s = do
+	showStart "info" s
+	showNote $ "not a directory or an annexed file or a remote or a uuid"
+	showEndFail
+
 dirInfo :: InfoOptions -> FilePath -> Annex ()
 dirInfo o dir = showCustom (unwords ["info", dir]) $ do
 	stats <- selStats (tostats dir_fast_stats) (tostats dir_slow_stats)
@@ -425,7 +434,7 @@
 	let maxlen = maximum (map (length . snd) l)
 	descm <- lift uuidDescriptions
 	-- This also handles json display.
-	s <- lift $ prettyPrintUUIDsWith (Just "size") desc descm $
+	s <- lift $ prettyPrintUUIDsWith (Just "size") desc descm (Just . show) $
 		map (\(u, sz) -> (u, Just $ mkdisp sz maxlen)) l
 	return $ countRepoList (length l) s
   where
diff --git a/Command/Init.hs b/Command/Init.hs
--- a/Command/Init.hs
+++ b/Command/Init.hs
@@ -7,7 +7,6 @@
 
 module Command.Init where
 
-import Common.Annex
 import Command
 import Annex.Init
 import Annex.Version
diff --git a/Command/InitRemote.hs b/Command/InitRemote.hs
--- a/Command/InitRemote.hs
+++ b/Command/InitRemote.hs
@@ -9,9 +9,8 @@
 
 import qualified Data.Map as M
 
-import Common.Annex
-import Annex.SpecialRemote
 import Command
+import Annex.SpecialRemote
 import qualified Remote
 import qualified Logs.Remote
 import qualified Types.Remote as R
diff --git a/Command/List.hs b/Command/List.hs
--- a/Command/List.hs
+++ b/Command/List.hs
@@ -14,7 +14,6 @@
 import Data.Tuple.Utils
 import Data.Ord
 
-import Common.Annex
 import Command
 import Remote
 import Logs.Trust
diff --git a/Command/Lock.hs b/Command/Lock.hs
--- a/Command/Lock.hs
+++ b/Command/Lock.hs
@@ -7,7 +7,6 @@
 
 module Command.Lock where
 
-import Common.Annex
 import Command
 import qualified Annex.Queue
 import qualified Annex
@@ -87,7 +86,7 @@
 	repopulate obj
 		| filemodified = modifyContent obj $ do
 			g <- Annex.gitRepo
-			fs <- mapM (`fromTopFilePath` g)
+			fs <- map (`fromTopFilePath` g)
 				<$> Database.Keys.getAssociatedFiles key
 			mfile <- firstM (isUnmodified key) fs
 			liftIO $ nukeFile obj
diff --git a/Command/LockContent.hs b/Command/LockContent.hs
--- a/Command/LockContent.hs
+++ b/Command/LockContent.hs
@@ -7,10 +7,8 @@
 
 module Command.LockContent where
 
-import Common.Annex
 import Command
 import Annex.Content
-import Types.Key
 import Remote.Helper.Ssh (contentLockedMarker)
 
 cmd :: Command
diff --git a/Command/Log.hs b/Command/Log.hs
--- a/Command/Log.hs
+++ b/Command/Log.hs
@@ -19,7 +19,6 @@
 import System.Locale
 #endif
 
-import Common.Annex
 import Command
 import Logs
 import qualified Logs.Presence
diff --git a/Command/LookupKey.hs b/Command/LookupKey.hs
--- a/Command/LookupKey.hs
+++ b/Command/LookupKey.hs
@@ -7,14 +7,11 @@
 
 module Command.LookupKey where
 
-import Common.Annex
 import Command
-import CmdLine.Batch
 import Annex.CatFile
-import Types.Key
 
 cmd :: Command
-cmd = notBareRepo $ noCommit $ noMessages $
+cmd = notBareRepo $ noCommit $
 	command "lookupkey" SectionPlumbing 
 		"looks up key used for file"
 		(paramRepeating paramFile)
diff --git a/Command/Map.hs b/Command/Map.hs
--- a/Command/Map.hs
+++ b/Command/Map.hs
@@ -9,7 +9,6 @@
 
 import qualified Data.Map as M
 
-import Common.Annex
 import Command
 import qualified Git
 import qualified Git.Url
diff --git a/Command/MatchExpression.hs b/Command/MatchExpression.hs
new file mode 100644
--- /dev/null
+++ b/Command/MatchExpression.hs
@@ -0,0 +1,75 @@
+{- git-annex command
+ -
+ - Copyright 2016 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Command.MatchExpression where
+
+import Command
+import Annex.FileMatcher
+import Types.FileMatcher
+import Utility.DataUnits
+import Utility.Matcher
+import Annex.UUID
+import Logs.Group
+
+import qualified Data.Map as M
+import qualified Data.Set as S
+
+cmd :: Command
+cmd = noCommit $
+	command "matchexpression" SectionPlumbing 
+		"checks if a preferred content expression matches"
+		paramExpression
+		(seek <$$> optParser)
+
+data MatchExpressionOptions = MatchExpressionOptions
+	{ matchexpr :: String
+	, matchinfo :: MatchInfo
+	}
+
+optParser :: CmdParamsDesc -> Parser MatchExpressionOptions
+optParser desc = MatchExpressionOptions
+	<$> argument str (metavar desc)
+	<*> (addkeysize <$> dataparser)
+  where
+	dataparser = MatchingInfo
+		<$> optinfo "file" (strOption
+			( long "file" <> metavar paramFile
+			<> help "specify filename to match against"
+			))
+		<*> optinfo "key" (option (str >>= parseKey)
+			( long "key" <> metavar paramKey
+			<> help "specify key to match against"
+			))
+		<*> optinfo "size" (option (str >>= maybe (fail "parse error") return . readSize dataUnits)
+			( long "size" <> metavar paramSize
+			<> help "specify size to match against"
+			))
+	optinfo datadesc mk = (Right <$> mk)
+		<|> (pure $ Left $ missingdata datadesc)
+	missingdata datadesc = bail $ "cannot match this expression without " ++ datadesc ++ " data"
+	-- When a key is provided, use its size.
+	addkeysize i@(MatchingInfo f (Right k) _) = case keySize k of
+		Just sz -> MatchingInfo f (Right k) (Right sz)
+		Nothing -> i
+	addkeysize i = i
+
+seek :: MatchExpressionOptions -> CommandSeek
+seek o = do
+	u <- getUUID
+	case parsedToMatcher $ exprParser matchAll matchAll groupMap M.empty (Just u) (matchexpr o) of
+		Left e -> liftIO $ bail $ "bad expression: " ++ e
+		Right matcher -> ifM (checkmatcher matcher)
+			( liftIO exitSuccess
+			, liftIO exitFailure
+			)
+  where
+	checkmatcher matcher = matchMrun matcher $ \a -> a S.empty (matchinfo o)
+
+bail :: String -> IO a
+bail s = do
+	hPutStrLn stderr s
+	exitWith $ ExitFailure 42
diff --git a/Command/Merge.hs b/Command/Merge.hs
--- a/Command/Merge.hs
+++ b/Command/Merge.hs
@@ -7,7 +7,6 @@
 
 module Command.Merge where
 
-import Common.Annex
 import Command
 import qualified Annex.Branch
 import qualified Git.Branch
diff --git a/Command/MetaData.hs b/Command/MetaData.hs
--- a/Command/MetaData.hs
+++ b/Command/MetaData.hs
@@ -7,7 +7,6 @@
 
 module Command.MetaData where
 
-import Common.Annex
 import Command
 import Annex.MetaData
 import Logs.MetaData
diff --git a/Command/Migrate.hs b/Command/Migrate.hs
--- a/Command/Migrate.hs
+++ b/Command/Migrate.hs
@@ -7,10 +7,8 @@
 
 module Command.Migrate where
 
-import Common.Annex
 import Command
 import Backend
-import qualified Types.Key
 import Types.Backend (canUpgradeKey, fastMigrate)
 import Types.KeySource
 import Annex.Content
@@ -55,7 +53,7 @@
  -  - Something has changed in the backend, such as a bug fix.
  -}
 upgradableKey :: Backend -> Key -> Bool
-upgradableKey backend key = isNothing (Types.Key.keySize key) || backendupgradable
+upgradableKey backend key = isNothing (keySize key) || backendupgradable
   where
 	backendupgradable = maybe False (\a -> a key) (canUpgradeKey backend)
 
diff --git a/Command/Mirror.hs b/Command/Mirror.hs
--- a/Command/Mirror.hs
+++ b/Command/Mirror.hs
@@ -7,7 +7,6 @@
 
 module Command.Mirror where
 
-import Common.Annex
 import Command
 import qualified Command.Move
 import qualified Command.Drop
diff --git a/Command/Move.hs b/Command/Move.hs
--- a/Command/Move.hs
+++ b/Command/Move.hs
@@ -7,7 +7,6 @@
 
 module Command.Move where
 
-import Common.Annex
 import Command
 import qualified Command.Drop
 import qualified Annex
diff --git a/Command/NotifyChanges.hs b/Command/NotifyChanges.hs
--- a/Command/NotifyChanges.hs
+++ b/Command/NotifyChanges.hs
@@ -7,7 +7,6 @@
 
 module Command.NotifyChanges where
 
-import Common.Annex
 import Command
 import Utility.DirWatcher
 import Utility.DirWatcher.Types
diff --git a/Command/NumCopies.hs b/Command/NumCopies.hs
--- a/Command/NumCopies.hs
+++ b/Command/NumCopies.hs
@@ -7,9 +7,8 @@
 
 module Command.NumCopies where
 
-import Common.Annex
-import qualified Annex
 import Command
+import qualified Annex
 import Annex.NumCopies
 import Types.Messages
 
diff --git a/Command/PreCommit.hs b/Command/PreCommit.hs
--- a/Command/PreCommit.hs
+++ b/Command/PreCommit.hs
@@ -9,7 +9,6 @@
 
 module Command.PreCommit where
 
-import Common.Annex
 import Command
 import Config
 import qualified Command.Add
diff --git a/Command/Proxy.hs b/Command/Proxy.hs
--- a/Command/Proxy.hs
+++ b/Command/Proxy.hs
@@ -7,7 +7,6 @@
 
 module Command.Proxy where
 
-import Common.Annex
 import Command
 import Config
 import Utility.Tmp
diff --git a/Command/ReKey.hs b/Command/ReKey.hs
--- a/Command/ReKey.hs
+++ b/Command/ReKey.hs
@@ -7,10 +7,8 @@
 
 module Command.ReKey where
 
-import Common.Annex
 import Command
 import qualified Annex
-import Types.Key
 import Annex.Content
 import Annex.Ingest
 import Annex.Link
diff --git a/Command/ReadPresentKey.hs b/Command/ReadPresentKey.hs
--- a/Command/ReadPresentKey.hs
+++ b/Command/ReadPresentKey.hs
@@ -7,10 +7,8 @@
 
 module Command.ReadPresentKey where
 
-import Common.Annex
 import Command
 import Logs.Location
-import Types.Key
 
 cmd :: Command
 cmd = noCommit $ 
diff --git a/Command/RecvKey.hs b/Command/RecvKey.hs
--- a/Command/RecvKey.hs
+++ b/Command/RecvKey.hs
@@ -7,7 +7,6 @@
 
 module Command.RecvKey where
 
-import Common.Annex
 import Command
 import Annex.Content
 import Annex.Action
diff --git a/Command/RegisterUrl.hs b/Command/RegisterUrl.hs
--- a/Command/RegisterUrl.hs
+++ b/Command/RegisterUrl.hs
@@ -9,11 +9,10 @@
 
 module Command.RegisterUrl where
 
-import Common.Annex
 import Command
 import Logs.Web
-import Annex.UUID
 import Command.FromKey (mkKey)
+import qualified Remote
 
 cmd :: Command
 cmd = notDirect $ notBareRepo $
@@ -53,5 +52,6 @@
 
 perform' :: Key -> URLString -> Annex Bool
 perform' key url = do
-	setUrlPresent webUUID key url
+	r <- Remote.claimingUrl url
+	setUrlPresent (Remote.uuid r) key (setDownloader' url r)
 	return True
diff --git a/Command/Reinit.hs b/Command/Reinit.hs
--- a/Command/Reinit.hs
+++ b/Command/Reinit.hs
@@ -7,11 +7,9 @@
 
 module Command.Reinit where
 
-import Common.Annex
 import Command
 import Annex.Init
 import Annex.UUID
-import Types.UUID
 import qualified Remote
 import qualified Annex.SpecialRemote
 	
diff --git a/Command/Reinject.hs b/Command/Reinject.hs
--- a/Command/Reinject.hs
+++ b/Command/Reinject.hs
@@ -7,7 +7,6 @@
 
 module Command.Reinject where
 
-import Common.Annex
 import Command
 import Logs.Location
 import Annex.Content
diff --git a/Command/RemoteDaemon.hs b/Command/RemoteDaemon.hs
--- a/Command/RemoteDaemon.hs
+++ b/Command/RemoteDaemon.hs
@@ -7,7 +7,6 @@
 
 module Command.RemoteDaemon where
 
-import Common.Annex
 import Command
 import RemoteDaemon.Core
 
diff --git a/Command/Repair.hs b/Command/Repair.hs
--- a/Command/Repair.hs
+++ b/Command/Repair.hs
@@ -7,7 +7,6 @@
 
 module Command.Repair where
 
-import Common.Annex
 import Command
 import qualified Annex
 import qualified Git.Repair
diff --git a/Command/ResolveMerge.hs b/Command/ResolveMerge.hs
--- a/Command/ResolveMerge.hs
+++ b/Command/ResolveMerge.hs
@@ -7,7 +7,6 @@
 
 module Command.ResolveMerge where
 
-import Common.Annex
 import Command
 import qualified Git
 import Git.Sha
diff --git a/Command/RmUrl.hs b/Command/RmUrl.hs
--- a/Command/RmUrl.hs
+++ b/Command/RmUrl.hs
@@ -7,10 +7,8 @@
 
 module Command.RmUrl where
 
-import Common.Annex
 import Command
 import Logs.Web
-import Annex.UUID
 import qualified Remote
 
 cmd :: Command
@@ -31,8 +29,5 @@
 cleanup :: String -> Key -> CommandCleanup
 cleanup url key = do
 	r <- Remote.claimingUrl url
-	let url' = if Remote.uuid r == webUUID
-		then url
-		else setDownloader url OtherDownloader
-	setUrlMissing (Remote.uuid r) key url'
+	setUrlMissing (Remote.uuid r) key (setDownloader' url r)
 	return True
diff --git a/Command/Schedule.hs b/Command/Schedule.hs
--- a/Command/Schedule.hs
+++ b/Command/Schedule.hs
@@ -7,9 +7,8 @@
 
 module Command.Schedule where
 
-import Common.Annex
-import qualified Annex
 import Command
+import qualified Annex
 import qualified Remote
 import Logs.Schedule
 import Types.ScheduledActivity
diff --git a/Command/SendKey.hs b/Command/SendKey.hs
--- a/Command/SendKey.hs
+++ b/Command/SendKey.hs
@@ -7,7 +7,6 @@
 
 module Command.SendKey where
 
-import Common.Annex
 import Command
 import Annex.Content
 import Annex
diff --git a/Command/SetKey.hs b/Command/SetKey.hs
--- a/Command/SetKey.hs
+++ b/Command/SetKey.hs
@@ -7,11 +7,9 @@
 
 module Command.SetKey where
 
-import Common.Annex
 import Command
 import Logs.Location
 import Annex.Content
-import Types.Key
 
 cmd :: Command
 cmd = command "setkey" SectionPlumbing "sets annexed content for a key"
diff --git a/Command/SetPresentKey.hs b/Command/SetPresentKey.hs
--- a/Command/SetPresentKey.hs
+++ b/Command/SetPresentKey.hs
@@ -7,11 +7,9 @@
 
 module Command.SetPresentKey where
 
-import Common.Annex
 import Command
 import Logs.Location
 import Logs.Presence.Pure
-import Types.Key
 
 cmd :: Command
 cmd = noCommit $ 
diff --git a/Command/Smudge.hs b/Command/Smudge.hs
--- a/Command/Smudge.hs
+++ b/Command/Smudge.hs
@@ -7,7 +7,6 @@
 
 module Command.Smudge where
 
-import Common.Annex
 import Command
 import Annex.Content
 import Annex.Link
diff --git a/Command/Status.hs b/Command/Status.hs
--- a/Command/Status.hs
+++ b/Command/Status.hs
@@ -7,7 +7,6 @@
 
 module Command.Status where
 
-import Common.Annex
 import Command
 import Annex.CatFile
 import Annex.Content.Direct
@@ -17,10 +16,11 @@
 import Git.FilePath
 
 cmd :: Command
-cmd = notBareRepo $ noCommit $ noMessages $ withGlobalOptions [jsonOption] $
-	command "status" SectionCommon
-		"show the working tree status"
-		paramPaths (withParams seek)
+cmd = notBareRepo $ noCommit $ noMessages $
+	withGlobalOptions [jsonOption] $
+		command "status" SectionCommon
+			"show the working tree status"
+			paramPaths (withParams seek)
 
 seek :: CmdParams -> CommandSeek
 seek = withWords start
diff --git a/Command/Sync.hs b/Command/Sync.hs
--- a/Command/Sync.hs
+++ b/Command/Sync.hs
@@ -19,7 +19,6 @@
 	updateSyncBranch,
 ) where
 
-import Common.Annex
 import Command
 import qualified Annex
 import qualified Annex.Branch
diff --git a/Command/Test.hs b/Command/Test.hs
--- a/Command/Test.hs
+++ b/Command/Test.hs
@@ -7,9 +7,7 @@
 
 module Command.Test where
 
-import Common
 import Command
-import Messages
 import Types.Test
 
 cmd :: Parser TestOptions -> Maybe TestRunner -> Command
diff --git a/Command/TestRemote.hs b/Command/TestRemote.hs
--- a/Command/TestRemote.hs
+++ b/Command/TestRemote.hs
@@ -7,13 +7,10 @@
 
 module Command.TestRemote where
 
-import Common
 import Command
 import qualified Annex
 import qualified Remote
 import qualified Types.Remote as Remote
-import Types
-import Types.Key (key2file, keyBackendName, keySize)
 import Types.Backend (getKey, verifyKeyContent)
 import Types.KeySource
 import Annex.Content
@@ -23,10 +20,8 @@
 import Utility.Metered
 import Utility.DataUnits
 import Utility.CopyFile
-import Messages
 import Types.Messages
 import Remote.Helper.Chunked
-import Locations
 import Git.Types
 
 import Test.Tasty
diff --git a/Command/TransferInfo.hs b/Command/TransferInfo.hs
--- a/Command/TransferInfo.hs
+++ b/Command/TransferInfo.hs
@@ -7,11 +7,9 @@
 
 module Command.TransferInfo where
 
-import Common.Annex
 import Command
 import Annex.Content
 import Logs.Transfer
-import Types.Key
 import qualified CmdLine.GitAnnexShell.Fields as Fields
 import Utility.Metered
 
diff --git a/Command/TransferKey.hs b/Command/TransferKey.hs
--- a/Command/TransferKey.hs
+++ b/Command/TransferKey.hs
@@ -7,7 +7,6 @@
 
 module Command.TransferKey where
 
-import Common.Annex
 import Command
 import Annex.Content
 import Logs.Location
diff --git a/Command/TransferKeys.hs b/Command/TransferKeys.hs
--- a/Command/TransferKeys.hs
+++ b/Command/TransferKeys.hs
@@ -9,13 +9,11 @@
 
 module Command.TransferKeys where
 
-import Common.Annex
 import Command
 import Annex.Content
 import Logs.Location
 import Annex.Transfer
 import qualified Remote
-import Types.Key
 import Utility.SimpleProtocol (dupIoHandles)
 import Git.Types (RemoteName)
 
diff --git a/Command/Trust.hs b/Command/Trust.hs
--- a/Command/Trust.hs
+++ b/Command/Trust.hs
@@ -7,7 +7,6 @@
 
 module Command.Trust where
 
-import Common.Annex
 import Command
 import qualified Remote
 import Types.TrustLevel
diff --git a/Command/Unannex.hs b/Command/Unannex.hs
--- a/Command/Unannex.hs
+++ b/Command/Unannex.hs
@@ -9,7 +9,6 @@
 
 module Command.Unannex where
 
-import Common.Annex
 import Command
 import Config
 import qualified Annex
diff --git a/Command/Undo.hs b/Command/Undo.hs
--- a/Command/Undo.hs
+++ b/Command/Undo.hs
@@ -7,7 +7,6 @@
 
 module Command.Undo where
 
-import Common.Annex
 import Command
 import Config
 import Annex.Direct
diff --git a/Command/Ungroup.hs b/Command/Ungroup.hs
--- a/Command/Ungroup.hs
+++ b/Command/Ungroup.hs
@@ -7,7 +7,6 @@
 
 module Command.Ungroup where
 
-import Common.Annex
 import Command
 import qualified Remote
 import Logs.Group
diff --git a/Command/Uninit.hs b/Command/Uninit.hs
--- a/Command/Uninit.hs
+++ b/Command/Uninit.hs
@@ -7,9 +7,8 @@
 
 module Command.Uninit where
 
-import Common.Annex
-import qualified Annex
 import Command
+import qualified Annex
 import qualified Git
 import qualified Git.Command
 import qualified Command.Unannex
diff --git a/Command/Unlock.hs b/Command/Unlock.hs
--- a/Command/Unlock.hs
+++ b/Command/Unlock.hs
@@ -7,7 +7,6 @@
 
 module Command.Unlock where
 
-import Common.Annex
 import Command
 import Annex.Content
 import Annex.CatFile
diff --git a/Command/Unused.hs b/Command/Unused.hs
--- a/Command/Unused.hs
+++ b/Command/Unused.hs
@@ -11,7 +11,6 @@
 
 import qualified Data.Map as M
 
-import Common.Annex
 import Command
 import Logs.Unused
 import Annex.Content
@@ -28,7 +27,6 @@
 import qualified Annex.Branch
 import Annex.Link
 import Annex.CatFile
-import Types.Key
 import Types.RefSpec
 import Git.Types
 import Git.Sha
diff --git a/Command/Upgrade.hs b/Command/Upgrade.hs
--- a/Command/Upgrade.hs
+++ b/Command/Upgrade.hs
@@ -7,7 +7,6 @@
 
 module Command.Upgrade where
 
-import Common.Annex
 import Command
 import Upgrade
 
diff --git a/Command/VAdd.hs b/Command/VAdd.hs
--- a/Command/VAdd.hs
+++ b/Command/VAdd.hs
@@ -7,7 +7,6 @@
 
 module Command.VAdd where
 
-import Common.Annex
 import Command
 import Annex.View
 import Command.View (checkoutViewBranch)
diff --git a/Command/VCycle.hs b/Command/VCycle.hs
--- a/Command/VCycle.hs
+++ b/Command/VCycle.hs
@@ -7,7 +7,6 @@
 
 module Command.VCycle where
 
-import Common.Annex
 import Command
 import Annex.View
 import Types.View
diff --git a/Command/VFilter.hs b/Command/VFilter.hs
--- a/Command/VFilter.hs
+++ b/Command/VFilter.hs
@@ -7,7 +7,6 @@
 
 module Command.VFilter where
 
-import Common.Annex
 import Command
 import Annex.View
 import Command.View (paramView, checkoutViewBranch)
diff --git a/Command/VPop.hs b/Command/VPop.hs
--- a/Command/VPop.hs
+++ b/Command/VPop.hs
@@ -7,7 +7,6 @@
 
 module Command.VPop where
 
-import Common.Annex
 import Command
 import qualified Git
 import qualified Git.Command
diff --git a/Command/Version.hs b/Command/Version.hs
--- a/Command/Version.hs
+++ b/Command/Version.hs
@@ -7,7 +7,6 @@
 
 module Command.Version where
 
-import Common.Annex
 import Command
 import qualified Build.SysConfig as SysConfig
 import Annex.Version
diff --git a/Command/Vicfg.hs b/Command/Vicfg.hs
--- a/Command/Vicfg.hs
+++ b/Command/Vicfg.hs
@@ -16,7 +16,6 @@
 import Data.Char (isSpace)
 import Data.Default
 
-import Common.Annex
 import Command
 import Annex.Perms
 import Types.TrustLevel
diff --git a/Command/View.hs b/Command/View.hs
--- a/Command/View.hs
+++ b/Command/View.hs
@@ -7,7 +7,6 @@
 
 module Command.View where
 
-import Common.Annex
 import Command
 import qualified Git
 import qualified Git.Command
diff --git a/Command/Wanted.hs b/Command/Wanted.hs
--- a/Command/Wanted.hs
+++ b/Command/Wanted.hs
@@ -7,9 +7,8 @@
 
 module Command.Wanted where
 
-import Common.Annex
-import qualified Annex
 import Command
+import qualified Annex
 import qualified Remote
 import Logs.PreferredContent
 import Types.Messages
diff --git a/Command/Watch.hs b/Command/Watch.hs
--- a/Command/Watch.hs
+++ b/Command/Watch.hs
@@ -7,9 +7,8 @@
 
 module Command.Watch where
 
-import Common.Annex
-import Assistant
 import Command
+import Assistant
 import Utility.HumanTime
 
 cmd :: Command
diff --git a/Command/WebApp.hs b/Command/WebApp.hs
--- a/Command/WebApp.hs
+++ b/Command/WebApp.hs
@@ -9,7 +9,6 @@
 
 module Command.WebApp where
 
-import Common.Annex
 import Command
 import Assistant
 import Assistant.Common
diff --git a/Command/Whereis.hs b/Command/Whereis.hs
--- a/Command/Whereis.hs
+++ b/Command/Whereis.hs
@@ -1,18 +1,18 @@
 {- git-annex command
  -
- - Copyright 2010-2014 Joey Hess <id@joeyh.name>
+ - Copyright 2010-2016 Joey Hess <id@joeyh.name>
  -
  - Licensed under the GNU GPL version 3 or higher.
  -}
 
 module Command.Whereis where
 
-import Common.Annex
 import Command
 import Remote
 import Logs.Trust
 import Logs.Web
 import Remote.Web (getWebUrls)
+import Annex.UUID
 
 import qualified Data.Map as M
 
@@ -25,20 +25,26 @@
 data WhereisOptions = WhereisOptions
 	{ whereisFiles :: CmdParams
 	, keyOptions :: Maybe KeyOptions
+	, batchOption :: BatchMode
 	}
 
 optParser :: CmdParamsDesc -> Parser WhereisOptions
 optParser desc = WhereisOptions
 	<$> cmdParams desc
 	<*> optional (parseKeyOptions False)
+	<*> parseBatchOption
 
 seek :: WhereisOptions -> CommandSeek
 seek o = do
 	m <- remoteMap id
-	withKeyOptions (keyOptions o) False
-		(startKeys m)
-		(withFilesInGit $ whenAnnexed $ start m)
-		(whereisFiles o)
+	let go = whenAnnexed $ start m
+	case batchOption o of
+		Batch -> batchFiles go
+		NoBatch -> 
+			withKeyOptions (keyOptions o) False
+				(startKeys m)
+				(withFilesInGit go)
+				(whereisFiles o)
 
 start :: M.Map UUID Remote -> FilePath -> Key -> CommandStart
 start remotemap file key = start' remotemap key (Just file)
@@ -54,32 +60,39 @@
 perform :: M.Map UUID Remote -> Key -> CommandPerform
 perform remotemap key = do
 	locations <- keyLocations key
+	urls <- getUUIDUrls key locations remotemap
 	(untrustedlocations, safelocations) <- trustPartition UnTrusted locations
 	let num = length safelocations
 	showNote $ show num ++ " " ++ copiesplural num
-	pp <- prettyPrintUUIDs "whereis" safelocations
+	pp <- ppwhereis "whereis" safelocations urls
 	unless (null safelocations) $ showLongNote pp
-	pp' <- prettyPrintUUIDs "untrusted" untrustedlocations
+	pp' <- ppwhereis "untrusted" untrustedlocations urls
 	unless (null untrustedlocations) $ showLongNote $ untrustedheader ++ pp'
 
-	-- Since other remotes than the web remote can set urls
-	-- where a key can be downloaded, get and show all such urls
-	-- as a special case.
-	showRemoteUrls "web" =<< getWebUrls key
-	forM_ (mapMaybe (`M.lookup` remotemap) locations) $
-		performRemoteUrls key
+	mapM_ (showRemoteUrls remotemap) urls
+
 	if null safelocations then stop else next $ return True
   where
 	copiesplural 1 = "copy"
 	copiesplural _ = "copies"
 	untrustedheader = "The following untrusted locations may also have copies:\n"
+	ppwhereis h ls urls = do
+		descm <- uuidDescriptions
+		let urlvals = map (\(u, us) -> (u, Just us)) $
+			filter (\(u,_) -> u `elem` ls) urls
+		prettyPrintUUIDsWith (Just "urls") h descm (const Nothing) urlvals
 
-performRemoteUrls :: Key -> Remote -> Annex () 
-performRemoteUrls key remote = do
-	ls <- (++)
+getUUIDUrls :: Key -> [UUID] -> M.Map UUID Remote -> Annex [(UUID, [URLString])]
+getUUIDUrls key uuids remotemap = forM uuids $ \uu -> (,)
+	<$> pure uu
+	<*> maybe (pure []) (getRemoteUrls key) (M.lookup uu remotemap)
+
+getRemoteUrls :: Key -> Remote -> Annex [URLString]
+getRemoteUrls key remote
+	| uuid remote == webUUID = getWebUrls key
+	| otherwise = (++)
 		<$> askremote
 		<*> claimedurls
-	showRemoteUrls (name remote) ls
   where
 	askremote = maybe (pure []) (flip id key) (whereisKey remote)
 	claimedurls = do
@@ -89,10 +102,11 @@
 			<$> getUrls key
 		filterM (\u -> (==) <$> pure remote <*> claimingUrl u) us
 
-showRemoteUrls :: String -> [String] -> Annex ()
-showRemoteUrls nm us
-	| null us = return ()
-	| otherwise = do
-		let ls = unlines $ map (\u -> nm ++ ": " ++ u) us 
-		outputMessage noop ('\n' : indent ls ++ "\n")
-		maybeShowJSON [("urls", us)]
+showRemoteUrls :: M.Map UUID Remote -> (UUID, [URLString]) -> Annex ()
+showRemoteUrls remotemap (uu, us)
+	| null us = noop
+	| otherwise = case M.lookup uu remotemap of
+		Just r -> do
+			let ls = unlines $ map (\u -> name r ++ ": " ++ u) us 
+			outputMessage noop ('\n' : indent ls ++ "\n")
+		Nothing -> noop
diff --git a/Command/XMPPGit.hs b/Command/XMPPGit.hs
--- a/Command/XMPPGit.hs
+++ b/Command/XMPPGit.hs
@@ -7,7 +7,6 @@
 
 module Command.XMPPGit where
 
-import Common.Annex
 import Command
 import Assistant.XMPP.Git
 
diff --git a/Common/Annex.hs b/Common/Annex.hs
deleted file mode 100644
--- a/Common/Annex.hs
+++ /dev/null
@@ -1,8 +0,0 @@
-module Common.Annex (module X) where
-
-import Common as X
-import Types as X
-import Types.UUID as X (toUUID, fromUUID)
-import Annex as X (gitRepo, inRepo, fromRepo, calcRepo)
-import Locations as X
-import Messages as X
diff --git a/Config.hs b/Config.hs
--- a/Config.hs
+++ b/Config.hs
@@ -9,7 +9,7 @@
 
 module Config where
 
-import Common.Annex
+import Annex.Common
 import qualified Git
 import qualified Git.Config
 import qualified Git.Command
diff --git a/Creds.hs b/Creds.hs
--- a/Creds.hs
+++ b/Creds.hs
@@ -19,7 +19,7 @@
 	includeCredsInfo,
 ) where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import Types.Creds
 import Annex.Perms
diff --git a/Crypto.hs b/Crypto.hs
--- a/Crypto.hs
+++ b/Crypto.hs
@@ -38,9 +38,8 @@
 import qualified Data.Map as M
 import Control.Monad.IO.Class
 
-import Common.Annex
+import Annex.Common
 import qualified Utility.Gpg as Gpg
-import Types.Key
 import Types.Crypto
 import Types.Remote
 
diff --git a/Database/Fsck.hs b/Database/Fsck.hs
--- a/Database/Fsck.hs
+++ b/Database/Fsck.hs
@@ -22,13 +22,10 @@
 
 import Database.Types
 import qualified Database.Queue as H
-import Locations
+import Annex.Locations
 import Utility.PosixFiles
 import Utility.Exception
-import Common
-import Annex
-import Types.Key
-import Types.UUID
+import Annex.Common
 import Annex.Perms
 import Annex.LockFile
 
diff --git a/Database/Keys.hs b/Database/Keys.hs
--- a/Database/Keys.hs
+++ b/Database/Keys.hs
@@ -24,8 +24,8 @@
 import Database.Types
 import Database.Keys.Handle
 import qualified Database.Queue as H
-import Locations
-import Common.Annex hiding (delete)
+import Annex.Locations
+import Annex.Common hiding (delete)
 import qualified Annex
 import Annex.Perms
 import Annex.LockFile
diff --git a/INSTALL b/INSTALL
--- a/INSTALL
+++ b/INSTALL
@@ -10,7 +10,7 @@
 &nbsp;&nbsp;[[Ubuntu]]            | `apt-get install git-annex`
 &nbsp;&nbsp;[[Fedora]]            | `yum install git-annex`
 &nbsp;&nbsp;[[FreeBSD]]           | `pkg install hs-git-annex`
-&nbsp;&nbsp;[[ArchLinux]]         | `yaourt -Sy git-annex-bin`
+&nbsp;&nbsp;[[ArchLinux]]         | `pacman -S git-annex`
 &nbsp;&nbsp;[[NixOS]]             | `nix-env -i git-annex`
 &nbsp;&nbsp;[[Gentoo]]            | `emerge git-annex`
 &nbsp;&nbsp;[[Void]]            | `xbps-install git-annex`
diff --git a/Limit.hs b/Limit.hs
--- a/Limit.hs
+++ b/Limit.hs
@@ -7,7 +7,7 @@
 
 module Limit where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import qualified Utility.Matcher
 import qualified Remote
@@ -18,7 +18,6 @@
 import Logs.Trust
 import Annex.NumCopies
 import Types.TrustLevel
-import Types.Key
 import Types.Group
 import Types.FileMatcher
 import Types.MetaData
@@ -74,21 +73,22 @@
 addInclude = addLimit . limitInclude
 
 limitInclude :: MkLimit Annex
-limitInclude glob = Right $ const $ return . matchGlobFile glob
+limitInclude glob = Right $ const $ matchGlobFile glob
 
 {- Add a limit to skip files that match the glob. -}
 addExclude :: String -> Annex ()
 addExclude = addLimit . limitExclude
 
 limitExclude :: MkLimit Annex
-limitExclude glob = Right $ const $ return . not . matchGlobFile glob
+limitExclude glob = Right $ const $ not <$$> matchGlobFile glob
 
-matchGlobFile :: String -> MatchInfo -> Bool
+matchGlobFile :: String -> MatchInfo -> Annex Bool
 matchGlobFile glob = go
 	where
 		cglob = compileGlob glob CaseSensative -- memoized
-		go (MatchingKey _) = False
-		go (MatchingFile fi) = matchGlob cglob (matchFile fi)
+		go (MatchingKey _) = pure False
+		go (MatchingFile fi) = pure $ matchGlob cglob (matchFile fi)
+		go (MatchingInfo af _ _) = matchGlob cglob <$> getInfo af
 
 {- Adds a limit to skip files not believed to be present
  - in a specfied repository. Optionally on a prior date. -}
@@ -134,8 +134,10 @@
 limitInDir :: FilePath -> MkLimit Annex
 limitInDir dir = const $ Right $ const go
   where
-	go (MatchingFile fi) = return $ elem dir $ splitPath $ takeDirectory $ matchFile fi
+	go (MatchingFile fi) = checkf $ matchFile fi
 	go (MatchingKey _) = return False
+	go (MatchingInfo af _ _) = checkf =<< getInfo af
+	checkf = return . elem dir . splitPath . takeDirectory
 
 {- Adds a limit to skip files not believed to have the specified number
  - of copies. -}
@@ -178,8 +180,9 @@
 		NumCopies numcopies <- if approx
 			then approxNumCopies
 			else case mi of
-				MatchingKey _ -> approxNumCopies
 				MatchingFile fi -> getGlobalFileNumCopies $ matchFile fi
+				MatchingKey _ -> approxNumCopies
+				MatchingInfo _ _ _ -> approxNumCopies
 		us <- filter (`S.notMember` notpresent)
 			<$> (trustExclude UnTrusted =<< Remote.keyLocations key)
 		return $ numcopies - length us >= needed
@@ -193,6 +196,9 @@
 limitUnused :: MatchFiles Annex
 limitUnused _ (MatchingFile _) = return False
 limitUnused _ (MatchingKey k) = S.member k <$> unusedKeys
+limitUnused _ (MatchingInfo _ ak _) = do
+	k <- getInfo ak
+	S.member k <$> unusedKeys
 
 {- Limit that matches any version of any file. -}
 limitAnything :: MatchFiles Annex
@@ -241,6 +247,8 @@
   where
 	go sz _ (MatchingFile fi) = lookupFileKey fi >>= check fi sz
 	go sz _ (MatchingKey key) = checkkey sz key
+	go sz _ (MatchingInfo _ _ as) =
+		getInfo as >>= \sz' -> return (Just sz' `vs` Just sz)
 	checkkey sz key = return $ keySize key `vs` Just sz
 	check _ sz (Just key) = checkkey sz key
 	check fi sz Nothing = do
@@ -282,3 +290,4 @@
 checkKey :: (Key -> Annex Bool) -> MatchInfo -> Annex Bool
 checkKey a (MatchingFile fi) = lookupFileKey fi >>= maybe (return False) a
 checkKey a (MatchingKey k) = a k
+checkKey a (MatchingInfo _ ak _) = a =<< getInfo ak
diff --git a/Limit/Wanted.hs b/Limit/Wanted.hs
--- a/Limit/Wanted.hs
+++ b/Limit/Wanted.hs
@@ -7,7 +7,7 @@
 
 module Limit.Wanted where
 
-import Common.Annex
+import Annex.Common
 import Annex.Wanted
 import Limit
 import Types.FileMatcher
@@ -21,3 +21,4 @@
 checkWant :: (Maybe FilePath -> Annex Bool) -> MatchInfo -> Annex Bool
 checkWant a (MatchingFile fi) = a (Just $ matchFile fi)
 checkWant _ (MatchingKey _) = return False
+checkWant _ (MatchingInfo {}) = return False
diff --git a/Locations.hs b/Locations.hs
deleted file mode 100644
--- a/Locations.hs
+++ /dev/null
@@ -1,476 +0,0 @@
-{- git-annex file locations
- -
- - Copyright 2010-2015 Joey Hess <id@joeyh.name>
- -
- - Licensed under the GNU GPL version 3 or higher.
- -}
-
-module Locations (
-	keyFile,
-	fileKey,
-	keyPaths,
-	keyPath,
-	annexDir,
-	objectDir,
-	gitAnnexLocation,
-	gitAnnexLocationDepth,
-	gitAnnexLink,
-	gitAnnexContentLock,
-	gitAnnexMapping,
-	gitAnnexInodeCache,
-	gitAnnexInodeSentinal,
-	gitAnnexInodeSentinalCache,
-	annexLocations,
-	gitAnnexDir,
-	gitAnnexObjectDir,
-	gitAnnexTmpMiscDir,
-	gitAnnexTmpObjectDir,
-	gitAnnexTmpObjectLocation,
-	gitAnnexBadDir,
-	gitAnnexBadLocation,
-	gitAnnexUnusedLog,
-	gitAnnexKeysDb,
-	gitAnnexKeysDbLock,
-	gitAnnexFsckState,
-	gitAnnexFsckDbDir,
-	gitAnnexFsckDbLock,
-	gitAnnexFsckResultsLog,
-	gitAnnexScheduleState,
-	gitAnnexTransferDir,
-	gitAnnexCredsDir,
-	gitAnnexWebCertificate,
-	gitAnnexWebPrivKey,
-	gitAnnexFeedStateDir,
-	gitAnnexFeedState,
-	gitAnnexMergeDir,
-	gitAnnexJournalDir,
-	gitAnnexJournalLock,
-	gitAnnexPreCommitLock,
-	gitAnnexMergeLock,
-	gitAnnexIndex,
-	gitAnnexIndexStatus,
-	gitAnnexViewIndex,
-	gitAnnexViewLog,
-	gitAnnexIgnoredRefs,
-	gitAnnexPidFile,
-	gitAnnexPidLockFile,
-	gitAnnexDaemonStatusFile,
-	gitAnnexLogFile,
-	gitAnnexFuzzTestLogFile,
-	gitAnnexHtmlShim,
-	gitAnnexUrlFile,
-	gitAnnexTmpCfgFile,
-	gitAnnexSshDir,
-	gitAnnexRemotesDir,
-	gitAnnexAssistantDefaultDir,
-	isLinkToAnnex,
-	HashLevels(..),
-	hashDirMixed,
-	hashDirLower,
-	preSanitizeKeyName,
-
-	prop_isomorphic_fileKey
-) where
-
-import Data.Char
-import Data.Default
-
-import Common
-import Types.GitConfig
-import Types.Key
-import Types.UUID
-import Types.Difference
-import qualified Git
-import Git.FilePath
-import Annex.DirHashes
-import Annex.Fixup
-
-{- Conventions:
- -
- - Functions ending in "Dir" should always return values ending with a
- - trailing path separator. Most code does not rely on that, but a few
- - things do. 
- -
- - Everything else should not end in a trailing path sepatator. 
- -
- - Only functions (with names starting with "git") that build a path
- - based on a git repository should return full path relative to the git
- - repository. Everything else returns path segments.
- -}
-
-{- The directory git annex uses for local state, relative to the .git
- - directory -}
-annexDir :: FilePath
-annexDir = addTrailingPathSeparator "annex"
-
-{- The directory git annex uses for locally available object content,
- - relative to the .git directory -}
-objectDir :: FilePath
-objectDir = addTrailingPathSeparator $ annexDir </> "objects"
-
-{- Annexed file's possible locations relative to the .git directory.
- - There are two different possibilities, using different hashes.
- -
- - Also, some repositories have a Difference in hash directory depth.
- -}
-annexLocations :: GitConfig -> Key -> [FilePath]
-annexLocations config key = map (annexLocation config key) dirHashes
-
-annexLocation :: GitConfig -> Key -> (HashLevels -> Hasher) -> FilePath
-annexLocation config key hasher = objectDir </> keyPath key (hasher $ objectHashLevels config)
-
-{- Number of subdirectories from the gitAnnexObjectDir
- - to the gitAnnexLocation. -}
-gitAnnexLocationDepth :: GitConfig -> Int
-gitAnnexLocationDepth config = hashlevels + 1
-  where
-	HashLevels hashlevels = objectHashLevels config
-
-{- Annexed object's location in a repository.
- -
- - When there are multiple possible locations, returns the one where the
- - file is actually present.
- -
- - When the file is not present, returns the location where the file should
- - be stored.
- -
- - This does not take direct mode into account, so in direct mode it is not
- - the actual location of the file's content.
- -}
-gitAnnexLocation :: Key -> Git.Repo -> GitConfig -> IO FilePath
-gitAnnexLocation key r config = gitAnnexLocation' key r config (annexCrippledFileSystem config) doesFileExist (Git.localGitDir r)
-gitAnnexLocation' :: Key -> Git.Repo -> GitConfig -> Bool -> (FilePath -> IO Bool) -> FilePath -> IO FilePath
-gitAnnexLocation' key r config crippled checker gitdir
-	{- Bare repositories default to hashDirLower for new
-	 - content, as it's more portable.
-	 -
-	 - Repositories on filesystems that are crippled also use
-	 - hashDirLower, since they do not use symlinks and it's
-	 - more portable.
-	 -}
-	| Git.repoIsLocalBare r || crippled =
-		check $ map inrepo $ annexLocations config key
-	| hasDifference ObjectHashLower (annexDifferences config) =
-		return $ inrepo $ annexLocation config key hashDirLower
-	{- Non-bare repositories only use hashDirMixed, so
-	 - don't need to do any work to check if the file is
-	 - present. -}
-	| otherwise = return $ inrepo $ annexLocation config key hashDirMixed
-  where
-	inrepo d = gitdir </> d
-	check locs@(l:_) = fromMaybe l <$> firstM checker locs
-	check [] = error "internal"
-
-{- Calculates a symlink target to link a file to an annexed object. -}
-gitAnnexLink :: FilePath -> Key -> Git.Repo -> GitConfig -> IO FilePath
-gitAnnexLink file key r config = do
-	currdir <- getCurrentDirectory
-	let absfile = fromMaybe whoops $ absNormPathUnix currdir file
-	let gitdir = getgitdir currdir
-	loc <- gitAnnexLocation' key r config False (\_ -> return True) gitdir
-	toInternalGitPath <$> relPathDirToFile (parentDir absfile) loc
-  where
-	getgitdir currdir
-		{- This special case is for git submodules on filesystems not
-		 - supporting symlinks; generate link target that will
-		 - work portably. -}
-		| not (coreSymlinks config) && needsSubmoduleFixup r =
-			fromMaybe whoops $ absNormPathUnix currdir $
-				Git.repoPath r </> ".git"
-		| otherwise = Git.localGitDir r
-	whoops = error $ "unable to normalize " ++ file
-
-{- File used to lock a key's content. -}
-gitAnnexContentLock :: Key -> Git.Repo -> GitConfig -> IO FilePath
-gitAnnexContentLock key r config = do
-	loc <- gitAnnexLocation key r config
-	return $ loc ++ ".lck"
-
-{- File that maps from a key to the file(s) in the git repository.
- - Used in direct mode. -}
-gitAnnexMapping :: Key -> Git.Repo -> GitConfig -> IO FilePath
-gitAnnexMapping key r config = do
-	loc <- gitAnnexLocation key r config
-	return $ loc ++ ".map"
-
-{- File that caches information about a key's content, used to determine
- - if a file has changed.
- - Used in direct mode. -}
-gitAnnexInodeCache :: Key -> Git.Repo -> GitConfig -> IO FilePath
-gitAnnexInodeCache key r config  = do
-	loc <- gitAnnexLocation key r config
-	return $ loc ++ ".cache"
-
-gitAnnexInodeSentinal :: Git.Repo -> FilePath
-gitAnnexInodeSentinal r = gitAnnexDir r </> "sentinal"
-
-gitAnnexInodeSentinalCache :: Git.Repo -> FilePath
-gitAnnexInodeSentinalCache r = gitAnnexInodeSentinal r ++ ".cache"
-
-{- The annex directory of a repository. -}
-gitAnnexDir :: Git.Repo -> FilePath
-gitAnnexDir r = addTrailingPathSeparator $ Git.localGitDir r </> annexDir
-
-{- The part of the annex directory where file contents are stored. -}
-gitAnnexObjectDir :: Git.Repo -> FilePath
-gitAnnexObjectDir r = addTrailingPathSeparator $ Git.localGitDir r </> objectDir
-
-{- .git/annex/misctmp/ is used for random temp files -}
-gitAnnexTmpMiscDir :: Git.Repo -> FilePath
-gitAnnexTmpMiscDir r = addTrailingPathSeparator $ gitAnnexDir r </> "misctmp"
-
-{- .git/annex/tmp/ is used for temp files for key's contents -}
-gitAnnexTmpObjectDir :: Git.Repo -> FilePath
-gitAnnexTmpObjectDir r = addTrailingPathSeparator $ gitAnnexDir r </> "tmp"
-
-{- The temp file to use for a given key's content. -}
-gitAnnexTmpObjectLocation :: Key -> Git.Repo -> FilePath
-gitAnnexTmpObjectLocation key r = gitAnnexTmpObjectDir r </> keyFile key
-
-{- .git/annex/bad/ is used for bad files found during fsck -}
-gitAnnexBadDir :: Git.Repo -> FilePath
-gitAnnexBadDir r = addTrailingPathSeparator $ gitAnnexDir r </> "bad"
-
-{- The bad file to use for a given key. -}
-gitAnnexBadLocation :: Key -> Git.Repo -> FilePath
-gitAnnexBadLocation key r = gitAnnexBadDir r </> keyFile key
-
-{- .git/annex/foounused is used to number possibly unused keys -}
-gitAnnexUnusedLog :: FilePath -> Git.Repo -> FilePath
-gitAnnexUnusedLog prefix r = gitAnnexDir r </> (prefix ++ "unused")
-
-{- .git/annex/keys/ contains a database of information about keys. -}
-gitAnnexKeysDb :: Git.Repo -> FilePath
-gitAnnexKeysDb r = gitAnnexDir r </> "keys"
-
-{- Lock file for the keys database. -}
-gitAnnexKeysDbLock :: Git.Repo -> FilePath
-gitAnnexKeysDbLock r = gitAnnexKeysDb r ++ ".lck"
-
-{- .git/annex/fsck/uuid/ is used to store information about incremental
- - fscks. -}
-gitAnnexFsckDir :: UUID -> Git.Repo -> FilePath
-gitAnnexFsckDir u r = gitAnnexDir r </> "fsck" </> fromUUID u
-
-{- used to store information about incremental fscks. -}
-gitAnnexFsckState :: UUID -> Git.Repo -> FilePath
-gitAnnexFsckState u r = gitAnnexFsckDir u r </> "state"
-
-{- Directory containing database used to record fsck info. -}
-gitAnnexFsckDbDir :: UUID -> Git.Repo -> FilePath
-gitAnnexFsckDbDir u r = gitAnnexFsckDir u r </> "db"
-
-{- Lock file for the fsck database. -}
-gitAnnexFsckDbLock :: UUID -> Git.Repo -> FilePath
-gitAnnexFsckDbLock u r = gitAnnexFsckDir u r </> "fsck.lck"
-
-{- .git/annex/fsckresults/uuid is used to store results of git fscks -}
-gitAnnexFsckResultsLog :: UUID -> Git.Repo -> FilePath
-gitAnnexFsckResultsLog u r = gitAnnexDir r </> "fsckresults" </> fromUUID u
-
-{- .git/annex/schedulestate is used to store information about when
- - scheduled jobs were last run. -}
-gitAnnexScheduleState :: Git.Repo -> FilePath
-gitAnnexScheduleState r = gitAnnexDir r </> "schedulestate"
-
-{- .git/annex/creds/ is used to store credentials to access some special
- - remotes. -}
-gitAnnexCredsDir :: Git.Repo -> FilePath
-gitAnnexCredsDir r = addTrailingPathSeparator $ gitAnnexDir r </> "creds"
-
-{- .git/annex/certificate.pem and .git/annex/key.pem are used by the webapp
- - when HTTPS is enabled -}
-gitAnnexWebCertificate :: Git.Repo -> FilePath
-gitAnnexWebCertificate r = gitAnnexDir r </> "certificate.pem"
-gitAnnexWebPrivKey :: Git.Repo -> FilePath
-gitAnnexWebPrivKey r = gitAnnexDir r </> "privkey.pem"
-
-{- .git/annex/feeds/ is used to record per-key (url) state by importfeeds -}
-gitAnnexFeedStateDir :: Git.Repo -> FilePath
-gitAnnexFeedStateDir r = addTrailingPathSeparator $ gitAnnexDir r </> "feedstate"
-
-gitAnnexFeedState :: Key -> Git.Repo -> FilePath
-gitAnnexFeedState k r = gitAnnexFeedStateDir r </> keyFile k
-
-{- .git/annex/merge/ is used for direct mode merges. -}
-gitAnnexMergeDir :: Git.Repo -> FilePath
-gitAnnexMergeDir r = addTrailingPathSeparator $ gitAnnexDir r </> "merge"
-
-{- .git/annex/transfer/ is used to record keys currently
- - being transferred, and other transfer bookkeeping info. -}
-gitAnnexTransferDir :: Git.Repo -> FilePath
-gitAnnexTransferDir r = addTrailingPathSeparator $ gitAnnexDir r </> "transfer"
-
-{- .git/annex/journal/ is used to journal changes made to the git-annex
- - branch -}
-gitAnnexJournalDir :: Git.Repo -> FilePath
-gitAnnexJournalDir r = addTrailingPathSeparator $ gitAnnexDir r </> "journal"
-
-{- Lock file for the journal. -}
-gitAnnexJournalLock :: Git.Repo -> FilePath
-gitAnnexJournalLock r = gitAnnexDir r </> "journal.lck"
-
-{- Lock file for the pre-commit hook. -}
-gitAnnexPreCommitLock :: Git.Repo -> FilePath
-gitAnnexPreCommitLock r = gitAnnexDir r </> "precommit.lck"
-
-{- Lock file for direct mode merge. -}
-gitAnnexMergeLock :: Git.Repo -> FilePath
-gitAnnexMergeLock r = gitAnnexDir r </> "merge.lck"
-
-{- .git/annex/index is used to stage changes to the git-annex branch -}
-gitAnnexIndex :: Git.Repo -> FilePath
-gitAnnexIndex r = gitAnnexDir r </> "index"
-
-{- Holds the ref of the git-annex branch that the index was last updated to.
- -
- - The .lck in the name is a historical accident; this is not used as a
- - lock. -}
-gitAnnexIndexStatus :: Git.Repo -> FilePath
-gitAnnexIndexStatus r = gitAnnexDir r </> "index.lck"
-
-{- The index file used to generate a filtered branch view._-}
-gitAnnexViewIndex :: Git.Repo -> FilePath
-gitAnnexViewIndex r = gitAnnexDir r </> "viewindex"
-
-{- File containing a log of recently accessed views. -}
-gitAnnexViewLog :: Git.Repo -> FilePath
-gitAnnexViewLog r = gitAnnexDir r </> "viewlog"
-
-{- List of refs that should not be merged into the git-annex branch. -}
-gitAnnexIgnoredRefs :: Git.Repo -> FilePath
-gitAnnexIgnoredRefs r = gitAnnexDir r </> "ignoredrefs"
-
-{- Pid file for daemon mode. -}
-gitAnnexPidFile :: Git.Repo -> FilePath
-gitAnnexPidFile r = gitAnnexDir r </> "daemon.pid"
-
-{- Pid lock file for pidlock mode -}
-gitAnnexPidLockFile :: Git.Repo -> FilePath
-gitAnnexPidLockFile r = gitAnnexDir r </> "pidlock"
-
-{- Status file for daemon mode. -}
-gitAnnexDaemonStatusFile :: Git.Repo -> FilePath
-gitAnnexDaemonStatusFile r = gitAnnexDir r </> "daemon.status"
-
-{- Log file for daemon mode. -}
-gitAnnexLogFile :: Git.Repo -> FilePath
-gitAnnexLogFile r = gitAnnexDir r </> "daemon.log"
-
-{- Log file for fuzz test. -}
-gitAnnexFuzzTestLogFile :: Git.Repo -> FilePath
-gitAnnexFuzzTestLogFile r = gitAnnexDir r </> "fuzztest.log"
-
-{- Html shim file used to launch the webapp. -}
-gitAnnexHtmlShim :: Git.Repo -> FilePath
-gitAnnexHtmlShim r = gitAnnexDir r </> "webapp.html"
-
-{- File containing the url to the webapp. -}
-gitAnnexUrlFile :: Git.Repo -> FilePath
-gitAnnexUrlFile r = gitAnnexDir r </> "url"
-
-{- Temporary file used to edit configuriation from the git-annex branch. -}
-gitAnnexTmpCfgFile :: Git.Repo -> FilePath
-gitAnnexTmpCfgFile r = gitAnnexDir r </> "config.tmp"
-
-{- .git/annex/ssh/ is used for ssh connection caching -}
-gitAnnexSshDir :: Git.Repo -> FilePath
-gitAnnexSshDir r = addTrailingPathSeparator $ gitAnnexDir r </> "ssh"
-
-{- .git/annex/remotes/ is used for remote-specific state. -}
-gitAnnexRemotesDir :: Git.Repo -> FilePath
-gitAnnexRemotesDir r = addTrailingPathSeparator $ gitAnnexDir r </> "remotes"
-
-{- This is the base directory name used by the assistant when making
- - repositories, by default. -}
-gitAnnexAssistantDefaultDir :: FilePath
-gitAnnexAssistantDefaultDir = "annex"
-
-{- Checks a symlink target to see if it appears to point to annexed content.
- -
- - We only look at paths inside the .git directory, and not at the .git
- - directory itself, because GIT_DIR may cause a directory name other
- - than .git to be used.
- -}
-isLinkToAnnex :: FilePath -> Bool
-isLinkToAnnex s = (pathSeparator:objectDir) `isInfixOf` s
-
-{- Sanitizes a String that will be used as part of a Key's keyName,
- - dealing with characters that cause problems on substandard filesystems.
- -
- - This is used when a new Key is initially being generated, eg by getKey.
- - Unlike keyFile and fileKey, it does not need to be a reversable
- - escaping. Also, it's ok to change this to add more problimatic
- - characters later. Unlike changing keyFile, which could result in the
- - filenames used for existing keys changing and contents getting lost.
- -
- - It is, however, important that the input and output of this function
- - have a 1:1 mapping, to avoid two different inputs from mapping to the
- - same key.
- -}
-preSanitizeKeyName :: String -> String
-preSanitizeKeyName = concatMap escape
-  where
-	escape c
-		| isAsciiUpper c || isAsciiLower c || isDigit c = [c]
-		| c `elem` ".-_ " = [c] -- common, assumed safe
-		| c `elem` "/%:" = [c] -- handled by keyFile
-		-- , is safe and uncommon, so will be used to escape
-		-- other characters. By itself, it is escaped to 
-		-- doubled form.
-		| c == ',' = ",,"
-		| otherwise = ',' : show (ord c)
-
-{- Converts a key into a filename fragment without any directory.
- -
- - Escape "/" in the key name, to keep a flat tree of files and avoid
- - issues with keys containing "/../" or ending with "/" etc. 
- -
- - "/" is escaped to "%" because it's short and rarely used, and resembles
- -     a slash
- - "%" is escaped to "&s", and "&" to "&a"; this ensures that the mapping
- -     is one to one.
- - ":" is escaped to "&c", because it seemed like a good idea at the time.
- -
- - Changing what this function escapes and how is not a good idea, as it
- - can cause existing objects to get lost.
- -}
-keyFile :: Key -> FilePath
-keyFile key = replace "/" "%" $ replace ":" "&c" $
-	replace "%" "&s" $ replace "&" "&a"  $ key2file key
-
-{- Reverses keyFile, converting a filename fragment (ie, the basename of
- - the symlink target) into a key. -}
-fileKey :: FilePath -> Maybe Key
-fileKey file = file2key $
-	replace "&a" "&" $ replace "&s" "%" $
-		replace "&c" ":" $ replace "%" "/" file
-
-{- for quickcheck -}
-prop_isomorphic_fileKey :: String -> Bool
-prop_isomorphic_fileKey s
-	| null s = True -- it's not legal for a key to have no keyName
-	| otherwise= Just k == fileKey (keyFile k)
-  where
-	k = stubKey { keyName = s, keyBackendName = "test" }
-
-{- A location to store a key on a special remote that uses a filesystem.
- - A directory hash is used, to protect against filesystems that dislike
- - having many items in a single directory.
- -
- - The file is put in a directory with the same name, this allows
- - write-protecting the directory to avoid accidental deletion of the file.
- -}
-keyPath :: Key -> Hasher -> FilePath
-keyPath key hasher = hasher key </> f </> f
-  where
-	f = keyFile key
-
-{- All possibile locations to store a key in a special remote
- - using different directory hashes.
- -
- - This is compatible with the annexLocations, for interoperability between
- - special remotes and git-annex repos.
- -}
-keyPaths :: Key -> [FilePath]
-keyPaths key = map (\h -> keyPath key (h def)) dirHashes
diff --git a/Logs.hs b/Logs.hs
--- a/Logs.hs
+++ b/Logs.hs
@@ -7,8 +7,7 @@
 
 module Logs where
 
-import Common.Annex
-import Types.Key
+import Annex.Common
 import Annex.DirHashes
 
 {- There are several varieties of log file formats. -}
diff --git a/Logs/Activity.hs b/Logs/Activity.hs
--- a/Logs/Activity.hs
+++ b/Logs/Activity.hs
@@ -14,7 +14,7 @@
 
 import Data.Time.Clock.POSIX
 
-import Common.Annex
+import Annex.Common
 import qualified Annex.Branch
 import Logs
 import Logs.UUIDBased
diff --git a/Logs/Chunk.hs b/Logs/Chunk.hs
--- a/Logs/Chunk.hs
+++ b/Logs/Chunk.hs
@@ -24,7 +24,7 @@
 	getCurrentChunks,
 ) where
 
-import Common.Annex
+import Annex.Common
 import Logs
 import Logs.MapLog
 import qualified Annex.Branch
diff --git a/Logs/Chunk/Pure.hs b/Logs/Chunk/Pure.hs
--- a/Logs/Chunk/Pure.hs
+++ b/Logs/Chunk/Pure.hs
@@ -14,7 +14,7 @@
 	, showLog
 	) where
 
-import Common.Annex
+import Annex.Common
 import Logs.MapLog
 import Data.Int
 
diff --git a/Logs/Difference.hs b/Logs/Difference.hs
--- a/Logs/Difference.hs
+++ b/Logs/Difference.hs
@@ -15,7 +15,7 @@
 import Data.Time.Clock.POSIX
 import qualified Data.Map as M
 
-import Common.Annex
+import Annex.Common
 import Types.Difference
 import qualified Annex.Branch
 import Logs
diff --git a/Logs/Difference/Pure.hs b/Logs/Difference/Pure.hs
--- a/Logs/Difference/Pure.hs
+++ b/Logs/Difference/Pure.hs
@@ -12,7 +12,7 @@
 
 import qualified Data.Map as M
 
-import Common.Annex
+import Annex.Common
 import Types.Difference
 import Logs.UUIDBased
 
diff --git a/Logs/FsckResults.hs b/Logs/FsckResults.hs
--- a/Logs/FsckResults.hs
+++ b/Logs/FsckResults.hs
@@ -11,7 +11,7 @@
 	clearFsckResults,
 ) where
 
-import Common.Annex
+import Annex.Common
 import Utility.Tmp
 import Git.Fsck
 import Git.Types
diff --git a/Logs/Group.hs b/Logs/Group.hs
--- a/Logs/Group.hs
+++ b/Logs/Group.hs
@@ -20,7 +20,7 @@
 import qualified Data.Set as S
 import Data.Time.Clock.POSIX
 
-import Common.Annex
+import Annex.Common
 import Logs
 import qualified Annex.Branch
 import qualified Annex
diff --git a/Logs/Location.hs b/Logs/Location.hs
--- a/Logs/Location.hs
+++ b/Logs/Location.hs
@@ -25,7 +25,7 @@
 	loggedKeysFor,
 ) where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex.Branch
 import Logs
 import Logs.Presence
diff --git a/Logs/MetaData.hs b/Logs/MetaData.hs
--- a/Logs/MetaData.hs
+++ b/Logs/MetaData.hs
@@ -33,7 +33,7 @@
 	copyMetaData,
 ) where
 
-import Common.Annex
+import Annex.Common
 import Types.MetaData
 import Annex.MetaData.StandardFields
 import qualified Annex.Branch
diff --git a/Logs/NumCopies.hs b/Logs/NumCopies.hs
--- a/Logs/NumCopies.hs
+++ b/Logs/NumCopies.hs
@@ -13,7 +13,7 @@
 	globalNumCopiesLoad,
 ) where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import Types.NumCopies
 import Logs
diff --git a/Logs/PreferredContent.hs b/Logs/PreferredContent.hs
--- a/Logs/PreferredContent.hs
+++ b/Logs/PreferredContent.hs
@@ -27,7 +27,7 @@
 import qualified Data.Set as S
 import Data.Either
 
-import Common.Annex
+import Annex.Common
 import Logs.PreferredContent.Raw
 import qualified Annex.Branch
 import qualified Annex
diff --git a/Logs/PreferredContent/Raw.hs b/Logs/PreferredContent/Raw.hs
--- a/Logs/PreferredContent/Raw.hs
+++ b/Logs/PreferredContent/Raw.hs
@@ -10,7 +10,7 @@
 import qualified Data.Map as M
 import Data.Time.Clock.POSIX
 
-import Common.Annex
+import Annex.Common
 import qualified Annex.Branch
 import qualified Annex
 import Logs
diff --git a/Logs/Presence.hs b/Logs/Presence.hs
--- a/Logs/Presence.hs
+++ b/Logs/Presence.hs
@@ -25,7 +25,7 @@
 import Data.Time.Clock.POSIX
 
 import Logs.Presence.Pure as X
-import Common.Annex
+import Annex.Common
 import qualified Annex.Branch
 import Git.Types (RefDate)
 
diff --git a/Logs/Presence/Pure.hs b/Logs/Presence/Pure.hs
--- a/Logs/Presence/Pure.hs
+++ b/Logs/Presence/Pure.hs
@@ -10,7 +10,7 @@
 import Data.Time.Clock.POSIX
 import qualified Data.Map as M
 
-import Common.Annex
+import Annex.Common
 import Logs.TimeStamp
 import Utility.QuickCheck
 
diff --git a/Logs/Remote.hs b/Logs/Remote.hs
--- a/Logs/Remote.hs
+++ b/Logs/Remote.hs
@@ -22,7 +22,7 @@
 import Data.Time.Clock.POSIX
 import Data.Char
 
-import Common.Annex
+import Annex.Common
 import qualified Annex.Branch
 import Types.Remote
 import Logs
diff --git a/Logs/RemoteState.hs b/Logs/RemoteState.hs
--- a/Logs/RemoteState.hs
+++ b/Logs/RemoteState.hs
@@ -10,7 +10,7 @@
 	setRemoteState,
 ) where
 
-import Common.Annex
+import Annex.Common
 import Logs
 import Logs.UUIDBased
 import qualified Annex.Branch
diff --git a/Logs/Schedule.hs b/Logs/Schedule.hs
--- a/Logs/Schedule.hs
+++ b/Logs/Schedule.hs
@@ -22,7 +22,7 @@
 import Data.Time.Clock.POSIX
 import Data.Time.LocalTime
 
-import Common.Annex
+import Annex.Common
 import Types.ScheduledActivity
 import qualified Annex.Branch
 import Logs
diff --git a/Logs/SingleValue.hs b/Logs/SingleValue.hs
--- a/Logs/SingleValue.hs
+++ b/Logs/SingleValue.hs
@@ -13,7 +13,7 @@
 
 module Logs.SingleValue where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex.Branch
 import Logs.TimeStamp
 
diff --git a/Logs/Transfer.hs b/Logs/Transfer.hs
--- a/Logs/Transfer.hs
+++ b/Logs/Transfer.hs
@@ -9,10 +9,9 @@
 
 module Logs.Transfer where
 
-import Common.Annex
+import Annex.Common
 import Annex.Perms
 import qualified Git
-import Types.Key
 import Utility.Metered
 import Utility.Percentage
 import Utility.QuickCheck
diff --git a/Logs/Transitions.hs b/Logs/Transitions.hs
--- a/Logs/Transitions.hs
+++ b/Logs/Transitions.hs
@@ -17,7 +17,7 @@
 import Data.Time.Clock.POSIX
 import qualified Data.Set as S
 
-import Common.Annex
+import Annex.Common
 import Logs.TimeStamp
 
 transitionsLog :: FilePath
diff --git a/Logs/Trust.hs b/Logs/Trust.hs
--- a/Logs/Trust.hs
+++ b/Logs/Trust.hs
@@ -20,7 +20,7 @@
 import qualified Data.Map as M
 import Data.Default
 
-import Common.Annex
+import Annex.Common
 import Types.TrustLevel
 import qualified Annex
 import Logs
diff --git a/Logs/Trust/Basic.hs b/Logs/Trust/Basic.hs
--- a/Logs/Trust/Basic.hs
+++ b/Logs/Trust/Basic.hs
@@ -13,7 +13,7 @@
 
 import Data.Time.Clock.POSIX
 
-import Common.Annex
+import Annex.Common
 import Types.TrustLevel
 import qualified Annex.Branch
 import qualified Annex
diff --git a/Logs/Trust/Pure.hs b/Logs/Trust/Pure.hs
--- a/Logs/Trust/Pure.hs
+++ b/Logs/Trust/Pure.hs
@@ -7,7 +7,7 @@
 
 module Logs.Trust.Pure where
 
-import Common.Annex
+import Annex.Common
 import Types.TrustLevel
 import Logs.UUIDBased
 
diff --git a/Logs/UUID.hs b/Logs/UUID.hs
--- a/Logs/UUID.hs
+++ b/Logs/UUID.hs
@@ -25,7 +25,7 @@
 import Data.Time.Clock.POSIX
 
 import Types.UUID
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import qualified Annex.Branch
 import Logs
diff --git a/Logs/Unused.hs b/Logs/Unused.hs
--- a/Logs/Unused.hs
+++ b/Logs/Unused.hs
@@ -33,9 +33,8 @@
 import Data.Time.Clock.POSIX
 import Data.Time
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
-import Types.Key
 import Utility.Tmp
 import Logs.TimeStamp
 
diff --git a/Logs/View.hs b/Logs/View.hs
--- a/Logs/View.hs
+++ b/Logs/View.hs
@@ -19,7 +19,7 @@
 	prop_branchView_legal,
 ) where
 
-import Common.Annex
+import Annex.Common
 import Types.View
 import Types.MetaData
 import qualified Git
diff --git a/Logs/Web.hs b/Logs/Web.hs
--- a/Logs/Web.hs
+++ b/Logs/Web.hs
@@ -15,6 +15,7 @@
 	Downloader(..),
 	getDownloader,
 	setDownloader,
+	setDownloader',
 	setTempUrl,
 	removeTempUrl,
 ) where
@@ -22,7 +23,7 @@
 import qualified Data.ByteString.Lazy.Char8 as L
 import qualified Data.Map as M
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import Logs
 import Logs.Presence
@@ -32,6 +33,8 @@
 import qualified Git
 import qualified Git.LsFiles
 import Utility.Url
+import Annex.UUID
+import qualified Types.Remote as Remote
 
 {- Gets all urls that a key might be available from. -}
 getUrls :: Key -> Annex [URLString]
@@ -107,6 +110,11 @@
 setDownloader u WebDownloader = u
 setDownloader u QuviDownloader = "quvi:" ++ u
 setDownloader u OtherDownloader = ":" ++ u
+
+setDownloader' :: URLString -> Remote -> String
+setDownloader' u r
+	| Remote.uuid r == webUUID = setDownloader u WebDownloader
+	| otherwise = setDownloader u OtherDownloader
 
 getDownloader :: URLString -> (URLString, Downloader)
 getDownloader u = case separate (== ':') u of
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -98,7 +98,7 @@
 		--exclude='users/*' --exclude='devblog/*' --exclude='thanks'
 
 clean:
-	$(BUILDER) clean
+	if [ "$(BUILDER)" != ./Setup ] && [ "$(BUILDER)" != cabal ]; then $(BUILDER) clean; fi
 	rm -rf tmp dist git-annex $(mans) configure  *.tix .hpc \
 		doc/.ikiwiki html dist tags Build/SysConfig.hs \
 		Setup Build/InstallDesktopFile Build/EvilSplicer \
@@ -274,7 +274,7 @@
 distributionupdate:
 	git pull
 	cabal configure
-	ghc -Wall --make Build/DistributionUpdate -XPackageImports -optP-include -optPdist/build/autogen/cabal_macros.h
+	ghc -Wall -fno-warn-tabs --make Build/DistributionUpdate -XPackageImports -optP-include -optPdist/build/autogen/cabal_macros.h
 	./Build/DistributionUpdate
 
 .PHONY: git-annex git-union-merge tags
diff --git a/Messages.hs b/Messages.hs
--- a/Messages.hs
+++ b/Messages.hs
@@ -36,6 +36,7 @@
 	debugEnabled,
 	commandProgressDisabled,
 	outputMessage,
+	implicitMessage,
 ) where
 
 import Text.JSON
@@ -182,6 +183,11 @@
 		<*> pure preciseLogFormatter
 	updateGlobalLogger rootLoggerName (setLevel NOTICE . setHandlers [s])
 	setConsoleEncoding
+	{- Force output to be line buffered. This is normally the case when
+	 - it's connected to a terminal, but may not be when redirected to
+	 - a file or a pipe. -}
+	hSetBuffering stdout LineBuffering
+	hSetBuffering stderr LineBuffering
 
 {- Log formatter with precision into fractions of a second. -}
 preciseLogFormatter :: LogFormatter a
@@ -207,3 +213,9 @@
 	JSONOutput -> True
 	NormalOutput -> False
 	ConcurrentOutput _ -> True
+
+{- Use to show a message that is displayed implicitly, and so might be
+ - disabled when running a certian command that needs more control over its
+ - output. -}
+implicitMessage :: Annex () -> Annex ()
+implicitMessage = whenM (implicitMessages <$> Annex.getState Annex.output)
diff --git a/Remote.hs b/Remote.hs
--- a/Remote.hs
+++ b/Remote.hs
@@ -59,7 +59,7 @@
 import Text.JSON.Generic
 import Data.Ord
 
-import Common.Annex
+import Annex.Common
 import Types.Remote
 import qualified Annex
 import Annex.UUID
@@ -183,6 +183,7 @@
 prettyPrintUUIDsDescs :: String -> M.Map UUID RemoteName -> [UUID] -> Annex String
 prettyPrintUUIDsDescs header descm uuids =
 	prettyPrintUUIDsWith Nothing header descm
+		(const Nothing)
 		(zip uuids (repeat (Nothing :: Maybe String)))
 
 {- An optional field can be included in the list of UUIDs. -}
@@ -191,9 +192,10 @@
 	=> Maybe String 
 	-> String 
 	-> M.Map UUID RemoteName
+	-> (v -> Maybe String)
 	-> [(UUID, Maybe v)] 
 	-> Annex String
-prettyPrintUUIDsWith optfield header descm uuidvals = do
+prettyPrintUUIDsWith optfield header descm showval uuidvals = do
 	hereu <- getUUID
 	maybeShowJSON [(header, map (jsonify hereu) uuidvals)]
 	return $ unwords $ map (\u -> "\t" ++ prettify hereu u ++ "\n") uuidvals
@@ -209,9 +211,9 @@
 			| null n && ishere = "here"
 			| ishere = addName n "here"
 			| otherwise = n
-		addoptval s = case optval of
+		addoptval s = case showval =<< optval of
 			Nothing -> s
-			Just val -> show val ++ ": " ++ s
+			Just val -> val ++ ": " ++ s
 	jsonify hereu (u, optval) = toJSObject $ catMaybes
 		[ Just ("uuid", toJSON $ fromUUID u)
 		, Just ("description", toJSON $ finddescription u)
diff --git a/Remote/BitTorrent.hs b/Remote/BitTorrent.hs
--- a/Remote/BitTorrent.hs
+++ b/Remote/BitTorrent.hs
@@ -9,7 +9,7 @@
 
 module Remote.BitTorrent (remote) where
 
-import Common.Annex
+import Annex.Common
 import Types.Remote
 import qualified Annex
 import qualified Git
@@ -18,7 +18,6 @@
 import Logs.Web
 import Types.UrlContents
 import Types.CleanupActions
-import Types.Key
 import Messages.Progress
 import Utility.Metered
 import Utility.Tmp
diff --git a/Remote/Bup.hs b/Remote/Bup.hs
--- a/Remote/Bup.hs
+++ b/Remote/Bup.hs
@@ -11,10 +11,9 @@
 import qualified Data.ByteString.Lazy as L
 import Data.ByteString.Lazy.UTF8 (fromString)
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import Types.Remote
-import Types.Key
 import Types.Creds
 import qualified Git
 import qualified Git.Command
diff --git a/Remote/Ddar.hs b/Remote/Ddar.hs
--- a/Remote/Ddar.hs
+++ b/Remote/Ddar.hs
@@ -12,9 +12,8 @@
 import qualified Data.ByteString.Lazy as L
 import System.IO.Error
 
-import Common.Annex
+import Annex.Common
 import Types.Remote
-import Types.Key
 import Types.Creds
 import qualified Git
 import Config
diff --git a/Remote/Directory.hs b/Remote/Directory.hs
--- a/Remote/Directory.hs
+++ b/Remote/Directory.hs
@@ -17,7 +17,7 @@
 import qualified Data.Map as M
 import Data.Default
 
-import Common.Annex
+import Annex.Common
 import Types.Remote
 import Types.Creds
 import qualified Git
diff --git a/Remote/Directory/LegacyChunked.hs b/Remote/Directory/LegacyChunked.hs
--- a/Remote/Directory/LegacyChunked.hs
+++ b/Remote/Directory/LegacyChunked.hs
@@ -12,7 +12,7 @@
 import qualified Data.ByteString.Lazy as L
 import qualified Data.ByteString as S
 
-import Common.Annex
+import Annex.Common
 import Utility.FileMode
 import Remote.Helper.Special
 import qualified Remote.Helper.Chunked.Legacy as Legacy
diff --git a/Remote/External.hs b/Remote/External.hs
--- a/Remote/External.hs
+++ b/Remote/External.hs
@@ -9,11 +9,10 @@
 
 import Remote.External.Types
 import qualified Annex
-import Common.Annex
+import Annex.Common
 import Types.Remote
 import Types.CleanupActions
 import Types.UrlContents
-import Types.Key
 import qualified Git
 import Config
 import Git.Config (isTrue, boolConfig)
diff --git a/Remote/External/Types.hs b/Remote/External/Types.hs
--- a/Remote/External/Types.hs
+++ b/Remote/External/Types.hs
@@ -31,8 +31,7 @@
 	supportedProtocolVersions,
 ) where
 
-import Common.Annex
-import Types.Key (file2key, key2file)
+import Annex.Common
 import Types.StandardGroups (PreferredContentExpression)
 import Utility.Metered (BytesProcessed(..))
 import Logs.Transfer (Direction(..))
diff --git a/Remote/GCrypt.hs b/Remote/GCrypt.hs
--- a/Remote/GCrypt.hs
+++ b/Remote/GCrypt.hs
@@ -19,7 +19,7 @@
 import Control.Exception
 import Data.Default
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import Types.Remote
 import Types.GitConfig
diff --git a/Remote/Git.hs b/Remote/Git.hs
--- a/Remote/Git.hs
+++ b/Remote/Git.hs
@@ -13,7 +13,7 @@
 	repoAvail,
 ) where
 
-import Common.Annex
+import Annex.Common
 import Annex.Ssh
 import Types.Remote
 import Types.GitConfig
@@ -36,7 +36,6 @@
 import Config.Cost
 import Annex.Init
 import Annex.Version
-import Types.Key
 import Types.CleanupActions
 import qualified CmdLine.GitAnnexShell.Fields as Fields
 import Logs.Location
diff --git a/Remote/Glacier.hs b/Remote/Glacier.hs
--- a/Remote/Glacier.hs
+++ b/Remote/Glacier.hs
@@ -11,9 +11,8 @@
 import qualified Data.Text as T
 import qualified Data.ByteString.Lazy as L
 
-import Common.Annex
+import Annex.Common
 import Types.Remote
-import Types.Key
 import qualified Git
 import Config
 import Config.Cost
diff --git a/Remote/Helper/AWS.hs b/Remote/Helper/AWS.hs
--- a/Remote/Helper/AWS.hs
+++ b/Remote/Helper/AWS.hs
@@ -10,7 +10,7 @@
 
 module Remote.Helper.AWS where
 
-import Common.Annex
+import Annex.Common
 import Creds
 
 import qualified Data.Map as M
diff --git a/Remote/Helper/Chunked.hs b/Remote/Helper/Chunked.hs
--- a/Remote/Helper/Chunked.hs
+++ b/Remote/Helper/Chunked.hs
@@ -17,11 +17,10 @@
 	checkPresentChunks,
 ) where
 
-import Common.Annex
+import Annex.Common
 import Utility.DataUnits
 import Types.StoreRetrieve
 import Types.Remote
-import Types.Key
 import Logs.Chunk
 import Utility.Metered
 import Crypto (EncKey)
diff --git a/Remote/Helper/Chunked/Legacy.hs b/Remote/Helper/Chunked/Legacy.hs
--- a/Remote/Helper/Chunked/Legacy.hs
+++ b/Remote/Helper/Chunked/Legacy.hs
@@ -7,7 +7,7 @@
 
 module Remote.Helper.Chunked.Legacy where
 
-import Common.Annex
+import Annex.Common
 import Remote.Helper.Chunked
 import Utility.Metered
 
diff --git a/Remote/Helper/Encryptable.hs b/Remote/Helper/Encryptable.hs
--- a/Remote/Helper/Encryptable.hs
+++ b/Remote/Helper/Encryptable.hs
@@ -24,7 +24,7 @@
 import qualified Data.ByteString as B
 import Data.Bits.Utils
 
-import Common.Annex
+import Annex.Common
 import Types.Remote
 import Crypto
 import Types.Crypto
diff --git a/Remote/Helper/Git.hs b/Remote/Helper/Git.hs
--- a/Remote/Helper/Git.hs
+++ b/Remote/Helper/Git.hs
@@ -7,7 +7,7 @@
 
 module Remote.Helper.Git where
 
-import Common.Annex
+import Annex.Common
 import qualified Git
 import Types.Availability
 import qualified Types.Remote as Remote
diff --git a/Remote/Helper/Hooks.hs b/Remote/Helper/Hooks.hs
--- a/Remote/Helper/Hooks.hs
+++ b/Remote/Helper/Hooks.hs
@@ -11,7 +11,7 @@
 
 import qualified Data.Map as M
 
-import Common.Annex
+import Annex.Common
 import Types.Remote
 import Types.CleanupActions
 import qualified Annex
diff --git a/Remote/Helper/Http.hs b/Remote/Helper/Http.hs
--- a/Remote/Helper/Http.hs
+++ b/Remote/Helper/Http.hs
@@ -9,7 +9,7 @@
 
 module Remote.Helper.Http where
 
-import Common.Annex
+import Annex.Common
 import Types.StoreRetrieve
 import Utility.Metered
 import Remote.Helper.Special
diff --git a/Remote/Helper/Messages.hs b/Remote/Helper/Messages.hs
--- a/Remote/Helper/Messages.hs
+++ b/Remote/Helper/Messages.hs
@@ -9,7 +9,7 @@
 
 module Remote.Helper.Messages where
 
-import Common.Annex
+import Annex.Common
 import qualified Git
 import qualified Types.Remote as Remote
 
diff --git a/Remote/Helper/ReadOnly.hs b/Remote/Helper/ReadOnly.hs
--- a/Remote/Helper/ReadOnly.hs
+++ b/Remote/Helper/ReadOnly.hs
@@ -12,7 +12,7 @@
 	, readonlyRemoveKey
 	) where
 
-import Common.Annex
+import Annex.Common
 import Types.Remote
 import Types.StoreRetrieve
 import Utility.Metered
diff --git a/Remote/Helper/Special.hs b/Remote/Helper/Special.hs
--- a/Remote/Helper/Special.hs
+++ b/Remote/Helper/Special.hs
@@ -32,7 +32,7 @@
 	module X
 ) where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import Types.StoreRetrieve
 import Types.Remote
diff --git a/Remote/Helper/Ssh.hs b/Remote/Helper/Ssh.hs
--- a/Remote/Helper/Ssh.hs
+++ b/Remote/Helper/Ssh.hs
@@ -7,7 +7,7 @@
 
 module Remote.Helper.Ssh where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import qualified Git
 import qualified Git.Url
@@ -15,7 +15,6 @@
 import Annex.Ssh
 import CmdLine.GitAnnexShell.Fields (Field, fieldName)
 import qualified CmdLine.GitAnnexShell.Fields as Fields
-import Types.Key
 import Remote.Helper.Messages
 import Messages.Progress
 import Utility.Metered
diff --git a/Remote/Hook.hs b/Remote/Hook.hs
--- a/Remote/Hook.hs
+++ b/Remote/Hook.hs
@@ -7,9 +7,8 @@
 
 module Remote.Hook (remote) where
 
-import Common.Annex
+import Annex.Common
 import Types.Remote
-import Types.Key
 import Types.Creds
 import qualified Git
 import Config
diff --git a/Remote/List.hs b/Remote/List.hs
--- a/Remote/List.hs
+++ b/Remote/List.hs
@@ -11,7 +11,7 @@
 
 import qualified Data.Map as M
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import Logs.Remote
 import Types.Remote
@@ -34,9 +34,7 @@
 #ifdef WITH_WEBDAV
 import qualified Remote.WebDAV
 #endif
-#ifdef WITH_TAHOE
 import qualified Remote.Tahoe
-#endif
 import qualified Remote.Glacier
 import qualified Remote.Ddar
 import qualified Remote.Hook
@@ -57,9 +55,7 @@
 #ifdef WITH_WEBDAV
 	, Remote.WebDAV.remote
 #endif
-#ifdef WITH_TAHOE
 	, Remote.Tahoe.remote
-#endif
 	, Remote.Glacier.remote
 	, Remote.Ddar.remote
 	, Remote.Hook.remote
diff --git a/Remote/Rsync.hs b/Remote/Rsync.hs
--- a/Remote/Rsync.hs
+++ b/Remote/Rsync.hs
@@ -18,7 +18,7 @@
 	RsyncOpts
 ) where
 
-import Common.Annex
+import Annex.Common
 import Types.Remote
 import qualified Git
 import Config
@@ -36,7 +36,6 @@
 import Utility.Metered
 import Logs.Transfer
 import Types.Creds
-import Types.Key (isChunkKey)
 import Annex.DirHashes
 import Utility.Tmp
 
diff --git a/Remote/Rsync/RsyncUrl.hs b/Remote/Rsync/RsyncUrl.hs
--- a/Remote/Rsync/RsyncUrl.hs
+++ b/Remote/Rsync/RsyncUrl.hs
@@ -10,7 +10,7 @@
 module Remote.Rsync.RsyncUrl where
 
 import Types
-import Locations
+import Annex.Locations
 import Utility.Rsync
 import Utility.SafeCommand
 
diff --git a/Remote/S3.hs b/Remote/S3.hs
--- a/Remote/S3.hs
+++ b/Remote/S3.hs
@@ -31,9 +31,8 @@
 import Data.Bits.Utils
 import System.Log.Logger
 
-import Common.Annex
+import Annex.Common
 import Types.Remote
-import Types.Key
 import qualified Git
 import Config
 import Config.Cost
diff --git a/Remote/Tahoe.hs b/Remote/Tahoe.hs
--- a/Remote/Tahoe.hs
+++ b/Remote/Tahoe.hs
@@ -27,7 +27,7 @@
 import Data.ByteString.Lazy.UTF8 (fromString)
 import Control.Concurrent.STM
 
-import Common.Annex
+import Annex.Common
 import Types.Remote
 import Types.Creds
 import qualified Git
diff --git a/Remote/Web.hs b/Remote/Web.hs
--- a/Remote/Web.hs
+++ b/Remote/Web.hs
@@ -5,11 +5,9 @@
  - Licensed under the GNU GPL version 3 or higher.
  -}
 
-{-# LANGUAGE CPP #-}
-
 module Remote.Web (remote, getWebUrls) where
 
-import Common.Annex
+import Annex.Common
 import Types.Remote
 import Remote.Helper.Messages
 import qualified Git
@@ -18,13 +16,10 @@
 import Config.Cost
 import Logs.Web
 import Annex.UUID
-import Types.Key
 import Utility.Metered
 import qualified Annex.Url as Url
-#ifdef WITH_QUVI
 import Annex.Quvi
 import qualified Utility.Quvi as Quvi
-#endif
 
 remote :: RemoteType
 remote = RemoteType {
@@ -83,13 +78,8 @@
 			let (u', downloader) = getDownloader u
 			case downloader of
 				QuviDownloader -> do
-#ifdef WITH_QUVI
 					flip (downloadUrl key p) dest
 						=<< withQuviOptions Quvi.queryLinks [Quvi.httponly, Quvi.quiet] u'
-#else
-					warning "quvi support needed for this url"
-					return False
-#endif
 				_ -> downloadUrl key p [u'] dest
 
 downloadKeyCheap :: Key -> AssociatedFile -> FilePath -> Annex Bool
@@ -117,11 +107,7 @@
 	showChecking u'
 	case downloader of
 		QuviDownloader ->
-#ifdef WITH_QUVI
 			Right <$> withQuviOptions Quvi.check [Quvi.httponly, Quvi.quiet] u'
-#else
-			return $ Left "quvi support needed for this url"
-#endif
 		_ -> do
 			Url.withUrlOptions $ catchMsgIO .
 				Url.checkBoth u' (keySize key)
diff --git a/Remote/WebDAV.hs b/Remote/WebDAV.hs
--- a/Remote/WebDAV.hs
+++ b/Remote/WebDAV.hs
@@ -19,7 +19,7 @@
 import System.IO.Error
 import Control.Monad.Catch
 
-import Common.Annex
+import Annex.Common
 import Types.Remote
 import qualified Git
 import Config
diff --git a/Remote/WebDAV/DavLocation.hs b/Remote/WebDAV/DavLocation.hs
--- a/Remote/WebDAV/DavLocation.hs
+++ b/Remote/WebDAV/DavLocation.hs
@@ -11,7 +11,7 @@
 module Remote.WebDAV.DavLocation where
 
 import Types
-import Locations
+import Annex.Locations
 import Utility.Url (URLString)
 
 import System.FilePath.Posix -- for manipulating url paths
diff --git a/RemoteDaemon/Common.hs b/RemoteDaemon/Common.hs
--- a/RemoteDaemon/Common.hs
+++ b/RemoteDaemon/Common.hs
@@ -12,7 +12,7 @@
 	) where
 
 import qualified Annex
-import Common.Annex
+import Annex.Common
 import RemoteDaemon.Types
 import qualified Git
 import Annex.CatFile
diff --git a/RemoteDaemon/Transport/GCrypt.hs b/RemoteDaemon/Transport/GCrypt.hs
--- a/RemoteDaemon/Transport/GCrypt.hs
+++ b/RemoteDaemon/Transport/GCrypt.hs
@@ -7,7 +7,7 @@
 
 module RemoteDaemon.Transport.GCrypt (transport) where
 
-import Common.Annex
+import Annex.Common
 import RemoteDaemon.Types
 import RemoteDaemon.Common
 import RemoteDaemon.Transport.Ssh (transportUsingCmd)
diff --git a/RemoteDaemon/Transport/Ssh.hs b/RemoteDaemon/Transport/Ssh.hs
--- a/RemoteDaemon/Transport/Ssh.hs
+++ b/RemoteDaemon/Transport/Ssh.hs
@@ -7,7 +7,7 @@
 
 module RemoteDaemon.Transport.Ssh (transport, transportUsingCmd) where
 
-import Common.Annex
+import Annex.Common
 import Annex.Ssh
 import RemoteDaemon.Types
 import RemoteDaemon.Common
diff --git a/Test.hs b/Test.hs
--- a/Test.hs
+++ b/Test.hs
@@ -48,7 +48,7 @@
 import qualified Git.Ref
 import qualified Git.LsTree
 import qualified Git.FilePath
-import qualified Locations
+import qualified Annex.Locations
 import qualified Types.KeySource
 import qualified Types.Backend
 import qualified Types.TrustLevel
@@ -143,7 +143,7 @@
 properties = localOption (QuickCheckTests 1000) $ testGroup "QuickCheck"
 	[ testProperty "prop_isomorphic_deencode_git" Git.Filename.prop_isomorphic_deencode
 	, testProperty "prop_isomorphic_deencode" Utility.Format.prop_isomorphic_deencode
-	, testProperty "prop_isomorphic_fileKey" Locations.prop_isomorphic_fileKey
+	, testProperty "prop_isomorphic_fileKey" Annex.Locations.prop_isomorphic_fileKey
 	, testProperty "prop_isomorphic_key_encode" Types.Key.prop_isomorphic_key_encode
 	, testProperty "prop_isomorphic_key_decode" Types.Key.prop_isomorphic_key_decode
 	, testProperty "prop_isomorphic_shellEscape" Utility.SafeCommand.prop_isomorphic_shellEscape
@@ -1516,7 +1516,7 @@
 		checkFile mvariant filename =
 			Utility.Gpg.checkEncryptionFile gpgcmd filename $
 				if mvariant == Just Types.Crypto.PubKey then ks else Nothing
-		key2files cipher = Locations.keyPaths .
+		key2files cipher = Annex.Locations.keyPaths .
 			Crypto.encryptKey Types.Crypto.HmacSha1 cipher
 #else
 test_crypto = putStrLn "gpg testing not implemented on Windows"
diff --git a/Types.hs b/Types.hs
--- a/Types.hs
+++ b/Types.hs
@@ -15,7 +15,6 @@
 	RemoteGitConfig(..),
 	Remote,
 	RemoteType,
-	Option
 ) where
 
 import Annex
@@ -24,7 +23,6 @@
 import Types.Key
 import Types.UUID
 import Types.Remote
-import Types.Option
 
 type Backend = BackendA Annex
 type Remote = RemoteA Annex
diff --git a/Types/Backend.hs b/Types/Backend.hs
--- a/Types/Backend.hs
+++ b/Types/Backend.hs
@@ -1,4 +1,4 @@
-{- git-annex key/value backend data type
+{- git-annex key backend data type
  -
  - Most things should not need this, using Types instead
  -
diff --git a/Types/Command.hs b/Types/Command.hs
--- a/Types/Command.hs
+++ b/Types/Command.hs
@@ -40,7 +40,7 @@
 data Command = Command
 	{ cmdcheck :: [CommandCheck] -- check stage
 	, cmdnocommit :: Bool        -- don't commit journalled state changes
-	, cmdnomessages :: Bool      -- don't output normal messages
+	, cmdnomessages :: Bool -- don't output normal messages
 	, cmdname :: String
 	, cmdparamdesc :: CmdParamsDesc -- description of params for usage
 	, cmdsection :: CommandSection
diff --git a/Types/FileMatcher.hs b/Types/FileMatcher.hs
--- a/Types/FileMatcher.hs
+++ b/Types/FileMatcher.hs
@@ -1,6 +1,6 @@
 {- git-annex file matcher types
  -
- - Copyright 2013 Joey Hess <id@joeyh.name>
+ - Copyright 2013-2016 Joey Hess <id@joeyh.name>
  -
  - Licensed under the GNU GPL version 3 or higher.
  -}
@@ -10,13 +10,16 @@
 import Types.UUID (UUID)
 import Types.Key (Key)
 import Utility.Matcher (Matcher, Token)
+import Utility.FileSize
 
+import Control.Monad.IO.Class
 import qualified Data.Map as M
 import qualified Data.Set as S
 
 data MatchInfo
 	= MatchingFile FileInfo
 	| MatchingKey Key
+	| MatchingInfo (OptInfo FilePath) (OptInfo Key) (OptInfo FileSize)
 
 data FileInfo = FileInfo
 	{ currFile :: FilePath
@@ -24,6 +27,14 @@
 	, matchFile :: FilePath
 	-- ^ filepath to match on; may be relative to top of repo or cwd
 	}
+
+type OptInfo a = Either (IO a) a
+
+-- If the OptInfo is not available, accessing it may result in eg an
+-- exception being thrown.
+getInfo :: MonadIO m => OptInfo a -> m a
+getInfo (Right i) = return i
+getInfo (Left e) = liftIO e
 
 type FileMatcherMap a = M.Map UUID (Utility.Matcher.Matcher (S.Set UUID -> MatchInfo -> a Bool))
 
diff --git a/Types/GitConfig.hs b/Types/GitConfig.hs
--- a/Types/GitConfig.hs
+++ b/Types/GitConfig.hs
@@ -19,6 +19,7 @@
 import Git.SharedRepository
 import Utility.DataUnits
 import Config.Cost
+import Types.UUID
 import Types.Distribution
 import Types.Availability
 import Types.NumCopies
@@ -32,6 +33,7 @@
  - such as annex.foo -}
 data GitConfig = GitConfig
 	{ annexVersion :: Maybe String
+	, annexUUID :: UUID
 	, annexNumCopies :: Maybe NumCopies
 	, annexDiskReserve :: Integer
 	, annexDirect :: Bool
@@ -75,6 +77,7 @@
 extractGitConfig :: Git.Repo -> GitConfig
 extractGitConfig r = GitConfig
 	{ annexVersion = notempty $ getmaybe (annex "version")
+	, annexUUID = maybe NoUUID toUUID $ getmaybe (annex "uuid")
 	, annexNumCopies = NumCopies <$> getmayberead (annex "numcopies")
 	, annexDiskReserve = fromMaybe onemegabyte $
 		readSize dataUnits =<< getmaybe (annex "diskreserve")
diff --git a/Types/Key.hs b/Types/Key.hs
--- a/Types/Key.hs
+++ b/Types/Key.hs
@@ -1,6 +1,4 @@
 {- git-annex Key data type
- - 
- - Most things should not need this, using Types instead
  -
  - Copyright 2011-2014 Joey Hess <id@joeyh.name>
  -
diff --git a/Types/Messages.hs b/Types/Messages.hs
--- a/Types/Messages.hs
+++ b/Types/Messages.hs
@@ -24,6 +24,7 @@
 data MessageState = MessageState
 	{ outputType :: OutputType
 	, sideActionBlock :: SideActionBlock
+	, implicitMessages :: Bool
 #ifdef WITH_CONCURRENTOUTPUT
 	, consoleRegion :: Maybe ConsoleRegion
 	, consoleRegionErrFlag :: Bool
@@ -35,6 +36,7 @@
 	def = MessageState
 		{ outputType = NormalOutput
 		, sideActionBlock = NoBlock
+		, implicitMessages = True 
 #ifdef WITH_CONCURRENTOUTPUT
 		, consoleRegion = Nothing
 		, consoleRegionErrFlag = False
diff --git a/Types/Option.hs b/Types/Option.hs
deleted file mode 100644
--- a/Types/Option.hs
+++ /dev/null
@@ -1,17 +0,0 @@
-{- git-annex command options
- -
- - Copyright 2011 Joey Hess <id@joeyh.name>
- -
- - Licensed under the GNU GPL version 3 or higher.
- -}
-
-module Types.Option where
-
-import System.Console.GetOpt
-
-import Annex
-
-{- Each dashed command-line option results in generation of an action
- - in the Annex monad that performs the necessary setting.
- -}
-type Option = OptDescr (Annex ())
diff --git a/Types/StoreRetrieve.hs b/Types/StoreRetrieve.hs
--- a/Types/StoreRetrieve.hs
+++ b/Types/StoreRetrieve.hs
@@ -7,7 +7,7 @@
 
 module Types.StoreRetrieve where
 
-import Common.Annex
+import Annex.Common
 import Utility.Metered
 
 import qualified Data.ByteString.Lazy as L
diff --git a/Types/View.hs b/Types/View.hs
--- a/Types/View.hs
+++ b/Types/View.hs
@@ -7,7 +7,7 @@
 
 module Types.View where
 
-import Common.Annex
+import Annex.Common
 import Types.MetaData
 import Utility.QuickCheck
 import qualified Git
diff --git a/Upgrade.hs b/Upgrade.hs
--- a/Upgrade.hs
+++ b/Upgrade.hs
@@ -9,7 +9,7 @@
 
 module Upgrade where
 
-import Common.Annex
+import Annex.Common
 import Annex.Version
 #ifndef mingw32_HOST_OS
 import qualified Upgrade.V0
diff --git a/Upgrade/V0.hs b/Upgrade/V0.hs
--- a/Upgrade/V0.hs
+++ b/Upgrade/V0.hs
@@ -7,7 +7,7 @@
 
 module Upgrade.V0 where
 
-import Common.Annex
+import Annex.Common
 import Annex.Content
 import qualified Upgrade.V1
 
diff --git a/Upgrade/V1.hs b/Upgrade/V1.hs
--- a/Upgrade/V1.hs
+++ b/Upgrade/V1.hs
@@ -11,8 +11,7 @@
 import Data.Char
 import Data.Default
 
-import Common.Annex
-import Types.Key
+import Annex.Common
 import Annex.Content
 import Logs.Presence
 import qualified Annex.Queue
diff --git a/Upgrade/V2.hs b/Upgrade/V2.hs
--- a/Upgrade/V2.hs
+++ b/Upgrade/V2.hs
@@ -7,7 +7,7 @@
 
 module Upgrade.V2 where
 
-import Common.Annex
+import Annex.Common
 import qualified Git
 import qualified Git.Command
 import qualified Git.Ref
diff --git a/Upgrade/V4.hs b/Upgrade/V4.hs
--- a/Upgrade/V4.hs
+++ b/Upgrade/V4.hs
@@ -7,7 +7,7 @@
 
 module Upgrade.V4 where
 
-import Common.Annex
+import Annex.Common
 import Config
 import Annex.Direct
 
diff --git a/Upgrade/V5.hs b/Upgrade/V5.hs
--- a/Upgrade/V5.hs
+++ b/Upgrade/V5.hs
@@ -7,7 +7,7 @@
 
 module Upgrade.V5 where
 
-import Common.Annex
+import Annex.Common
 import qualified Annex
 import Config
 import Annex.InodeSentinal
diff --git a/Utility/FileSize.hs b/Utility/FileSize.hs
--- a/Utility/FileSize.hs
+++ b/Utility/FileSize.hs
@@ -13,13 +13,15 @@
 import System.IO
 #endif
 
+type FileSize = Integer
+
 {- Gets the size of a file.
  -
  - This is better than using fileSize, because on Windows that returns a
  - FileOffset which maxes out at 2 gb.
  - See https://github.com/jystic/unix-compat/issues/16
  -}
-getFileSize :: FilePath -> IO Integer
+getFileSize :: FilePath -> IO FileSize
 #ifndef mingw32_HOST_OS
 getFileSize f = fmap (fromIntegral . fileSize) (getFileStatus f)
 #else
@@ -27,7 +29,7 @@
 #endif
 
 {- Gets the size of the file, when its FileStatus is already known. -}
-getFileSize' :: FilePath -> FileStatus -> IO Integer
+getFileSize' :: FilePath -> FileStatus -> IO FileSize
 #ifndef mingw32_HOST_OS
 getFileSize' _ s = return $ fromIntegral $ fileSize s
 #else
diff --git a/Utility/Glob.hs b/Utility/Glob.hs
--- a/Utility/Glob.hs
+++ b/Utility/Glob.hs
@@ -1,15 +1,10 @@
 {- file globbing
  -
- - This uses TDFA when available, with a fallback to regex-compat.
- - TDFA is less buggy in its support for non-unicode characters.
- -
  - Copyright 2014 Joey Hess <id@joeyh.name>
  -
  - License: BSD-2-clause
  -}
 
-{-# LANGUAGE CPP #-}
-
 module Utility.Glob (
 	Glob,
 	GlobCase(..),
@@ -19,13 +14,8 @@
 
 import System.Path.WildMatch
 
-#ifdef WITH_TDFA
 import "regex-tdfa" Text.Regex.TDFA
 import "regex-tdfa" Text.Regex.TDFA.String
-#else
-import Text.Regex
-import Data.Maybe
-#endif
 
 newtype Glob = Glob Regex
 
@@ -34,13 +24,9 @@
 {- Compiles a glob to a regex, that can be repeatedly used. -}
 compileGlob :: String -> GlobCase -> Glob
 compileGlob glob globcase = Glob $
-#ifdef WITH_TDFA
 	case compile (defaultCompOpt {caseSensitive = casesentitive}) defaultExecOpt regex of
 		Right r -> r
 		Left _ -> error $ "failed to compile regex: " ++ regex
-#else
-	mkRegexWithOpts regex casesentitive True
-#endif
   where
 	regex = '^':wildToRegex glob
 	casesentitive = case globcase of
@@ -49,10 +35,6 @@
 
 matchGlob :: Glob -> String -> Bool
 matchGlob (Glob regex) val = 
-#ifdef WITH_TDFA
 	case execute regex val of
 		Right (Just _) -> True
 		_ -> False
-#else
-	isJust $ matchRegex regex val
-#endif
diff --git a/Utility/Process.hs b/Utility/Process.hs
--- a/Utility/Process.hs
+++ b/Utility/Process.hs
@@ -133,7 +133,8 @@
 	code <- waitForProcess pid
 	case code of
 		ExitSuccess -> return ()
-		ExitFailure n -> fail $ showCmd p ++ " exited " ++ show n
+		ExitFailure n -> ioError $ userError $
+			showCmd p ++ " exited " ++ show n
 
 -- | Waits for a ProcessHandle and returns True if it exited successfully.
 -- Note that using this with createProcessChecked will throw away
diff --git a/Utility/QuickCheck.hs b/Utility/QuickCheck.hs
--- a/Utility/QuickCheck.hs
+++ b/Utility/QuickCheck.hs
@@ -6,7 +6,7 @@
  -}
 
 {-# OPTIONS_GHC -fno-warn-orphans #-}
-{-# LANGUAGE TypeSynonymInstances #-}
+{-# LANGUAGE TypeSynonymInstances, CPP #-}
 
 module Utility.QuickCheck
 	( module X
@@ -21,11 +21,13 @@
 import Control.Applicative
 import Prelude
 
+#if ! MIN_VERSION_QuickCheck(2,8,2)
 instance (Arbitrary k, Arbitrary v, Eq k, Ord k) => Arbitrary (M.Map k v) where
 	arbitrary = M.fromList <$> arbitrary
 
 instance (Arbitrary v, Eq v, Ord v) => Arbitrary (S.Set v) where
 	arbitrary = S.fromList <$> arbitrary
+#endif
 
 {- Times before the epoch are excluded. -}
 instance Arbitrary POSIXTime where
diff --git a/Utility/SRV.hs b/Utility/SRV.hs
--- a/Utility/SRV.hs
+++ b/Utility/SRV.hs
@@ -1,8 +1,5 @@
 {- SRV record lookup
  -
- - Uses either the ADNS Haskell library, or the standalone Haskell DNS
- - package, or the host command.
- -
  - Copyright 2012 Joey Hess <id@joeyh.name>
  -
  - License: BSD-2-clause
@@ -14,31 +11,15 @@
 	mkSRVTcp,
 	mkSRV,
 	lookupSRV,
-	lookupSRVHost,
 	HostPort,
 ) where
 
-import Utility.Process
-import Utility.Exception
-import Utility.PartialPrelude
-
-import Network
 import Data.Function
 import Data.List
-import Data.Maybe
-import Control.Applicative
-import Prelude
-
-#ifdef WITH_ADNS
-import ADNS.Resolver
-import Data.Either
-#else
-#ifdef WITH_DNS
+import Network
 import qualified Network.DNS.Lookup as DNS
 import Network.DNS.Resolver
 import qualified Data.ByteString.UTF8 as B8
-#endif
-#endif
 
 newtype SRV = SRV String
 	deriving (Show, Eq)
@@ -58,13 +39,6 @@
  -
  - On error, returns an empty list. -}
 lookupSRV :: SRV -> IO [HostPort]
-#ifdef WITH_ADNS
-lookupSRV (SRV srv) = initResolver [] $ \resolver -> do
-	r <- catchDefaultIO (Right []) $
-		resolveSRV resolver srv
-	return $ either (\_ -> []) id r
-#else
-#ifdef WITH_DNS
 lookupSRV (SRV srv) = do
 	seed <- makeResolvSeed defaultResolvConf
 	r <- withResolver seed $ flip DNS.lookupSRV $ B8.fromString srv
@@ -80,34 +54,6 @@
 		( (priority, weight)
 		, (B8.toString hostname, PortNumber $ fromIntegral port)
 		)
-#else
-lookupSRV = lookupSRVHost
-#endif
-#endif
-
-lookupSRVHost :: SRV -> IO [HostPort]
-lookupSRVHost (SRV srv) = catchDefaultIO [] $ 
-	parseSrvHost <$> readProcessEnv "host" ["-t", "SRV", "--", srv]
-		-- clear environment, to avoid LANG affecting output
-		(Just [])
-
-parseSrvHost :: String -> [HostPort]
-parseSrvHost = orderHosts . catMaybes . map parse . lines
-  where
-	parse l = case words l of
-		[_, _, _, _, spriority, sweight, sport, hostname] -> do
-			let v = 
-				( readish sport :: Maybe Int
-				, readish spriority :: Maybe Int
-				, readish sweight :: Maybe Int
-				)
-			case v of
-				(Just port, Just priority, Just weight) -> Just
-					( (priority, weight)
-					, (hostname, PortNumber $ fromIntegral port)
-					)
-				_ -> Nothing
-		_ -> Nothing
 
 orderHosts :: [(PriorityWeight, HostPort)] -> [HostPort]
 orderHosts = map snd . sortBy (compare `on` fst)
diff --git a/Utility/WebApp.hs b/Utility/WebApp.hs
--- a/Utility/WebApp.hs
+++ b/Utility/WebApp.hs
@@ -31,10 +31,8 @@
 import Blaze.ByteString.Builder (Builder)
 import Control.Arrow ((***))
 import Control.Concurrent
-#ifdef WITH_WEBAPP_SECURE
 import Data.SecureMem
 import Data.Byteable
-#endif
 #ifdef __ANDROID__
 import Data.Endian
 #endif
@@ -77,11 +75,7 @@
 	sockaddr <- fixSockAddr <$> getSocketName sock
 	observer sockaddr
   where
-#ifdef WITH_WEBAPP_SECURE
 	go = (maybe runSettingsSocket (\ts -> runTLSSocket ts) tlssettings)
-#else
-	go = runSettingsSocket
-#endif
 
 fixSockAddr :: SockAddr -> SockAddr
 #ifdef __ANDROID__
@@ -165,25 +159,13 @@
 		Just . Yesod.clientSessionBackend key . fst
 			<$> Yesod.clientSessionDateCacher timeout
 
-#ifdef WITH_WEBAPP_SECURE
 type AuthToken = SecureMem
-#else
-type AuthToken = T.Text
-#endif
 
 toAuthToken :: T.Text -> AuthToken
-#ifdef WITH_WEBAPP_SECURE
 toAuthToken = secureMemFromByteString . TE.encodeUtf8
-#else
-toAuthToken = id
-#endif
 
 fromAuthToken :: AuthToken -> T.Text
-#ifdef WITH_WEBAPP_SECURE
 fromAuthToken = TE.decodeLatin1 . toBytes
-#else
-fromAuthToken = id
-#endif
 
 {- Generates a random sha2_512 string, encapsulated in a SecureMem,
  - suitable to be used for an authentication secret. -}
diff --git a/debian/changelog b/debian/changelog
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,35 @@
+git-annex (6.20160126) unstable; urgency=medium
+
+  * Fix nasty reversion in the last release that broke sync --content's
+    handling of many preferred content expressions.
+  * whereis --json: Urls are now listed inside the remote that claims them,
+    rather than all together at the end.
+  * info, add, whereis, find: Support --batch mode.
+  * Force output to be line-buffered, even when it's not connected to the
+    terminal. This is particuarly important for commands with --batch
+    output, which was not always being flushed at an appropriate time.
+  * add, import: Support --json output.
+  * addurl --json: Include field for added key (unless the file was
+    added directly to git due to annex.largefiles configuration.)
+    (Also done by add --json and import --json)
+  * registerurl: Check if a remote claims the url, same as addurl does.
+  * Bug fix: Git config settings passed to git-annex -c did not always take
+    effect.
+  * assistant: Use udisks2 dbus events to detect when disks are mounted,
+    instead of relying on gnome/kde stuff that is not stable.
+  * Fix build with QuickCheck 2.8.2
+  * matchexpression: New plumbing command to check if a preferred content
+    expression matches some data.
+  * Removed the webapp-secure build flag, rolling it into the webapp build
+    flag.
+  * Removed the quvi, tahoe, feed, and tfds build flags, adding
+    aeson feed and regex-tdfa to the core dependencies.
+  * Roll the dns build flag into the assistant build flag.
+  * Debian: Avoid building debug package, since gdb is not often useful
+    to debug haskell programs.
+
+ -- Joey Hess <id@joeyh.name>  Tue, 26 Jan 2016 14:57:42 -0400
+
 git-annex (6.20160114) unstable; urgency=medium
 
   "hexapodia as the key insight"
diff --git a/debian/copyright b/debian/copyright
--- a/debian/copyright
+++ b/debian/copyright
@@ -2,11 +2,11 @@
 Source: native package
 
 Files: *
-Copyright: © 2010-2015 Joey Hess <id@joeyh.name>
+Copyright: © 2010-2016 Joey Hess <id@joeyh.name>
 License: GPL-3+
 
 Files: Assistant/WebApp.hs Assistant/WebApp/* templates/* static/*
-Copyright: © 2012-2014 Joey Hess <id@joeyh.name>
+Copyright: © 2012-2016 Joey Hess <id@joeyh.name>
            © 2014 Sören Brunk
 License: AGPL-3+
 
@@ -21,7 +21,7 @@
 License: BSD-2-clause
 
 Files: Utility/*
-Copyright: 2012-2015 Joey Hess <id@joeyh.name>
+Copyright: 2012-2016 Joey Hess <id@joeyh.name>
 License: BSD-2-clause
 
 Files: Utility/Gpg.hs Utility/DirWatcher*
@@ -38,6 +38,11 @@
 Files: Utility/Mounts.hsc
 Copyright: Volker Wysk <hsss@volker-wysk.de>
 License: LGPL-2.1+
+
+Files: Annex/DirHashes.hs
+Copyright: 2001 Ian Lynagh
+           2010-2015 Joey Hess <id@joeyh.name>
+License: GPL-3+
 
 Files: Utility/libmounts.c
 Copyright: 1980, 1989, 1993, 1994 The Regents of the University of California
diff --git a/debian/rules b/debian/rules
--- a/debian/rules
+++ b/debian/rules
@@ -25,6 +25,10 @@
 override_dh_fixperms:
 	dh_fixperms -Xld-linux
 
+# gdb can't do much with a haskell program, so avoid the debug package
+override_dh_strip:
+	dh_strip --no-ddebs
+
 # Do not add "ldconfig" trigger since all libraries in the standalone build
 # are private copies and the trigger activate-noawait trigger may not work
 # on elderly distributions (e.g. squeeze)
diff --git a/doc/bugs/Doesn__39__t_build_with_QuickCheck_2.8.2.mdwn b/doc/bugs/Doesn__39__t_build_with_QuickCheck_2.8.2.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/bugs/Doesn__39__t_build_with_QuickCheck_2.8.2.mdwn
@@ -0,0 +1,33 @@
+### Please describe the problem.
+I am getting build errors when trying to compile git-annex with QuickCheck 2.8.2.
+
+### What steps will reproduce the problem?
+Build git-annex with QuickCheck 2.8.2, and get the following errors:
+
+
+    [ 30 of 535] Compiling Utility.QuickCheck ( Utility/QuickCheck.hs, dist/build/git-annex/git-annex-tmp/Utility/QuickCheck.o )
+    
+    Utility/QuickCheck.hs:24:10:
+        Duplicate instance declarations:
+          instance (Arbitrary k, Arbitrary v, Eq k, Ord k) =>
+                   Arbitrary (M.Map k v)
+            -- Defined at Utility/QuickCheck.hs:24:10
+          instance [safe] (Ord k, Arbitrary k, Arbitrary v) =>
+                          Arbitrary (M.Map k v)
+            -- Defined in `Test.QuickCheck.Arbitrary'
+
+    Utility/QuickCheck.hs:27:10:
+        Duplicate instance declarations:
+          instance (Arbitrary v, Eq v, Ord v) => Arbitrary (S.Set v)
+            -- Defined at Utility/QuickCheck.hs:27:10
+          instance [safe] (Ord a, Arbitrary a) => Arbitrary (S.Set a)
+            -- Defined in `Test.QuickCheck.Arbitrary'
+
+### What version of git-annex are you using? On what operating system?
+git-annex 6.20160114, on Arch Linux x86_64.
+
+### Have you had any luck using git-annex before? (Sometimes we get tired of reading bug reports all day and a lil' positive end note does wonders)
+Yes, it built fine with QuickCheck 2.8. I didn't test with 2.8.1, though.
+
+> ifdefed those instances out with this version of quickcheck. [[done]]
+> --[[Joey]]
diff --git a/doc/bugs/Unable_to_parallel_fsck.mdwn b/doc/bugs/Unable_to_parallel_fsck.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/bugs/Unable_to_parallel_fsck.mdwn
@@ -0,0 +1,83 @@
+### Please describe the problem.
+
+If I run git annex fsck with the parallel jobs switch (e.g. -J2) it fails when it encounters files with non-ASCII filenames. It works fine without
+this switch.
+
+
+### What steps will reproduce the problem?
+
+Make a git annex repository with non-ascii filenames, add the files, and then run fsck with the parallel switch. A script to do this
+is included below.
+
+
+### What version of git-annex are you using? On what operating system?
+
+Arch Linux (64bit)
+
+git-annex version: 6.20160114-g297a744
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3(multipartupload) WebDAV Inotify DBus DesktopNotify XMPP ConcurrentOutput DNS Feeds Quvi TDFA TorrentParser
+key/value backends: SHA256E SHA256 SHA512E SHA512 SHA224E SHA224 SHA384E SHA384 SHA3_256E SHA3_256 SHA3_512E SHA3_512 SHA3_224E SHA3_224 SHA3_384E SHA3_384 SKEIN256E SKEIN256 SKEIN512E SKEIN512 SHA1E SHA1 MD5E MD5 WORM URL
+remote types: git gcrypt S3 bup directory rsync web bittorrent webdav tahoe glacier ddar hook external
+local repository version: 5
+supported repository versions: 5 6
+upgrade supported from repository versions: 0 1 2 4 5
+
+### Please provide any additional information below.
+
+[[!format sh """
+#!/bin/bash
+set -o errexit -o nounset
+
+mkdir testing-repo
+cd testing-repo
+git init
+git annex init testing-repo
+
+make_fake_file() {
+  local filename="$1"
+  mkdir -p "$(dirname "$filename")"
+  echo "hello world" > "$filename"
+  git annex add "$filename"
+}
+
+export -f make_fake_file
+parallel -j1 'make_fake_file {}' <<EOF
+ASIAN KUNG-FU GENERATION/2012 - BEST HIT AKG/flac/folder.jpg
+ASIAN KUNG-FU GENERATION/2012 - BEST HIT AKG/flac/01 - 遥か彼方 - ASIAN KUNG-FU GENERATION.flac
+ASIAN KUNG-FU GENERATION/2012 - BEST HIT AKG/flac/02 - 未来の破片 - ASIAN KUNG-FU GENERATION.flac
+ASIAN KUNG-FU GENERATION/2012 - BEST HIT AKG/flac/03 - アンダースタンド - ASIAN KUNG-FU GENERATION.flac
+ASIAN KUNG-FU GENERATION/2012 - BEST HIT AKG/flac/04 - 君という花 - ASIAN KUNG-FU GENERATION.flac
+ASIAN KUNG-FU GENERATION/2012 - BEST HIT AKG/flac/05 - リライト - ASIAN KUNG-FU GENERATION.flac
+ASIAN KUNG-FU GENERATION/2012 - BEST HIT AKG/flac/06 - 君の街まで - ASIAN KUNG-FU GENERATION.flac
+ASIAN KUNG-FU GENERATION/2012 - BEST HIT AKG/flac/07 - ループ & ループ - ASIAN KUNG-FU GENERATION.flac
+ASIAN KUNG-FU GENERATION/2012 - BEST HIT AKG/flac/08 - ブラックアウト - ASIAN KUNG-FU GENERATION.flac
+ASIAN KUNG-FU GENERATION/2012 - BEST HIT AKG/flac/09 - ブルートレイン - ASIAN KUNG-FU GENERATION.flac
+ASIAN KUNG-FU GENERATION/2012 - BEST HIT AKG/flac/10 - 或る街の群青 - ASIAN KUNG-FU GENERATION.flac
+ASIAN KUNG-FU GENERATION/2012 - BEST HIT AKG/flac/11 - アフターダーク - ASIAN KUNG-FU GENERATION.flac
+ASIAN KUNG-FU GENERATION/2012 - BEST HIT AKG/flac/12 - 転がる岩、君に朝が降る - ASIAN KUNG-FU GENERATION.flac
+ASIAN KUNG-FU GENERATION/2012 - BEST HIT AKG/flac/13 - ムスタング - ASIAN KUNG-FU GENERATION.flac
+ASIAN KUNG-FU GENERATION/2012 - BEST HIT AKG/flac/14 - 藤沢ルーザー - ASIAN KUNG-FU GENERATION.flac
+ASIAN KUNG-FU GENERATION/2012 - BEST HIT AKG/flac/15 - 新世紀のラブソング - ASIAN KUNG-FU GENERATION.flac
+ASIAN KUNG-FU GENERATION/2012 - BEST HIT AKG/flac/16 - ソラニン - ASIAN KUNG-FU GENERATION.flac
+ASIAN KUNG-FU GENERATION/2012 - BEST HIT AKG/flac/17 - マーチングバンド - ASIAN KUNG-FU GENERATION.flac
+EOF
+
+git commit -m 'Add testing files.'
+git annex fsck -J2
+"""]]
+
+On my system this produces:
+
+[[!format sh """
+fsck ASIAN KUNG-FU GENERATION/2012 - BEST HIT AKG/flac/01 - git-annex: <stdout>: commitAndReleaseBuffer: invalid argument (invalid character)
+FAIL 1
+"""]]
+
+(The FAIL 1 output is just my terminal printing that the exit code was 1)
+
+### Have you had any luck using git-annex before? (Sometimes we get tired of reading bug reports all day and a lil' positive end note does wonders)
+
+Plenty. In fact I've been using it for a long time - I just only recently tried to use -J2 to speed up the fsck'ing :)
+
+
+[[!meta title="-J can crash on displaying filenames not supported by current locale"]]
diff --git a/doc/bugs/Volume_monitor_in_GNOME_3.18.mdwn b/doc/bugs/Volume_monitor_in_GNOME_3.18.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/bugs/Volume_monitor_in_GNOME_3.18.mdwn
@@ -0,0 +1,182 @@
+### Please describe the problem.
+
+The assistant prints _"No known volume monitor available through dbus; falling back to mtab polling"_ on startup. Based on source code, it expects to find `org.gtk.Private.UDisks2VolumeMonitor` on the session bus.
+
+However, gvfs 1.26 (on GNOME 3.18) has renamed the service to `org.gtk.vfs.UDisks2VolumeMonitor` instead, and git-annex doesn't know about that yet.
+
+### What steps will reproduce the problem?
+
+Start the assistant on GNOME 3.18.
+
+### What version of git-annex are you using? On what operating system?
+
+Arch Linux:
+git-annex     6.20160114-8
+gvfs          1.26.2-1
+
+### Please provide any additional information below.
+
+The signals seem to have the same format:
+
+[[!format text """
+signal time=1453449272.593009 sender=:1.25 -> destination=(null destination) serial=2270 path=/org/gtk/Private/RemoteVolumeMonitor; interface=org.gtk.Private.RemoteVolumeMonitor; member=MountAdded
+   string "org.gtk.vfs.UDisks2VolumeMonitor"
+   string "0x1981b90"
+   struct {
+      string "0x1981b90"
+      string "A0D8-7268"
+      string ". GThemedIcon drive-harddisk-usb drive-harddisk drive"
+      string ". GThemedIcon drive-harddisk-usb-symbolic drive-harddisk-symbolic drive-symbolic drive-harddisk-usb drive-harddisk drive"
+      string ""
+      string "file:///run/media/grawity/A0D8-7268"
+      boolean true
+      string "0x7f396402a400"
+      array [
+      ]
+      string "gvfs.time_detected_usec.1453449272586665"
+      array [
+      ]
+   }
+"""]]
+
+The DBus interface looks like this:
+
+[[!format text """
+$ gdbus introspect -e -d org.gtk.vfs.UDisks2VolumeMonitor -o / -r
+node /org/gtk/Private/RemoteVolumeMonitor {
+  interface org.freedesktop.DBus.Properties {
+    methods:
+      Get(in  s interface_name,
+          in  s property_name,
+          out v value);
+      GetAll(in  s interface_name,
+             out a{sv} properties);
+      Set(in  s interface_name,
+          in  s property_name,
+          in  v value);
+    signals:
+      PropertiesChanged(s interface_name,
+                        a{sv} changed_properties,
+                        as invalidated_properties);
+    properties:
+  };
+  interface org.freedesktop.DBus.Introspectable {
+    methods:
+      Introspect(out s xml_data);
+    signals:
+    properties:
+  };
+  interface org.freedesktop.DBus.Peer {
+    methods:
+      Ping();
+      GetMachineId(out s machine_uuid);
+    signals:
+    properties:
+  };
+  interface org.gtk.Private.RemoteVolumeMonitor {
+    methods:
+      IsSupported(out b is_supported);
+      List(out a(ssssbbbbbbbbuasa{ss}sa{sv}) drives,
+           out a(ssssssbbssa{ss}sa{sv}) volumes,
+           out a(ssssssbsassa{sv}) mounts);
+      CancelOperation(in  s cancellation_id,
+                      out b was_cancelled);
+      MountUnmount(in  s id,
+                   in  s cancellation_id,
+                   in  u unmount_flags,
+                   in  s mount_op_id);
+      VolumeMount(in  s id,
+                  in  s cancellation_id,
+                  in  u mount_flags,
+                  in  s mount_op_id);
+      DriveEject(in  s id,
+                 in  s cancellation_id,
+                 in  u unmount_flags,
+                 in  s mount_op_id);
+      DrivePollForMedia(in  s id,
+                        in  s cancellation_id);
+      DriveStart(in  s id,
+                 in  s cancellation_id,
+                 in  u flags,
+                 in  s mount_op_id);
+      DriveStop(in  s id,
+                in  s cancellation_id,
+                in  u unmount_flags,
+                in  s mount_op_id);
+      MountOpReply(in  s mount_op_id,
+                   in  i result,
+                   in  s user_name,
+                   in  s domain,
+                   in  s encoded_password,
+                   in  i password_save,
+                   in  i choice,
+                   in  b anonymous);
+    signals:
+      DriveChanged(s dbus_name,
+                   s id,
+                   (ssssbbbbbbbbuasa{ss}sa{sv}) drive);
+      DriveConnected(s dbus_name,
+                     s id,
+                     (ssssbbbbbbbbuasa{ss}sa{sv}) drive);
+      DriveDisconnected(s dbus_name,
+                        s id,
+                        (ssssbbbbbbbbuasa{ss}sa{sv}) drive);
+      DriveEjectButton(s dbus_name,
+                       s id,
+                       (ssssbbbbbbbbuasa{ss}sa{sv}) drive);
+      DriveStopButton(s dbus_name,
+                      s id,
+                      (ssssbbbbbbbbuasa{ss}sa{sv}) drive);
+      VolumeChanged(s dbus_name,
+                    s id,
+                    (ssssssbbssa{ss}sa{sv}) volume);
+      VolumeAdded(s dbus_name,
+                  s id,
+                  (ssssssbbssa{ss}sa{sv}) volume);
+      VolumeRemoved(s dbus_name,
+                    s id,
+                    (ssssssbbssa{ss}sa{sv}) volume);
+      MountChanged(s dbus_name,
+                   s id,
+                   (ssssssbsassa{sv}) mount);
+      MountAdded(s dbus_name,
+                 s id,
+                 (ssssssbsassa{sv}) mount);
+      MountPreUnmount(s dbus_name,
+                      s id,
+                      (ssssssbsassa{sv}) mount);
+      MountRemoved(s dbus_name,
+                   s id,
+                   (ssssssbsassa{sv}) mount);
+      MountOpAskPassword(s dbus_name,
+                         s id,
+                         s message_to_show,
+                         s default_user,
+                         s default_domain,
+                         u flags);
+      MountOpAskQuestion(s dbus_name,
+                         s id,
+                         s message_to_show,
+                         as choices);
+      MountOpShowProcesses(s dbus_name,
+                           s id,
+                           s message_to_show,
+                           ai pid,
+                           as choices);
+      MountOpShowUnmountProgress(s dbus_name,
+                                 s id,
+                                 s message_to_show,
+                                 x time_left,
+                                 x bytes_left);
+      MountOpAborted(s dbus_name,
+                     s id);
+    properties:
+  };
+};
+"""]]
+
+### Have you had any luck using git-annex before? (Sometimes we get tired of reading bug reports all day and a lil' positive end note does wonders)
+
+Works fine in general.
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/debian__47__rules_clean_fails_with_with_cabal_not_found.mdwn b/doc/bugs/debian__47__rules_clean_fails_with_with_cabal_not_found.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/bugs/debian__47__rules_clean_fails_with_with_cabal_not_found.mdwn
@@ -0,0 +1,68 @@
+### Please describe the problem.
+
+Adding BUILDER=stack support in 441573a9 breaks building debian based packages.
+
+### What steps will reproduce the problem?
+
+[[!format sh """
+$ debian/rules clean
+dh clean
+   dh_testdir
+   dh_auto_clean
+        make -j1 clean
+make[1]: Entering directory '/home/jtgeibel/repos/launchpad.net/git-annex'
+debian/cabal-wrapper clean
+debian/cabal-wrapper: 14: debian/cabal-wrapper: cabal: not found
+Makefile:101: recipe for target 'clean' failed
+make[1]: *** [clean] Error 127
+make[1]: Leaving directory '/home/jtgeibel/repos/launchpad.net/git-annex'
+dh_auto_clean: make -j1 clean returned exit code 2
+debian/rules:12: recipe for target 'clean' failed
+make: *** [clean] Error 2
+"""]]
+
+### What version of git-annex are you using? On what operating system?
+
+6.20160114 (Ubuntu wily & trusty)
+
+### Please provide any additional information below.
+
+I've patched this locally as follows.  In the Makefile I've assumed that both cabal and stack support a clean command.
+
+[[!format patch """
+diff --git a/Makefile b/Makefile                                                                                                                              
+index 342152c..977855a 100644                                                                                                                                               
+--- a/Makefile                                                                                                                                                              
++++ b/Makefile                                                                                                                                                              
+@@ -98,7 +98,7 @@ docs: mans                                                                                                                                                                 
+                --exclude='users/*' --exclude='devblog/*' --exclude='thanks'                                                                                                                 
+                                                                                                                                                                                             
+ clean:                                                                                                                                                                                      
+-       $(BUILDER) clean                                                                                                                                                                     
++       if [ "$(BUILDER)" != ./Setup ]; then $(BUILDER) clean; fi                                                                                                                            
+        rm -rf tmp dist git-annex $(mans) configure  *.tix .hpc \                                                                                                                            
+                doc/.ikiwiki html dist tags Build/SysConfig.hs \                                                                                                                             
+                Setup Build/InstallDesktopFile Build/EvilSplicer \                                                                                                                                                
+diff --git a/debian/rules b/debian/rules
+index e6ee592..3345fee 100755
+--- a/debian/rules
++++ b/debian/rules
+@@ -1,6 +1,6 @@
+ #!/usr/bin/make -f
+ 
+-export BUILDER=debian/cabal-wrapper
++export BUILDER=./Setup
+ 
+ STANDALONE_BUILD=$(shell grep -qe '^Package: git-annex-standalone' debian/control \
+                          && echo 1 || echo 0)
+"""]]
+
+
+### Have you had any luck using git-annex before? (Sometimes we get tired of reading bug reports all day and a lil' positive end note does wonders)
+
+git-annex has been a great way for me to explore both Haskell and software packaging.
+
+I enjoyed the interview on LWN.
+
+> I don't think this is a bug, I think build dependencies were not
+> installed when building the package. [[done]] --[[Joey]]
diff --git a/doc/bugs/detox___34__destroys__34___annex.mdwn b/doc/bugs/detox___34__destroys__34___annex.mdwn
--- a/doc/bugs/detox___34__destroys__34___annex.mdwn
+++ b/doc/bugs/detox___34__destroys__34___annex.mdwn
@@ -32,3 +32,6 @@
 
 
 I currently have about a dozen annexes, local and remote (nfs, git), no other big problem apart from lack of speed when syncing
+
+> Closing since I don't see how any changes to git-annex can prevent this
+> kind of problem. [[done]] --[[Joey]]
diff --git a/doc/bugs/put_gpg_last_in_OSX_dmg_PATH.mdwn b/doc/bugs/put_gpg_last_in_OSX_dmg_PATH.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/bugs/put_gpg_last_in_OSX_dmg_PATH.mdwn
@@ -0,0 +1,8 @@
+git-annex bundles gpg on OSX, but this bundled one is not integrated with
+gpg-agent. So, if gpg is installed system-wide, it's probably better to use
+that one (barring any versioning issues).
+
+A solution might be to move the gpg binary to a different directory and put
+it at the end of PATH, not the front. So system one is used if available.
+
+This should also be considered for the linux standalone builds.
diff --git a/doc/bugs/removeDirectoryRecursive.mdwn b/doc/bugs/removeDirectoryRecursive.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/bugs/removeDirectoryRecursive.mdwn
@@ -0,0 +1,30 @@
+### Please describe the problem.
+Can't remove repositories
+
+### What steps will reproduce the problem?
+In repo view, click Actions and select Delete. Then enter "Yes, please do as I say!" in text field and click Delete this repo. Error! Internal Server Error: git [Param "config",Param "annex.autocommit",Param "false"] failed
+
+### What version of git-annex are you using? On what operating system?
+6.20160114-g6be9ee0 
+
+Mac OS X
+
+### Please provide any additional information below.
+
+I can't enable logging. When I do, I receive a similar error message
+
+"git [Param "config",Param "annex.diskreserve",Param "1 megabyte"] failed"
+
+I just downloaded and installed Git Annex. This problem was there from day 1.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+### Have you had any luck using git-annex before? (Sometimes we get tired of reading bug reports all day and a lil' positive end note does wonders)
+
+
diff --git a/doc/bugs/wget_invocation_should_get_timeout_options.mdwn b/doc/bugs/wget_invocation_should_get_timeout_options.mdwn
--- a/doc/bugs/wget_invocation_should_get_timeout_options.mdwn
+++ b/doc/bugs/wget_invocation_should_get_timeout_options.mdwn
@@ -12,3 +12,4 @@
 
 5.20150706+gitgefc3bcd-1~ndall+1 and tried in clean debian sid docker with  5.20150812-2
 
+> [[done]] per my comment and no followup --[[Joey]]
diff --git a/doc/builds.mdwn b/doc/builds.mdwn
--- a/doc/builds.mdwn
+++ b/doc/builds.mdwn
@@ -46,6 +46,8 @@
 <h2>OSX Yosemite</h2>
 <iframe width=1024 scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/x86_64-apple-yosemite/">
 </iframe>
+<iframe width=1024 scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuildtest/x86_64-apple-yosemite/testresult/status">
+</iframe>
 <h2><a href="https://qa.nest-initiative.org/view/msysGit/job/msysgit-git-annex-assistant-test/">Windows</a></h2>
 <a href="https://qa.nest-initiative.org/view/msysGit/job/msysgit-git-annex-assistant-test/">here</a>
 <h2><a href="https://buildd.debian.org/status/package.php?p=git-annex&suite=sid">Debian</a></h2>
diff --git a/doc/devblog/day_357__post_release_catchup.mdwn b/doc/devblog/day_357__post_release_catchup.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/devblog/day_357__post_release_catchup.mdwn
@@ -0,0 +1,8 @@
+After finally releasing git-annex 6 yesterday, I did some catching up
+today, and got the message backlog back down from 120 to 100.
+
+By the way, the first OSX release of git-annex 6 was broken; I had to fix
+an issue on the builder and update the build. If you upgraded at the wrong
+time, you might find that git-annex doesn't run; if so reinstall it.
+I now have an account on a separate OSX machine from the build machine,
+that automatically tests the daily build, to detect such problems.
diff --git a/doc/devblog/day_358__bugfix_release.mdwn b/doc/devblog/day_358__bugfix_release.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/devblog/day_358__bugfix_release.mdwn
@@ -0,0 +1,9 @@
+Bugfix release of git-annex today. The release earlier this month had a bug
+that caused `git annex sync --content` to drop files that should be
+preferred content. So I had to rush out a fix after that [bug was reported](http://git-annex.branchable.com/bugs/wanted___61___present_gets_ignored_in___39__git_annex_sync_--content__39__/).
+(Some of the builds for the new release are still updating as I post this.)
+
+In the past week I've been dealing with a blizzard. Snowed in for 6 days
+and counting. That has slightly back-burnered working on git-annex, and
+I've mostly been making enhancements that the DataLad project needs, along
+the lines of more commands supporting --batch and better --json output. 
diff --git a/doc/forum/Compile_Problem_with_latest_git_pull_version.mdwn b/doc/forum/Compile_Problem_with_latest_git_pull_version.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/forum/Compile_Problem_with_latest_git_pull_version.mdwn
@@ -0,0 +1,23 @@
+Hi,
+I try to compile the latest version of git annex on my server; 
+As you can see some package (WARP) failed to install : 
+
+    [root@git-annex]$ cat /home/reyman64/.cabal/logs/warp-3.1.11.log
+    Configuring warp-3.1.11...
+    Building warp-3.1.11...
+    Preprocessing library warp-3.1.11...
+    [ 1 of 35] Compiling Network.Wai.Handler.Warp.Windows ( Network/Wai/Handler/Warp/Windows.hs, dist/build/Network/Wai/Handler/Warp/Windows.o )
+    [ 2 of 35] Compiling Paths_warp       ( dist/build/autogen/Paths_warp.hs, dist/build/Paths_warp.o )
+    [ 3 of 35] Compiling Network.Wai.Handler.Warp.ReadInt ( Network/Wai/Handler/Warp/ReadInt.hs, dist/build/Network/Wai/Handler/Warp/ReadInt.o )
+    [ 4 of 35] Compiling Network.Wai.Handler.Warp.HTTP2.EncodeFrame ( Network/Wai/Handler/Warp/HTTP2/EncodeFrame.hs, dist/build/Network/Wai/Handler/Warp/HTTP2/EncodeFrame.o )
+    [ 5 of 35] Compiling Network.Wai.Handler.Warp.MultiMap ( Network/Wai/Handler/Warp/MultiMap.hs, dist/build/Network/Wai/Handler/Warp/MultiMap.o )
+    [ 6 of 35] Compiling Network.Wai.Handler.Warp.IORef ( Network/Wai/Handler/Warp/IORef.hs, dist/build/Network/Wai/Handler/Warp/IORef.o )
+    [ 7 of 35] Compiling Network.Wai.Handler.Warp.HTTP2.Manager ( Network/Wai/Handler/Warp/HTTP2/Manager.hs, dist/build/Network/Wai/Handler/Warp/HTTP2/Manager.o )
+    [ 8 of 35] Compiling Network.Wai.Handler.Warp.Counter ( Network/Wai/Handler/Warp/Counter.hs, dist/build/Network/Wai/Handler/Warp/Counter.o )
+    [ 9 of 35] Compiling Network.Wai.Handler.Warp.FileInfoCache ( Network/Wai/Handler/Warp/FileInfoCache.hs, dist/build/Network/Wai/Handler/Warp/FileInfoCache.o )
+    [10 of 35] Compiling Network.Wai.Handler.Warp.Timeout ( Network/Wai/Handler/Warp/Timeout.hs, dist/build/Network/Wai/Handler/Warp/Timeout.o )
+
+    Network/Wai/Handler/Warp/Timeout.hs:86:15:
+        Not in scope: ‘reaperKill’
+        Perhaps you meant ‘reaperNull’ (imported from Control.Reaper)
+
diff --git a/doc/forum/Don__39__t_understand_sync_with_ssh_remote.mdwn b/doc/forum/Don__39__t_understand_sync_with_ssh_remote.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/forum/Don__39__t_understand_sync_with_ssh_remote.mdwn
@@ -0,0 +1,54 @@
+Hi,
+
+I don't understand how to sync an empty local repository on my local pc with ssh server.
+
+On webfaction distant ssh host, i create a repository in v6  which contain all my file (commited with git commit).
+
+        00000000-0000-0000-0000-000000000001 -- web
+        00000000-0000-0000-0000-000000000002 -- bittorrent
+        151c9c3c-7bf2-4a06-ab47-38dfd65b0d12 -- reyman64@web504.webfaction.com:~/webdav/bib/seb/pdf-repository [here]
+
+On local pc, i create an empty repository, also in v6, and i configure ssh remote, nammed "pdfwebfaction", so git annex info return this
+
+        00000000-0000-0000-0000-000000000001 -- web
+        00000000-0000-0000-0000-000000000002 -- bittorrent
+        151c9c3c-7bf2-4a06-ab47-38dfd65b0d12 -- reyman64@web504.webfaction.com:~/webdav/bib/seb/pdf-repository
+        9d08d7c0-55da-451e-8ca3-aaa612eefb46 -- reyman@Dunwich:~/Sync/PDF_Webfaction [here]
+
+
+I want to sync local with this remote branch, and sync content, so i try :
+ 
+    git annex sync pdfwebfaction
+
+Which return :
+
+    commit  git-annex: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","commit","-a","-m","git-annex in reyman@Dunwich:~/Sync/PDF_Webfaction"] exited 1
+
+And i also try without success : 
+
+    git-annex get --from pdfwebfaction
+
+which return an error about uuid, don't understand why because uuid exist for ssh repo :
+
+    git-annex: cannot determine uuid for pdfwebfaction (perhaps you need to run "git annex sync"?) (remote.pdfwebfaction.annex-ignore is set)
+
+My git config is : 
+
+    [core]
+        repositoryformatversion = 0
+        filemode = true
+        bare = false
+        logallrefupdates = true
+    [annex]
+        uuid = 9d08d7c0-55da-451e-8ca3-aaa612eefb46
+        version = 6
+    [filter "annex"]
+        smudge = git-annex smudge %f
+        clean = git-annex smudge --clean %f
+    [remote "pdfwebfaction"]
+        url = ssh://reyman64@reyman64.webfactional.com:/home/reyman64/webdav/bib/seb/pdf-repository
+        fetch = +refs/heads/*:refs/remotes/pdfwebfaction/*
+
+There is something i don't understand, and the documentation talk only about ssh associated with a git clone command.
+
+PS : the ssh connection is correct, i test it.
diff --git a/doc/forum/How_can_I_recover_from_misadventure__63__.mdwn b/doc/forum/How_can_I_recover_from_misadventure__63__.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/forum/How_can_I_recover_from_misadventure__63__.mdwn
@@ -0,0 +1,10 @@
+Hi, 
+
+  I have been attempting to use `git annex` for archiving about 300gb of data (a usb disk that is a copy of a laptop drive). I have an S3 special remote setup as a backup remote right now (the plan is once I feel like the data is safe on s3 I will change the remote type to archive and get rid of the local copies). I am using the WORM backend. I think something has gone wrong:
+
+1. As of right now I have about 200mb of data on S3, but 'git annex copy --to S3 .' runs for a while, then exits, without any indication that it has uploaded any additional files.
+2. .git/ is around 200gb in size
+3. 'git annex add .' adds files for a while, then exits, and does the same thing when run again.
+4. At this point I decided to try and restart from scratch so I ran 'git annex direct' to get the files replaced in the working directory, this runs for a while then hangs.
+
+This has been my first outing with `git annex`, so I am sort of at a loss as to what there is I can poke at to try and determine what is going on. It would be nice to be able to get the data back to the original state, but more than that, I would like to understand what I did wrong, and I would appreciate any pointers or advice. 
diff --git a/doc/forum/New_Arch_Linux_package_for_git-annex.mdwn b/doc/forum/New_Arch_Linux_package_for_git-annex.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/forum/New_Arch_Linux_package_for_git-annex.mdwn
@@ -0,0 +1,7 @@
+I have added a new git-annex package in Arch Linux's official repository [1]. I plan to keep it tracking latest release, and the delay should be within a few days after a new release appears.
+
+It would be great to update the installation instructions for Arch,  also please let me know if there is any problem with the package.
+
+Thank you!
+
+[1] https://www.archlinux.org/packages/community/x86_64/git-annex/
diff --git a/doc/forum/Permission_denied_-_what_is_wrong__63__.mdwn b/doc/forum/Permission_denied_-_what_is_wrong__63__.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/forum/Permission_denied_-_what_is_wrong__63__.mdwn
@@ -0,0 +1,28 @@
+I just set up one local repo and one remote server repo (accessible via SSH) that are synced with each other. However, when I add a file to the local repo it never appears on the remote repo. From the log:
+
+***************************************************************************
+    (scanning...) [2016-01-18 14:55:26.566983] Watcher: Performing startup scan
+    [2016-01-18 14:55:26.584387] Committer: Committing changes to git
+    (recording state in git...)
+    (started...) 
+    Permission denied, please try again.
+    Permission denied, please try again.
+    Permission denied (publickey,password,keyboard-interactive).
+    rsync: connection unexpectedly closed (0 bytes received so far) [sender]
+    rsync error: unexplained error (code 255) at /SourceCache/rsync/rsync-45/rsync/io.c(453) [sender=2.6.9]
+    
+      rsync failed -- run git annex again to resume file transfer
+    [2016-01-18 14:55:30.429824] main: Syncing with lacieannex 
+    
+    Permission denied, please try again.
+    Permission denied, please try again.
+    Permission denied (publickey,password,keyboard-interactive).
+    rsync: connection unexpectedly closed (0 bytes received so far) [sender]
+    rsync error: error in rsync protocol data stream
+      rsync failed -- run git annex again to resume file transfer
+     (code 12) at /SourceCache/rsync/rsync-45/rsync/io.c(453) [sender=2.6.9]
+***************************************************************************
+
+I suspect there is something with the ssh authentication. I tried to remove all keys from my known_hosts that was related to the server (a handful since I had accessed it at server.local, server.lan, 192.168.1.3, fqdn:2222 etc). My plan was to re-run the setup screen where you enter the details about the remote server, including your username and password, but that step seems unavailable after the initial setup.
+
+How do I fix the issues above?
diff --git a/doc/git-annex-add.mdwn b/doc/git-annex-add.mdwn
--- a/doc/git-annex-add.mdwn
+++ b/doc/git-annex-add.mdwn
@@ -8,8 +8,9 @@
 
 # DESCRIPTION
 
-Adds files in the path to the annex. If no path is specified, adds
-files from the current directory and below.
+Adds the specified files to the annex. If a directory is specified,
+acts on all files inside the directory and its subdirectories.
+If no path is specified, adds files from the current directory and below.
 
 Files that are already checked into git and are unmodified, or that
 git has been configured to ignore will be silently skipped.
@@ -53,6 +54,20 @@
 
   Adds multiple files in parallel. This may be faster.
   For example: `-J4`  
+
+* `--json`
+
+  Enable JSON output. This is intended to be parsed by programs that use
+  git-annex. Each line of output is a JSON object.
+
+* `--batch`
+
+  Enables batch mode, in which a file to add is read in a line from stdin,
+  the file is added, and repeat.
+
+  Note that if a file is skipped (due to not existing, being gitignored,
+  already being in git etc), an empty line will be output instead of the
+  normal output produced when adding a file.
 
 # SEE ALSO
 
diff --git a/doc/git-annex-addurl.mdwn b/doc/git-annex-addurl.mdwn
--- a/doc/git-annex-addurl.mdwn
+++ b/doc/git-annex-addurl.mdwn
@@ -88,6 +88,13 @@
   Enable JSON output. This is intended to be parsed by programs that use
   git-annex. Each line of output is a JSON object.
 
+# CAVEATS
+
+If annex.largefiles is configured, and does not match a file, `git annex
+addurl` will add the non-large file directly to the git repository,
+instead of to the annex. However, this is not done when --fast or --relaxed
+is used.
+
 # SEE ALSO
 
 [[git-annex]](1)
diff --git a/doc/git-annex-find.mdwn b/doc/git-annex-find.mdwn
--- a/doc/git-annex-find.mdwn
+++ b/doc/git-annex-find.mdwn
@@ -13,6 +13,19 @@
 
 # OPTIONS
 
+* matching options
+    
+  The [[git-annex-matching-options]](1)
+  can be used to specify files to list.
+
+  By default, the find command only lists annexed files whose content is
+  currently present. Specifying any of the matching options will override
+  this default behavior.
+
+  To list all annexed files, present or not, specify `--include "*"`.
+
+  To list annexed files whose content is not present, specify `--not --in=here`
+
 * `--print0`
 
   Output filenames terminated with nulls, for use with `xargs -0`
@@ -41,18 +54,14 @@
   This is intended to be parsed by programs that use
   git-annex. Each line of output is a JSON object.
 
-* matching options
-    
-  The [[git-annex-matching-options]](1)
-  can be used to specify files to list.
-
-  By default, the find command only lists annexed files whose content is
-  currently present. Specifying any of the matching options will override
-  this default behavior.
+* `--batch`
 
-  To list all annexed files, present or not, specify `--include "*"`.
+  Enables batch mode, in which a file is read in a line from stdin,
+  its information displayed, and repeat.
 
-  To list annexed files whose content is not present, specify `--not --in=here`
+  Note that if the file is not an annexed file, or is not present,
+  or otherwise doesn't meet the matching options, an empty line
+  will be output instead.
 
 # SEE ALSO
 
diff --git a/doc/git-annex-import.mdwn b/doc/git-annex-import.mdwn
--- a/doc/git-annex-import.mdwn
+++ b/doc/git-annex-import.mdwn
@@ -71,10 +71,19 @@
   Imports multiple files in parallel. This may be faster.
   For example: `-J4`  
 
+* `--json`
+
+  Enable JSON output. This is intended to be parsed by programs that use
+  git-annex. Each line of output is a JSON object.
+
 # CAVEATS
 
 Note that using `--deduplicate` or `--clean-duplicates` with the WORM
 backend does not look at file content, but filename and mtime.
+
+If annex.largefiles is configured, and does not match a file, `git annex
+import` will add the non-large file directly to the git repository,
+instead of to the annex.
 
 # SEE ALSO
 
diff --git a/doc/git-annex-info.mdwn b/doc/git-annex-info.mdwn
--- a/doc/git-annex-info.mdwn
+++ b/doc/git-annex-info.mdwn
@@ -30,6 +30,11 @@
 
   Show file sizes in bytes, disabling the default nicer units.
 
+* `--batch`
+
+  Enable batch mode, in which a line containing an item is read from stdin,
+  the information about it is output to stdout, and repeat.
+
 * file matching options
 
   When a directory is specified, the [[git-annex-matching-options]](1)
diff --git a/doc/git-annex-matchexpression.mdwn b/doc/git-annex-matchexpression.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/git-annex-matchexpression.mdwn
@@ -0,0 +1,51 @@
+# NAME
+
+git-annex matchexpression - checks if a preferred content expression matches
+
+# SYNOPSIS
+
+git annex matchexpression `expression [data]`
+
+# DESCRIPTION
+
+This plumbing-level command is given a prefferred content expression,
+and some data, and checks if the expression matches the data. It exits 0 if
+it matches, and 1 if not. If not enough data was provided, it displays an
+error and exits with special code 42.
+
+For example, this will exit 0:
+
+	git annex matchexpression "include=*.png and largerthan=1mb" --file=foo.png --size=10mb
+
+# OPTIONS
+
+* `--file=`
+
+  Provide the filename to match against. Note that the file does not have
+  to actually exist on disk.
+
+* `--size=`
+
+  Tell what the size of the file is. The size can be specified with any
+  commonly used units, for example, "0.5 gb" or "100 KiloBytes".
+
+* `--key=`
+
+  Tell what key is being matched against. This is needed for
+  matching expressions like "copies=N" and "metadata=tag=foo" and
+  "present", which all need to look up the information on file for a key.
+
+  Many keys have a known size, and so --size is not needed when specifying
+  such a key.
+
+# SEE ALSO
+
+[[git-annex]](1)
+
+[[git-annex-preferred-content]](1)
+
+# AUTHOR
+
+Joey Hess <id@joeyh.name>
+
+Warning: Automatically converted into a man page by mdwn2man. Edit with care.
diff --git a/doc/git-annex-preferred-content.mdwn b/doc/git-annex-preferred-content.mdwn
--- a/doc/git-annex-preferred-content.mdwn
+++ b/doc/git-annex-preferred-content.mdwn
@@ -1,6 +1,6 @@
 # NAME
 
-git-annex-preferred-content - 
+git-annex-preferred-content - which files are wanted in a repository
 
 # DESCRIPTION
 
@@ -17,28 +17,226 @@
 required content can be configured using `git annex vicfg` or
 `git annex required`.
 
-Preferred content expressions are similar, but not identical to
-the [[git-annex-matching-options]](1), just without the dashes.
+# SYNTAX
+
+Preferred content expressions use a similar syntax to 
+the [[git-annex-matching-options]](1), without the dashes.
 For example:
 
 	exclude=archive/* and (include=*.mp3 or smallerthan=1mb)
 
-The main differences are that `exclude=` and `include=` always
-match relative to the top of the git repository, and that there is
-no equivalent to `--in`.
+The idea is that you write an expression that files are matched against. If
+a file matches, the repository wants to store its content. If it doesn't,
+the repository wants to drop its content (if there are enough copies
+elsewhere to allow removing it).
 
-For more details about preferred content expressions, see
-See <https://git-annex.branchable.com/preferred_content/>
+# EXPRESSIONS
 
-When a repository is in one of the standard predefined groups, like "backup"
-and "client", setting its preferred content to "standard" will use a
-built-in preferred content expression developed for that group. 
-See <https://git-annex.branchable.com/preferred_content/standard_groups/>
+* `include=glob` and `exclude=glob`
 
-If you have set a groupwanted expression for a group, it will be used
-when a repository in the group has its preferred content set to
-"groupwanted".
+  Match files to include, or exclude.
 
+  While --include=glob and --exclude=glob match files relative to the current
+  directory, preferred content expressions always match files relative to the
+  top of the git repository. 
+
+  For example, suppose you put files into `archive` directories
+  when you're done with them. Then you could configure your laptop to prefer
+  to not retain those files, like this: `exclude=*/archive/*`
+
+* `copies=number`
+
+  Matches only files that git-annex believes to have the specified number
+  of copies, or more. Note that it does not check remotes to verify that
+  the copies still exist.
+
+  To decide if content should be dropped, git-annex evaluates the preferred
+  content expression under the assumption that the content has *already* been
+  dropped. If the content would not be wanted then, the drop can be done.
+  So, for example, `copies=2` in a preferred content expression lets
+  content be dropped only when there are currently 3 copies of it, including
+  the repo it's being dropped from. This is different than running `git annex
+  drop --copies=2`, which will drop files that currently have 2 copies.
+
+* `copies=trustlevel:number`
+
+  Matches only files that git-annex believes have the specified number
+  copies, on remotes with the specified trust level. For example,
+  `copies=trusted:2`
+
+  To match any trust level at or higher than a given level,
+  use `trustlevel+`. For example, `copies=semitrusted+:2`
+
+* `copies=groupname:number`
+
+  Matches only files that git-annex believes have the specified number of
+  copies, on remotes in the specified group. For example,
+  `copies=archive:2`
+
+  Preferred content expressions have no equivalent to the `--in`
+  option, but groups can accomplish similar things. You can add
+  repositories to groups, and match against the groups in a
+  preferred content expression. So rather than `--in=usbdrive`,
+  put all the USB drives into a "transfer" group, and use
+  `copies=transfer:1`
+
+* `lackingcopies=number`
+
+  Matches only files that git-annex believes need the specified number or
+  more additional copies to be made in order to satisfy their numcopies
+  settings.
+
+* `approxlackingcopies=number`
+
+  Like lackingcopies, but does not look at .gitattributes annex.numcopies
+  settings. This makes it significantly faster.
+
+* `inbackend=name`
+
+  Matches only files whose content is stored using the specified key-value
+  backend.
+
+* `inallgroup=groupname`
+
+  Matches only files that git-annex believes are present in all repositories
+  in the specified group.
+
+* `smallerthan=size` and `largerthan=size`
+
+  Matches only files whose content is smaller than, or larger than the
+  specified size.
+
+  The size can be specified with any commonly used units, for example,
+  "0.5 gb" or "100 KiloBytes"
+
+* `metadata=field=glob`
+
+  Matches only files that have a metadata field attached with a value that
+  matches the glob. The values of metadata fields are matched case
+  insensitively.
+
+  To match a tag "done", use `metadata=tag=done`
+
+  To match author metadata, use `metadata=author=*Smith`
+
+* `present`
+
+  Makes content be wanted if it's present, but not otherwise.
+
+  This leaves it up to you to use git-annex manually
+  to move content around. You can use this to avoid preferred content
+  settings from affecting a subdirectory. For example:
+  `auto/* or (include=ad-hoc/* and present)`
+
+  Note that `not present` is a very bad thing to put in a preferred content 
+  expression. It'll make it want to get content that's not present, and
+  drop content that is present! Don't go there..
+
+* `inpreferreddir`
+
+  Makes content be preferred if it's in a directory (located anywhere
+  in the tree) with a particular name. 
+
+  The name of the directory can be configured using 
+  `git annex enableremote $remote preferreddir=$dirname`
+
+  (If no directory name is configured, it uses "public" by default.)
+
+* `standard`
+
+  git-annex comes with some built-in preferred content expressions, that
+  can be used with repositories that are in some [[standard groups]].
+
+  When a repository is in exactly one such group, you can use the "standard"
+  keyword in its preferred content expression, to match whatever content
+  the group's expression matches.
+  (If a repository is put into multiple standard
+  groups, "standard" will match anything.. so don't do that!)
+
+  Most often, the whole preferred content expression is simply "standard".
+  But, you can do more complicated things, for example:
+  `standard or include=otherdir/*`
+
+* `groupwanted`
+
+  The "groupwanted" keyword can be used to refer to a preferred content
+  expression that is associated with a group. This is like the "standard"
+  keyword, but you can configure the preferred content expressions
+  using `git annex groupwanted`.
+
+  Note that when writing a groupwanted preferred content expression,
+  you can use all of the keywords listed above, including "standard".
+  (But not "groupwanted".)
+
+  For example, to make a variant of the standard client preferred content
+  expression that does not want files in the "out" directory, you
+  could run: `git annex groupwanted client "standard and exclude=out/*"`
+
+  Then repositories that are in the client group and have their preferred
+  content expression set to "groupwanted" will use that, while
+  other client repositories that have their preferred content expression
+  set to "standard" will use the standard expression.
+
+  Or, you could make a new group, with your own custom preferred content
+  expression tuned for your needs, and every repository you put in this
+  group and make its preferred content be "groupwanted" will use it.
+
+  For example, the archive group only wants to archive 1 copy of each file,
+  spread among every repository in the group.
+  Here's how to configure a group named redundantarchive, that instead
+  wants to contain 3 copies of each file:
+  
+	git annex groupwanted redundantarchive "not (copies=redundantarchive:3)"
+	for repo in foo bar baz; do
+		git annex group $repo redundantarchive
+		git annex wanted $repo groupwanted
+	done
+
+* `unused`
+
+  Matches only keys that `git annex unused` has determined to be unused.
+
+  This is related the the --unused option.
+  However, putting `unused` in a preferred content expression 
+  doesn't make git-annex consider those unused keys. So when git-annex is
+  only checking preferred content expressions against files in the
+  repository (which are obviously used), `unused` in a preferred
+  content expression won't match anything.
+
+  So when is `unused` useful in a preferred content expression?
+
+  Using `git annex sync --content --all` will operate on all files,
+  including unused ones, and take `unused` in preferred content expressions
+  into account.
+  
+  The git-annex assistant periodically scans for unused files, and
+  moves them to some repository whose preferred content expression
+  says it wants them. (Or, if annex.expireunused is set, it may just delete
+  them.)
+
+* `anything`
+
+  Matches any version of any file.
+
+* `not expression`
+
+  Inverts what the expression matches. For example, `not include=archive/*`
+  is the same as `exclude=archive/*`
+
+* `and` / `or` / `( expression )`
+
+  These can be used to build up more complicated expressions.
+
+# TESTING
+
+To check at the command line which files are matched by a repository's
+preferred content settings, you can use the --want-get and --want-drop
+options.
+
+For example, git annex find --want-get --not --in . will find all the files
+that git annex get --auto will want to get, and git annex find --want-drop --in
+. will find all the files that git annex drop --auto will want to drop.
+
 # SEE ALSO
 
 [[git-annex]](1)
@@ -46,6 +244,8 @@
 [[git-annex-vicfg]](1)
 
 [[git-annex-wanted]](1)
+
+<https://git-annex.branchable.com/preferred_content/>
 
 # AUTHOR
 
diff --git a/doc/git-annex-whereis.mdwn b/doc/git-annex-whereis.mdwn
--- a/doc/git-annex-whereis.mdwn
+++ b/doc/git-annex-whereis.mdwn
@@ -22,11 +22,6 @@
 
 # OPTIONS
 
-* `--json`
-
-  Enable JSON output. This is intended to be parsed by programs that use
-  git-annex. Each line of output is a JSON object.
-
 * file matching options
   
   The [[git-annex-matching-options]](1)
@@ -44,6 +39,18 @@
 
   Show whereis information for files found by last run of git-annex unused.
 
+* `--json`
+
+  Enable JSON output. This is intended to be parsed by programs that use
+  git-annex. Each line of output is a JSON object.
+
+* `--batch`
+
+  Enables batch mode, in which a file is read in a line from stdin,
+  its information displayed, and repeat.
+
+  Note that if the file is not an annexed file, an empty line will be
+  output instead.
 
 # SEE ALSO
 
diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn
--- a/doc/git-annex.mdwn
+++ b/doc/git-annex.mdwn
@@ -535,6 +535,12 @@
   
   See [[git-annex-examinekey]](1) for details.
 
+* `matchexpression`
+
+  Checks if a preferred content expression matches provided data.
+  
+  See [[git-annex-matchexpression]](1) for details.
+
 * `fromkey [key file]`
 
   Manually set up a file in the git repository to link to a specified key.
@@ -552,7 +558,6 @@
   Moves a file into the annex as the content of a key.
   
   See [[git-annex-setkey]](1) for details.
-
 
 * `dropkey [key ...]`
 
diff --git a/doc/install.mdwn b/doc/install.mdwn
--- a/doc/install.mdwn
+++ b/doc/install.mdwn
@@ -10,7 +10,7 @@
 &nbsp;&nbsp;[[Ubuntu]]            | `apt-get install git-annex`
 &nbsp;&nbsp;[[Fedora]]            | `yum install git-annex`
 &nbsp;&nbsp;[[FreeBSD]]           | `pkg install hs-git-annex`
-&nbsp;&nbsp;[[ArchLinux]]         | `yaourt -Sy git-annex-bin`
+&nbsp;&nbsp;[[ArchLinux]]         | `pacman -S git-annex`
 &nbsp;&nbsp;[[NixOS]]             | `nix-env -i git-annex`
 &nbsp;&nbsp;[[Gentoo]]            | `emerge git-annex`
 &nbsp;&nbsp;[[Void]]            | `xbps-install git-annex`
diff --git a/doc/install/ArchLinux.mdwn b/doc/install/ArchLinux.mdwn
--- a/doc/install/ArchLinux.mdwn
+++ b/doc/install/ArchLinux.mdwn
@@ -1,3 +1,7 @@
+There is now an [official git-annex package for Arch](https://www.archlinux.org/packages/community/x86_64/git-annex/), so to install it:
+
+	pacman -S git-annex
+
 There are at least four non non-official packages for git-annex in the Arch Linux User Repository. Any of these may be installed manually per [AUR guidelines](https://wiki.archlinux.org/index.php/AUR_User_Guidelines#Installing_packages) or using a wrapper such as [`yaourt`](https://wiki.archlinux.org/index.php/yaourt) shown below.
 
 1. The simplest method is to use the [git-annex-bin](https://aur.archlinux.org/packages/git-annex-bin/) package based on the [prebuilt Linux tarballs](http://downloads.kitenet.net/git-annex/linux/current/). This package includes many of the binary shims from the pre-built package. Although common Linux system utilities have been stripped in favor of normal dependencies, the pre-configured Haskell libraries included out of the box make this an easy install. The disadvantage is the resulting installation is a bit on the heavy side at nearly 100M.
diff --git a/doc/install/fromsource/comment_54_d7fabada8101596954ed7e401a8c460b._comment b/doc/install/fromsource/comment_54_d7fabada8101596954ed7e401a8c460b._comment
new file mode 100644
--- /dev/null
+++ b/doc/install/fromsource/comment_54_d7fabada8101596954ed7e401a8c460b._comment
@@ -0,0 +1,31 @@
+[[!comment format=mdwn
+ username="reyman64@f52a9d695f5dc1d5b0788fbb9877e9401fae7421"
+ nickname="reyman64"
+ subject="Error on compile"
+ date="2016-01-20T22:50:01Z"
+ content="""
+Hi, i have an error with last pulled version on my system : 
+
+[17 of 23] Compiling Text.Feed.Constructor ( src/Text/Feed/Constructor.hs, dist/build/Text/Feed/Constructor.o )
+
+src/Text/Feed/Constructor.hs:131:5: Warning:
+    Pattern match(es) are non-exhaustive
+    In a case alternative: Patterns not matched: XMLFeed _
+[18 of 23] Compiling Text.Feed.Export ( src/Text/Feed/Export.hs, dist/build/Text/Feed/Export.o )
+[19 of 23] Compiling Text.Feed.Import ( src/Text/Feed/Import.hs, dist/build/Text/Feed/Import.o )
+[20 of 23] Compiling Text.Feed.Util   ( src/Text/Feed/Util.hs, dist/build/Text/Feed/Util.o )
+[21 of 23] Compiling Text.Feed.Query  ( src/Text/Feed/Query.hs, dist/build/Text/Feed/Query.o )
+
+src/Text/Feed/Query.hs:66:53:
+    Module ‘Data.Time.Locale.Compat’ does not export ‘rfc822DateFormat’
+
+src/Text/Feed/Query.hs:66:71:
+    Module
+    ‘Data.Time.Locale.Compat’
+    does not export
+    ‘iso8601DateFormat’
+cabal: Error: some packages failed to install:
+feed-0.3.11.1 failed during the building phase. The exception was:
+ExitFailure 1
+
+"""]]
diff --git a/doc/install/fromsource/comment_55_0592c3d36ab569cd777009a491e25ba2._comment b/doc/install/fromsource/comment_55_0592c3d36ab569cd777009a491e25ba2._comment
new file mode 100644
--- /dev/null
+++ b/doc/install/fromsource/comment_55_0592c3d36ab569cd777009a491e25ba2._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 55"""
+ date="2016-01-22T15:56:01Z"
+ content="""
+@reyman64, that's a failure to build the feed package, not git-annex.
+See <http://hackage.haskell.org/package/feed> for a pointer to its bug
+tracker.
+
+The best way to avoid running into such problems is to use stack rather
+than cabal to build git-annex, since that avoids using bleeding-edge and
+thus frequently broken versions of the dependencies.
+"""]]
diff --git a/doc/install/fromsource/comment_57_13a198daa871e001b02b9df2e8d7c446._comment b/doc/install/fromsource/comment_57_13a198daa871e001b02b9df2e8d7c446._comment
new file mode 100644
--- /dev/null
+++ b/doc/install/fromsource/comment_57_13a198daa871e001b02b9df2e8d7c446._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 57"""
+ date="2016-01-26T18:50:30Z"
+ content="""
+Check out the tag for the release of git-annex that you want to build to
+avoid building from master, which may not be ready. In this case, I was
+adjusting some build flags this morning and hadn't tried a stack build yet.
+
+git-annex-shell is just a symlink to git-annex. I guess that stack install 
+bypasses the code that makes cabal install set up that symlink. You can make
+the symlink yourself I suppose.
+"""]]
diff --git a/doc/install/fromsource/comment_57_efac370d382fc79e1f207e8090e0f06b._comment b/doc/install/fromsource/comment_57_efac370d382fc79e1f207e8090e0f06b._comment
new file mode 100644
--- /dev/null
+++ b/doc/install/fromsource/comment_57_efac370d382fc79e1f207e8090e0f06b._comment
@@ -0,0 +1,45 @@
+[[!comment format=mdwn
+ username="reyman64@740e43250854ada1b8484b3bc44b53be03367d70"
+ nickname="reyman64"
+ subject="problem with latest pull and stack"
+ date="2016-01-26T16:49:05Z"
+ content="""
+
+Is there a tag in github to download the latest dev build  (if i want to compile a build with v6 repository for example) ? 
+
+Because after a recent `git pull` (commit `65f44423d1b9407a9c0e4a2b2e7e24b701f6dc32`
+ ) on master, i have this error on `stack install` :
+
+Also, `git-annex-shell` is not created by stack install, is it normal ? 
+
+```
+[reyman64@web504 git-annex]$ stack install git-annex --local-bin-path /home/reyman64/bin
+Invalid flag specification:
+- Package 'git-annex' does not define the following flags (specified in stack.yaml):
+  feed
+  quvi
+  tahoe
+  webapp-secure
+- Flags defined by package 'git-annex':
+  git-annex:android
+  git-annex:androidsplice
+  git-annex:assistant
+  git-annex:benchmark
+  git-annex:concurrentoutput
+  git-annex:cryptonite
+  git-annex:dns
+  git-annex:ekg
+  git-annex:network-uri
+  git-annex:pairing
+  git-annex:production
+  git-annex:s3
+  git-annex:tdfa
+  git-annex:testsuite
+  git-annex:torrentparser
+  git-annex:webapp
+  git-annex:webdav
+```
+
+Best,
+SR.
+"""]]
diff --git a/doc/install/fromsource/comment_58_64b44da5ec93fe4f50ad8b856823558d._comment b/doc/install/fromsource/comment_58_64b44da5ec93fe4f50ad8b856823558d._comment
new file mode 100644
--- /dev/null
+++ b/doc/install/fromsource/comment_58_64b44da5ec93fe4f50ad8b856823558d._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="reyman64@740e43250854ada1b8484b3bc44b53be03367d70"
+ nickname="reyman64"
+ subject="comment 58"
+ date="2016-01-26T19:09:05Z"
+ content="""
+Ok thanks for your answer :) 
+
+"""]]
diff --git a/doc/news/version_5.20151116.mdwn b/doc/news/version_5.20151116.mdwn
deleted file mode 100644
--- a/doc/news/version_5.20151116.mdwn
+++ /dev/null
@@ -1,32 +0,0 @@
-git-annex 5.20151116 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Use concurrent-output library when configured with -fConcurrentOutput.
-     This allows nicely displayed messages when using the -J flag.
-   * Additional commands now support the -J flag:
-     fsck, drop, add, addurl, import
-   * import: Avoid very ugly error messages when the directory files
-     are imported to is not a directort, but perhaps an annexed file.
-   * Concurrent progress bars are now displayed when using -J with a command
-     that moves file contents around.
-   * Fix race that could result in an annexed file's symlink not being
-     created, when eg, running concurrent git-annex adds.
-   * add: Fix error recovery rollback to not move the injested file content
-     out of the annex back to the file, because other files may point to
-     that same content. Instead, copy the injected file content out to
-     recover.
-   * quvi may output utf-8 encoded data when the conifigured locale doesn't
-     support that; avoid crashing on such invalid encoding.
-   * runshell: Avoid failing when $HOME/.ssh does not exist and cannot be
-     created.
-   * Make the git-annex-standalone.deb prevent runshell from installing
-     wrappers into $HOME/.ssh
-   * Make git-annex-standalone.deb include the git-annex html documentation,
-     desktop file, and base completion file, same as the regular git-annex.deb.
-   * fsck: When fscking a dead repo, avoid incorrect "fixing location log"
-     message, and display a warning about it being dead, since it's unusual
-     to have access to a dead repo.
-   * assistant: Pass ssh-options through 3 more git pull/push calls
-     that were missed before.
-   * Added annex.pidlock and annex.pidlocktimeout configuration to support
-     filesystems where POSIX fcntl locks cannot be used.
-   * init: Automatically enable annex.pidlock when necessary."""]]
diff --git a/doc/news/version_6.20160114.mdwn b/doc/news/version_6.20160114.mdwn
--- a/doc/news/version_6.20160114.mdwn
+++ b/doc/news/version_6.20160114.mdwn
@@ -1,58 +1,59 @@
 git-annex 6.20160114 released with [[!toggle text="these changes"]]
 [[!toggleable text="""
-   "hexapodia as the key insight"
-   * Added v6 repository mode, but v5 is still the default for now.
-   * unlock, lock: In v6 mode, unlocking a file changes it from a symlink to a
-     pointer file, and this change can be committed to the git repository.
-     For details, see http://git-annex.branchable.com/tips/unlocked\_files/
-   * The upgrade to version 6 is not done fully automatically yet, because
-     upgrading a direct mode repository to version 6 will prevent old
-     versions of git-annex from working in other clones of that repository.
-     For details, see http://git-annex.branchable.com/upgrades/
-   * init: --version parameter added to control which supported repository
-     version to use.
-   * init, upgrade: Configure .git/info/attributes to use git-annex
-     as a smudge filter. In v6 repository mode, this makes git add
-     add files to the annex in unlocked mode, unless overridden by
-     annex.largefiles configuration.
-   * assistant: In v6 mode, adds files in unlocked mode, so they can
-     continue to be modified.
-   * Added annex.thin setting, which makes unlocked files in v6 repositories
-     be hard linked to their content, instead of a copy. This saves disk
-     space but means any modification of an unlocked file will lose the local
-     (and possibly only) copy of the old version.
-   * Enable annex.thin by default on upgrade from direct mode to v6, since
-     direct mode made the same tradeoff.
-   * fix: Adjusts unlocked files as configured by annex.thin.
-   * persistent-sqlite is now a hard build dependency, since v6 repository
-     mode needs it.
-   * status: On crippled filesystems, was displaying M for all annexed files
-     that were present. Probably caused by a change to what git status
-     displays in this situation. Fixed by treating files git thinks are
-     modified the same as typechanged files.
-   * addurl: Added --batch and --with-files options.
-   * addurl: Support --json, particularly useful in --batch mode.
-   * addurl: Refuse to overwrite any existing, non-annexed file.
-   * Debian: Adjust build dependencies for webapp, DAV. Now available on
-     mips, mipsel, but temporarily removed armel since build is failing
-     there.
-   * info: Fix "backend usage" numbers, which were counting present keys
-     twice.
-   * info --json: Improve json for "backend usage", using a nested object
-     with fields for each backend instead of the previous weird nested lists.
-     This may break existing parsers of this json output, if there were any.
-   * whereis --json: Make url list be included in machine-parseable form.
-   * test: Added --keep-failures option.
-   * unused: Bug fix when a new file was added to the annex, and then
-     removed (but not git rmed). git still has the add staged in this case,
-     so the content should not be unused and was wrongly treated as such.
-   * migrate: Copy over metadata to new key.
-   * rekey: No longer copies over urls from the old to the new key.
-     It makes sense for migrate to do that, but not for this low-level
-     (and little used) plumbing command to.
-   * view: Fix crash in non-unicode capable locale when entering a view
-     of metadata containing a slash or backslash.
-   * When annex.http-headers is used to set the User-Agent header, avoid
-     sending User-Agent: git-annex
-   * Windows: Fix rsync cross-drive hack to work with msys2 rsync.
-     Thanks, Pieter Kitslaar."""]]
+"hexapodia as the key insight"
+
+* Added v6 repository mode, but v5 is still the default for now.
+* unlock, lock: In v6 mode, unlocking a file changes it from a symlink to a
+  pointer file, and this change can be committed to the git repository.
+  For details, see http://git-annex.branchable.com/tips/unlocked\_files/
+* The upgrade to version 6 is not done fully automatically yet, because
+  upgrading a direct mode repository to version 6 will prevent old
+  versions of git-annex from working in other clones of that repository.
+  For details, see http://git-annex.branchable.com/upgrades/
+* init: --version parameter added to control which supported repository
+  version to use.
+* init, upgrade: Configure .git/info/attributes to use git-annex
+  as a smudge filter. In v6 repository mode, this makes git add
+  add files to the annex in unlocked mode, unless overridden by
+  annex.largefiles configuration.
+* assistant: In v6 mode, adds files in unlocked mode, so they can
+  continue to be modified.
+* Added annex.thin setting, which makes unlocked files in v6 repositories
+  be hard linked to their content, instead of a copy. This saves disk
+  space but means any modification of an unlocked file will lose the local
+  (and possibly only) copy of the old version.
+* Enable annex.thin by default on upgrade from direct mode to v6, since
+  direct mode made the same tradeoff.
+* fix: Adjusts unlocked files as configured by annex.thin.
+* persistent-sqlite is now a hard build dependency, since v6 repository
+  mode needs it.
+* status: On crippled filesystems, was displaying M for all annexed files
+  that were present. Probably caused by a change to what git status
+  displays in this situation. Fixed by treating files git thinks are
+  modified the same as typechanged files.
+* addurl: Added --batch and --with-files options.
+* addurl: Support --json, particularly useful in --batch mode.
+* addurl: Refuse to overwrite any existing, non-annexed file.
+* Debian: Adjust build dependencies for webapp, DAV. Now available on
+  mips, mipsel, but temporarily removed armel since build is failing
+  there.
+* info: Fix "backend usage" numbers, which were counting present keys
+  twice.
+* info --json: Improve json for "backend usage", using a nested object
+  with fields for each backend instead of the previous weird nested lists.
+  This may break existing parsers of this json output, if there were any.
+* whereis --json: Make url list be included in machine-parseable form.
+* test: Added --keep-failures option.
+* unused: Bug fix when a new file was added to the annex, and then
+  removed (but not git rmed). git still has the add staged in this case,
+  so the content should not be unused and was wrongly treated as such.
+* migrate: Copy over metadata to new key.
+* rekey: No longer copies over urls from the old to the new key.
+  It makes sense for migrate to do that, but not for this low-level
+  (and little used) plumbing command to.
+* view: Fix crash in non-unicode capable locale when entering a view
+  of metadata containing a slash or backslash.
+* When annex.http-headers is used to set the User-Agent header, avoid
+  sending User-Agent: git-annex
+* Windows: Fix rsync cross-drive hack to work with msys2 rsync.
+  Thanks, Pieter Kitslaar."""]]
diff --git a/doc/news/version_6.20160126.mdwn b/doc/news/version_6.20160126.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/news/version_6.20160126.mdwn
@@ -0,0 +1,29 @@
+git-annex 6.20160126 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Fix nasty reversion in the last release that broke sync --content's
+     handling of many preferred content expressions.
+   * whereis --json: Urls are now listed inside the remote that claims them,
+     rather than all together at the end.
+   * info, add, whereis, find: Support --batch mode.
+   * Force output to be line-buffered, even when it's not connected to the
+     terminal. This is particuarly important for commands with --batch
+     output, which was not always being flushed at an appropriate time.
+   * add, import: Support --json output.
+   * addurl --json: Include field for added key (unless the file was
+     added directly to git due to annex.largefiles configuration.)
+     (Also done by add --json and import --json)
+   * registerurl: Check if a remote claims the url, same as addurl does.
+   * Bug fix: Git config settings passed to git-annex -c did not always take
+     effect.
+   * assistant: Use udisks2 dbus events to detect when disks are mounted,
+     instead of relying on gnome/kde stuff that is not stable.
+   * Fix build with QuickCheck 2.8.2
+   * matchexpression: New plumbing command to check if a preferred content
+     expression matches some data.
+   * Removed the webapp-secure build flag, rolling it into the webapp build
+     flag.
+   * Removed the quvi, tahoe, feed, and tfds build flags, adding
+     aeson feed and regex-tdfa to the core dependencies.
+   * Roll the dns build flag into the assistant build flag.
+   * Debian: Avoid building debug package, since gdb is not often useful
+     to debug haskell programs."""]]
diff --git a/doc/not.mdwn b/doc/not.mdwn
--- a/doc/not.mdwn
+++ b/doc/not.mdwn
@@ -39,9 +39,9 @@
 * git-annex is not [git-media](https://github.com/schacon/git-media),
   although they both approach the same problem from a similar direction.
   I only learned of git-media after writing git-annex, but I probably
-  would have still written git-annex instead of using it. Currently,
-  git-media has the advantage of using git smudge filters rather than
-  git-annex's pile of symlinks, and it may be a tighter fit for certain
+  would have still written git-annex instead of using it. 
+  git-media uses git smudge filters (recently supported in git-annex as
+  well; see [[tips/unlocked_files]]) and may be a tighter fit for certain
   situations. It lacks git-annex's support for widely distributed storage,
   using only a single backend data store. It also does not support
   partial checkouts of file contents, like git-annex does.
diff --git a/doc/preferred_content.mdwn b/doc/preferred_content.mdwn
--- a/doc/preferred_content.mdwn
+++ b/doc/preferred_content.mdwn
@@ -18,16 +18,6 @@
 If it doesn't, the repository wants to drop its content
 (if there are enough copies elsewhere to allow removing it).
 
-## finding preferred content
-
-To check at the command line which files are matched by preferred content
-settings, you can use the --want-get and --want-drop options.
-
-For example, `git annex find --want-get --not --in .` will find all the
-files that `git annex get --auto` will want to get, and `git annex find
---want-drop --in .` will find all the files that `git annex drop --auto`
-will want to drop.
-
 ## writing expressions
 
 [[!template id=note text="""
@@ -42,214 +32,15 @@
 is standard for that group. See [[standard_groups]] for a list.
 """]]
 
-
-The expressions are very similar to the matching options documented
-on the [[git-annex-matching-options]] man page.
-At the command line, you can use those options in commands like this:
-
-	git annex get --include='*.mp3' --and -'(' --not --largerthan=100mb -')'
-
-The equivalent preferred content expression looks like this:
-
-	include=*.mp3 and (not largerthan=100mb)
-
-So, just remove the dashes, basically. But, there are some differences
-between the command line options and expressions, so see the documentation
-below to get the full story.
-
-* `include=glob` and `exclude=glob`
-
-  Match files to include, or exclude.
-
-  While --include=glob and --exclude=glob match files relative to the current
-  directory, preferred content expressions always match files relative to the
-  top of the git repository. 
-
-  For example, suppose you put files into `archive` directories
-  when you're done with them. Then you could configure your laptop to prefer
-  to not retain those files, like this: `exclude=*/archive/*`
-
-* `copies=number`
-
-  Matches only files that git-annex believes to have the specified number
-  of copies, or more. Note that it does not check remotes to verify that
-  the copies still exist.
-
-  To decide if content should be dropped, git-annex evaluates the preferred
-  content expression under the assumption that the content has *already* been
-  dropped. If the content would not be wanted then, the drop can be done.
-  So, for example, `copies=2` in a preferred content expression lets
-  content be dropped only when there are currently 3 copies of it, including
-  the repo it's being dropped from. This is different than running `git annex
-  drop --copies=2`, which will drop files that currently have 2 copies.
-
-* `copies=trustlevel:number`
-
-  Matches only files that git-annex believes have the specified number
-  copies, on remotes with the specified trust level. For example,
-  `copies=trusted:2`
-
-  To match any trust level at or higher than a given level,
-  use `trustlevel+`. For example, `--copies=semitrusted+:2`
-
-* `copies=groupname:number`
-
-  Matches only files that git-annex believes have the specified number of
-  copies, on remotes in the specified group. For example,
-  `copies=archive:2`
-
-  Preferred content expressions have no equivalent to the `--in`
-  option, but groups can accomplish similar things. You can add
-  repositories to groups, and match against the groups in a
-  preferred content expression. So rather than `--in=usbdrive`,
-  put all the USB drives into a "transfer" group, and use
-  `copies=transfer:1`
-
-* `lackingcopies=number`
-
-  Matches only files that git-annex believes need the specified number or
-  more additional copies to be made in order to satisfy their numcopies
-  settings.
-
-* `approxlackingcopies=number`
-
-  Like lackingcopies, but does not look at .gitattributes annex.numcopies
-  settings. This makes it significantly faster.
-
-* `inbackend=name`
-
-  Matches only files whose content is stored using the specified key-value
-  backend.
-
-* `inallgroup=groupname`
-
-  Matches only files that git-annex believes are present in all repositories
-  in the specified group.
-
-* `smallerthan=size` and `largerthan=size`
-
-  Matches only files whose content is smaller than, or larger than the
-  specified size.
-
-  The size can be specified with any commonly used units, for example,
-  "0.5 gb" or "100 KiloBytes"
-
-* `metadata=field=glob`
-
-  Matches only files that have a metadata field attached with a value that
-  matches the glob. The values of metadata fields are matched case
-  insensitively.
-
-  To match a tag "done", use `metadata=tag=done`
-
-  To match author metadata, use `metadata=author=* Smith`
-
-* `present`
-
-  Makes content be wanted if it's present, but not otherwise.
-
-  This leaves it up to you to use git-annex manually
-  to move content around. You can use this to avoid preferred content
-  settings from affecting a subdirectory. For example:
-  `auto/* or (include=ad-hoc/* and present)`
-
-  Note that `not present` is a very bad thing to put in a preferred content 
-  expression. It'll make it want to get content that's not present, and
-  drop content that is present! Don't go there..
-
-* `inpreferreddir`
-
-  Makes content be preferred if it's in a directory (located anywhere
-  in the tree) with a particular name. 
-
-  The name of the directory can be configured using 
-  `git annex enableremote $remote preferreddir=$dirname`
-
-  (If no directory name is configured, it uses "public" by default.)
-
-* `standard`
-
-  git-annex comes with some built-in preferred content expressions, that
-  can be used with repositories that are in some [[standard_groups]].
-
-  When a repository is in exactly one such group, you can use the "standard"
-  keyword in its preferred content expression, to match whatever content
-  the group's expression matches.
-  (If a repository is put into multiple standard
-  groups, "standard" will match anything.. so don't do that!)
-
-  Most often, the whole preferred content expression is simply "standard".
-  But, you can do more complicated things, for example:
-  `standard or include=otherdir/*`
-
-* `groupwanted`
-
-  The "groupwanted" keyword can be used to refer to a preferred content
-  expression that is associated with a group. This is like the "standard"
-  keyword, but you can configure the preferred content expressions
-  using `git annex groupwanted`.
-
-  Note that when writing a groupwanted preferred content expression,
-  you can use all of the keywords listed above, including "standard".
-  (But not "groupwanted".)
-
-  For example, to make a variant of the standard client preferred content
-  expression that does not want files in the "out" directory, you
-  could run: `git annex groupwanted client "standard and exclude=out/*"`
-
-  Then repositories that are in the client group and have their preferred
-  content expression set to "groupwanted" will use that, while
-  other client repositories that have their preferred content expression
-  set to "standard" will use the standard expression.
-
-  Or, you could make a new group, with your own custom preferred content
-  expression tuned for your needs, and every repository you put in this
-  group and make its preferred content be "groupwanted" will use it.
-
-  For example, the archive group only wants to archive 1 copy of each file,
-  spread among every repository in the group.
-  Here's how to configure a group named redundantarchive, that instead
-  wants to contain 3 copies of each file:
-  
-	git annex groupwanted redundantarchive "not (copies=redundantarchive:3)"
-	for repo in foo bar baz; do
-		git annex group $repo redundantarchive
-		git annex wanted $repo groupwanted
-	done
-
-* `unused`
-
-  Matches only keys that `git annex unused` has determined to be unused.
-
-  This is related the the --unused option.
-  However, putting `unused` in a preferred content expression 
-  doesn't make git-annex consider those unused keys. So when git-annex is
-  only checking preferred content expressions against files in the
-  repository (which are obviously used), `unused` in a preferred
-  content expression won't match anything.
-
-  So when is `unused` useful in a preferred content expression?
-
-  1. Using `git annex sync --content --all` will operate on all files,
-    including unused ones, and take `unused` in preferred content expressions
-    into account.
-  2. The git-annex assistant periodically scans for unused files, and
-    moves them to some repository whose preferred content expression
-    says it wants them. (Or, if annex.expireunused is set, it may just delete
-    them.)
-
-* `anything`
-
-  Matches any version of any file.
-
-* `not expression`
+See the man page [[git-annex-preferred-content]] for details on the syntax
+of preferred content expressions.
 
-  Inverts what the expression matches. For example, `not include=archive/*`
-  is the same as `exclude=archive/*`
+An example:
 
-* `and` / `or` / `( expression )`
+	include=*.mp3 and (not largerthan=100mb) and exclude=old/*
 
-  These can be used to build up more complicated expressions.
+This makes all .mp3 files, and all other files that are less than 100 mb in
+size be preferred content. It excludes all files under the "old" directory.
 
 ## upgrades
 
diff --git a/doc/tips/unlocked_files.mdwn b/doc/tips/unlocked_files.mdwn
--- a/doc/tips/unlocked_files.mdwn
+++ b/doc/tips/unlocked_files.mdwn
@@ -31,7 +31,7 @@
 
 ## enter v6 mode
 
-/!\ This is an experimental feature; see its [[todo_list|todo/smudge]]
+/!\ This is an new feature; see its [[todo_list|todo/smudge]]
 for known issues.
 
 This led to the v6 repository mode, which makes unlocked files remain
@@ -87,7 +87,8 @@
 
 Under the hood, this uses git's [[todo/smudge]] filter interface, and
 git-annex converts between the content of the big file and a pointer file,
-which is what gets committed to git. 
+which is what gets committed to git. All the regular git-annex commands
+(get, drop, etc) can be used on unlocked files too.
 
 A v6 repository can contain both locked and unlocked files. You can switch 
 a file back and forth using the `git annex lock` and `git annex unlock`
@@ -113,18 +114,13 @@
 That's a good safe default. But there are ways to use git-annex that
 make the second copy not be worth keeping:
 
-[[!template id=note text="""
-When a [[direct_mode]] repository is upgraded, annex.thin is automatically
-set, because direct mode made the same single-copy tradeoff.
-"""]]
-
-* When you're using git-annex to sync the current version of files acrosss
+* When you're using git-annex to sync the current version of files across
   devices, and don't care much about previous versions.
 * When you have set up a backup repository, and use git-annex to copy
   your files to the backup.
 
 In situations like these, you may want to avoid the overhead of the second
-local copy of unlocked files. There's config setting for that.
+local copy of unlocked files. There's a config setting for that.
 
 	git config annex.thin true
 
@@ -137,6 +133,11 @@
 hard links. Ie, not Windows, and not FAT filesystems.
 
 ## tradeoffs
+
+[[!template id=note text="""
+When a [[direct_mode]] repository is upgraded, annex.thin is automatically
+set, because direct mode made the same single-copy tradeoff.
+"""]]
 
 Setting annex.thin can save a lot of disk space, but it's a tradeoff
 between disk usage and safety. 
diff --git a/doc/tips/unlocked_files/comment_1_29cef6b8e48e722fafed3fe9b7cefe08._comment b/doc/tips/unlocked_files/comment_1_29cef6b8e48e722fafed3fe9b7cefe08._comment
new file mode 100644
--- /dev/null
+++ b/doc/tips/unlocked_files/comment_1_29cef6b8e48e722fafed3fe9b7cefe08._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="grawity@2ea26be48562f66fcb9b66307da72b1e2e37453f"
+ nickname="grawity"
+ subject="usage changes"
+ date="2016-01-15T13:31:37Z"
+ content="""
+This sounds interesting. But OTOH I'm curious about upgrades from direct mode (which I assume will soon go away):
+
+If currently I just use `annex add; annex sync --content` on a media repo, would that change to `git add --all; git commit -m whatever; annex unlock *; annex sync --content`? That is, will v6 require the manual commit step?
+
+Also, when `annex get` or `annex sync` retrieve files from another repo, will there be an option to have the files unlocked by default, as in v5 direct mode?
+
+(I'm kinda hoping for `annex init --thin` or something similar to the v5 `annex direct`, as manually setting config options is easy to forget.)
+"""]]
diff --git a/doc/tips/unlocked_files/comment_2_54a1811ef2f57f0843e48572ab6713b8._comment b/doc/tips/unlocked_files/comment_2_54a1811ef2f57f0843e48572ab6713b8._comment
new file mode 100644
--- /dev/null
+++ b/doc/tips/unlocked_files/comment_2_54a1811ef2f57f0843e48572ab6713b8._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2016-01-15T19:07:24Z"
+ content="""
+Direct mode is not going away any time soon.
+
+`git add` adds the file to the annex in unlocked mode, and `git annex sync`
+commits any such adds the same as any other changes, so all you need is
+`git add --all; git annex sync --content`
+
+Whether a file is locked or unlocked is a property of the file, that gets
+committed to git, so when you commit some unlocked files, they'll be
+unlocked when they appear in other clones of the repository.
+"""]]
diff --git a/doc/tips/unlocked_files/comment_3_f5f29661bd04a6bba6158307465981d9._comment b/doc/tips/unlocked_files/comment_3_f5f29661bd04a6bba6158307465981d9._comment
new file mode 100644
--- /dev/null
+++ b/doc/tips/unlocked_files/comment_3_f5f29661bd04a6bba6158307465981d9._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="wsha.code+ga@b38779424f41c5701bbe5937340be43ff1474b2d"
+ nickname="wsha.code+ga"
+ subject="comment 3"
+ date="2016-01-16T13:03:26Z"
+ content="""
+1. If you want to save a committed version of a file, is there a way to do that, other than `sync`ing to a remote that does not have `annex.thin` set?
+2. If you `add` and `commit` a file multiple times in a repo without `sync`ing to a remote, what does the commit history look like on a remote when you do `sync` it? It just has several commits for which the file contents are not available?
+3. If you want to preserve history with `annex.thin` set, do you just have to `sync` manually after each commit? I guess you might want to set up a git commit hook to do that in that case.
+"""]]
diff --git a/doc/tips/unlocked_files/comment_4_a8139747da8cbb2510b3647ba448d72d._comment b/doc/tips/unlocked_files/comment_4_a8139747da8cbb2510b3647ba448d72d._comment
new file mode 100644
--- /dev/null
+++ b/doc/tips/unlocked_files/comment_4_a8139747da8cbb2510b3647ba448d72d._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2016-01-20T18:49:07Z"
+ content="""
+@wsha.code, if you opt to use annex.thin, then commit a file, and then
+edit the same file again and commit again, the older commit will be in
+git's history, but if you check it out, the old content of the file won't
+be available. This is very similar to what happens when not using annex.thin,
+but later running git-annex unused and dropping the "unused" intermediate
+version of the file.
+
+Running `git annex sync --content` or just `git annex copy --to remote`
+will get the thin version of the file saved on a remote, and then editing
+it won't lose the content. But note that if you edited a file while it was
+being copied off to the remote, the previous version would still get lost.
+
+If these seem like troublesome behaviors, well that's why annex.thin is not
+enabled by default.
+"""]]
diff --git a/doc/todo/--batch_for_add.mdwn b/doc/todo/--batch_for_add.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/todo/--batch_for_add.mdwn
@@ -0,0 +1,7 @@
+should be extremely helpful when adding many files one at a time ;)
+
+[[!meta author=yoh]]
+
+> Implemented; made it not recurse into directories and output a blank line
+> if it doesn't add the file, so there's aways 1 line of output for each
+> input. [[done]] --[[Joey]]
diff --git a/doc/todo/--batch_for_add/comment_1_b1362c86e162a49717d7e3b0816025ba._comment b/doc/todo/--batch_for_add/comment_1_b1362c86e162a49717d7e3b0816025ba._comment
new file mode 100644
--- /dev/null
+++ b/doc/todo/--batch_for_add/comment_1_b1362c86e162a49717d7e3b0816025ba._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2016-01-19T15:32:48Z"
+ content="""
+Has similar problems to batching find; if a whole directory is added any
+number of lines can be output.
+
+So, either needs a similar thing to indicate end of output for current
+item, or perhaps it would make sense for the batched add to not recurse
+into directories, so it would always output exactly 1 line per input.
+"""]]
diff --git a/doc/todo/--batch_for_find.mdwn b/doc/todo/--batch_for_find.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/todo/--batch_for_find.mdwn
@@ -0,0 +1,5 @@
+I am using `annex find filename` after running 'annex add` to figure out if file was added to annex or to git.
+
+[[!meta author=yoh]]
+
+> [[done]] --[[Joey]]
diff --git a/doc/todo/--batch_for_info.mdwn b/doc/todo/--batch_for_info.mdwn
--- a/doc/todo/--batch_for_info.mdwn
+++ b/doc/todo/--batch_for_info.mdwn
@@ -1,3 +1,5 @@
 I guess as other commands which take separate files/keys as its argument(s), having --batch for info command would be of benefit
 
 [[!meta author=yoh]]
+
+> [[done]] --[[Joey]]
diff --git a/doc/todo/--batch_for_whereis.mdwn b/doc/todo/--batch_for_whereis.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/todo/--batch_for_whereis.mdwn
@@ -0,0 +1,3 @@
+subject.  IMHO yet another useful command to be batched
+
+> [[done]] --[[Joey]]
diff --git a/doc/todo/Lower-case_extension_for_SHA256E_and_similar.mdwn b/doc/todo/Lower-case_extension_for_SHA256E_and_similar.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/todo/Lower-case_extension_for_SHA256E_and_similar.mdwn
@@ -0,0 +1,19 @@
+Please consider making the `*E` backends lower-case the file extensions. This improves deduplication especially with image files, where cameras often use `*.JPG`, while other software such as the Dropbox Android app rename the images to `*.jpg`.
+We talked about that very shortly a few months ago:
+
+(Log starts 2015-08-06 21:11:40 CET)
+
+     tribut  is there a backend that lowercases the extension? or do the *E backends do that anyway?
+     joeyh   it does not
+     tribut  but would it make sense? or am i missing something?
+     joeyh   I don't know.. the extension is only there for stupid programs that follow symlinks and
+             check extensions. If such a program cares about .GIF vss .gif, you might have a problem
+     joeyh   I think that you can git-annex migrate from hashE to hash, then migrate back, and it'll
+             update to the new file extension.
+     tribut  i was thinking about content-identical images with .JPG or .jpg extension
+     tribut  and because even the most retarded of programs wont care, i thought the backend could
+             lowercase the extension
+     joeyh   ah, sure, using the E backend reduces the ability to de-duplicate
+     joeyh   I'd not want to add a e backend set just for this. There's no requirement that the
+             extension extraction code be stable, so it could be considered changing it to lower-case
+     joeyh   otoh, I have no idea if some programs are dumb enough to care about .git vs .GIF
diff --git a/doc/todo/Package_for_Lacie_NasOS__63__.mdwn b/doc/todo/Package_for_Lacie_NasOS__63__.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/todo/Package_for_Lacie_NasOS__63__.mdwn
@@ -0,0 +1,1 @@
+Would it be possible to create a package for Lacie's NacOS?
diff --git a/doc/todo/smudge.mdwn b/doc/todo/smudge.mdwn
--- a/doc/todo/smudge.mdwn
+++ b/doc/todo/smudge.mdwn
@@ -4,12 +4,16 @@
 
 * Reconcile staged changes into the associated files database, whenever
   the database is queried. This is needed to handle eg:
+
+  ```
   	git add largefile
 	git mv largefile othername
 	git annex move othername --to foo
 	# fails to drop content from associated file othername,
 	# because it doesn't know it has that name
 	# git commit clears up this mess
+  ```
+
 * Dropping a smudged file causes git status (and git annex status)
   to show it as modified,  because the timestamp has changed. 
   Getting a smudged file can also cause this.
diff --git a/doc/upgrades.mdwn b/doc/upgrades.mdwn
--- a/doc/upgrades.mdwn
+++ b/doc/upgrades.mdwn
@@ -46,7 +46,7 @@
 ## v5 -> v6 (git-annex version 6.x)
 
 The upgrade from v5 to v6 is handled manually. Run `git-annex upgrade`
-perform the upgrade.
+performs the upgrade.
 
 Warning: All places that a direct mode repository is cloned to should be 
 running git-annex version 6.x before you upgrade the repository.
@@ -72,12 +72,20 @@
 * `git annex unlock` and `git annex lock` change how the pointer to 
   the annexed content is stored in git.
 
+There is also a new `annex.thin` setting, which makes unlocked files in v6 repositories
+be hard linked to their content, instead of a copy. This saves disk
+space but means any modification of an unlocked file will lose the local
+(and possibly only) copy of the old version.
+
 On upgrade, all files in a direct mode repository will be converted to
-unlocked files. The upgrade will stage changes to all annexed files in
+unlocked files with the `annex.thin` setting enabled.
+The upgrade will stage changes to all annexed files in
 the git repository, which you can then commit.
 
 If a repository has some clones using direct mode and some using indirect
 mode, all the files will end up unlocked in all clones after the upgrade.
+
+See [[tips/unlocked_files/]] for more details about locked files and thin mode.
 
 ## v4 -> v5 (git-annex version 5.x)
 
diff --git a/git-annex.cabal b/git-annex.cabal
--- a/git-annex.cabal
+++ b/git-annex.cabal
@@ -1,5 +1,5 @@
 Name: git-annex
-Version: 6.20160114
+Version: 6.20160126
 Cabal-Version: >= 1.8
 License: GPL-3
 Maintainer: Joey Hess <id@joeyh.name>
@@ -43,15 +43,9 @@
 Flag Webapp
   Description: Enable git-annex webapp
 
-Flag Webapp-secure
-  Description: Secure webapp
-
 Flag Pairing
   Description: Enable pairing
 
-Flag DNS
-  Description: Enable the haskell DNS library for DNS lookup
-
 Flag Production
   Description: Enable production build (slower build; faster binary)
 
@@ -66,18 +60,6 @@
 Flag TestSuite
   Description: Embed the test suite into git-annex
 
-Flag TDFA
-  Description: Use regex-tdfa for wildcards
-
-Flag Feed
-  Description: Enable podcast feed support
-
-Flag Quvi
-  Description: Enable use of quvi to download videos
-
-Flag Tahoe
-  Description: Enable the tahoe special remote
-
 Flag TorrentParser
   Description: Use haskell torrent library to parse torrent files
 
@@ -117,13 +99,20 @@
    bloomfilter, edit-distance,
    resourcet, http-conduit, http-client, http-types,
    time, old-locale,
-   esqueleto, persistent-sqlite, persistent, persistent-template
+   esqueleto, persistent-sqlite, persistent, persistent-template,
+   aeson,
+   feed,
+   regex-tdfa
   CC-Options: -Wall
   GHC-Options: -Wall -fno-warn-tabs
   Extensions: PackageImports
   -- Some things don't work with the non-threaded RTS.
   GHC-Options: -threaded
 
+  -- Fully optimize for production.
+  if flag(Production)
+    GHC-Options: -O2
+
   -- Avoid linking with unused dynamic libaries.
   -- (Only tested on Linux).
   if os(Linux)
@@ -140,10 +129,6 @@
   else
     Build-Depends: cryptohash (>= 0.11.0)
 
-  -- Fully optimize for production.
-  if flag(Production)
-    GHC-Options: -O2
-
   if (os(windows))
     Build-Depends: Win32, Win32-extras, unix-compat (>= 0.4.1.3), setenv,
       process (>= 1.3.0.0)
@@ -160,12 +145,6 @@
      crypto-api
     CPP-Options: -DWITH_TESTSUITE
 
-  if flag(TDFA)
-    Build-Depends: regex-tdfa
-    CPP-Options: -DWITH_TDFA
-  else
-    Build-Depends: regex-compat
-
   if flag(S3)
     Build-Depends: conduit, conduit-extra, aws (>= 0.9.2)
     CPP-Options: -DWITH_S3
@@ -175,6 +154,7 @@
     CPP-Options: -DWITH_WEBDAV
 
   if flag(Assistant) && ! os(solaris)
+    Build-Depends: dns
     CPP-Options: -DWITH_ASSISTANT
 
   if flag(Assistant)
@@ -217,17 +197,15 @@
      yesod-core (>= 1.2.19),
      path-pieces (>= 0.1.4),
      warp (>= 3.0.0.5),
-     warp-tls,
+     warp-tls (>= 1.4),
      wai, wai-extra,
      blaze-builder, crypto-api, clientsession,
-     template-haskell, aeson,
-     shakespeare (>= 2.0.0)
+     template-haskell,
+     shakespeare (>= 2.0.0),
+     securemem,
+     byteable
     CPP-Options: -DWITH_WEBAPP
 
-  if flag(Webapp) && flag (Webapp-secure)
-    Build-Depends: warp-tls (>= 1.4), securemem, byteable
-    CPP-Options: -DWITH_WEBAPP_SECURE
-
   if flag(Pairing)
     Build-Depends: network-multicast, network-info
     CPP-Options: -DWITH_PAIRING
@@ -235,23 +213,7 @@
   if (! os(windows))
     Build-Depends: network-protocol-xmpp, gnutls (>= 0.1.4), xml-types
     CPP-Options: -DWITH_XMPP
-
-  if flag(DNS)
-    Build-Depends: dns
-    CPP-Options: -DWITH_DNS
-
-  if flag(Feed)
-    Build-Depends: feed (>= 0.3.4)
-    CPP-Options: -DWITH_FEED
   
-  if flag(Quvi)
-    Build-Depends: aeson
-    CPP-Options: -DWITH_QUVI
-  
-  if flag(Tahoe)
-    Build-Depends: aeson
-    CPP-Options: -DWITH_TAHOE
-
   if flag(TorrentParser)
     Build-Depends: torrent (>= 10000.0.0)
     CPP-Options: -DWITH_TORRENTPARSER
diff --git a/man/git-annex-add.1 b/man/git-annex-add.1
--- a/man/git-annex-add.1
+++ b/man/git-annex-add.1
@@ -6,8 +6,9 @@
 git annex add \fB[path ...]\fP
 .PP
 .SH DESCRIPTION
-Adds files in the path to the annex. If no path is specified, adds
-files from the current directory and below.
+Adds the specified files to the annex. If a directory is specified,
+acts on all files inside the directory and its subdirectories.
+If no path is specified, adds files from the current directory and below.
 .PP
 Files that are already checked into git and are unmodified, or that
 git has been configured to ignore will be silently skipped.
@@ -46,6 +47,18 @@
 .IP "\fB\-\-jobs=N\fP \fB\-JN\fP"
 Adds multiple files in parallel. This may be faster.
 For example: \fB\-J4\fP  
+.IP
+.IP "\fB\-\-json\fP"
+Enable JSON output. This is intended to be parsed by programs that use
+git-annex. Each line of output is a JSON object.
+.IP
+.IP "\fB\-\-batch\fP"
+Enables batch mode, in which a file to add is read in a line from stdin,
+the file is added, and repeat.
+.IP
+Note that if a file is skipped (due to not existing, being gitignored,
+already being in git etc), an empty line will be output instead of the
+normal output produced when adding a file.
 .IP
 .SH SEE ALSO
 git-annex(1)
diff --git a/man/git-annex-addurl.1 b/man/git-annex-addurl.1
--- a/man/git-annex-addurl.1
+++ b/man/git-annex-addurl.1
@@ -76,6 +76,12 @@
 Enable JSON output. This is intended to be parsed by programs that use
 git-annex. Each line of output is a JSON object.
 .IP
+.SH CAVEATS
+If annex.largefiles is configured, and does not match a file, git annex
+addurl will add the non\-large file directly to the git repository,
+instead of to the annex. However, this is not done when \-\-fast or \-\-relaxed
+is used.
+.PP
 .SH SEE ALSO
 git-annex(1)
 .PP
diff --git a/man/git-annex-clean.1 b/man/git-annex-clean.1
deleted file mode 100644
--- a/man/git-annex-clean.1
+++ /dev/null
@@ -1,33 +0,0 @@
-.TH git-annex-clean 1
-.SH NAME
-git-annex-clean \- git filter driver for git-annex
-.PP
-.SH SYNOPSIS
-git annex clean
-.PP
-.SH DESCRIPTION
-When git-annex is used as a git filter driver, this command is run
-by git commands such as \fBgit add\fP. It generates a file that
-is added to the git repository and points to the git-annex object
-containing the content of a large file.
-.PP
-To configure git to use git-annex as a git filter driver, place the
-following in the .gitattributes file:
-.PP
- * filter=annex
-\&.* !filter
-.PP
-The annex.largefiles config is consulted to decide if a given file should
-be added to git as\-is, or if its content are large enough to need to use
-git-annex.
-.PP
-.SH SEE ALSO
-git-annex(1)
-.PP
-git-annex\-smudge(1)
-.PP
-.SH AUTHOR
-Joey Hess <id@joeyh.name>
-.PP
-.PP
-
diff --git a/man/git-annex-find.1 b/man/git-annex-find.1
--- a/man/git-annex-find.1
+++ b/man/git-annex-find.1
@@ -10,8 +10,20 @@
 finds files in the current directory and its subdirectories.
 .PP
 .SH OPTIONS
-.IP "\fB\-\-print0\fP"
+.IP "matching options"
 .IP
+The git-annex\-matching\-options(1)
+can be used to specify files to list.
+.IP
+By default, the find command only lists annexed files whose content is
+currently present. Specifying any of the matching options will override
+this default behavior.
+.IP
+To list all annexed files, present or not, specify \fB\-\-include "*"\fP.
+.IP
+To list annexed files whose content is not present, specify \fB\-\-not \-\-in=here\fP
+.IP
+.IP "\fB\-\-print0\fP"
 Output filenames terminated with nulls, for use with \fBxargs \-0\fP
 .IP
 .IP "\fB\-\-format=value\fP"
@@ -36,17 +48,13 @@
 This is intended to be parsed by programs that use
 git-annex. Each line of output is a JSON object.
 .IP
-.IP "matching options"
-The git-annex\-matching\-options(1)
-can be used to specify files to list.
-.IP
-By default, the find command only lists annexed files whose content is
-currently present. Specifying any of the matching options will override
-this default behavior.
-.IP
-To list all annexed files, present or not, specify \fB\-\-include "*"\fP.
+.IP "\fB\-\-batch\fP"
+Enables batch mode, in which a file is read in a line from stdin,
+its information displayed, and repeat.
 .IP
-To list annexed files whose content is not present, specify \fB\-\-not \-\-in=here\fP
+Note that if the file is not an annexed file, or is not present,
+or otherwise doesn't meet the matching options, an empty line
+will be output instead.
 .IP
 .SH SEE ALSO
 git-annex(1)
diff --git a/man/git-annex-import.1 b/man/git-annex-import.1
--- a/man/git-annex-import.1
+++ b/man/git-annex-import.1
@@ -62,9 +62,17 @@
 Imports multiple files in parallel. This may be faster.
 For example: \fB\-J4\fP  
 .IP
+.IP "\fB\-\-json\fP"
+Enable JSON output. This is intended to be parsed by programs that use
+git-annex. Each line of output is a JSON object.
+.IP
 .SH CAVEATS
 Note that using \fB\-\-deduplicate\fP or \fB\-\-clean\-duplicates\fP with the WORM
 backend does not look at file content, but filename and mtime.
+.PP
+If annex.largefiles is configured, and does not match a file, git annex
+import will add the non\-large file directly to the git repository,
+instead of to the annex.
 .PP
 .SH SEE ALSO
 git-annex(1)
diff --git a/man/git-annex-info.1 b/man/git-annex-info.1
--- a/man/git-annex-info.1
+++ b/man/git-annex-info.1
@@ -25,6 +25,10 @@
 .IP "\fB\-\-bytes\fP"
 Show file sizes in bytes, disabling the default nicer units.
 .IP
+.IP "\fB\-\-batch\fP"
+Enable batch mode, in which a line containing an item is read from stdin,
+the information about it is output to stdout, and repeat.
+.IP
 .IP "file matching options"
 When a directory is specified, the git-annex\-matching\-options(1)
 can be used to select the files in the directory that are included
diff --git a/man/git-annex-matchexpression.1 b/man/git-annex-matchexpression.1
new file mode 100644
--- /dev/null
+++ b/man/git-annex-matchexpression.1
@@ -0,0 +1,45 @@
+.TH git-annex-matchexpression 1
+.SH NAME
+git-annex-matchexpression \- checks if a preferred content expression matches
+.PP
+.SH SYNOPSIS
+git annex matchexpression \fBexpression [data]\fP
+.PP
+.SH DESCRIPTION
+This plumbing\-level command is given a prefferred content expression,
+and some data, and checks if the expression matches the data. It exits 0 if
+it matches, and 1 if not. If not enough data was provided, it displays an
+error and exits with special code 42.
+.PP
+For example, this will exit 0:
+.PP
+ git annex matchexpression "include=*.png and largerthan=1mb" \-\-file=foo.png \-\-size=10mb
+.PP
+.SH OPTIONS
+.IP "\fB\-\-file=\fP"
+.IP
+Provide the filename to match against. Note that the file does not have
+to actually exist on disk.
+.IP
+.IP "\fB\-\-size=\fP"
+Tell what the size of the file is. The size can be specified with any
+commonly used units, for example, "0.5 gb" or "100 KiloBytes".
+.IP
+.IP "\fB\-\-key=\fP"
+Tell what key is being matched against. This is needed for
+matching expressions like "copies=N" and "metadata=tag=foo" and
+"present", which all need to look up the information on file for a key.
+.IP
+Many keys have a known size, and so \-\-size is not needed when specifying
+such a key.
+.IP
+.SH SEE ALSO
+git-annex(1)
+.PP
+git-annex\-preferred\-content(1)
+.PP
+.SH AUTHOR
+Joey Hess <id@joeyh.name>
+.PP
+.PP
+
diff --git a/man/git-annex-preferred-content.1 b/man/git-annex-preferred-content.1
--- a/man/git-annex-preferred-content.1
+++ b/man/git-annex-preferred-content.1
@@ -1,6 +1,6 @@
 .TH git-annex-preferred-content 1
 .SH NAME
-git-annex\-preferred\-content \- 
+git-annex\-preferred\-content \- which files are wanted in a repository
 .PP
 .SH DESCRIPTION
 Each repository has a preferred content setting, which specifies content
@@ -16,27 +16,205 @@
 required content can be configured using \fBgit annex vicfg\fP or
 \fBgit annex required\fP.
 .PP
-Preferred content expressions are similar, but not identical to
-the git-annex\-matching\-options(1), just without the dashes.
+.SH SYNTAX
+Preferred content expressions use a similar syntax to 
+the git-annex\-matching\-options(1), without the dashes.
 For example:
 .PP
  exclude=archive/* and (include=*.mp3 or smallerthan=1mb)
 .PP
-The main differences are that \fBexclude=\fP and \fBinclude=\fP always
-match relative to the top of the git repository, and that there is
-no equivalent to \fB\-\-in\fP.
-.PP
-For more details about preferred content expressions, see
-See <https://git-annex.branchable.com/preferred_content/>
+The idea is that you write an expression that files are matched against. If
+a file matches, the repository wants to store its content. If it doesn't,
+the repository wants to drop its content (if there are enough copies
+elsewhere to allow removing it).
 .PP
-When a repository is in one of the standard predefined groups, like "backup"
-and "client", setting its preferred content to "standard" will use a
-built\-in preferred content expression developed for that group. 
-See <https://git-annex.branchable.com/preferred_content/standard_groups/>
+.SH EXPRESSIONS
+.IP "\fBinclude=glob\fP and \fBexclude=glob\fP"
+.IP
+Match files to include, or exclude.
+.IP
+While \-\-include=glob and \-\-exclude=glob match files relative to the current
+directory, preferred content expressions always match files relative to the
+top of the git repository. 
+.IP
+For example, suppose you put files into \fBarchive\fP directories
+when you're done with them. Then you could configure your laptop to prefer
+to not retain those files, like this: \fBexclude=*/archive/*\fP
+.IP
+.IP "\fBcopies=number\fP"
+Matches only files that git-annex believes to have the specified number
+of copies, or more. Note that it does not check remotes to verify that
+the copies still exist.
+.IP
+To decide if content should be dropped, git-annex evaluates the preferred
+content expression under the assumption that the content has *already* been
+dropped. If the content would not be wanted then, the drop can be done.
+So, for example, \fBcopies=2\fP in a preferred content expression lets
+content be dropped only when there are currently 3 copies of it, including
+the repo it's being dropped from. This is different than running git annex
+drop \-\-copies=2, which will drop files that currently have 2 copies.
+.IP
+.IP "\fBcopies=trustlevel:number\fP"
+Matches only files that git-annex believes have the specified number
+copies, on remotes with the specified trust level. For example,
+\fBcopies=trusted:2\fP
+.IP
+To match any trust level at or higher than a given level,
+use \fBtrustlevel+\fP. For example, \fBcopies=semitrusted+:2\fP
+.IP
+.IP "\fBcopies=groupname:number\fP"
+Matches only files that git-annex believes have the specified number of
+copies, on remotes in the specified group. For example,
+\fBcopies=archive:2\fP
+.IP
+Preferred content expressions have no equivalent to the \fB\-\-in\fP
+option, but groups can accomplish similar things. You can add
+repositories to groups, and match against the groups in a
+preferred content expression. So rather than \fB\-\-in=usbdrive\fP,
+put all the USB drives into a "transfer" group, and use
+\fBcopies=transfer:1\fP
+.IP
+.IP "\fBlackingcopies=number\fP"
+Matches only files that git-annex believes need the specified number or
+more additional copies to be made in order to satisfy their numcopies
+settings.
+.IP
+.IP "\fBapproxlackingcopies=number\fP"
+Like lackingcopies, but does not look at .gitattributes annex.numcopies
+settings. This makes it significantly faster.
+.IP
+.IP "\fBinbackend=name\fP"
+Matches only files whose content is stored using the specified key\-value
+backend.
+.IP
+.IP "\fBinallgroup=groupname\fP"
+Matches only files that git-annex believes are present in all repositories
+in the specified group.
+.IP
+.IP "\fBsmallerthan=size\fP and \fBlargerthan=size\fP"
+Matches only files whose content is smaller than, or larger than the
+specified size.
+.IP
+The size can be specified with any commonly used units, for example,
+"0.5 gb" or "100 KiloBytes"
+.IP
+.IP "\fBmetadata=field=glob\fP"
+Matches only files that have a metadata field attached with a value that
+matches the glob. The values of metadata fields are matched case
+insensitively.
+.IP
+To match a tag "done", use \fBmetadata=tag=done\fP
+.IP
+To match author metadata, use \fBmetadata=author=*Smith\fP
+.IP
+.IP "\fBpresent\fP"
+Makes content be wanted if it's present, but not otherwise.
+.IP
+This leaves it up to you to use git-annex manually
+to move content around. You can use this to avoid preferred content
+settings from affecting a subdirectory. For example:
+\fBauto/* or (include=ad\-hoc/* and present)\fP
+.IP
+Note that \fBnot present\fP is a very bad thing to put in a preferred content 
+expression. It'll make it want to get content that's not present, and
+drop content that is present! Don't go there..
+.IP
+.IP "\fBinpreferreddir\fP"
+Makes content be preferred if it's in a directory (located anywhere
+in the tree) with a particular name. 
+.IP
+The name of the directory can be configured using 
+\fBgit annex enableremote $remote preferreddir=$dirname\fP
+.IP
+(If no directory name is configured, it uses "public" by default.)
+.IP
+.IP "\fBstandard\fP"
+git-annex comes with some built\-in preferred content expressions, that
+can be used with repositories that are in some [[standard groups]].
+.IP
+When a repository is in exactly one such group, you can use the "standard"
+keyword in its preferred content expression, to match whatever content
+the group's expression matches.
+(If a repository is put into multiple standard
+groups, "standard" will match anything.. so don't do that!)
+.IP
+Most often, the whole preferred content expression is simply "standard".
+But, you can do more complicated things, for example:
+\fBstandard or include=otherdir/*\fP
+.IP
+.IP "\fBgroupwanted\fP"
+The "groupwanted" keyword can be used to refer to a preferred content
+expression that is associated with a group. This is like the "standard"
+keyword, but you can configure the preferred content expressions
+using \fBgit annex groupwanted\fP.
+.IP
+Note that when writing a groupwanted preferred content expression,
+you can use all of the keywords listed above, including "standard".
+(But not "groupwanted".)
+.IP
+For example, to make a variant of the standard client preferred content
+expression that does not want files in the "out" directory, you
+could run: \fBgit annex groupwanted client "standard and exclude=out/*"\fP
+.IP
+Then repositories that are in the client group and have their preferred
+content expression set to "groupwanted" will use that, while
+other client repositories that have their preferred content expression
+set to "standard" will use the standard expression.
+.IP
+Or, you could make a new group, with your own custom preferred content
+expression tuned for your needs, and every repository you put in this
+group and make its preferred content be "groupwanted" will use it.
+.IP
+For example, the archive group only wants to archive 1 copy of each file,
+spread among every repository in the group.
+Here's how to configure a group named redundantarchive, that instead
+wants to contain 3 copies of each file:
+.IP
+ git annex groupwanted redundantarchive "not (copies=redundantarchive:3)"
+ for repo in foo bar baz; do
+ 	git annex group $repo redundantarchive
+ 	git annex wanted $repo groupwanted
+ done
+.IP
+.IP "\fBunused\fP"
+Matches only keys that \fBgit annex unused\fP has determined to be unused.
+.IP
+This is related the the \-\-unused option.
+However, putting \fBunused\fP in a preferred content expression 
+doesn't make git-annex consider those unused keys. So when git-annex is
+only checking preferred content expressions against files in the
+repository (which are obviously used), \fBunused\fP in a preferred
+content expression won't match anything.
+.IP
+So when is \fBunused\fP useful in a preferred content expression?
+.IP
+Using \fBgit annex sync \-\-content \-\-all\fP will operate on all files,
+including unused ones, and take \fBunused\fP in preferred content expressions
+into account.
+.IP
+The git-annex assistant periodically scans for unused files, and
+moves them to some repository whose preferred content expression
+says it wants them. (Or, if annex.expireunused is set, it may just delete
+them.)
+.IP
+.IP "\fBanything\fP"
+Matches any version of any file.
+.IP
+.IP "\fBnot expression\fP"
+Inverts what the expression matches. For example, \fBnot include=archive/*\fP
+is the same as \fBexclude=archive/*\fP
+.IP
+.IP "\fBand\fP / \fBor\fP / \fB( expression )\fP"
+These can be used to build up more complicated expressions.
+.IP
+.SH TESTING
+To check at the command line which files are matched by a repository's
+preferred content settings, you can use the \-\-want\-get and \-\-want\-drop
+options.
 .PP
-If you have set a groupwanted expression for a group, it will be used
-when a repository in the group has its preferred content set to
-"groupwanted".
+For example, git annex find \-\-want\-get \-\-not \-\-in . will find all the files
+that git annex get \-\-auto will want to get, and git annex find \-\-want\-drop \-\-in
+\&. will find all the files that git annex drop \-\-auto will want to drop.
 .PP
 .SH SEE ALSO
 git-annex(1)
@@ -44,6 +222,8 @@
 git-annex\-vicfg(1)
 .PP
 git-annex\-wanted(1)
+.PP
+<https://git-annex.branchable.com/preferred_content/>
 .PP
 .SH AUTHOR
 Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-whereis.1 b/man/git-annex-whereis.1
--- a/man/git-annex-whereis.1
+++ b/man/git-annex-whereis.1
@@ -19,12 +19,8 @@
  	7570b02e\-15e9\-11e0\-adf0\-9f3f94cb2eaa  \-\- backup drive
 .PP
 .SH OPTIONS
-.IP "\fB\-\-json\fP"
-.IP
-Enable JSON output. This is intended to be parsed by programs that use
-git-annex. Each line of output is a JSON object.
-.IP
 .IP "file matching options"
+.IP
 The git-annex\-matching\-options(1)
 can be used to specify files to act on.
 .IP
@@ -36,6 +32,17 @@
 .IP
 .IP "\fB\-\-unused\fP"
 Show whereis information for files found by last run of git-annex unused.
+.IP
+.IP "\fB\-\-json\fP"
+Enable JSON output. This is intended to be parsed by programs that use
+git-annex. Each line of output is a JSON object.
+.IP
+.IP "\fB\-\-batch\fP"
+Enables batch mode, in which a file is read in a line from stdin,
+its information displayed, and repeat.
+.IP
+Note that if the file is not an annexed file, an empty line will be
+output instead.
 .IP
 .SH SEE ALSO
 git-annex(1)
diff --git a/man/git-annex.1 b/man/git-annex.1
--- a/man/git-annex.1
+++ b/man/git-annex.1
@@ -461,6 +461,11 @@
 .IP
 See git-annex\-examinekey(1) for details.
 .IP
+.IP "\fBmatchexpression\fP"
+Checks if a preferred content expression matches provided data.
+.IP
+See git-annex\-matchexpression(1) for details.
+.IP
 .IP "\fBfromkey [key file]\fP"
 Manually set up a file in the git repository to link to a specified key.
 .IP
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -1,10 +1,6 @@
 flags:
   git-annex:
     concurrentoutput: true
-    tahoe: true
-    tdfa: true
-    feed: true
-    webapp-secure: true
     production: true
     assistant: true
     pairing: true
@@ -14,14 +10,10 @@
     testsuite: true
     webdav: true
     torrentparser: true
-    quvi: true
-    dns: true
     webapp: true
     android: false
     androidsplice: false
     ekg: false
 packages:
 - '.'
-extra-deps:
-- concurrent-output-1.7.2
-resolver: nightly-2015-12-28
+resolver: lts-5.0
diff --git a/standalone/android/tmp/network-2.4.1.2/LICENSE b/standalone/android/tmp/network-2.4.1.2/LICENSE
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/LICENSE
+++ /dev/null
@@ -1,29 +0,0 @@
-Copyright (c) 2002-2010, The University Court of the University of Glasgow.
-Copyright (c) 2007-2010, Johan Tibell
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-
-- Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation
-and/or other materials provided with the distribution.
-
-- Neither name of the University nor the names of its contributors may be
-used to endorse or promote products derived from this software without
-specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF
-GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGE.
diff --git a/standalone/android/tmp/network-2.4.1.2/Network.hs b/standalone/android/tmp/network-2.4.1.2/Network.hs
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/Network.hs
+++ /dev/null
@@ -1,473 +0,0 @@
-{-# LANGUAGE CPP #-}
------------------------------------------------------------------------------
--- |
--- Module      :  Network
--- Copyright   :  (c) The University of Glasgow 2001
--- License     :  BSD-style (see the file libraries/network/LICENSE)
--- 
--- Maintainer  :  libraries@haskell.org
--- Stability   :  provisional
--- Portability :  portable
---
--- The "Network" interface is a \"higher-level\" interface to
--- networking facilities, and it is recommended unless you need the
--- lower-level interface in "Network.Socket".
---
------------------------------------------------------------------------------
-
-#include "HsNetworkConfig.h"
-
-#ifdef HAVE_GETADDRINFO
--- Use IPv6-capable function definitions if the OS supports it.
-#define IPV6_SOCKET_SUPPORT 1
-#endif
-
-module Network
-    (
-    -- * Basic data types
-      Socket
-    , PortID(..)
-    , HostName
-    , PortNumber
-
-    -- * Initialisation
-    , withSocketsDo
-    
-    -- * Server-side connections
-    , listenOn
-    , accept
-    , sClose
-
-    -- * Client-side connections
-    , connectTo
-
-    -- * Simple sending and receiving
-    {-$sendrecv-}
-    , sendTo
-    , recvFrom
-
-    -- * Miscellaneous
-    , socketPort
-
-    -- * Networking Issues
-    -- ** Buffering
-    {-$buffering-}
-
-    -- ** Improving I\/O Performance over sockets
-    {-$performance-}
-
-    -- ** @SIGPIPE@
-    {-$sigpipe-}
-    ) where
-
-import Control.Monad (liftM)
-import Data.Maybe (fromJust)
-import Network.BSD
-import Network.Socket hiding (accept, socketPort, recvFrom, sendTo, PortNumber)
-import qualified Network.Socket as Socket (accept)
-import System.IO
-import Prelude
-import qualified Control.Exception as Exception
-
--- ---------------------------------------------------------------------------
--- High Level ``Setup'' functions
-
--- If the @PortID@ specifies a unix family socket and the @Hostname@
--- differs from that returned by @getHostname@ then an error is
--- raised. Alternatively an empty string may be given to @connectTo@
--- signalling that the current hostname applies.
-
-data PortID = 
-          Service String                -- Service Name eg "ftp"
-        | PortNumber PortNumber         -- User defined Port Number
-#if !defined(mingw32_HOST_OS) && !defined(cygwin32_HOST_OS) && !defined(_WIN32)
-        | UnixSocket String             -- Unix family socket in file system
-#endif
-        deriving (Show, Eq)
-
--- | Calling 'connectTo' creates a client side socket which is
--- connected to the given host and port.  The Protocol and socket type is
--- derived from the given port identifier.  If a port number is given
--- then the result is always an internet family 'Stream' socket. 
-
-connectTo :: HostName           -- Hostname
-          -> PortID             -- Port Identifier
-          -> IO Handle          -- Connected Socket
-
-#if defined(IPV6_SOCKET_SUPPORT)
--- IPv6 and IPv4.
-
-connectTo hostname (Service serv) = connect' hostname serv
-
-connectTo hostname (PortNumber port) = connect' hostname (show port)
-#else
--- IPv4 only.
-
-connectTo hostname (Service serv) = do
-    proto <- getProtocolNumber "tcp"
-    bracketOnError
-        (socket AF_INET Stream proto)
-        (sClose)  -- only done if there's an error
-        (\sock -> do
-          port  <- getServicePortNumber serv
-          he    <- getHostByName hostname
-          connect sock (SockAddrInet port (hostAddress he))
-          socketToHandle sock ReadWriteMode
-        )
-
-connectTo hostname (PortNumber port) = do
-    proto <- getProtocolNumber "tcp"
-    bracketOnError
-        (socket AF_INET Stream proto)
-        (sClose)  -- only done if there's an error
-        (\sock -> do
-          he <- getHostByName hostname
-          connect sock (SockAddrInet port (hostAddress he))
-          socketToHandle sock ReadWriteMode
-        )
-#endif
-
-#if !defined(mingw32_HOST_OS) && !defined(cygwin32_HOST_OS) && !defined(_WIN32)
-connectTo _ (UnixSocket path) = do
-    bracketOnError
-        (socket AF_UNIX Stream 0)
-        (sClose)
-        (\sock -> do
-          connect sock (SockAddrUnix path)
-          socketToHandle sock ReadWriteMode
-        )
-#endif
-
-#if defined(IPV6_SOCKET_SUPPORT)
-connect' :: HostName -> ServiceName -> IO Handle
-
-connect' host serv = do
-    proto <- getProtocolNumber "tcp"
-    let hints = defaultHints { addrFlags = [AI_ADDRCONFIG]
-                             , addrProtocol = proto
-                             , addrSocketType = Stream }
-    addrs <- getAddrInfo (Just hints) (Just host) (Just serv)
-    firstSuccessful $ map tryToConnect addrs
-  where
-  tryToConnect addr =
-    bracketOnError
-        (socket (addrFamily addr) (addrSocketType addr) (addrProtocol addr))
-        (sClose)  -- only done if there's an error
-        (\sock -> do
-          connect sock (addrAddress addr)
-          socketToHandle sock ReadWriteMode
-        )
-#endif
-
--- | Creates the server side socket which has been bound to the
--- specified port.
---
--- 'maxListenQueue' (typically 128) is specified to the listen queue.
--- This is good enough for normal network servers but is too small
--- for high performance servers.
---
--- To avoid the \"Address already in use\" problems,
--- the 'ReuseAddr' socket option is set on the listening socket.
---
--- If available, the 'IPv6Only' socket option is set to 0
--- so that both IPv4 and IPv6 can be accepted with this socket.
---
--- If you don't like the behavior above, please use the lower level
--- 'Network.Socket.listen' instead.
-
-listenOn :: PortID      -- ^ Port Identifier
-         -> IO Socket   -- ^ Listening Socket
-
-#if defined(IPV6_SOCKET_SUPPORT)
--- IPv6 and IPv4.
-
-listenOn (Service serv) = listen' serv
-
-listenOn (PortNumber port) = listen' (show port)
-#else
--- IPv4 only.
-
-listenOn (Service serv) = do
-    proto <- getProtocolNumber "tcp"
-    bracketOnError
-        (socket AF_INET Stream proto)
-        (sClose)
-        (\sock -> do
-            port    <- getServicePortNumber serv
-            setSocketOption sock ReuseAddr 1
-            bindSocket sock (SockAddrInet port iNADDR_ANY)
-            listen sock maxListenQueue
-            return sock
-        )
-
-listenOn (PortNumber port) = do
-    proto <- getProtocolNumber "tcp"
-    bracketOnError
-        (socket AF_INET Stream proto)
-        (sClose)
-        (\sock -> do
-            setSocketOption sock ReuseAddr 1
-            bindSocket sock (SockAddrInet port iNADDR_ANY)
-            listen sock maxListenQueue
-            return sock
-        )
-#endif
-
-#if !defined(mingw32_HOST_OS) && !defined(cygwin32_HOST_OS) && !defined(_WIN32)
-listenOn (UnixSocket path) =
-    bracketOnError
-        (socket AF_UNIX Stream 0)
-        (sClose)
-        (\sock -> do
-            setSocketOption sock ReuseAddr 1
-            bindSocket sock (SockAddrUnix path)
-            listen sock maxListenQueue
-            return sock
-        )
-#endif
-
-#if defined(IPV6_SOCKET_SUPPORT)
-listen' :: ServiceName -> IO Socket
-
-listen' serv = do
-    proto <- getProtocolNumber "tcp"
-    -- We should probably specify addrFamily = AF_INET6 and the filter
-    -- code below should be removed. AI_ADDRCONFIG is probably not
-    -- necessary. But this code is well-tested. So, let's keep it.
-    let hints = defaultHints { addrFlags = [AI_ADDRCONFIG, AI_PASSIVE]
-                             , addrSocketType = Stream
-                             , addrProtocol = proto }
-    addrs <- getAddrInfo (Just hints) Nothing (Just serv)
-    -- Choose an IPv6 socket if exists.  This ensures the socket can
-    -- handle both IPv4 and IPv6 if v6only is false.
-    let addrs' = filter (\x -> addrFamily x == AF_INET6) addrs
-        addr = if null addrs' then head addrs else head addrs'
-    bracketOnError
-        (socket (addrFamily addr) (addrSocketType addr) (addrProtocol addr))
-        (sClose)
-        (\sock -> do
-            setSocketOption sock ReuseAddr 1
-            bindSocket sock (addrAddress addr)
-            listen sock maxListenQueue
-            return sock
-        )
-#endif
-
--- -----------------------------------------------------------------------------
--- accept
-
--- | Accept a connection on a socket created by 'listenOn'.  Normal
--- I\/O operations (see "System.IO") can be used on the 'Handle'
--- returned to communicate with the client.
--- Notice that although you can pass any Socket to Network.accept,
--- only sockets of either AF_UNIX, AF_INET, or AF_INET6 will work
--- (this shouldn't be a problem, though). When using AF_UNIX, HostName
--- will be set to the path of the socket and PortNumber to -1.
---
-accept :: Socket                -- ^ Listening Socket
-       -> IO (Handle,
-              HostName,
-              PortNumber)       -- ^ Triple of: read\/write 'Handle' for 
-                                -- communicating with the client,
-                                -- the 'HostName' of the peer socket, and
-                                -- the 'PortNumber' of the remote connection.
-accept sock@(MkSocket _ AF_INET _ _ _) = do
- ~(sock', (SockAddrInet port haddr)) <- Socket.accept sock
- peer <- catchIO
-          (do   
-             (HostEntry peer _ _ _) <- getHostByAddr AF_INET haddr
-             return peer
-          )
-          (\_e -> inet_ntoa haddr)
-                -- if getHostByName fails, we fall back to the IP address
- handle <- socketToHandle sock' ReadWriteMode
- return (handle, peer, port)
-#if defined(IPV6_SOCKET_SUPPORT)
-accept sock@(MkSocket _ AF_INET6 _ _ _) = do
- (sock', addr) <- Socket.accept sock
- peer <- catchIO ((fromJust . fst) `liftM` getNameInfo [] True False addr) $
-         \_ -> case addr of
-                 SockAddrInet  _   a   -> inet_ntoa a
-                 SockAddrInet6 _ _ a _ -> return (show a)
-# if !defined(mingw32_HOST_OS) && !defined(cygwin32_HOST_OS) && !defined(_WIN32)
-                 SockAddrUnix      a   -> return a
-# endif
- handle <- socketToHandle sock' ReadWriteMode
- let port = case addr of
-              SockAddrInet  p _     -> p
-              SockAddrInet6 p _ _ _ -> p
-              _                     -> -1
- return (handle, peer, port)
-#endif
-#if !defined(mingw32_HOST_OS) && !defined(cygwin32_HOST_OS) && !defined(_WIN32)
-accept sock@(MkSocket _ AF_UNIX _ _ _) = do
- ~(sock', (SockAddrUnix path)) <- Socket.accept sock
- handle <- socketToHandle sock' ReadWriteMode
- return (handle, path, -1)
-#endif
-accept (MkSocket _ family _ _ _) =
-  error $ "Sorry, address family " ++ (show family) ++ " is not supported!"
-
--- -----------------------------------------------------------------------------
--- sendTo/recvFrom
-
-{-$sendrecv
-Send and receive data from\/to the given host and port number.  These
-should normally only be used where the socket will not be required for
-further calls. Also, note that due to the use of 'hGetContents' in 'recvFrom'
-the socket will remain open (i.e. not available) even if the function already
-returned. Their use is strongly discouraged except for small test-applications
-or invocations from the command line.
--}
-
-sendTo :: HostName      -- Hostname
-       -> PortID        -- Port Number
-       -> String        -- Message to send
-       -> IO ()
-sendTo h p msg = do
-  s <- connectTo h p
-  hPutStr s msg
-  hClose s
-
-recvFrom :: HostName    -- Hostname
-         -> PortID      -- Port Number
-         -> IO String   -- Received Data
-
-#if defined(IPV6_SOCKET_SUPPORT)
-recvFrom host port = do
-    proto <- getProtocolNumber "tcp"
-    let hints = defaultHints { addrFlags = [AI_ADDRCONFIG]
-                             , addrProtocol = proto
-                             , addrSocketType = Stream }
-    allowed <- map addrAddress `liftM` getAddrInfo (Just hints) (Just host)
-                                                   Nothing
-    s <- listenOn port
-    let waiting = do
-        (s', addr) <- Socket.accept s
-        if not (addr `oneOf` allowed)
-         then sClose s' >> waiting
-         else socketToHandle s' ReadMode >>= hGetContents
-    waiting
-  where
-    a@(SockAddrInet _ ha) `oneOf` ((SockAddrInet _ hb):bs)
-        | ha == hb = True
-        | otherwise = a `oneOf` bs
-    a@(SockAddrInet6 _ _ ha _) `oneOf` ((SockAddrInet6 _ _ hb _):bs)
-        | ha == hb = True
-        | otherwise = a `oneOf` bs
-    _ `oneOf` _ = False
-#else
-recvFrom host port = do
- ip  <- getHostByName host
- let ipHs = hostAddresses ip
- s   <- listenOn port
- let 
-  waiting = do
-     ~(s', SockAddrInet _ haddr)  <-  Socket.accept s
-     he <- getHostByAddr AF_INET haddr
-     if not (any (`elem` ipHs) (hostAddresses he))
-      then do
-         sClose s'
-         waiting
-      else do
-        h <- socketToHandle s' ReadMode
-        msg <- hGetContents h
-        return msg
-
- message <- waiting
- return message
-#endif
-
--- ---------------------------------------------------------------------------
--- Access function returning the port type/id of socket.
-
--- | Returns the 'PortID' associated with a given socket.
-socketPort :: Socket -> IO PortID
-socketPort s = do
-    sockaddr <- getSocketName s
-    return (portID sockaddr)
-  where
-   portID sa =
-    case sa of
-     SockAddrInet port _      -> PortNumber port
-#if defined(IPV6_SOCKET_SUPPORT)
-     SockAddrInet6 port _ _ _ -> PortNumber port
-#endif
-#if !defined(mingw32_HOST_OS) && !defined(cygwin32_HOST_OS) && !defined(_WIN32)
-     SockAddrUnix path        -> UnixSocket path
-#endif
-
--- ---------------------------------------------------------------------------
--- Utils
-
--- Like bracket, but only performs the final action if there was an 
--- exception raised by the middle bit.
-bracketOnError
-        :: IO a         -- ^ computation to run first (\"acquire resource\")
-        -> (a -> IO b)  -- ^ computation to run last (\"release resource\")
-        -> (a -> IO c)  -- ^ computation to run in-between
-        -> IO c         -- returns the value from the in-between computation
-#if __GLASGOW_HASKELL__ && __GLASGOW_HASKELL__ < 606
-bracketOnError before after thing =
-  Exception.block (do
-    a <- before
-    r <- Exception.catch
-           (Exception.unblock (thing a))
-           (\e -> do { after a; Exception.throw e })
-    return r
- )
-#else
-bracketOnError = Exception.bracketOnError
-#endif
-
------------------------------------------------------------------------------
--- Extra documentation
-
-{-$buffering
-
-The 'Handle' returned by 'connectTo' and 'accept' is block-buffered by
-default.  For an interactive application you may want to set the
-buffering mode on the 'Handle' to
-'LineBuffering' or 'NoBuffering', like so:
-
-> h <- connectTo host port
-> hSetBuffering h LineBuffering
--}
-
-{-$performance
-
-For really fast I\/O, it might be worth looking at the 'hGetBuf' and
-'hPutBuf' family of functions in "System.IO".
--}
-
-{-$sigpipe
-
-On Unix, when writing to a socket and the reading end is
-closed by the remote client, the program is normally sent a
-@SIGPIPE@ signal by the operating system.  The
-default behaviour when a @SIGPIPE@ is received is
-to terminate the program silently, which can be somewhat confusing
-if you haven't encountered this before.  The solution is to
-specify that @SIGPIPE@ is to be ignored, using
-the POSIX library:
-
->  import Posix
->  main = do installHandler sigPIPE Ignore Nothing; ...
--}
-
-catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a
-#if MIN_VERSION_base(4,0,0)
-catchIO = Exception.catch
-#else
-catchIO = Exception.catchJust Exception.ioErrors
-#endif
-
--- Returns the first action from a list which does not throw an exception.
--- If all the actions throw exceptions (and the list of actions is not empty),
--- the last exception is thrown.
-firstSuccessful :: [IO a] -> IO a
-firstSuccessful [] = error "firstSuccessful: empty list"
-firstSuccessful (p:ps) = catchIO p $ \e ->
-    case ps of
-        [] -> Exception.throwIO e
-        _  -> firstSuccessful ps
diff --git a/standalone/android/tmp/network-2.4.1.2/Network/BSD.hsc b/standalone/android/tmp/network-2.4.1.2/Network/BSD.hsc
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/Network/BSD.hsc
+++ /dev/null
@@ -1,489 +0,0 @@
-{-# LANGUAGE CPP, ForeignFunctionInterface #-}
------------------------------------------------------------------------------
--- |
--- Module      :  Network.BSD
--- Copyright   :  (c) The University of Glasgow 2001
--- License     :  BSD-style (see the file libraries/network/LICENSE)
--- 
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  non-portable
---
--- The "Network.BSD" module defines Haskell bindings to network
--- programming functionality provided by BSD Unix derivatives.
---
------------------------------------------------------------------------------
-
-#include "HsNet.h"
-
--- NOTE: ##, we want this interpreted when compiling the .hs, not by hsc2hs.
-##include "Typeable.h"
-
-module Network.BSD
-    (
-    -- * Host names
-      HostName
-    , getHostName
-
-    , HostEntry(..)
-    , getHostByName
-    , getHostByAddr
-    , hostAddress
-
-    -- * Service names
-    , ServiceEntry(..)
-    , ServiceName
-    , getServiceByName
-    , getServiceByPort
-    , getServicePortNumber
-
-#if !defined(cygwin32_HOST_OS) && !defined(mingw32_HOST_OS) && !defined(_WIN32)
-    , getServiceEntries
-
-    -- ** Low level functionality
-    , getServiceEntry
-    , setServiceEntry
-    , endServiceEntry
-#endif
-
-    -- * Protocol names
-    , ProtocolName
-    , ProtocolNumber
-    , ProtocolEntry(..)
-    , getProtocolByName
-    , getProtocolByNumber
-    , getProtocolNumber
-    , defaultProtocol
-
-    -- * Port numbers
-    , PortNumber
-
-    -- * Network names
-    , NetworkName
-    , NetworkAddr
-    , NetworkEntry(..)
-
-#if !defined(cygwin32_HOST_OS) && !defined(mingw32_HOST_OS) && !defined(_WIN32)
-    , getNetworkByName
-    , getNetworkByAddr
-    -- ** Low level functionality
-#endif
-    ) where
-
-import Network.Socket
-
-import Control.Concurrent (MVar, newMVar, withMVar)
-import qualified Control.Exception as E
-import Foreign.C.String (CString, peekCString, withCString)
-#if defined(HAVE_WINSOCK2_H) && !defined(cygwin32_HOST_OS)
-import Foreign.C.Types ( CShort )
-#endif
-#if __GLASGOW_HASKELL__ >= 703
-import Foreign.C.Types ( CInt(..), CULong(..), CSize(..) )
-#else
-import Foreign.C.Types ( CInt, CULong, CSize )
-#endif
-import Foreign.Ptr (Ptr, nullPtr)
-import Foreign.Storable (Storable(..))
-import Foreign.Marshal.Array (allocaArray0, peekArray0)
-import Foreign.Marshal.Utils (with, fromBool)
-import Data.Typeable
-import System.IO.Error (ioeSetErrorString, mkIOError)
-import System.IO.Unsafe (unsafePerformIO)
-
-#if __GLASGOW_HASKELL__ >= 611
-import GHC.IO.Exception
-#else
-import GHC.IOBase
-#endif
-
-import Control.Monad (liftM)
-
-import Network.Socket.Internal (throwSocketErrorIfMinus1_)
-
--- ---------------------------------------------------------------------------
--- Basic Types
-
-type ProtocolName = String
-
--- ---------------------------------------------------------------------------
--- Service Database Access
-
--- Calling getServiceByName for a given service and protocol returns
--- the systems service entry.  This should be used to find the port
--- numbers for standard protocols such as SMTP and FTP.  The remaining
--- three functions should be used for browsing the service database
--- sequentially.
-
--- Calling setServiceEntry with True indicates that the service
--- database should be left open between calls to getServiceEntry.  To
--- close the database a call to endServiceEntry is required.  This
--- database file is usually stored in the file /etc/services.
-
-data ServiceEntry  = 
-  ServiceEntry  {
-     serviceName     :: ServiceName,    -- Official Name
-     serviceAliases  :: [ServiceName],  -- aliases
-     servicePort     :: PortNumber,     -- Port Number  ( network byte order )
-     serviceProtocol :: ProtocolName    -- Protocol
-  } deriving (Show, Typeable)
-
-instance Storable ServiceEntry where
-   sizeOf    _ = #const sizeof(struct servent)
-   alignment _ = alignment (undefined :: CInt) -- ???
-
-   peek p = do
-        s_name    <- (#peek struct servent, s_name) p >>= peekCString
-        s_aliases <- (#peek struct servent, s_aliases) p
-                           >>= peekArray0 nullPtr
-                           >>= mapM peekCString
-        s_port    <- (#peek struct servent, s_port) p
-        s_proto   <- (#peek struct servent, s_proto) p >>= peekCString
-        return (ServiceEntry {
-                        serviceName     = s_name,
-                        serviceAliases  = s_aliases,
-#if defined(HAVE_WINSOCK2_H) && !defined(cygwin32_HOST_OS)
-                        servicePort     = PortNum (fromIntegral (s_port :: CShort)),
-#else
-                           -- s_port is already in network byte order, but it
-                           -- might be the wrong size.
-                        servicePort     = PortNum (fromIntegral (s_port :: CInt)),
-#endif
-                        serviceProtocol = s_proto
-                })
-
-   poke _p = error "Storable.poke(BSD.ServiceEntry) not implemented"
-
-
--- | Get service by name.
-getServiceByName :: ServiceName         -- Service Name
-                 -> ProtocolName        -- Protocol Name
-                 -> IO ServiceEntry     -- Service Entry
-getServiceByName name proto = withLock $ do
- withCString name  $ \ cstr_name  -> do
- withCString proto $ \ cstr_proto -> do
- throwNoSuchThingIfNull "getServiceByName" "no such service entry"
-   $ (trySysCall (c_getservbyname cstr_name cstr_proto))
- >>= peek
-
-foreign import CALLCONV unsafe "getservbyname" 
-  c_getservbyname :: CString -> CString -> IO (Ptr ServiceEntry)
-
--- | Get the service given a 'PortNumber' and 'ProtocolName'.
-getServiceByPort :: PortNumber -> ProtocolName -> IO ServiceEntry
-getServiceByPort (PortNum port) proto = withLock $ do
- withCString proto $ \ cstr_proto -> do
- throwNoSuchThingIfNull "getServiceByPort" "no such service entry"
-   $ (trySysCall (c_getservbyport (fromIntegral port) cstr_proto))
- >>= peek
-
-foreign import CALLCONV unsafe "getservbyport" 
-  c_getservbyport :: CInt -> CString -> IO (Ptr ServiceEntry)
-
--- | Get the 'PortNumber' corresponding to the 'ServiceName'.
-getServicePortNumber :: ServiceName -> IO PortNumber
-getServicePortNumber name = do
-    (ServiceEntry _ _ port _) <- getServiceByName name "tcp"
-    return port
-
-#if !defined(cygwin32_HOST_OS) && !defined(mingw32_HOST_OS) && !defined(_WIN32)
-getServiceEntry :: IO ServiceEntry
-getServiceEntry = withLock $ do
- throwNoSuchThingIfNull "getServiceEntry" "no such service entry"
-   $ trySysCall c_getservent
- >>= peek
-
-foreign import ccall unsafe "getservent" c_getservent :: IO (Ptr ServiceEntry)
-
-setServiceEntry :: Bool -> IO ()
-setServiceEntry flg = withLock $ trySysCall $ c_setservent (fromBool flg)
-
-foreign import ccall unsafe  "setservent" c_setservent :: CInt -> IO ()
-
-endServiceEntry :: IO ()
-endServiceEntry = withLock $ trySysCall $ c_endservent
-
-foreign import ccall unsafe  "endservent" c_endservent :: IO ()
-
-getServiceEntries :: Bool -> IO [ServiceEntry]
-getServiceEntries stayOpen = do
-  setServiceEntry stayOpen
-  getEntries (getServiceEntry) (endServiceEntry)
-#endif
-
--- ---------------------------------------------------------------------------
--- Protocol Entries
-
--- The following relate directly to the corresponding UNIX C
--- calls for returning the protocol entries. The protocol entry is
--- represented by the Haskell type ProtocolEntry.
-
--- As for setServiceEntry above, calling setProtocolEntry.
--- determines whether or not the protocol database file, usually
--- @/etc/protocols@, is to be kept open between calls of
--- getProtocolEntry. Similarly, 
-
-data ProtocolEntry = 
-  ProtocolEntry  {
-     protoName    :: ProtocolName,      -- Official Name
-     protoAliases :: [ProtocolName],    -- aliases
-     protoNumber  :: ProtocolNumber     -- Protocol Number
-  } deriving (Read, Show, Typeable)
-
-instance Storable ProtocolEntry where
-   sizeOf    _ = #const sizeof(struct protoent)
-   alignment _ = alignment (undefined :: CInt) -- ???
-
-   peek p = do
-        p_name    <- (#peek struct protoent, p_name) p >>= peekCString
-        p_aliases <- (#peek struct protoent, p_aliases) p
-                           >>= peekArray0 nullPtr
-                           >>= mapM peekCString
-#if defined(HAVE_WINSOCK2_H) && !defined(cygwin32_HOST_OS)
-         -- With WinSock, the protocol number is only a short;
-         -- hoist it in as such, but represent it on the Haskell side
-         -- as a CInt.
-        p_proto_short  <- (#peek struct protoent, p_proto) p 
-        let p_proto = fromIntegral (p_proto_short :: CShort)
-#else
-        p_proto        <- (#peek struct protoent, p_proto) p 
-#endif
-        return (ProtocolEntry { 
-                        protoName    = p_name,
-                        protoAliases = p_aliases,
-                        protoNumber  = p_proto
-                })
-
-   poke _p = error "Storable.poke(BSD.ProtocolEntry) not implemented"
-
-getProtocolByName :: ProtocolName -> IO ProtocolEntry
-getProtocolByName "tcp" = return $
-	ProtocolEntry {protoName = "tcp", protoAliases = ["TCP"], protoNumber = 6}
-getProtocolByName "udp" = return $
-	ProtocolEntry {protoName = "udp", protoAliases = ["UDP"], protoNumber = 17}
-getProtocolByName name = withLock $ do
- withCString name $ \ name_cstr -> do
- throwNoSuchThingIfNull "getProtocolByName" ("no such protocol name: " ++ name)
-   $ (trySysCall.c_getprotobyname) name_cstr
- >>= peek
-
-foreign import  CALLCONV unsafe  "getprotobyname" 
-   c_getprotobyname :: CString -> IO (Ptr ProtocolEntry)
-
-
-getProtocolByNumber :: ProtocolNumber -> IO ProtocolEntry
-getProtocolByNumber num = withLock $ do
- throwNoSuchThingIfNull "getProtocolByNumber" ("no such protocol number: " ++ show num)
-   $ (trySysCall.c_getprotobynumber) (fromIntegral num)
- >>= peek
-
-foreign import CALLCONV unsafe  "getprotobynumber"
-   c_getprotobynumber :: CInt -> IO (Ptr ProtocolEntry)
-
-
-getProtocolNumber :: ProtocolName -> IO ProtocolNumber
-getProtocolNumber proto = do
- (ProtocolEntry _ _ num) <- getProtocolByName proto
- return num
-
--- ---------------------------------------------------------------------------
--- Host lookups
-
-data HostEntry = 
-  HostEntry  {
-     hostName      :: HostName,         -- Official Name
-     hostAliases   :: [HostName],       -- aliases
-     hostFamily    :: Family,           -- Host Type (currently AF_INET)
-     hostAddresses :: [HostAddress]     -- Set of Network Addresses  (in network byte order)
-  } deriving (Read, Show, Typeable)
-
-instance Storable HostEntry where
-   sizeOf    _ = #const sizeof(struct hostent)
-   alignment _ = alignment (undefined :: CInt) -- ???
-
-   peek p = do
-        h_name       <- (#peek struct hostent, h_name) p >>= peekCString
-        h_aliases    <- (#peek struct hostent, h_aliases) p
-                                >>= peekArray0 nullPtr
-                                >>= mapM peekCString
-        h_addrtype   <- (#peek struct hostent, h_addrtype) p
-        -- h_length       <- (#peek struct hostent, h_length) p
-        h_addr_list  <- (#peek struct hostent, h_addr_list) p
-                                >>= peekArray0 nullPtr
-                                >>= mapM peek
-        return (HostEntry {
-                        hostName       = h_name,
-                        hostAliases    = h_aliases,
-#if defined(HAVE_WINSOCK2_H) && !defined(cygwin32_HOST_OS)
-                        hostFamily     = unpackFamily (fromIntegral (h_addrtype :: CShort)),
-#else
-                        hostFamily     = unpackFamily h_addrtype,
-#endif
-                        hostAddresses  = h_addr_list
-                })
-
-   poke _p = error "Storable.poke(BSD.ServiceEntry) not implemented"
-
-
--- convenience function:
-hostAddress :: HostEntry -> HostAddress
-hostAddress (HostEntry nm _ _ ls) =
- case ls of
-   []    -> error ("BSD.hostAddress: empty network address list for " ++ nm)
-   (x:_) -> x
-
--- getHostByName must use the same lock as the *hostent functions
--- may cause problems if called concurrently.
-
--- | Resolve a 'HostName' to IPv4 address.
-getHostByName :: HostName -> IO HostEntry
-getHostByName name = withLock $ do
-  withCString name $ \ name_cstr -> do
-   ent <- throwNoSuchThingIfNull "getHostByName" "no such host entry"
-                $ trySysCall $ c_gethostbyname name_cstr
-   peek ent
-
-foreign import CALLCONV safe "gethostbyname" 
-   c_gethostbyname :: CString -> IO (Ptr HostEntry)
-
-
--- The locking of gethostbyaddr is similar to gethostbyname.
--- | Get a 'HostEntry' corresponding to the given address and family.
--- Note that only IPv4 is currently supported.
-getHostByAddr :: Family -> HostAddress -> IO HostEntry
-getHostByAddr family addr = do
- with addr $ \ ptr_addr -> withLock $ do
- throwNoSuchThingIfNull         "getHostByAddr" "no such host entry"
-   $ trySysCall $ c_gethostbyaddr ptr_addr (fromIntegral (sizeOf addr)) (packFamily family)
- >>= peek
-
-foreign import CALLCONV safe "gethostbyaddr"
-   c_gethostbyaddr :: Ptr HostAddress -> CInt -> CInt -> IO (Ptr HostEntry)
-
--- ---------------------------------------------------------------------------
--- Accessing network information
-
--- Same set of access functions as for accessing host,protocol and
--- service system info, this time for the types of networks supported.
-
--- network addresses are represented in host byte order.
-type NetworkAddr = CULong
-
-type NetworkName = String
-
-data NetworkEntry =
-  NetworkEntry {
-     networkName        :: NetworkName,   -- official name
-     networkAliases     :: [NetworkName], -- aliases
-     networkFamily      :: Family,         -- type
-     networkAddress     :: NetworkAddr
-   } deriving (Read, Show, Typeable)
-
-instance Storable NetworkEntry where
-   sizeOf    _ = #const sizeof(struct hostent)
-   alignment _ = alignment (undefined :: CInt) -- ???
-
-   peek p = do
-        n_name         <- (#peek struct netent, n_name) p >>= peekCString
-        n_aliases      <- (#peek struct netent, n_aliases) p
-                                >>= peekArray0 nullPtr
-                                >>= mapM peekCString
-        n_addrtype     <- (#peek struct netent, n_addrtype) p
-        n_net          <- (#peek struct netent, n_net) p
-        return (NetworkEntry {
-                        networkName      = n_name,
-                        networkAliases   = n_aliases,
-                        networkFamily    = unpackFamily (fromIntegral 
-                                                        (n_addrtype :: CInt)),
-                        networkAddress   = n_net
-                })
-
-   poke _p = error "Storable.poke(BSD.NetEntry) not implemented"
-
-
-#if !defined(cygwin32_HOST_OS) && !defined(mingw32_HOST_OS) && !defined(_WIN32)
-getNetworkByName :: NetworkName -> IO NetworkEntry
-getNetworkByName name = withLock $ do
- withCString name $ \ name_cstr -> do
-  throwNoSuchThingIfNull "getNetworkByName" "no such network entry"
-    $ trySysCall $ c_getnetbyname name_cstr
-  >>= peek
-
-foreign import ccall unsafe "getnetbyname" 
-   c_getnetbyname  :: CString -> IO (Ptr NetworkEntry)
-
-getNetworkByAddr :: NetworkAddr -> Family -> IO NetworkEntry
-getNetworkByAddr addr family = withLock $ do
- throwNoSuchThingIfNull "getNetworkByAddr" "no such network entry"
-   $ trySysCall $ c_getnetbyaddr addr (packFamily family)
- >>= peek
-
-foreign import ccall unsafe "getnetbyaddr" 
-   c_getnetbyaddr  :: NetworkAddr -> CInt -> IO (Ptr NetworkEntry)
-
-#endif
-
--- Mutex for name service lockdown
-
-{-# NOINLINE lock #-}
-lock :: MVar ()
-lock = unsafePerformIO $ newMVar ()
-
-withLock :: IO a -> IO a
-withLock act = withMVar lock (\_ -> act)
-
--- ---------------------------------------------------------------------------
--- Miscellaneous Functions
-
--- | Calling getHostName returns the standard host name for the current
--- processor, as set at boot time.
-
-getHostName :: IO HostName
-getHostName = do
-  let size = 256
-  allocaArray0 size $ \ cstr -> do
-    throwSocketErrorIfMinus1_ "getHostName" $ c_gethostname cstr (fromIntegral size)
-    peekCString cstr
-
-foreign import CALLCONV unsafe "gethostname" 
-   c_gethostname :: CString -> CSize -> IO CInt
-
--- Helper function used by the exported functions that provides a
--- Haskellised view of the enumerator functions:
-
-getEntries :: IO a  -- read
-           -> IO () -- at end
-           -> IO [a]
-getEntries getOne atEnd = loop
-  where
-    loop = do
-      vv <- E.catch (liftM Just getOne)
-            (\ e -> let _types = e :: IOException in return Nothing)
-      case vv of
-        Nothing -> return []
-        Just v  -> loop >>= \ vs -> atEnd >> return (v:vs)
-
-
--- ---------------------------------------------------------------------------
--- Winsock only:
---   The BSD API networking calls made locally return NULL upon failure.
---   That failure may very well be due to WinSock not being initialised,
---   so if NULL is seen try init'ing and repeat the call.
-#if !defined(mingw32_HOST_OS) && !defined(_WIN32)
-trySysCall :: IO a -> IO a
-trySysCall act = act
-#else
-trySysCall :: IO (Ptr a) -> IO (Ptr a)
-trySysCall act = do
-  ptr <- act
-  if (ptr == nullPtr)
-   then withSocketsDo act
-   else return ptr
-#endif
-
-throwNoSuchThingIfNull :: String -> String -> IO (Ptr a) -> IO (Ptr a)
-throwNoSuchThingIfNull loc desc act = do
-  ptr <- act
-  if (ptr == nullPtr)
-   then ioError (ioeSetErrorString (mkIOError NoSuchThing loc Nothing Nothing) desc)
-   else return ptr
diff --git a/standalone/android/tmp/network-2.4.1.2/Network/Socket.hsc b/standalone/android/tmp/network-2.4.1.2/Network/Socket.hsc
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/Network/Socket.hsc
+++ /dev/null
@@ -1,1663 +0,0 @@
-{-# LANGUAGE CPP, ScopedTypeVariables #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
------------------------------------------------------------------------------
--- |
--- Module      :  Network.Socket
--- Copyright   :  (c) The University of Glasgow 2001
--- License     :  BSD-style (see the file libraries/network/LICENSE)
---
--- Maintainer  :  libraries@haskell.org
--- Stability   :  provisional
--- Portability :  portable
---
--- The "Network.Socket" module is for when you want full control over
--- sockets.  Essentially the entire C socket API is exposed through
--- this module; in general the operations follow the behaviour of the C
--- functions of the same name (consult your favourite Unix networking book).
---
--- A higher level interface to networking operations is provided
--- through the module "Network".
---
------------------------------------------------------------------------------
-
-#include "HsNet.h"
-
--- NOTE: ##, we want this interpreted when compiling the .hs, not by hsc2hs.
-##include "Typeable.h"
-
--- In order to process this file, you need to have CALLCONV defined.
-
-module Network.Socket
-    (
-    -- * Types
-      Socket(..)
-    , Family(..)
-    , isSupportedFamily
-    , SocketType(..)
-    , isSupportedSocketType
-    , SockAddr(..)
-    , SocketStatus(..)
-    , HostAddress
-#if defined(IPV6_SOCKET_SUPPORTNO)
-    , HostAddress6
-    , FlowInfo
-    , ScopeID
-#endif
-    , ShutdownCmd(..)
-    , ProtocolNumber
-    , defaultProtocol
-    , PortNumber(..)
-    -- PortNumber is used non-abstractly in Network.BSD.  ToDo: remove
-    -- this use and make the type abstract.
-
-    -- * Address operations
-
-    , HostName
-    , ServiceName
-
-#if defined(IPV6_SOCKET_SUPPORT) || 1
-    , AddrInfo(..)
-
-    , AddrInfoFlag(..)
-    , addrInfoFlagImplemented
-
-    , defaultHints
-
-    , getAddrInfo
-
-    , NameInfoFlag(..)
-
-    , getNameInfo
-#endif
-
-    -- * Socket operations
-    , socket
-#if defined(DOMAIN_SOCKET_SUPPORT)
-    , socketPair
-#endif
-    , connect
-    , bind
-    , listen
-    , accept
-    , getPeerName
-    , getSocketName
-
-#ifdef HAVE_STRUCT_UCRED
-    -- get the credentials of our domain socket peer.
-    , getPeerCred
-#endif
-
-    , socketPort
-
-    , socketToHandle
-
-    -- ** Sending and receiving data
-    -- $sendrecv
-    , sendTo
-    , sendBufTo
-
-    , recvFrom
-    , recvBufFrom
-
-    , send
-    , recv
-    , recvLen
-    , sendBuf
-    , recvBuf
-
-    , inet_addr
-    , inet_ntoa
-
-    , shutdown
-    , close
-
-    -- ** Predicates on sockets
-    , isConnected
-    , isBound
-    , isListening
-    , isReadable
-    , isWritable
-
-    -- * Socket options
-    , SocketOption(..)
-    , isSupportedSocketOption
-    , getSocketOption
-    , setSocketOption
-
-    -- * File descriptor transmission
-#ifdef DOMAIN_SOCKET_SUPPORT
-    , sendFd
-    , recvFd
-
-#endif
-
-    -- * Special constants
-    , aNY_PORT
-    , iNADDR_ANY
-#if defined(IPV6_SOCKET_SUPPORTNO)
-    , iN6ADDR_ANY
-#endif
-    , sOMAXCONN
-    , sOL_SOCKET
-#ifdef SCM_RIGHTS
-    , sCM_RIGHTS
-#endif
-    , maxListenQueue
-
-    -- * Initialisation
-    , withSocketsDo
-
-    -- * Very low level operations
-    -- in case you ever want to get at the underlying file descriptor..
-    , fdSocket
-    , mkSocket
-
-    -- * Deprecated aliases
-    -- $deprecated-aliases
-    , bindSocket
-    , sClose
-    , sIsConnected
-    , sIsBound
-    , sIsListening
-    , sIsReadable
-    , sIsWritable
-
-    -- * Internal
-
-    -- | The following are exported ONLY for use in the BSD module and
-    -- should not be used anywhere else.
-
-    , packFamily
-    , unpackFamily
-    , packSocketType
-    ) where
-
-import Data.Bits
-import Data.List (delete, foldl')
-import Data.Maybe (fromMaybe, isJust)
-import Data.Word (Word8, Word16, Word32)
-import Foreign.Ptr (Ptr, castPtr, nullPtr)
-import Foreign.Storable (Storable(..))
-import Foreign.C.Error
-import Foreign.C.String (CString, withCString, peekCString, peekCStringLen)
-import Foreign.C.Types (CUInt, CChar)
-#if __GLASGOW_HASKELL__ >= 703
-import Foreign.C.Types (CInt(..), CSize(..))
-#else
-import Foreign.C.Types (CInt, CSize)
-#endif
-import Foreign.Marshal.Alloc ( alloca, allocaBytes )
-import Foreign.Marshal.Array ( peekArray )
-import Foreign.Marshal.Utils ( maybeWith, with )
-
-import System.IO
-import Control.Monad (liftM, when)
-import Data.Ratio ((%))
-
-import qualified Control.Exception as E
-import Control.Concurrent.MVar
-import Data.Typeable
-import System.IO.Error
-
-import GHC.Conc (threadWaitRead, threadWaitWrite)
-##if MIN_VERSION_base(4,3,1)
-import GHC.Conc (closeFdWith)
-##endif
-# if defined(mingw32_HOST_OS)
-import GHC.Conc (asyncDoProc)
-import Foreign (FunPtr)
-# endif
-# if __GLASGOW_HASKELL__ >= 611
-import qualified GHC.IO.Device
-import GHC.IO.Handle.FD
-import GHC.IO.Exception
-import GHC.IO
-# else
-import GHC.IOBase
-import GHC.Handle
-# endif
-import qualified System.Posix.Internals
-
-# if __GLASGOW_HASKELL__ >= 611
-import GHC.IO.FD
-#endif
-
-import Network.Socket.Internal
-import Network.Socket.Types
-
--- | Either a host name e.g., @\"haskell.org\"@ or a numeric host
--- address string consisting of a dotted decimal IPv4 address or an
--- IPv6 address e.g., @\"192.168.0.1\"@.
-type HostName       = String
-type ServiceName    = String
-
--- ----------------------------------------------------------------------------
--- On Windows, our sockets are not put in non-blocking mode (non-blocking
--- is not supported for regular file descriptors on Windows, and it would
--- be a pain to support it only for sockets).  So there are two cases:
---
---  - the threaded RTS uses safe calls for socket operations to get
---    non-blocking I/O, just like the rest of the I/O library
---
---  - with the non-threaded RTS, only some operations on sockets will be
---    non-blocking.  Reads and writes go through the normal async I/O
---    system.  accept() uses asyncDoProc so is non-blocking.  A handful
---    of others (recvFrom, sendFd, recvFd) will block all threads - if this
---    is a problem, -threaded is the workaround.
---
-##if defined(mingw32_HOST_OS)
-##define SAFE_ON_WIN safe
-##else
-##define SAFE_ON_WIN unsafe
-##endif
-
------------------------------------------------------------------------------
--- Socket types
-
-#if __GLASGOW_HASKELL__ >= 611 && defined(mingw32_HOST_OS)
-socket2FD  (MkSocket fd _ _ _ _) =
-  -- HACK, 1 means True
-  FD{fdFD = fd,fdIsSocket_ = 1}
-#endif
-
-mkSocket :: CInt
-         -> Family
-         -> SocketType
-         -> ProtocolNumber
-         -> SocketStatus
-         -> IO Socket
-mkSocket fd fam sType pNum stat = do
-   mStat <- newMVar stat
-   return (MkSocket fd fam sType pNum mStat)
-
-
-fdSocket :: Socket -> CInt
-fdSocket (MkSocket fd _ _ _ _) = fd
-
--- | This is the default protocol for a given service.
-defaultProtocol :: ProtocolNumber
-defaultProtocol = 0
-
------------------------------------------------------------------------------
--- SockAddr
-
-instance Show SockAddr where
-#if defined(DOMAIN_SOCKET_SUPPORT)
-  showsPrec _ (SockAddrUnix str) = showString str
-#endif
-  showsPrec _ (SockAddrInet port ha)
-   = showString (unsafePerformIO (inet_ntoa ha))
-   . showString ":"
-   . shows port
-#if defined(IPV6_SOCKET_SUPPORT)
-  showsPrec _ addr@(SockAddrInet6 port _ _ _)
-   = showChar '['
-   . showString (unsafePerformIO $
-                 fst `liftM` getNameInfo [NI_NUMERICHOST] True False addr >>=
-                 maybe (fail "showsPrec: impossible internal error") return)
-   . showString "]:"
-   . shows port
-#endif
-
------------------------------------------------------------------------------
--- Connection Functions
-
--- In the following connection and binding primitives.  The names of
--- the equivalent C functions have been preserved where possible. It
--- should be noted that some of these names used in the C library,
--- \tr{bind} in particular, have a different meaning to many Haskell
--- programmers and have thus been renamed by appending the prefix
--- Socket.
-
--- | Create a new socket using the given address family, socket type
--- and protocol number.  The address family is usually 'AF_INET',
--- 'AF_INET6', or 'AF_UNIX'.  The socket type is usually 'Stream' or
--- 'Datagram'.  The protocol number is usually 'defaultProtocol'.
--- If 'AF_INET6' is used, the 'IPv6Only' socket option is set to 0
--- so that both IPv4 and IPv6 can be handled with one socket.
-socket :: Family         -- Family Name (usually AF_INET)
-       -> SocketType     -- Socket Type (usually Stream)
-       -> ProtocolNumber -- Protocol Number (getProtocolByName to find value)
-       -> IO Socket      -- Unconnected Socket
-socket family stype protocol = do
-    c_stype <- packSocketTypeOrThrow "socket" stype
-    fd <- throwSocketErrorIfMinus1Retry "socket" $
-                c_socket (packFamily family) c_stype protocol
-    setNonBlockIfNeeded fd
-    socket_status <- newMVar NotConnected
-    let sock = MkSocket fd family stype protocol socket_status
-    return sock
-
--- | Build a pair of connected socket objects using the given address
--- family, socket type, and protocol number.  Address family, socket
--- type, and protocol number are as for the 'socket' function above.
--- Availability: Unix.
-#if defined(DOMAIN_SOCKET_SUPPORT)
-socketPair :: Family              -- Family Name (usually AF_INET or AF_INET6)
-           -> SocketType          -- Socket Type (usually Stream)
-           -> ProtocolNumber      -- Protocol Number
-           -> IO (Socket, Socket) -- unnamed and connected.
-socketPair family stype protocol = do
-    allocaBytes (2 * sizeOf (1 :: CInt)) $ \ fdArr -> do
-    c_stype <- packSocketTypeOrThrow "socketPair" stype
-    _rc <- throwSocketErrorIfMinus1Retry "socketpair" $
-                c_socketpair (packFamily family) c_stype protocol fdArr
-    [fd1,fd2] <- peekArray 2 fdArr
-    s1 <- mkNonBlockingSocket fd1
-    s2 <- mkNonBlockingSocket fd2
-    return (s1,s2)
-  where
-    mkNonBlockingSocket fd = do
-       setNonBlockIfNeeded fd
-       stat <- newMVar Connected
-       return (MkSocket fd family stype protocol stat)
-
-foreign import ccall unsafe "socketpair"
-  c_socketpair :: CInt -> CInt -> CInt -> Ptr CInt -> IO CInt
-#endif
-
--- | Set the socket to nonblocking, if applicable to this platform.
-setNonBlockIfNeeded :: CInt -> IO ()
-setNonBlockIfNeeded fd =
-#if __GLASGOW_HASKELL__ < 611
-    System.Posix.Internals.setNonBlockingFD fd
-#else
-    System.Posix.Internals.setNonBlockingFD fd True
-#endif
-
------------------------------------------------------------------------------
--- Binding a socket
-
--- | Bind the socket to an address. The socket must not already be
--- bound.  The 'Family' passed to @bind@ must be the
--- same as that passed to 'socket'.  If the special port number
--- 'aNY_PORT' is passed then the system assigns the next available
--- use port.
-bind :: Socket    -- Unconnected Socket
-           -> SockAddr  -- Address to Bind to
-           -> IO ()
-bind (MkSocket s _family _stype _protocol socketStatus) addr = do
- modifyMVar_ socketStatus $ \ status -> do
- if status /= NotConnected
-  then
-   ioError (userError ("bind: can't peform bind on socket in status " ++
-         show status))
-  else do
-   withSockAddr addr $ \p_addr sz -> do
-   _status <- throwSocketErrorIfMinus1Retry "bind" $ c_bind s p_addr (fromIntegral sz)
-   return Bound
-
------------------------------------------------------------------------------
--- Connecting a socket
-
--- | Connect to a remote socket at address.
-connect :: Socket    -- Unconnected Socket
-        -> SockAddr  -- Socket address stuff
-        -> IO ()
-connect sock@(MkSocket s _family _stype _protocol socketStatus) addr = do
- modifyMVar_ socketStatus $ \currentStatus -> do
- if currentStatus /= NotConnected && currentStatus /= Bound
-  then
-    ioError (userError ("connect: can't peform connect on socket in status " ++
-        show currentStatus))
-  else do
-    withSockAddr addr $ \p_addr sz -> do
-
-    let connectLoop = do
-           r <- c_connect s p_addr (fromIntegral sz)
-           if r == -1
-               then do
-#if !(defined(HAVE_WINSOCK2_H) && !defined(cygwin32_HOST_OS))
-                   err <- getErrno
-                   case () of
-                     _ | err == eINTR       -> connectLoop
-                     _ | err == eINPROGRESS -> connectBlocked
---                   _ | err == eAGAIN      -> connectBlocked
-                     _otherwise             -> throwSocketError "connect"
-#else
-                   rc <- c_getLastError
-                   case rc of
-                     #{const WSANOTINITIALISED} -> do
-                       withSocketsDo (return ())
-                       r <- c_connect s p_addr (fromIntegral sz)
-                       if r == -1
-                         then throwSocketError "connect"
-                         else return r
-                     _ -> throwSocketError "connect"
-#endif
-               else return r
-
-        connectBlocked = do
-           threadWaitWrite (fromIntegral s)
-           err <- getSocketOption sock SoError
-           if (err == 0)
-                then return 0
-                else throwSocketErrorCode "connect" (fromIntegral err)
-
-    connectLoop
-    return Connected
-
------------------------------------------------------------------------------
--- Listen
-
--- | Listen for connections made to the socket.  The second argument
--- specifies the maximum number of queued connections and should be at
--- least 1; the maximum value is system-dependent (usually 5).
-listen :: Socket  -- Connected & Bound Socket
-       -> Int     -- Queue Length
-       -> IO ()
-listen (MkSocket s _family _stype _protocol socketStatus) backlog = do
- modifyMVar_ socketStatus $ \ status -> do
- if status /= Bound
-   then
-     ioError (userError ("listen: can't peform listen on socket in status " ++
-         show status))
-   else do
-     throwSocketErrorIfMinus1Retry "listen" (c_listen s (fromIntegral backlog))
-     return Listening
-
------------------------------------------------------------------------------
--- Accept
---
--- A call to `accept' only returns when data is available on the given
--- socket, unless the socket has been set to non-blocking.  It will
--- return a new socket which should be used to read the incoming data and
--- should then be closed. Using the socket returned by `accept' allows
--- incoming requests to be queued on the original socket.
-
--- | Accept a connection.  The socket must be bound to an address and
--- listening for connections.  The return value is a pair @(conn,
--- address)@ where @conn@ is a new socket object usable to send and
--- receive data on the connection, and @address@ is the address bound
--- to the socket on the other end of the connection.
-accept :: Socket                        -- Queue Socket
-       -> IO (Socket,                   -- Readable Socket
-              SockAddr)                 -- Peer details
-
-accept sock@(MkSocket s family stype protocol status) = do
- currentStatus <- readMVar status
- okay <- isAcceptable sock
- if not okay
-   then
-     ioError (userError ("accept: can't perform accept on socket (" ++ (show (family,stype,protocol)) ++") in status " ++
-         show currentStatus))
-   else do
-     let sz = sizeOfSockAddrByFamily family
-     allocaBytes sz $ \ sockaddr -> do
-#if defined(mingw32_HOST_OS)
-     new_sock <-
-        if threaded
-           then with (fromIntegral sz) $ \ ptr_len ->
-                  throwSocketErrorIfMinus1Retry "Network.Socket.accept" $
-                    c_accept_safe s sockaddr ptr_len
-           else do
-                paramData <- c_newAcceptParams s (fromIntegral sz) sockaddr
-                rc        <- asyncDoProc c_acceptDoProc paramData
-                new_sock  <- c_acceptNewSock    paramData
-                c_free paramData
-                when (rc /= 0) $
-                     throwSocketErrorCode "Network.Socket.accept" (fromIntegral rc)
-                return new_sock
-#else
-     with (fromIntegral sz) $ \ ptr_len -> do
-     new_sock <-
-#if 0
-                 throwSocketErrorIfMinus1RetryMayBlock "accept"
-                        (threadWaitRead (fromIntegral s))
-                        (c_accept4 s sockaddr ptr_len (#const SOCK_NONBLOCK))
-# else
-                 throwSocketErrorWaitRead sock "accept"
-                        (c_accept s sockaddr ptr_len)
-# endif /* HAVE_ACCEPT4 */
-#endif
-     setNonBlockIfNeeded new_sock
-     addr <- peekSockAddr sockaddr
-     new_status <- newMVar Connected
-     return ((MkSocket new_sock family stype protocol new_status), addr)
-
-#if defined(mingw32_HOST_OS)
-foreign import ccall unsafe "HsNet.h acceptNewSock"
-  c_acceptNewSock :: Ptr () -> IO CInt
-foreign import ccall unsafe "HsNet.h newAcceptParams"
-  c_newAcceptParams :: CInt -> CInt -> Ptr a -> IO (Ptr ())
-foreign import ccall unsafe "HsNet.h &acceptDoProc"
-  c_acceptDoProc :: FunPtr (Ptr () -> IO Int)
-foreign import ccall unsafe "free"
-  c_free:: Ptr a -> IO ()
-#endif
-
------------------------------------------------------------------------------
--- ** Sending and reciving data
-
--- $sendrecv
---
--- Do not use the @send@ and @recv@ functions defined in this module
--- in new code, as they incorrectly represent binary data as a Unicode
--- string.  As a result, these functions are inefficient and may lead
--- to bugs in the program.  Instead use the @send@ and @recv@
--- functions defined in the 'Network.Socket.ByteString' module.
-
------------------------------------------------------------------------------
--- sendTo & recvFrom
-
--- | Send data to the socket.  The recipient can be specified
--- explicitly, so the socket need not be in a connected state.
--- Returns the number of bytes sent.  Applications are responsible for
--- ensuring that all data has been sent.
---
--- NOTE: blocking on Windows unless you compile with -threaded (see
--- GHC ticket #1129)
-sendTo :: Socket        -- (possibly) bound/connected Socket
-       -> String        -- Data to send
-       -> SockAddr
-       -> IO Int        -- Number of Bytes sent
-sendTo sock xs addr = do
- withCString xs $ \str -> do
-   sendBufTo sock str (length xs) addr
-
--- | Send data to the socket.  The recipient can be specified
--- explicitly, so the socket need not be in a connected state.
--- Returns the number of bytes sent.  Applications are responsible for
--- ensuring that all data has been sent.
-sendBufTo :: Socket            -- (possibly) bound/connected Socket
-          -> Ptr a -> Int  -- Data to send
-          -> SockAddr
-          -> IO Int            -- Number of Bytes sent
-sendBufTo sock@(MkSocket s _family _stype _protocol _status) ptr nbytes addr = do
- withSockAddr addr $ \p_addr sz -> do
-   liftM fromIntegral $
-     throwSocketErrorWaitWrite sock "sendTo" $
-        c_sendto s ptr (fromIntegral $ nbytes) 0{-flags-}
-                        p_addr (fromIntegral sz)
-
--- | Receive data from the socket. The socket need not be in a
--- connected state. Returns @(bytes, nbytes, address)@ where @bytes@
--- is a @String@ of length @nbytes@ representing the data received and
--- @address@ is a 'SockAddr' representing the address of the sending
--- socket.
---
--- NOTE: blocking on Windows unless you compile with -threaded (see
--- GHC ticket #1129)
-recvFrom :: Socket -> Int -> IO (String, Int, SockAddr)
-recvFrom sock nbytes =
-  allocaBytes nbytes $ \ptr -> do
-    (len, sockaddr) <- recvBufFrom sock ptr nbytes
-    str <- peekCStringLen (ptr, len)
-    return (str, len, sockaddr)
-
--- | Receive data from the socket, writing it into buffer instead of
--- creating a new string.  The socket need not be in a connected
--- state. Returns @(nbytes, address)@ where @nbytes@ is the number of
--- bytes received and @address@ is a 'SockAddr' representing the
--- address of the sending socket.
---
--- NOTE: blocking on Windows unless you compile with -threaded (see
--- GHC ticket #1129)
-recvBufFrom :: Socket -> Ptr a -> Int -> IO (Int, SockAddr)
-recvBufFrom sock@(MkSocket s family _stype _protocol _status) ptr nbytes
- | nbytes <= 0 = ioError (mkInvalidRecvArgError "Network.Socket.recvFrom")
- | otherwise   =
-    withNewSockAddr family $ \ptr_addr sz -> do
-      alloca $ \ptr_len -> do
-        poke ptr_len (fromIntegral sz)
-        len <- throwSocketErrorWaitRead sock "recvFrom" $
-                   c_recvfrom s ptr (fromIntegral nbytes) 0{-flags-}
-                                ptr_addr ptr_len
-        let len' = fromIntegral len
-        if len' == 0
-         then ioError (mkEOFError "Network.Socket.recvFrom")
-         else do
-           flg <- isConnected sock
-             -- For at least one implementation (WinSock 2), recvfrom() ignores
-             -- filling in the sockaddr for connected TCP sockets. Cope with
-             -- this by using getPeerName instead.
-           sockaddr <-
-                if flg then
-                   getPeerName sock
-                else
-                   peekSockAddr ptr_addr
-           return (len', sockaddr)
-
------------------------------------------------------------------------------
--- send & recv
-
--- | Send data to the socket. The socket must be connected to a remote
--- socket. Returns the number of bytes sent.  Applications are
--- responsible for ensuring that all data has been sent.
-send :: Socket  -- Bound/Connected Socket
-     -> String  -- Data to send
-     -> IO Int  -- Number of Bytes sent
-send sock@(MkSocket s _family _stype _protocol _status) xs = do
- let len = length xs
- withCString xs $ \str -> do
-   liftM fromIntegral $
-#if defined(mingw32_HOST_OS)
-# if __GLASGOW_HASKELL__ >= 611
-    writeRawBufferPtr
-      "Network.Socket.send"
-      (socket2FD sock)
-      (castPtr str)
-      0
-      (fromIntegral len)
-#else
-      writeRawBufferPtr
-        "Network.Socket.send"
-        (fromIntegral s)
-        True
-        str
-        0
-       (fromIntegral len)
-#endif
-
-#else
-     throwSocketErrorWaitWrite sock "send" $
-        c_send s str (fromIntegral len) 0{-flags-}
-#endif
-
--- | Send data to the socket. The socket must be connected to a remote
--- socket. Returns the number of bytes sent.  Applications are
--- responsible for ensuring that all data has been sent.
-sendBuf :: Socket     -- Bound/Connected Socket
-        -> Ptr Word8  -- Pointer to the data to send
-        -> Int        -- Length of the buffer
-        -> IO Int     -- Number of Bytes sent
-sendBuf sock@(MkSocket s _family _stype _protocol _status) str len = do
-   liftM fromIntegral $
-#if defined(mingw32_HOST_OS)
-# if __GLASGOW_HASKELL__ >= 611
-    writeRawBufferPtr
-      "Network.Socket.sendBuf"
-      (socket2FD sock)
-      (castPtr str)
-      0
-      (fromIntegral len)
-# else
-      writeRawBufferPtr
-        "Network.Socket.sendBuf"
-        (fromIntegral s)
-        True
-        str
-        0
-       (fromIntegral len)
-# endif
-#else
-     throwSocketErrorWaitWrite sock "sendBuf" $
-        c_send s str (fromIntegral len) 0{-flags-}
-#endif
-
-
--- | Receive data from the socket.  The socket must be in a connected
--- state. This function may return fewer bytes than specified.  If the
--- message is longer than the specified length, it may be discarded
--- depending on the type of socket.  This function may block until a
--- message arrives.
---
--- Considering hardware and network realities, the maximum number of
--- bytes to receive should be a small power of 2, e.g., 4096.
---
--- For TCP sockets, a zero length return value means the peer has
--- closed its half side of the connection.
-recv :: Socket -> Int -> IO String
-recv sock l = recvLen sock l >>= \ (s,_) -> return s
-
-recvLen :: Socket -> Int -> IO (String, Int)
-recvLen sock@(MkSocket s _family _stype _protocol _status) nbytes
- | nbytes <= 0 = ioError (mkInvalidRecvArgError "Network.Socket.recv")
- | otherwise   = do
-     allocaBytes nbytes $ \ptr -> do
-        len <-
-#if defined(mingw32_HOST_OS)
-# if __GLASGOW_HASKELL__ >= 611
-          readRawBufferPtr "Network.Socket.recvLen" (socket2FD sock) ptr 0
-                 (fromIntegral nbytes)
-#else
-          readRawBufferPtr "Network.Socket.recvLen" (fromIntegral s) True ptr 0
-                 (fromIntegral nbytes)
-#endif
-#else
-               throwSocketErrorWaitRead sock "recv" $
-                   c_recv s ptr (fromIntegral nbytes) 0{-flags-}
-#endif
-        let len' = fromIntegral len
-        if len' == 0
-         then ioError (mkEOFError "Network.Socket.recv")
-         else do
-           s' <- peekCStringLen (castPtr ptr,len')
-           return (s', len')
-
--- | Receive data from the socket.  The socket must be in a connected
--- state. This function may return fewer bytes than specified.  If the
--- message is longer than the specified length, it may be discarded
--- depending on the type of socket.  This function may block until a
--- message arrives.
---
--- Considering hardware and network realities, the maximum number of
--- bytes to receive should be a small power of 2, e.g., 4096.
---
--- For TCP sockets, a zero length return value means the peer has
--- closed its half side of the connection.
-recvBuf :: Socket -> Ptr Word8 -> Int -> IO Int
-recvBuf sock p l = recvLenBuf sock p l
-
-recvLenBuf :: Socket -> Ptr Word8 -> Int -> IO Int
-recvLenBuf sock@(MkSocket s _family _stype _protocol _status) ptr nbytes
- | nbytes <= 0 = ioError (mkInvalidRecvArgError "Network.Socket.recvBuf")
- | otherwise   = do
-        len <-
-#if defined(mingw32_HOST_OS)
-# if __GLASGOW_HASKELL__ >= 611
-          readRawBufferPtr "Network.Socket.recvLenBuf" (socket2FD sock) ptr 0
-                 (fromIntegral nbytes)
-#else
-          readRawBufferPtr "Network.Socket.recvLenBuf" (fromIntegral s) True ptr 0
-                 (fromIntegral nbytes)
-#endif
-#else
-               throwSocketErrorWaitRead sock "recvBuf" $
-                   c_recv s (castPtr ptr) (fromIntegral nbytes) 0{-flags-}
-#endif
-        let len' = fromIntegral len
-        if len' == 0
-         then ioError (mkEOFError "Network.Socket.recvBuf")
-         else return len'
-
-
--- ---------------------------------------------------------------------------
--- socketPort
---
--- The port number the given socket is currently connected to can be
--- determined by calling $port$, is generally only useful when bind
--- was given $aNY\_PORT$.
-
-socketPort :: Socket            -- Connected & Bound Socket
-           -> IO PortNumber     -- Port Number of Socket
-socketPort sock@(MkSocket _ AF_INET _ _ _) = do
-    (SockAddrInet port _) <- getSocketName sock
-    return port
-#if defined(IPV6_SOCKET_SUPPORT)
-socketPort sock@(MkSocket _ AF_INET6 _ _ _) = do
-    (SockAddrInet6 port _ _ _) <- getSocketName sock
-    return port
-#endif
-socketPort (MkSocket _ family _ _ _) =
-    ioError (userError ("socketPort: not supported for Family " ++ show family))
-
-
--- ---------------------------------------------------------------------------
--- getPeerName
-
--- Calling $getPeerName$ returns the address details of the machine,
--- other than the local one, which is connected to the socket. This is
--- used in programs such as FTP to determine where to send the
--- returning data.  The corresponding call to get the details of the
--- local machine is $getSocketName$.
-
-getPeerName   :: Socket -> IO SockAddr
-getPeerName (MkSocket s family _ _ _) = do
- withNewSockAddr family $ \ptr sz -> do
-   with (fromIntegral sz) $ \int_star -> do
-   throwSocketErrorIfMinus1Retry "getPeerName" $ c_getpeername s ptr int_star
-   _sz <- peek int_star
-   peekSockAddr ptr
-
-getSocketName :: Socket -> IO SockAddr
-getSocketName (MkSocket s family _ _ _) = do
- withNewSockAddr family $ \ptr sz -> do
-   with (fromIntegral sz) $ \int_star -> do
-   throwSocketErrorIfMinus1Retry "getSocketName" $ c_getsockname s ptr int_star
-   peekSockAddr ptr
-
------------------------------------------------------------------------------
--- Socket Properties
-
--- | Socket options for use with 'setSocketOption' and 'getSocketOption'.
---
--- The existence of a constructor does not imply that the relevant option
--- is supported on your system: see 'isSupportedSocketOption'
-data SocketOption
-    = Debug         -- ^ SO_DEBUG
-    | ReuseAddr     -- ^ SO_REUSEADDR
-    | Type          -- ^ SO_TYPE
-    | SoError       -- ^ SO_ERROR
-    | DontRoute     -- ^ SO_DONTROUTE
-    | Broadcast     -- ^ SO_BROADCAST
-    | SendBuffer    -- ^ SO_SNDBUF
-    | RecvBuffer    -- ^ SO_RCVBUF
-    | KeepAlive     -- ^ SO_KEEPALIVE
-    | OOBInline     -- ^ SO_OOBINLINE
-    | TimeToLive    -- ^ IP_TTL
-    | MaxSegment    -- ^ TCP_MAXSEG
-    | NoDelay       -- ^ TCP_NODELAY
-    | Cork          -- ^ TCP_CORK
-    | Linger        -- ^ SO_LINGER
-    | ReusePort     -- ^ SO_REUSEPORT
-    | RecvLowWater  -- ^ SO_RCVLOWAT
-    | SendLowWater  -- ^ SO_SNDLOWAT
-    | RecvTimeOut   -- ^ SO_RCVTIMEO
-    | SendTimeOut   -- ^ SO_SNDTIMEO
-    | UseLoopBack   -- ^ SO_USELOOPBACK
-    | IPv6Only      -- ^ IPV6_V6ONLY
-    deriving (Show, Typeable)
-
--- | Does the 'SocketOption' exist on this system?
-isSupportedSocketOption :: SocketOption -> Bool
-isSupportedSocketOption = isJust . packSocketOption
-
--- | For a socket option, return Just (level, value) where level is the
--- corresponding C option level constant (e.g. SOL_SOCKET) and value is
--- the option constant itself (e.g. SO_DEBUG)
--- If either constant does not exist, return Nothing.
-packSocketOption :: SocketOption -> Maybe (CInt, CInt)
-packSocketOption so =
-  -- The Just here is a hack to disable GHC's overlapping pattern detection:
-  -- the problem is if all constants are present, the fallback pattern is
-  -- redundant, but if they aren't then it isn't. Hence we introduce an
-  -- extra pattern (Nothing) that can't possibly happen, so that the
-  -- fallback is always (in principle) necessary.
-  -- I feel a little bad for including this, but such are the sacrifices we
-  -- make while working with CPP - excluding the fallback pattern correctly
-  -- would be a serious nuisance.
-  -- (NB: comments elsewhere in this file refer to this one)
-  case Just so of
-#ifdef SOL_SOCKET
-#ifdef SO_DEBUG
-    Just Debug         -> Just ((#const SOL_SOCKET), (#const SO_DEBUG))
-#endif
-#ifdef SO_REUSEADDR
-    Just ReuseAddr     -> Just ((#const SOL_SOCKET), (#const SO_REUSEADDR))
-#endif
-#ifdef SO_TYPE
-    Just Type          -> Just ((#const SOL_SOCKET), (#const SO_TYPE))
-#endif
-#ifdef SO_ERROR
-    Just SoError       -> Just ((#const SOL_SOCKET), (#const SO_ERROR))
-#endif
-#ifdef SO_DONTROUTE
-    Just DontRoute     -> Just ((#const SOL_SOCKET), (#const SO_DONTROUTE))
-#endif
-#ifdef SO_BROADCAST
-    Just Broadcast     -> Just ((#const SOL_SOCKET), (#const SO_BROADCAST))
-#endif
-#ifdef SO_SNDBUF
-    Just SendBuffer    -> Just ((#const SOL_SOCKET), (#const SO_SNDBUF))
-#endif
-#ifdef SO_RCVBUF
-    Just RecvBuffer    -> Just ((#const SOL_SOCKET), (#const SO_RCVBUF))
-#endif
-#ifdef SO_KEEPALIVE
-    Just KeepAlive     -> Just ((#const SOL_SOCKET), (#const SO_KEEPALIVE))
-#endif
-#ifdef SO_OOBINLINE
-    Just OOBInline     -> Just ((#const SOL_SOCKET), (#const SO_OOBINLINE))
-#endif
-#ifdef SO_LINGER
-    Just Linger        -> Just ((#const SOL_SOCKET), (#const SO_LINGER))
-#endif
-#ifdef SO_REUSEPORT
-    Just ReusePort     -> Just ((#const SOL_SOCKET), (#const SO_REUSEPORT))
-#endif
-#ifdef SO_RCVLOWAT
-    Just RecvLowWater  -> Just ((#const SOL_SOCKET), (#const SO_RCVLOWAT))
-#endif
-#ifdef SO_SNDLOWAT
-    Just SendLowWater  -> Just ((#const SOL_SOCKET), (#const SO_SNDLOWAT))
-#endif
-#ifdef SO_RCVTIMEO
-    Just RecvTimeOut   -> Just ((#const SOL_SOCKET), (#const SO_RCVTIMEO))
-#endif
-#ifdef SO_SNDTIMEO
-    Just SendTimeOut   -> Just ((#const SOL_SOCKET), (#const SO_SNDTIMEO))
-#endif
-#ifdef SO_USELOOPBACK
-    Just UseLoopBack   -> Just ((#const SOL_SOCKET), (#const SO_USELOOPBACK))
-#endif
-#endif // SOL_SOCKET
-#ifdef IPPROTO_IP
-#ifdef IP_TTL
-    Just TimeToLive    -> Just ((#const IPPROTO_IP), (#const IP_TTL))
-#endif
-#endif // IPPROTO_IP
-#ifdef IPPROTO_TCP
-#ifdef TCP_MAXSEG
-    Just MaxSegment    -> Just ((#const IPPROTO_TCP), (#const TCP_MAXSEG))
-#endif
-#ifdef TCP_NODELAY
-    Just NoDelay       -> Nothing -- Just ((#const IPPROTO_TCP), (#const TCP_NODELAY))
-#endif
-#ifdef TCP_CORK
-    Just Cork          -> Just ((#const IPPROTO_TCP), (#const TCP_CORK))
-#endif
-#endif // IPPROTO_TCP
-#ifdef IPPROTO_IPV6
-#if HAVE_DECL_IPV6_V6ONLY
-    Just IPv6Only      -> Just ((#const IPPROTO_IPV6), (#const IPV6_V6ONLY))
-#endif
-#endif // IPPROTO_IPV6
-    _             -> Nothing
-
--- | Return the option level and option value if they exist,
--- otherwise throw an error that begins "Network.Socket." ++ the String
--- parameter
-packSocketOption' :: String -> SocketOption -> IO (CInt, CInt)
-packSocketOption' caller so = maybe err return (packSocketOption so)
- where
-  err = ioError . userError . concat $ ["Network.Socket.", caller,
-    ": socket option ", show so, " unsupported on this system"]
-
--- | Set a socket option that expects an Int value.
--- There is currently no API to set e.g. the timeval socket options
-setSocketOption :: Socket
-                -> SocketOption -- Option Name
-                -> Int          -- Option Value
-                -> IO ()
-setSocketOption (MkSocket s _ _ _ _) so v = do
-   (level, opt) <- packSocketOption' "setSocketOption" so
-   with (fromIntegral v) $ \ptr_v -> do
-   throwSocketErrorIfMinus1_ "setSocketOption" $
-       c_setsockopt s level opt ptr_v
-          (fromIntegral (sizeOf (undefined :: CInt)))
-   return ()
-
-
--- | Get a socket option that gives an Int value.
--- There is currently no API to get e.g. the timeval socket options
-getSocketOption :: Socket
-                -> SocketOption  -- Option Name
-                -> IO Int        -- Option Value
-getSocketOption (MkSocket s _ _ _ _) so = do
-   (level, opt) <- packSocketOption' "getSocketOption" so
-   alloca $ \ptr_v ->
-     with (fromIntegral (sizeOf (undefined :: CInt))) $ \ptr_sz -> do
-       throwSocketErrorIfMinus1Retry "getSocketOption" $
-         c_getsockopt s level opt ptr_v ptr_sz
-       fromIntegral `liftM` peek ptr_v
-
-
-#ifdef HAVE_STRUCT_UCRED
--- | Returns the processID, userID and groupID of the socket's peer.
---
--- Only available on platforms that support SO_PEERCRED on domain sockets.
-getPeerCred :: Socket -> IO (CUInt, CUInt, CUInt)
-getPeerCred sock = do
-  let fd = fdSocket sock
-  let sz = (fromIntegral (#const sizeof(struct ucred)))
-  with sz $ \ ptr_cr ->
-   alloca       $ \ ptr_sz -> do
-     poke ptr_sz sz
-     throwSocketErrorIfMinus1Retry "getPeerCred" $
-       c_getsockopt fd (#const SOL_SOCKET) (#const SO_PEERCRED) ptr_cr ptr_sz
-     pid <- (#peek struct ucred, pid) ptr_cr
-     uid <- (#peek struct ucred, uid) ptr_cr
-     gid <- (#peek struct ucred, gid) ptr_cr
-     return (pid, uid, gid)
-#endif
-
-##if !(MIN_VERSION_base(4,3,1))
-closeFdWith closer fd = closer fd
-##endif
-
-#if defined(DOMAIN_SOCKET_SUPPORT)
--- sending/receiving ancillary socket data; low-level mechanism
--- for transmitting file descriptors, mainly.
-sendFd :: Socket -> CInt -> IO ()
-sendFd sock outfd = do
-  throwSocketErrorWaitWrite sock "sendFd" $
-     c_sendFd (fdSocket sock) outfd
-   -- Note: If Winsock supported FD-passing, thi would have been
-   -- incorrect (since socket FDs need to be closed via closesocket().)
-  closeFd outfd
-
-recvFd :: Socket -> IO CInt
-recvFd sock = do
-  theFd <- throwSocketErrorWaitRead sock "recvFd" $
-               c_recvFd (fdSocket sock)
-  return theFd
-
-foreign import ccall SAFE_ON_WIN "sendFd" c_sendFd :: CInt -> CInt -> IO CInt
-foreign import ccall SAFE_ON_WIN "recvFd" c_recvFd :: CInt -> IO CInt
-
-#endif
-
--- ---------------------------------------------------------------------------
--- Utility Functions
-
-aNY_PORT :: PortNumber
-aNY_PORT = 0
-
--- | The IPv4 wild card address.
-
-iNADDR_ANY :: HostAddress
-iNADDR_ANY = htonl (#const INADDR_ANY)
-
-foreign import CALLCONV unsafe "my_htonl" htonl :: Word32 -> Word32
-
-#if defined(IPV6_SOCKET_SUPPORTNO)
--- | The IPv6 wild card address.
-
-iN6ADDR_ANY :: HostAddress6
-iN6ADDR_ANY = (0, 0, 0, 0)
-#endif
-
-sOMAXCONN :: Int
-sOMAXCONN = #const SOMAXCONN
-
-sOL_SOCKET :: Int
-sOL_SOCKET = #const SOL_SOCKET
-
-#ifdef SCM_RIGHTS
-sCM_RIGHTS :: Int
-sCM_RIGHTS = #const SCM_RIGHTS
-#endif
-
--- | This is the value of SOMAXCONN, typically 128.
--- 128 is good enough for normal network servers but
--- is too small for high performance servers.
-maxListenQueue :: Int
-maxListenQueue = sOMAXCONN
-
--- -----------------------------------------------------------------------------
-
-data ShutdownCmd
- = ShutdownReceive
- | ShutdownSend
- | ShutdownBoth
- deriving Typeable
-
-sdownCmdToInt :: ShutdownCmd -> CInt
-sdownCmdToInt ShutdownReceive = 0
-sdownCmdToInt ShutdownSend    = 1
-sdownCmdToInt ShutdownBoth    = 2
-
--- | Shut down one or both halves of the connection, depending on the
--- second argument to the function.  If the second argument is
--- 'ShutdownReceive', further receives are disallowed.  If it is
--- 'ShutdownSend', further sends are disallowed.  If it is
--- 'ShutdownBoth', further sends and receives are disallowed.
-shutdown :: Socket -> ShutdownCmd -> IO ()
-shutdown (MkSocket s _ _ _ _) stype = do
-  throwSocketErrorIfMinus1Retry "shutdown" (c_shutdown s (sdownCmdToInt stype))
-  return ()
-
--- -----------------------------------------------------------------------------
-
--- | Close the socket.  All future operations on the socket object
--- will fail.  The remote end will receive no more data (after queued
--- data is flushed).
-close :: Socket -> IO ()
-close (MkSocket s _ _ _ socketStatus) = do
- modifyMVar_ socketStatus $ \ status ->
-   case status of
-     ConvertedToHandle ->
-         ioError (userError ("close: converted to a Handle, use hClose instead"))
-     Closed ->
-         return status
-     _ -> closeFdWith (closeFd . fromIntegral) (fromIntegral s) >> return Closed
-
--- -----------------------------------------------------------------------------
-
-isConnected :: Socket -> IO Bool
-isConnected (MkSocket _ _ _ _ status) = do
-    value <- readMVar status
-    return (value == Connected)
-
--- -----------------------------------------------------------------------------
--- Socket Predicates
-
-isBound :: Socket -> IO Bool
-isBound (MkSocket _ _ _ _ status) = do
-    value <- readMVar status
-    return (value == Bound)
-
-isListening :: Socket -> IO Bool
-isListening (MkSocket _ _ _  _ status) = do
-    value <- readMVar status
-    return (value == Listening)
-
-isReadable  :: Socket -> IO Bool
-isReadable (MkSocket _ _ _ _ status) = do
-    value <- readMVar status
-    return (value == Listening || value == Connected)
-
-isWritable  :: Socket -> IO Bool
-isWritable = isReadable -- sort of.
-
-isAcceptable :: Socket -> IO Bool
-#if defined(DOMAIN_SOCKET_SUPPORT)
-isAcceptable (MkSocket _ AF_UNIX x _ status)
-    | x == Stream || x == SeqPacket = do
-        value <- readMVar status
-        return (value == Connected || value == Bound || value == Listening)
-isAcceptable (MkSocket _ AF_UNIX _ _ _) = return False
-#endif
-isAcceptable (MkSocket _ _ _ _ status) = do
-    value <- readMVar status
-    return (value == Connected || value == Listening)
-
--- -----------------------------------------------------------------------------
--- Internet address manipulation routines:
-
-inet_addr :: String -> IO HostAddress
-inet_addr ipstr = do
-   withCString ipstr $ \str -> do
-   had <- c_inet_addr str
-   if had == -1
-    then ioError (userError ("inet_addr: Malformed address: " ++ ipstr))
-    else return had  -- network byte order
-
-inet_ntoa :: HostAddress -> IO String
-inet_ntoa haddr = do
-  pstr <- c_inet_ntoa haddr
-  peekCString pstr
-
--- | Turns a Socket into an 'Handle'. By default, the new handle is
--- unbuffered. Use 'System.IO.hSetBuffering' to change the buffering.
---
--- Note that since a 'Handle' is automatically closed by a finalizer
--- when it is no longer referenced, you should avoid doing any more
--- operations on the 'Socket' after calling 'socketToHandle'.  To
--- close the 'Socket' after 'socketToHandle', call 'System.IO.hClose'
--- on the 'Handle'.
-
-#ifndef __PARALLEL_HASKELL__
-socketToHandle :: Socket -> IOMode -> IO Handle
-socketToHandle s@(MkSocket fd _ _ _ socketStatus) mode = do
- modifyMVar socketStatus $ \ status ->
-    if status == ConvertedToHandle
-        then ioError (userError ("socketToHandle: already a Handle"))
-        else do
-# if __GLASGOW_HASKELL__ >= 611
-    h <- fdToHandle' (fromIntegral fd) (Just GHC.IO.Device.Stream) True (show s) mode True{-bin-}
-# elif __GLASGOW_HASKELL__ >= 608
-    h <- fdToHandle' (fromIntegral fd) (Just System.Posix.Internals.Stream) True (show s) mode True{-bin-}
-# elif __GLASGOW_HASKELL__ < 608
-    h <- openFd (fromIntegral fd) (Just System.Posix.Internals.Stream) True (show s) mode True{-bin-}
-# endif
-    hSetBuffering h NoBuffering
-    return (ConvertedToHandle, h)
-#else
-socketToHandle (MkSocket s family stype protocol status) m =
-  error "socketToHandle not implemented in a parallel setup"
-#endif
-
--- | Pack a list of values into a bitmask.  The possible mappings from
--- value to bit-to-set are given as the first argument.  We assume
--- that each value can cause exactly one bit to be set; unpackBits will
--- break if this property is not true.
-
-packBits :: (Eq a, Num b, Bits b) => [(a, b)] -> [a] -> b
-
-packBits mapping xs = foldl' pack 0 mapping
-    where pack acc (k, v) | k `elem` xs = acc .|. v
-                          | otherwise   = acc
-
--- | Unpack a bitmask into a list of values.
-
-unpackBits :: (Num b, Bits b) => [(a, b)] -> b -> [a]
-
--- Be permissive and ignore unknown bit values. At least on OS X,
--- getaddrinfo returns an ai_flags field with bits set that have no
--- entry in <netdb.h>.
-unpackBits [] _    = []
-unpackBits ((k,v):xs) r
-    | r .&. v /= 0 = k : unpackBits xs (r .&. complement v)
-    | otherwise    = unpackBits xs r
-
------------------------------------------------------------------------------
--- Address and service lookups
-
-#if defined(IPV6_SOCKET_SUPPORT) || 1
-
--- | Flags that control the querying behaviour of 'getAddrInfo'.
-data AddrInfoFlag
-    = AI_ADDRCONFIG
-    | AI_ALL
-    | AI_CANONNAME
-    | AI_NUMERICHOST
-    | AI_NUMERICSERV
-    | AI_PASSIVE
-    | AI_V4MAPPED
-    deriving (Eq, Read, Show, Typeable)
-
-aiFlagMapping :: [(AddrInfoFlag, CInt)]
-
-aiFlagMapping =
-    [
-#if HAVE_DECL_AI_ADDRCONFIG
-     (AI_ADDRCONFIG, #const AI_ADDRCONFIG),
-#else
-     (AI_ADDRCONFIG, 0),
-#endif
-#if HAVE_DECL_AI_ALL
-     (AI_ALL, #const AI_ALL),
-#else
-     (AI_ALL, 0),
-#endif
-     (AI_CANONNAME, #const AI_CANONNAME),
-     (AI_NUMERICHOST, #const AI_NUMERICHOST),
-#if HAVE_DECL_AI_NUMERICSERV
-     (AI_NUMERICSERV, #const AI_NUMERICSERV),
-#else
-     (AI_NUMERICSERV, 0),
-#endif
-     (AI_PASSIVE, #const AI_PASSIVE),
-#if HAVE_DECL_AI_V4MAPPED
-     (AI_V4MAPPED, #const AI_V4MAPPED)
-#else
-     (AI_V4MAPPED, 0)
-#endif
-    ]
-
--- | Indicate whether the given 'AddrInfoFlag' will have any effect on
--- this system.
-addrInfoFlagImplemented :: AddrInfoFlag -> Bool
-addrInfoFlagImplemented f = packBits aiFlagMapping [f] /= 0
-
-data AddrInfo =
-    AddrInfo {
-        addrFlags :: [AddrInfoFlag],
-        addrFamily :: Family,
-        addrSocketType :: SocketType,
-        addrProtocol :: ProtocolNumber,
-        addrAddress :: SockAddr,
-        addrCanonName :: Maybe String
-        }
-    deriving (Eq, Show, Typeable)
-
-instance Storable AddrInfo where
-    sizeOf    _ = #const sizeof(struct addrinfo)
-    alignment _ = alignment (undefined :: CInt)
-
-    peek p = do
-        ai_flags <- (#peek struct addrinfo, ai_flags) p
-        ai_family <- (#peek struct addrinfo, ai_family) p
-        ai_socktype <- (#peek struct addrinfo, ai_socktype) p
-        ai_protocol <- (#peek struct addrinfo, ai_protocol) p
-        ai_addr <- (#peek struct addrinfo, ai_addr) p >>= peekSockAddr
-        ai_canonname_ptr <- (#peek struct addrinfo, ai_canonname) p
-
-        ai_canonname <- if ai_canonname_ptr == nullPtr
-                        then return Nothing
-                        else liftM Just $ peekCString ai_canonname_ptr
-
-        socktype <- unpackSocketType' "AddrInfo.peek" ai_socktype
-        return (AddrInfo
-                {
-                 addrFlags = unpackBits aiFlagMapping ai_flags,
-                 addrFamily = unpackFamily ai_family,
-                 addrSocketType = socktype,
-                 addrProtocol = ai_protocol,
-                 addrAddress = ai_addr,
-                 addrCanonName = ai_canonname
-                })
-
-    poke p (AddrInfo flags family socketType protocol _ _) = do
-        c_stype <- packSocketTypeOrThrow "AddrInfo.poke" socketType
-
-        (#poke struct addrinfo, ai_flags) p (packBits aiFlagMapping flags)
-        (#poke struct addrinfo, ai_family) p (packFamily family)
-        (#poke struct addrinfo, ai_socktype) p c_stype
-        (#poke struct addrinfo, ai_protocol) p protocol
-
-        -- stuff below is probably not needed, but let's zero it for safety
-
-        (#poke struct addrinfo, ai_addrlen) p (0::CSize)
-        (#poke struct addrinfo, ai_addr) p nullPtr
-        (#poke struct addrinfo, ai_canonname) p nullPtr
-        (#poke struct addrinfo, ai_next) p nullPtr
-
-data NameInfoFlag
-    = NI_DGRAM
-    | NI_NAMEREQD
-    | NI_NOFQDN
-    | NI_NUMERICHOST
-    | NI_NUMERICSERV
-    deriving (Eq, Read, Show, Typeable)
-
-niFlagMapping :: [(NameInfoFlag, CInt)]
-
-niFlagMapping = [(NI_DGRAM, #const NI_DGRAM),
-                 (NI_NAMEREQD, #const NI_NAMEREQD),
-                 (NI_NOFQDN, #const NI_NOFQDN),
-                 (NI_NUMERICHOST, #const NI_NUMERICHOST),
-                 (NI_NUMERICSERV, #const NI_NUMERICSERV)]
-
--- | Default hints for address lookup with 'getAddrInfo'.  The values
--- of the 'addrAddress' and 'addrCanonName' fields are 'undefined',
--- and are never inspected by 'getAddrInfo'.
-
-defaultHints :: AddrInfo
-
-defaultHints = AddrInfo {
-                         addrFlags = [],
-                         addrFamily = AF_UNSPEC,
-                         addrSocketType = NoSocketType,
-                         addrProtocol = defaultProtocol,
-                         addrAddress = undefined,
-                         addrCanonName = undefined
-                        }
-
--- | Resolve a host or service name to one or more addresses.
--- The 'AddrInfo' values that this function returns contain 'SockAddr'
--- values that you can pass directly to 'connect' or
--- 'bind'.
---
--- This function is protocol independent.  It can return both IPv4 and
--- IPv6 address information.
---
--- The 'AddrInfo' argument specifies the preferred query behaviour,
--- socket options, or protocol.  You can override these conveniently
--- using Haskell's record update syntax on 'defaultHints', for example
--- as follows:
---
--- @
---   myHints = defaultHints { addrFlags = [AI_ADDRCONFIG, AI_CANONNAME] }
--- @
---
--- Values for 'addrFlags' control query behaviour.  The supported
--- flags are as follows:
---
---   [@AI_PASSIVE@] If no 'HostName' value is provided, the network
---     address in each 'SockAddr'
---     will be left as a "wild card", i.e. as either 'iNADDR_ANY'
---     or 'iN6ADDR_ANY'.  This is useful for server applications that
---     will accept connections from any client.
---
---   [@AI_CANONNAME@] The 'addrCanonName' field of the first returned
---     'AddrInfo' will contain the "canonical name" of the host.
---
---   [@AI_NUMERICHOST@] The 'HostName' argument /must/ be a numeric
---     address in string form, and network name lookups will not be
---     attempted.
---
--- /Note/: Although the following flags are required by RFC 3493, they
--- may not have an effect on all platforms, because the underlying
--- network stack may not support them.  To see whether a flag from the
--- list below will have any effect, call 'addrInfoFlagImplemented'.
---
---   [@AI_NUMERICSERV@] The 'ServiceName' argument /must/ be a port
---     number in string form, and service name lookups will not be
---     attempted.
---
---   [@AI_ADDRCONFIG@] The list of returned 'AddrInfo' values will
---     only contain IPv4 addresses if the local system has at least
---     one IPv4 interface configured, and likewise for IPv6.
---
---   [@AI_V4MAPPED@] If an IPv6 lookup is performed, and no IPv6
---     addresses are found, IPv6-mapped IPv4 addresses will be
---     returned.
---
---   [@AI_ALL@] If 'AI_ALL' is specified, return all matching IPv6 and
---     IPv4 addresses.  Otherwise, this flag has no effect.
---
--- You must provide a 'Just' value for at least one of the 'HostName'
--- or 'ServiceName' arguments.  'HostName' can be either a numeric
--- network address (dotted quad for IPv4, colon-separated hex for
--- IPv6) or a hostname.  In the latter case, its addresses will be
--- looked up unless 'AI_NUMERICHOST' is specified as a hint.  If you
--- do not provide a 'HostName' value /and/ do not set 'AI_PASSIVE' as
--- a hint, network addresses in the result will contain the address of
--- the loopback interface.
---
--- If the query fails, this function throws an IO exception instead of
--- returning an empty list.  Otherwise, it returns a non-empty list
--- of 'AddrInfo' values.
---
--- There are several reasons why a query might result in several
--- values.  For example, the queried-for host could be multihomed, or
--- the service might be available via several protocols.
---
--- Note: the order of arguments is slightly different to that defined
--- for @getaddrinfo@ in RFC 2553.  The 'AddrInfo' parameter comes first
--- to make partial application easier.
---
--- Example:
--- @
---   let hints = defaultHints { addrFlags = [AI_ADDRCONFIG, AI_CANONNAME] }
---   addrs <- getAddrInfo (Just hints) (Just "www.haskell.org") (Just "http")
---   let addr = head addrs
---   sock <- socket (addrFamily addr) (addrSocketType addr) (addrProtocol addr)
---   connect sock (addrAddress addr)
--- @
-
-getAddrInfo :: Maybe AddrInfo -- ^ preferred socket type or protocol
-            -> Maybe HostName -- ^ host name to look up
-            -> Maybe ServiceName -- ^ service name to look up
-            -> IO [AddrInfo] -- ^ resolved addresses, with "best" first
-
-getAddrInfo hints node service =
-  maybeWith withCString node $ \c_node ->
-    maybeWith withCString service $ \c_service ->
-      maybeWith with filteredHints $ \c_hints ->
-        alloca $ \ptr_ptr_addrs -> do
-          ret <- c_getaddrinfo c_node c_service c_hints ptr_ptr_addrs
-          case ret of
-            0 -> do ptr_addrs <- peek ptr_ptr_addrs
-                    ais <- followAddrInfo ptr_addrs
-                    c_freeaddrinfo ptr_addrs
-                    return ais
-            _ -> do err <- gai_strerror ret
-                    ioError (ioeSetErrorString
-                             (mkIOError NoSuchThing "getAddrInfo" Nothing
-                              Nothing) err)
-    -- Leaving out the service and using AI_NUMERICSERV causes a
-    -- segfault on OS X 10.8.2. This code removes AI_NUMERICSERV
-    -- (which has no effect) in that case.
-  where
-#if defined(darwin_HOST_OS)
-    filteredHints = case service of
-        Nothing -> fmap (\ h -> h { addrFlags = delete AI_NUMERICSERV (addrFlags h) }) hints
-        _       -> hints
-#else
-    filteredHints = hints
-#endif
-
-followAddrInfo :: Ptr AddrInfo -> IO [AddrInfo]
-
-followAddrInfo ptr_ai | ptr_ai == nullPtr = return []
-                      | otherwise = do
-    a <- peek ptr_ai
-    as <- (#peek struct addrinfo, ai_next) ptr_ai >>= followAddrInfo
-    return (a:as)
-
-foreign import ccall safe "hsnet_getaddrinfo"
-    c_getaddrinfo :: CString -> CString -> Ptr AddrInfo -> Ptr (Ptr AddrInfo)
-                  -> IO CInt
-
-foreign import ccall safe "hsnet_freeaddrinfo"
-    c_freeaddrinfo :: Ptr AddrInfo -> IO ()
-
-gai_strerror :: CInt -> IO String
-
-#ifdef HAVE_GAI_STRERROR
-gai_strerror n = c_gai_strerror n >>= peekCString
-
-foreign import ccall safe "gai_strerror"
-    c_gai_strerror :: CInt -> IO CString
-#else
-gai_strerror n = return ("error " ++ show n)
-#endif
-
-withCStringIf :: Bool -> Int -> (CSize -> CString -> IO a) -> IO a
-withCStringIf False _ f = f 0 nullPtr
-withCStringIf True n f = allocaBytes n (f (fromIntegral n))
-
--- | Resolve an address to a host or service name.
--- This function is protocol independent.
---
--- The list of 'NameInfoFlag' values controls query behaviour.  The
--- supported flags are as follows:
---
---   [@NI_NOFQDN@] If a host is local, return only the
---     hostname part of the FQDN.
---
---   [@NI_NUMERICHOST@] The name of the host is not
---     looked up.  Instead, a numeric representation of the host's
---     address is returned.  For an IPv4 address, this will be a
---     dotted-quad string.  For IPv6, it will be colon-separated
---     hexadecimal.
---
---   [@NI_NUMERICSERV@] The name of the service is not
---     looked up.  Instead, a numeric representation of the
---     service is returned.
---
---   [@NI_NAMEREQD@] If the hostname cannot be looked up, an IO error
---     is thrown.
---
---   [@NI_DGRAM@] Resolve a datagram-based service name.  This is
---     required only for the few protocols that have different port
---     numbers for their datagram-based versions than for their
---     stream-based versions.
---
--- Hostname and service name lookups can be expensive.  You can
--- specify which lookups to perform via the two 'Bool' arguments.  If
--- one of these is 'False', the corresponding value in the returned
--- tuple will be 'Nothing', and no lookup will be performed.
---
--- If a host or service's name cannot be looked up, then the numeric
--- form of the address or service will be returned.
---
--- If the query fails, this function throws an IO exception.
---
--- Example:
--- @
---   (hostName, _) <- getNameInfo [] True False myAddress
--- @
-
-getNameInfo :: [NameInfoFlag] -- ^ flags to control lookup behaviour
-            -> Bool -- ^ whether to look up a hostname
-            -> Bool -- ^ whether to look up a service name
-            -> SockAddr -- ^ the address to look up
-            -> IO (Maybe HostName, Maybe ServiceName)
-
-getNameInfo flags doHost doService addr =
-  withCStringIf doHost (#const NI_MAXHOST) $ \c_hostlen c_host ->
-    withCStringIf doService (#const NI_MAXSERV) $ \c_servlen c_serv -> do
-      withSockAddr addr $ \ptr_addr sz -> do
-        ret <- c_getnameinfo ptr_addr (fromIntegral sz) c_host c_hostlen
-                             c_serv c_servlen (packBits niFlagMapping flags)
-        case ret of
-          0 -> do
-            let peekIf doIf c_val = if doIf
-                                     then liftM Just $ peekCString c_val
-                                     else return Nothing
-            host <- peekIf doHost c_host
-            serv <- peekIf doService c_serv
-            return (host, serv)
-          _ -> do err <- gai_strerror ret
-                  ioError (ioeSetErrorString
-                           (mkIOError NoSuchThing "getNameInfo" Nothing
-                            Nothing) err)
-
-foreign import ccall safe "hsnet_getnameinfo"
-    c_getnameinfo :: Ptr SockAddr -> CInt{-CSockLen???-} -> CString -> CSize -> CString
-                  -> CSize -> CInt -> IO CInt
-#endif
-
-mkInvalidRecvArgError :: String -> IOError
-mkInvalidRecvArgError loc = ioeSetErrorString (mkIOError
-                                    InvalidArgument
-                                    loc Nothing Nothing) "non-positive length"
-
-mkEOFError :: String -> IOError
-mkEOFError loc = ioeSetErrorString (mkIOError EOF loc Nothing Nothing) "end of file"
-
--- ---------------------------------------------------------------------------
--- foreign imports from the C library
-
-foreign import ccall unsafe "my_inet_ntoa"
-  c_inet_ntoa :: HostAddress -> IO (Ptr CChar)
-
-foreign import CALLCONV unsafe "inet_addr"
-  c_inet_addr :: Ptr CChar -> IO HostAddress
-
-foreign import CALLCONV unsafe "shutdown"
-  c_shutdown :: CInt -> CInt -> IO CInt
-
-closeFd :: CInt -> IO ()
-closeFd fd = throwSocketErrorIfMinus1_ "Network.Socket.close" $ c_close fd
-
-#if !defined(WITH_WINSOCK)
-foreign import ccall unsafe "close"
-  c_close :: CInt -> IO CInt
-#else
-foreign import stdcall unsafe "closesocket"
-  c_close :: CInt -> IO CInt
-#endif
-
-foreign import CALLCONV unsafe "socket"
-  c_socket :: CInt -> CInt -> CInt -> IO CInt
-foreign import CALLCONV unsafe "bind"
-  c_bind :: CInt -> Ptr SockAddr -> CInt{-CSockLen???-} -> IO CInt
-foreign import CALLCONV SAFE_ON_WIN "connect"
-  c_connect :: CInt -> Ptr SockAddr -> CInt{-CSockLen???-} -> IO CInt
-foreign import CALLCONV unsafe "accept"
-  c_accept :: CInt -> Ptr SockAddr -> Ptr CInt{-CSockLen???-} -> IO CInt
-#if 0
-foreign import CALLCONV unsafe "accept4"
-  c_accept4 :: CInt -> Ptr SockAddr -> Ptr CInt{-CSockLen???-} -> CInt -> IO CInt
-#endif
-foreign import CALLCONV unsafe "listen"
-  c_listen :: CInt -> CInt -> IO CInt
-
-#if defined(mingw32_HOST_OS)
-foreign import CALLCONV safe "accept"
-  c_accept_safe :: CInt -> Ptr SockAddr -> Ptr CInt{-CSockLen???-} -> IO CInt
-
-foreign import ccall unsafe "rtsSupportsBoundThreads" threaded :: Bool
-#endif
-
-foreign import CALLCONV unsafe "send"
-  c_send :: CInt -> Ptr a -> CSize -> CInt -> IO CInt
-foreign import CALLCONV SAFE_ON_WIN "sendto"
-  c_sendto :: CInt -> Ptr a -> CSize -> CInt -> Ptr SockAddr -> CInt -> IO CInt
-foreign import CALLCONV unsafe "recv"
-  c_recv :: CInt -> Ptr CChar -> CSize -> CInt -> IO CInt
-foreign import CALLCONV SAFE_ON_WIN "recvfrom"
-  c_recvfrom :: CInt -> Ptr a -> CSize -> CInt -> Ptr SockAddr -> Ptr CInt -> IO CInt
-foreign import CALLCONV unsafe "getpeername"
-  c_getpeername :: CInt -> Ptr SockAddr -> Ptr CInt -> IO CInt
-foreign import CALLCONV unsafe "getsockname"
-  c_getsockname :: CInt -> Ptr SockAddr -> Ptr CInt -> IO CInt
-
-foreign import CALLCONV unsafe "getsockopt"
-  c_getsockopt :: CInt -> CInt -> CInt -> Ptr CInt -> Ptr CInt -> IO CInt
-foreign import CALLCONV unsafe "setsockopt"
-  c_setsockopt :: CInt -> CInt -> CInt -> Ptr CInt -> CInt -> IO CInt
-
--- ---------------------------------------------------------------------------
--- * Deprecated aliases
-
--- $deprecated-aliases
---
--- These aliases are deprecated and should not be used in new code.
--- They will be removed in some future version of the package.
-
--- | Deprecated alias for 'bind'.
-bindSocket :: Socket    -- Unconnected Socket
-           -> SockAddr  -- Address to Bind to
-           -> IO ()
-bindSocket = bind
-
--- | Deprecated alias for 'close'.
-sClose :: Socket -> IO ()
-sClose = close
-
--- | Deprecated alias for 'isConnected'.
-sIsConnected :: Socket -> IO Bool
-sIsConnected = isConnected
-
--- | Deprecated alias for 'isBound'.
-sIsBound :: Socket -> IO Bool
-sIsBound = isBound
-
--- | Deprecated alias for 'isListening'.
-sIsListening :: Socket -> IO Bool
-sIsListening = isListening
-
--- | Deprecated alias for 'isReadable'.
-sIsReadable  :: Socket -> IO Bool
-sIsReadable = isReadable
-
--- | Deprecated alias for 'isWritable'.
-sIsWritable  :: Socket -> IO Bool
-sIsWritable = isWritable
diff --git a/standalone/android/tmp/network-2.4.1.2/Network/Socket/ByteString.hsc b/standalone/android/tmp/network-2.4.1.2/Network/Socket/ByteString.hsc
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/Network/Socket/ByteString.hsc
+++ /dev/null
@@ -1,374 +0,0 @@
-{-# LANGUAGE CPP, ForeignFunctionInterface #-}
-
-#include "HsNet.h"
-
--- |
--- Module      : Network.Socket.ByteString
--- Copyright   : (c) Johan Tibell 2007-2010
--- License     : BSD-style
---
--- Maintainer  : johan.tibell@gmail.com
--- Stability   : stable
--- Portability : portable
---
--- This module provides access to the BSD /socket/ interface.  This
--- module is generally more efficient than the 'String' based network
--- functions in 'Network.Socket'.  For detailed documentation, consult
--- your favorite POSIX socket reference. All functions communicate
--- failures by converting the error number to 'System.IO.IOError'.
---
--- This module is made to be imported with 'Network.Socket' like so:
---
--- > import Network.Socket hiding (send, sendTo, recv, recvFrom)
--- > import Network.Socket.ByteString
---
-module Network.Socket.ByteString
-    ( 
-    -- * Send data to a socket
-      send
-    , sendAll
-    , sendTo
-    , sendAllTo
-
-    -- ** Vectored I/O
-    -- $vectored
-    , sendMany
-    , sendManyTo
-
-    -- * Receive data from a socket
-    , recv
-    , recvFrom
-
-    -- * Example
-    -- $example
-    ) where
-
-import Control.Monad (liftM, when)
-import Data.ByteString (ByteString)
-import Data.ByteString.Internal (createAndTrim)
-import Data.ByteString.Unsafe (unsafeUseAsCStringLen)
-import Data.Word (Word8)
-#if __GLASGOW_HASKELL__ >= 703
-import Foreign.C.Types (CInt(..))
-#else
-import Foreign.C.Types (CInt)
-#endif
-import Foreign.Marshal.Alloc (allocaBytes)
-import Foreign.Ptr (Ptr, castPtr)
-import Network.Socket (SockAddr, Socket(..), sendBufTo, recvBufFrom)
-
-import qualified Data.ByteString as B
-
-import Network.Socket.ByteString.Internal
-import Network.Socket.Internal
-import Network.Socket.Types
-
-#if !defined(mingw32_HOST_OS)
-import Control.Monad (zipWithM_)
-import Foreign.C.Types (CChar)
-# if __GLASGOW_HASKELL__ >= 703
-import Foreign.C.Types (CSize(..))
-# else
-import Foreign.C.Types (CSize)
-# endif
-import Foreign.Marshal.Array (allocaArray)
-import Foreign.Marshal.Utils (with)
-import Foreign.Ptr (plusPtr)
-import Foreign.Storable (Storable(..))
-
-import Network.Socket.ByteString.IOVec (IOVec(..))
-import Network.Socket.ByteString.MsgHdr (MsgHdr(..))
-
-import GHC.Conc (threadWaitRead, threadWaitWrite)
-#else
-#  if __GLASGOW_HASKELL__ >= 611
-import GHC.IO.FD
-#  else
-import GHC.Handle (readRawBufferPtr, writeRawBufferPtr)
-#  endif
-#endif
-
-#if !defined(mingw32_HOST_OS)
-foreign import CALLCONV unsafe "send"
-  c_send :: CInt -> Ptr a -> CSize -> CInt -> IO CInt
-foreign import CALLCONV unsafe "recv"
-  c_recv :: CInt -> Ptr CChar -> CSize -> CInt -> IO CInt
-#endif
-
--- ----------------------------------------------------------------------------
--- Sending
-
--- | Send data to the socket.  The socket must be connected to a
--- remote socket.  Returns the number of bytes sent. Applications are
--- responsible for ensuring that all data has been sent.
-send :: Socket      -- ^ Connected socket
-     -> ByteString  -- ^ Data to send
-     -> IO Int      -- ^ Number of bytes sent
-send sock@(MkSocket s _ _ _ _) xs =
-    unsafeUseAsCStringLen xs $ \(str, len) ->
-    liftM fromIntegral $
-#if defined(mingw32_HOST_OS)
-#  if __GLASGOW_HASKELL__ >= 611
-        writeRawBufferPtr "Network.Socket.ByteString.send"
-        (FD s 1) (castPtr str) 0 (fromIntegral len)
-#  else
-        writeRawBufferPtr "Network.Socket.ByteString.send"
-        (fromIntegral s) True str 0 (fromIntegral len)
-#  endif
-#else
-        throwSocketErrorWaitWrite sock "send" $
-        c_send s str (fromIntegral len) 0
-#endif
-
--- | Send data to the socket.  The socket must be connected to a
--- remote socket.  Unlike 'send', this function continues to send data
--- until either all data has been sent or an error occurs.  On error,
--- an exception is raised, and there is no way to determine how much
--- data, if any, was successfully sent.
-sendAll :: Socket      -- ^ Connected socket
-        -> ByteString  -- ^ Data to send
-        -> IO ()
-sendAll sock bs = do
-    sent <- send sock bs
-    when (sent < B.length bs) $ sendAll sock (B.drop sent bs)
-
--- | Send data to the socket.  The recipient can be specified
--- explicitly, so the socket need not be in a connected state.
--- Returns the number of bytes sent. Applications are responsible for
--- ensuring that all data has been sent.
-sendTo :: Socket      -- ^ Socket
-       -> ByteString  -- ^ Data to send
-       -> SockAddr    -- ^ Recipient address
-       -> IO Int      -- ^ Number of bytes sent
-sendTo sock xs addr =
-    unsafeUseAsCStringLen xs $ \(str, len) -> sendBufTo sock str len addr
-
--- | Send data to the socket. The recipient can be specified
--- explicitly, so the socket need not be in a connected state.  Unlike
--- 'sendTo', this function continues to send data until either all
--- data has been sent or an error occurs.  On error, an exception is
--- raised, and there is no way to determine how much data, if any, was
--- successfully sent.
-sendAllTo :: Socket      -- ^ Socket
-          -> ByteString  -- ^ Data to send
-          -> SockAddr    -- ^ Recipient address
-          -> IO ()
-sendAllTo sock xs addr = do
-    sent <- sendTo sock xs addr
-    when (sent < B.length xs) $ sendAllTo sock (B.drop sent xs) addr
-
--- ----------------------------------------------------------------------------
--- ** Vectored I/O
-
--- $vectored
---
--- Vectored I\/O, also known as scatter\/gather I\/O, allows multiple
--- data segments to be sent using a single system call, without first
--- concatenating the segments.  For example, given a list of
--- @ByteString@s, @xs@,
---
--- > sendMany sock xs
---
--- is equivalent to
---
--- > sendAll sock (concat xs)
---
--- but potentially more efficient.
---
--- Vectored I\/O are often useful when implementing network protocols
--- that, for example, group data into segments consisting of one or
--- more fixed-length headers followed by a variable-length body.
-
--- | Send data to the socket.  The socket must be in a connected
--- state.  The data is sent as if the parts have been concatenated.
--- This function continues to send data until either all data has been
--- sent or an error occurs.  On error, an exception is raised, and
--- there is no way to determine how much data, if any, was
--- successfully sent.
-sendMany :: Socket        -- ^ Connected socket
-         -> [ByteString]  -- ^ Data to send
-         -> IO ()
-#if !defined(mingw32_HOST_OS)
-sendMany sock@(MkSocket fd _ _ _ _) cs = do
-    sent <- sendManyInner
-    when (sent < totalLength cs) $ sendMany sock (remainingChunks sent cs)
-  where
-    sendManyInner =
-      liftM fromIntegral . withIOVec cs $ \(iovsPtr, iovsLen) ->
-          throwSocketErrorWaitWrite sock "writev" $
-              c_writev (fromIntegral fd) iovsPtr
-              (fromIntegral (min iovsLen (0x0026)))
-#else
-sendMany sock = sendAll sock . B.concat
-#endif
-
--- | Send data to the socket.  The recipient can be specified
--- explicitly, so the socket need not be in a connected state.  The
--- data is sent as if the parts have been concatenated.  This function
--- continues to send data until either all data has been sent or an
--- error occurs.  On error, an exception is raised, and there is no
--- way to determine how much data, if any, was successfully sent.
-sendManyTo :: Socket        -- ^ Socket
-           -> [ByteString]  -- ^ Data to send
-           -> SockAddr      -- ^ Recipient address
-           -> IO ()
-#if !defined(mingw32_HOST_OS)
-sendManyTo sock@(MkSocket fd _ _ _ _) cs addr = do
-    sent <- liftM fromIntegral sendManyToInner
-    when (sent < totalLength cs) $ sendManyTo sock (remainingChunks sent cs) addr
-  where
-    sendManyToInner =
-      withSockAddr addr $ \addrPtr addrSize ->
-        withIOVec cs $ \(iovsPtr, iovsLen) -> do
-          let msgHdr = MsgHdr
-                addrPtr (fromIntegral addrSize)
-                iovsPtr (fromIntegral iovsLen)
-          with msgHdr $ \msgHdrPtr ->
-            throwSocketErrorWaitWrite sock "sendmsg" $
-              c_sendmsg (fromIntegral fd) msgHdrPtr 0
-#else
-sendManyTo sock cs = sendAllTo sock (B.concat cs)
-#endif
-
--- ----------------------------------------------------------------------------
--- Receiving
-
--- | Receive data from the socket.  The socket must be in a connected
--- state.  This function may return fewer bytes than specified.  If
--- the message is longer than the specified length, it may be
--- discarded depending on the type of socket.  This function may block
--- until a message arrives.
---
--- Considering hardware and network realities, the maximum number of bytes to
--- receive should be a small power of 2, e.g., 4096.
---
--- For TCP sockets, a zero length return value means the peer has
--- closed its half side of the connection.
-recv :: Socket         -- ^ Connected socket
-     -> Int            -- ^ Maximum number of bytes to receive
-     -> IO ByteString  -- ^ Data received
-recv sock nbytes
-    | nbytes < 0 = ioError (mkInvalidRecvArgError "Network.Socket.ByteString.recv")
-    | otherwise  = createAndTrim nbytes $ recvInner sock nbytes
-
-recvInner :: Socket -> Int -> Ptr Word8 -> IO Int
-recvInner sock nbytes ptr =
-    fmap fromIntegral $
-#if defined(mingw32_HOST_OS)
-#  if __GLASGOW_HASKELL__ >= 611
-        readRawBufferPtr "Network.Socket.ByteString.recv" (FD s 1) ptr 0 (fromIntegral nbytes)
-#  else
-        readRawBufferPtr "Network.Socket.ByteString.recv" (fromIntegral s)
-        True (castPtr ptr) 0 (fromIntegral nbytes)
-#  endif
-#else
-        throwSocketErrorWaitRead sock "recv" $
-        c_recv s (castPtr ptr) (fromIntegral nbytes) 0
-#endif
-  where
-    s = sockFd sock
-
--- | Receive data from the socket.  The socket need not be in a
--- connected state.  Returns @(bytes, address)@ where @bytes@ is a
--- 'ByteString' representing the data received and @address@ is a
--- 'SockAddr' representing the address of the sending socket.
-recvFrom :: Socket                     -- ^ Socket
-         -> Int                        -- ^ Maximum number of bytes to receive
-         -> IO (ByteString, SockAddr)  -- ^ Data received and sender address
-recvFrom sock nbytes =
-    allocaBytes nbytes $ \ptr -> do
-        (len, sockaddr) <- recvBufFrom sock ptr nbytes
-        str <- B.packCStringLen (ptr, len)
-        return (str, sockaddr)
-
--- ----------------------------------------------------------------------------
--- Not exported
-
-#if !defined(mingw32_HOST_OS)
--- | Suppose we try to transmit a list of chunks @cs@ via a gathering write
--- operation and find that @n@ bytes were sent. Then @remainingChunks n cs@ is
--- list of chunks remaining to be sent.
-remainingChunks :: Int -> [ByteString] -> [ByteString]
-remainingChunks _ [] = []
-remainingChunks i (x:xs)
-    | i < len        = B.drop i x : xs
-    | otherwise      = let i' = i - len in i' `seq` remainingChunks i' xs
-  where
-    len = B.length x
-
--- | @totalLength cs@ is the sum of the lengths of the chunks in the list @cs@.
-totalLength :: [ByteString] -> Int
-totalLength = sum . map B.length
-
--- | @withIOVec cs f@ executes the computation @f@, passing as argument a pair
--- consisting of a pointer to a temporarily allocated array of pointers to
--- 'IOVec' made from @cs@ and the number of pointers (@length cs@).
--- /Unix only/.
-withIOVec :: [ByteString] -> ((Ptr IOVec, Int) -> IO a) -> IO a
-withIOVec cs f =
-    allocaArray csLen $ \aPtr -> do
-        zipWithM_ pokeIov (ptrs aPtr) cs
-        f (aPtr, csLen)
-  where
-    csLen = length cs
-    ptrs = iterate (`plusPtr` sizeOf (undefined :: IOVec))
-    pokeIov ptr s =
-        unsafeUseAsCStringLen s $ \(sPtr, sLen) ->
-        poke ptr $ IOVec sPtr (fromIntegral sLen)
-#endif
-
--- ---------------------------------------------------------------------
--- Example
-
--- $example
---
--- Here are two minimal example programs using the TCP/IP protocol: a
--- server that echoes all data that it receives back (servicing only
--- one client) and a client using it.
---
--- > -- Echo server program
--- > module Main where
--- >
--- > import Control.Monad (unless)
--- > import Network.Socket hiding (recv)
--- > import qualified Data.ByteString as S
--- > import Network.Socket.ByteString (recv, sendAll)
--- >
--- > main :: IO ()
--- > main = withSocketsDo $
--- >     do addrinfos <- getAddrInfo
--- >                     (Just (defaultHints {addrFlags = [AI_PASSIVE]}))
--- >                     Nothing (Just "3000")
--- >        let serveraddr = head addrinfos
--- >        sock <- socket (addrFamily serveraddr) Stream defaultProtocol
--- >        bindSocket sock (addrAddress serveraddr)
--- >        listen sock 1
--- >        (conn, _) <- accept sock
--- >        talk conn
--- >        sClose conn
--- >        sClose sock
--- >
--- >     where
--- >       talk :: Socket -> IO ()
--- >       talk conn =
--- >           do msg <- recv conn 1024
--- >              unless (S.null msg) $ sendAll conn msg >> talk conn
---
--- > -- Echo client program
--- > module Main where
--- >
--- > import Network.Socket hiding (recv)
--- > import Network.Socket.ByteString (recv, sendAll)
--- > import qualified Data.ByteString.Char8 as C
--- >
--- > main :: IO ()
--- > main = withSocketsDo $
--- >     do addrinfos <- getAddrInfo Nothing (Just "") (Just "3000")
--- >        let serveraddr = head addrinfos
--- >        sock <- socket (addrFamily serveraddr) Stream defaultProtocol
--- >        connect sock (addrAddress serveraddr)
--- >        sendAll sock $ C.pack "Hello, world!"
--- >        msg <- recv sock 1024
--- >        sClose sock
--- >        putStr "Received "
--- >        C.putStrLn msg
diff --git a/standalone/android/tmp/network-2.4.1.2/Network/Socket/ByteString/IOVec.hsc b/standalone/android/tmp/network-2.4.1.2/Network/Socket/ByteString/IOVec.hsc
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/Network/Socket/ByteString/IOVec.hsc
+++ /dev/null
@@ -1,30 +0,0 @@
-{-# OPTIONS_GHC -funbox-strict-fields #-}
-
--- | Support module for the POSIX writev system call.
-module Network.Socket.ByteString.IOVec
-    ( IOVec(..)
-    ) where
-
-import Foreign.C.Types (CChar, CInt, CSize)
-import Foreign.Ptr (Ptr)
-import Foreign.Storable (Storable(..))
-
-#include <sys/uio.h>
-
-data IOVec = IOVec
-    { iovBase :: !(Ptr CChar)
-    , iovLen  :: !CSize
-    }
-
-instance Storable IOVec where
-  sizeOf _    = (#const sizeof(struct iovec))
-  alignment _ = alignment (undefined :: CInt)
-
-  peek p = do
-    base <- (#peek struct iovec, iov_base) p
-    len  <- (#peek struct iovec, iov_len)  p
-    return $ IOVec base len
-
-  poke p iov = do
-    (#poke struct iovec, iov_base) p (iovBase iov)
-    (#poke struct iovec, iov_len)  p (iovLen  iov)
diff --git a/standalone/android/tmp/network-2.4.1.2/Network/Socket/ByteString/Internal.hs b/standalone/android/tmp/network-2.4.1.2/Network/Socket/ByteString/Internal.hs
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/Network/Socket/ByteString/Internal.hs
+++ /dev/null
@@ -1,54 +0,0 @@
-{-# LANGUAGE CPP, ForeignFunctionInterface #-}
-
--- |
--- Module      : Network.Socket.ByteString.Internal
--- Copyright   : (c) Johan Tibell 2007-2010
--- License     : BSD-style
---
--- Maintainer  : johan.tibell@gmail.com
--- Stability   : stable
--- Portability : portable
---
-module Network.Socket.ByteString.Internal
-    (
-      mkInvalidRecvArgError
-#if !defined(mingw32_HOST_OS)
-    , c_writev
-    , c_sendmsg
-#endif
-    ) where
-
-import System.IO.Error (ioeSetErrorString, mkIOError)
-
-#if !defined(mingw32_HOST_OS)
-# if __GLASGOW_HASKELL__ >= 703
-import Foreign.C.Types (CInt(..))
-import System.Posix.Types (CSsize(..))
-# else
-import Foreign.C.Types (CInt)
-import System.Posix.Types (CSsize)
-# endif
-import Foreign.Ptr (Ptr)
-
-import Network.Socket.ByteString.IOVec (IOVec)
-import Network.Socket.ByteString.MsgHdr (MsgHdr)
-#endif
-
-#if __GLASGOW_HASKELL__ < 611
-import GHC.IOBase (IOErrorType(..))
-#else
-import GHC.IO.Exception (IOErrorType(..))
-#endif
-
-mkInvalidRecvArgError :: String -> IOError
-mkInvalidRecvArgError loc = ioeSetErrorString (mkIOError
-                                    InvalidArgument
-                                    loc Nothing Nothing) "non-positive length"
-
-#if !defined(mingw32_HOST_OS)
-foreign import ccall unsafe "writev"
-  c_writev :: CInt -> Ptr IOVec -> CInt -> IO CSsize
-
-foreign import ccall unsafe "sendmsg"
-  c_sendmsg :: CInt -> Ptr MsgHdr -> CInt -> IO CSsize
-#endif
diff --git a/standalone/android/tmp/network-2.4.1.2/Network/Socket/ByteString/Lazy.hsc b/standalone/android/tmp/network-2.4.1.2/Network/Socket/ByteString/Lazy.hsc
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/Network/Socket/ByteString/Lazy.hsc
+++ /dev/null
@@ -1,149 +0,0 @@
-{-# LANGUAGE BangPatterns, CPP, ForeignFunctionInterface #-}
-
--- |
--- Module      : Network.Socket.ByteString.Lazy
--- Copyright   : (c) Bryan O'Sullivan 2009
--- License     : BSD-style
---
--- Maintainer  : bos@serpentine.com
--- Stability   : experimental
--- Portability : POSIX, GHC
---
--- This module provides access to the BSD /socket/ interface.  This
--- module is generally more efficient than the 'String' based network
--- functions in 'Network.Socket'.  For detailed documentation, consult
--- your favorite POSIX socket reference. All functions communicate
--- failures by converting the error number to 'System.IO.IOError'.
---
--- This module is made to be imported with 'Network.Socket' like so:
---
--- > import Network.Socket hiding (send, sendTo, recv, recvFrom)
--- > import Network.Socket.ByteString.Lazy
--- > import Prelude hiding (getContents)
---
-module Network.Socket.ByteString.Lazy
-    (
-#if !defined(mingw32_HOST_OS)
-    -- * Send data to a socket
-      send
-    , sendAll
-    ,
-#endif
-
-    -- * Receive data from a socket
-      getContents
-    , recv
-    ) where
-
-import Control.Monad (liftM)
-import Data.ByteString.Lazy.Internal (ByteString(..), defaultChunkSize)
-import Data.Int (Int64)
-import Network.Socket (Socket(..), ShutdownCmd(..), shutdown)
-import Prelude hiding (getContents)
-import System.IO.Unsafe (unsafeInterleaveIO)
-
-import qualified Data.ByteString as S
-import qualified Network.Socket.ByteString as N
-
-#if !defined(mingw32_HOST_OS)
-import Control.Monad (unless)
-import Data.ByteString.Unsafe (unsafeUseAsCStringLen)
-import Foreign.Marshal.Array (allocaArray)
-import Foreign.Ptr (plusPtr)
-import Foreign.Storable (Storable(..))
-import Network.Socket.ByteString.IOVec (IOVec(IOVec))
-import Network.Socket.ByteString.Internal (c_writev)
-import Network.Socket.Internal
-
-import qualified Data.ByteString.Lazy as L
-
-import GHC.Conc (threadWaitWrite)
-#endif
-
-#if !defined(mingw32_HOST_OS)
--- -----------------------------------------------------------------------------
--- Sending
-
--- | Send data to the socket. The socket must be in a connected state.
--- Returns the number of bytes sent. Applications are responsible for
--- ensuring that all data has been sent.
---
--- Because a lazily generated 'ByteString' may be arbitrarily long,
--- this function caps the amount it will attempt to send at 4MB.  This
--- number is large (so it should not penalize performance on fast
--- networks), but not outrageously so (to avoid demanding lazily
--- computed data unnecessarily early).  Before being sent, the lazy
--- 'ByteString' will be converted to a list of strict 'ByteString's
--- with 'L.toChunks'; at most 1024 chunks will be sent.  /Unix only/.
-send :: Socket      -- ^ Connected socket
-     -> ByteString  -- ^ Data to send
-     -> IO Int64    -- ^ Number of bytes sent
-send sock@(MkSocket fd _ _ _ _) s = do
-  let cs  = take maxNumChunks (L.toChunks s)
-      len = length cs
-  liftM fromIntegral . allocaArray len $ \ptr ->
-    withPokes cs ptr $ \niovs ->
-      throwSocketErrorWaitWrite sock "writev" $
-        c_writev (fromIntegral fd) ptr niovs
-  where
-    withPokes ss p f = loop ss p 0 0
-      where loop (c:cs) q k !niovs
-                | k < maxNumBytes =
-                    unsafeUseAsCStringLen c $ \(ptr,len) -> do
-                      poke q $ IOVec ptr (fromIntegral len)
-                      loop cs (q `plusPtr` sizeOf (undefined :: IOVec))
-                              (k + fromIntegral len) (niovs + 1)
-                | otherwise = f niovs
-            loop _ _ _ niovs = f niovs
-    maxNumBytes  = 4194304 :: Int  -- maximum number of bytes to transmit in one system call
-    maxNumChunks = 1024    :: Int  -- maximum number of chunks to transmit in one system call
-
--- | Send data to the socket.  The socket must be in a connected
--- state. This function continues to send data until either all data
--- has been sent or an error occurs.  If there is an error, an
--- exception is raised, and there is no way to determine how much data
--- was sent.  /Unix only/.
-sendAll :: Socket      -- ^ Connected socket
-        -> ByteString  -- ^ Data to send
-        -> IO ()
-sendAll sock bs = do
-  sent <- send sock bs
-  let bs' = L.drop sent bs
-  unless (L.null bs') $ sendAll sock bs'
-#endif
-
--- -----------------------------------------------------------------------------
--- Receiving
-
--- | Receive data from the socket.  The socket must be in a connected
--- state.  Data is received on demand, in chunks; each chunk will be
--- sized to reflect the amount of data received by individual 'recv'
--- calls.
---
--- All remaining data from the socket is consumed.  When there is no
--- more data to be received, the receiving side of the socket is shut
--- down.  If there is an error and an exception is thrown, the socket
--- is not shut down.
-getContents :: Socket         -- ^ Connected socket
-            -> IO ByteString  -- ^ Data received
-getContents sock = loop where
-  loop = unsafeInterleaveIO $ do
-    s <- N.recv sock defaultChunkSize
-    if S.null s
-      then shutdown sock ShutdownReceive >> return Empty
-      else Chunk s `liftM` loop
-
--- | Receive data from the socket.  The socket must be in a connected
--- state.  This function may return fewer bytes than specified.  If
--- the received data is longer than the specified length, it may be
--- discarded depending on the type of socket.  This function may block
--- until a message arrives.
---
--- If there is no more data to be received, returns an empty 'ByteString'.
-recv :: Socket         -- ^ Connected socket
-     -> Int64          -- ^ Maximum number of bytes to receive
-     -> IO ByteString  -- ^ Data received
-recv sock nbytes = chunk `liftM` N.recv sock (fromIntegral nbytes) where
-  chunk k
-    | S.null k  = Empty
-    | otherwise = Chunk k Empty
diff --git a/standalone/android/tmp/network-2.4.1.2/Network/Socket/ByteString/MsgHdr.hsc b/standalone/android/tmp/network-2.4.1.2/Network/Socket/ByteString/MsgHdr.hsc
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/Network/Socket/ByteString/MsgHdr.hsc
+++ /dev/null
@@ -1,48 +0,0 @@
-{-# LANGUAGE CPP #-}
-{-# OPTIONS_GHC -funbox-strict-fields #-}
-
--- | Support module for the POSIX 'sendmsg' system call.
-module Network.Socket.ByteString.MsgHdr
-    ( MsgHdr(..)
-    ) where
-
-#include <sys/types.h>
-#include <sys/socket.h>
-
-import Foreign.C.Types (CInt, CSize, CUInt)
-import Foreign.Ptr (Ptr)
-import Foreign.Storable (Storable(..))
-import Network.Socket (SockAddr)
-import Network.Socket.Internal (zeroMemory)
-
-import Network.Socket.ByteString.IOVec (IOVec)
-
--- We don't use msg_control, msg_controllen, and msg_flags as these
--- don't exist on OpenSolaris.
-data MsgHdr = MsgHdr
-    { msgName    :: !(Ptr SockAddr)
-    , msgNameLen :: !CUInt
-    , msgIov     :: !(Ptr IOVec)
-    , msgIovLen  :: !CSize
-    }
-
-instance Storable MsgHdr where
-  sizeOf _    = (#const sizeof(struct msghdr))
-  alignment _ = alignment (undefined :: CInt)
-
-  peek p = do
-    name       <- (#peek struct msghdr, msg_name)       p
-    nameLen    <- (#peek struct msghdr, msg_namelen)    p
-    iov        <- (#peek struct msghdr, msg_iov)        p
-    iovLen     <- (#peek struct msghdr, msg_iovlen)     p
-    return $ MsgHdr name nameLen iov iovLen
-
-  poke p mh = do
-    -- We need to zero the msg_control, msg_controllen, and msg_flags
-    -- fields, but they only exist on some platforms (e.g. not on
-    -- Solaris).  Instead of using CPP, we zero the entire struct.
-    zeroMemory p (#const sizeof(struct msghdr))
-    (#poke struct msghdr, msg_name)       p (msgName       mh)
-    (#poke struct msghdr, msg_namelen)    p (msgNameLen    mh)
-    (#poke struct msghdr, msg_iov)        p (msgIov        mh)
-    (#poke struct msghdr, msg_iovlen)     p (msgIovLen     mh)
diff --git a/standalone/android/tmp/network-2.4.1.2/Network/Socket/Internal.hsc b/standalone/android/tmp/network-2.4.1.2/Network/Socket/Internal.hsc
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/Network/Socket/Internal.hsc
+++ /dev/null
@@ -1,257 +0,0 @@
-{-# LANGUAGE CPP #-}
-{-# LANGUAGE ForeignFunctionInterface #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
------------------------------------------------------------------------------
--- |
--- Module      :  Network.Socket.Internal
--- Copyright   :  (c) The University of Glasgow 2001
--- License     :  BSD-style (see the file libraries/network/LICENSE)
---
--- Maintainer  :  libraries@haskell.org
--- Stability   :  provisional
--- Portability :  portable
---
--- A module containing semi-public 'Network.Socket' internals.
--- Modules which extend the 'Network.Socket' module will need to use
--- this module while ideally most users will be able to make do with
--- the public interface.
---
------------------------------------------------------------------------------
-
-#include "HsNet.h"
-
-module Network.Socket.Internal
-    (
-    -- * Socket addresses
-      HostAddress
-#if defined(IPV6_SOCKET_SUPPORTNO)
-    , HostAddress6
-    , FlowInfo
-    , ScopeID
-#endif
-    , PortNumber(..)
-    , SockAddr(..)
-
-    , peekSockAddr
-    , pokeSockAddr
-    , sizeOfSockAddr
-    , sizeOfSockAddrByFamily
-    , withSockAddr
-    , withNewSockAddr
-
-    -- * Protocol families
-    , Family(..)
-
-    -- * Socket error functions
-#if defined(HAVE_WINSOCK2_H) && !defined(cygwin32_HOST_OS)
-    , c_getLastError
-#endif
-    , throwSocketError
-    , throwSocketErrorCode
-
-    -- * Guards for socket operations that may fail
-    , throwSocketErrorIfMinus1_
-    , throwSocketErrorIfMinus1Retry
-    , throwSocketErrorIfMinus1RetryMayBlock
-
-    -- ** Guards that wait and retry if the operation would block
-    -- | These guards are based on 'throwSocketErrorIfMinus1RetryMayBlock'.
-    -- They wait for socket readiness if the action fails with @EWOULDBLOCK@
-    -- or similar.
-    , throwSocketErrorWaitRead
-    , throwSocketErrorWaitWrite
-
-    -- * Initialization
-    , withSocketsDo
-
-    -- * Low-level helpers
-    , zeroMemory
-    ) where
-
-import Data.Bits ( (.|.), shiftL, shiftR )
-import Data.Word ( Word8, Word16, Word32 )
-import Data.Typeable (Typeable)
-import Foreign.C.Error (throwErrno, throwErrnoIfMinus1Retry,
-                        throwErrnoIfMinus1RetryMayBlock, throwErrnoIfMinus1_,
-                        Errno(..), errnoToIOError)
-import Foreign.C.String ( castCharToCChar, peekCString )
-#if __GLASGOW_HASKELL__ >= 703
-import Foreign.C.Types ( CInt(..), CSize(..) )
-#else
-import Foreign.C.Types ( CInt, CSize )
-#endif
-import Foreign.Marshal.Alloc ( allocaBytes )
-import Foreign.Marshal.Array ( pokeArray, pokeArray0 )
-import Foreign.Ptr ( Ptr, castPtr, plusPtr )
-import Foreign.Storable ( Storable(..) )
-import GHC.Conc (threadWaitRead, threadWaitWrite)
-
-#if defined(HAVE_WINSOCK2_H) && !defined(cygwin32_HOST_OS)
-import Control.Exception ( finally )
-#  if __GLASGOW_HASKELL__ >= 707
-import GHC.IO.Exception ( IOErrorType(..) )
-#  else
-import GHC.IOBase ( IOErrorType(..) )
-#  endif
-import Foreign.C.Types ( CChar )
-import System.IO.Error ( ioeSetErrorString, mkIOError )
-#endif
-
-import Network.Socket.Types
-
--- ---------------------------------------------------------------------
--- Guards for socket operations that may fail
-
--- | Throw an 'IOError' corresponding to the current socket error.
-throwSocketError :: String  -- ^ textual description of the error location
-                 -> IO a
-
--- | Like 'throwSocketError', but the error code is supplied as an argument.
---
--- On Windows, do not use errno.  Use a system error code instead.
-throwSocketErrorCode :: String -> CInt -> IO a
-
--- | Throw an 'IOError' corresponding to the current socket error if
--- the IO action returns a result of @-1@.  Discards the result of the
--- IO action after error handling.
-throwSocketErrorIfMinus1_
-    :: (Eq a, Num a)
-    => String  -- ^ textual description of the location
-    -> IO a    -- ^ the 'IO' operation to be executed
-    -> IO ()
-
-{-# SPECIALIZE throwSocketErrorIfMinus1_ :: String -> IO CInt -> IO () #-}
-
--- | Throw an 'IOError' corresponding to the current socket error if
--- the IO action returns a result of @-1@, but retries in case of an
--- interrupted operation.
-throwSocketErrorIfMinus1Retry
-    :: (Eq a, Num a)
-    => String  -- ^ textual description of the location
-    -> IO a    -- ^ the 'IO' operation to be executed
-    -> IO a
-
-{-# SPECIALIZE throwSocketErrorIfMinus1Retry :: String -> IO CInt -> IO CInt #-}
-
--- | Throw an 'IOError' corresponding to the current socket error if
--- the IO action returns a result of @-1@, but retries in case of an
--- interrupted operation.  Checks for operations that would block and
--- executes an alternative action before retrying in that case.
-throwSocketErrorIfMinus1RetryMayBlock
-    :: (Eq a, Num a)
-    => String  -- ^ textual description of the location
-    -> IO b    -- ^ action to execute before retrying if an
-               --   immediate retry would block
-    -> IO a    -- ^ the 'IO' operation to be executed
-    -> IO a
-
-{-# SPECIALIZE throwSocketErrorIfMinus1RetryMayBlock
-        :: String -> IO b -> IO CInt -> IO CInt #-}
-
-#if (!defined(HAVE_WINSOCK2_H) || defined(cygwin32_HOST_OS))
-
-throwSocketErrorIfMinus1RetryMayBlock name on_block act =
-    throwErrnoIfMinus1RetryMayBlock name act on_block
-
-throwSocketErrorIfMinus1Retry = throwErrnoIfMinus1Retry
-
-throwSocketErrorIfMinus1_ = throwErrnoIfMinus1_
-
-throwSocketError = throwErrno
-
-throwSocketErrorCode loc errno =
-    ioError (errnoToIOError loc (Errno errno) Nothing Nothing)
-
-#else
-
-throwSocketErrorIfMinus1RetryMayBlock name _ act
-  = throwSocketErrorIfMinus1Retry name act
-
-throwSocketErrorIfMinus1_ name act = do
-  throwSocketErrorIfMinus1Retry name act
-  return ()
-
-# if defined(HAVE_WINSOCK2_H) && !defined(cygwin32_HOST_OS)
-throwSocketErrorIfMinus1Retry name act = do
-  r <- act
-  if (r == -1)
-   then do
-    rc   <- c_getLastError
-    case rc of
-      #{const WSANOTINITIALISED} -> do
-        withSocketsDo (return ())
-        r <- act
-        if (r == -1)
-           then throwSocketError name
-           else return r
-      _ -> throwSocketError name
-   else return r
-
-throwSocketErrorCode name rc = do
-    pstr <- c_getWSError rc
-    str  <- peekCString pstr
-    ioError (ioeSetErrorString (mkIOError OtherError name Nothing Nothing) str)
-
-throwSocketError name =
-    c_getLastError >>= throwSocketErrorCode name
-
-foreign import CALLCONV unsafe "WSAGetLastError"
-  c_getLastError :: IO CInt
-
-foreign import ccall unsafe "getWSErrorDescr"
-  c_getWSError :: CInt -> IO (Ptr CChar)
-
-
-# else
-throwSocketErrorIfMinus1Retry = throwErrnoIfMinus1Retry
-throwSocketError = throwErrno
-throwSocketErrorCode loc errno =
-    ioError (errnoToIOError loc (Errno errno) Nothing Nothing)
-# endif
-#endif
-
--- | Like 'throwSocketErrorIfMinus1Retry', but if the action fails with
--- @EWOULDBLOCK@ or similar, wait for the socket to be read-ready,
--- and try again.
-throwSocketErrorWaitRead :: (Eq a, Num a) => Socket -> String -> IO a -> IO a
-throwSocketErrorWaitRead sock name io =
-    throwSocketErrorIfMinus1RetryMayBlock name
-        (threadWaitRead $ fromIntegral $ sockFd sock)
-        io
-
--- | Like 'throwSocketErrorIfMinus1Retry', but if the action fails with
--- @EWOULDBLOCK@ or similar, wait for the socket to be write-ready,
--- and try again.
-throwSocketErrorWaitWrite :: (Eq a, Num a) => Socket -> String -> IO a -> IO a
-throwSocketErrorWaitWrite sock name io =
-    throwSocketErrorIfMinus1RetryMayBlock name
-        (threadWaitWrite $ fromIntegral $ sockFd sock)
-        io
-
--- ---------------------------------------------------------------------------
--- WinSock support
-
-{-| On Windows operating systems, the networking subsystem has to be
-initialised using 'withSocketsDo' before any networking operations can
-be used.  eg.
-
-> main = withSocketsDo $ do {...}
-
-Although this is only strictly necessary on Windows platforms, it is
-harmless on other platforms, so for portability it is good practice to
-use it all the time.
--}
-withSocketsDo :: IO a -> IO a
-#if !defined(WITH_WINSOCK)
-withSocketsDo x = x
-#else
-withSocketsDo act = do
-    x <- initWinSock
-    if x /= 0
-       then ioError (userError "Failed to initialise WinSock")
-       else act `finally` shutdownWinSock
-
-foreign import ccall unsafe "initWinSock" initWinSock :: IO Int
-foreign import ccall unsafe "shutdownWinSock" shutdownWinSock :: IO ()
-
-#endif
diff --git a/standalone/android/tmp/network-2.4.1.2/Network/Socket/Types.hsc b/standalone/android/tmp/network-2.4.1.2/Network/Socket/Types.hsc
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/Network/Socket/Types.hsc
+++ /dev/null
@@ -1,962 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE ForeignFunctionInterface #-}
-module Network.Socket.Types
-    (
-    -- * Socket
-      Socket(..)
-    , sockFd
-    , sockFamily
-    , sockType
-    , sockProtocol
-    , sockStatus
-    , SocketStatus(..)
-
-    -- * Socket types
-    , SocketType(..)
-    , isSupportedSocketType
-    , packSocketType
-    , packSocketType'
-    , packSocketTypeOrThrow
-    , unpackSocketType
-    , unpackSocketType'
-
-    -- * Family
-    , Family(..)
-    , isSupportedFamily
-    , packFamily
-    , unpackFamily
-
-    -- * Socket addresses
-    , SockAddr(..)
-    , HostAddress
-#if defined(IPV6_SOCKET_SUPPORT)
-    , HostAddress6
-    , FlowInfo
-    , ScopeID
-#endif
-    , peekSockAddr
-    , pokeSockAddr
-    , sizeOfSockAddr
-    , sizeOfSockAddrByFamily
-    , withSockAddr
-    , withNewSockAddr
-
-    -- * Unsorted
-    , ProtocolNumber
-    , PortNumber(..)
-
-    -- * Low-level helpers
-    , zeroMemory
-    ) where
-
-#include "HsNet.h"
-
-import Control.Concurrent.MVar
-import Control.Monad
-import Data.Bits
-import Data.Maybe
-import Data.Ratio
-import Data.Typeable
-import Data.Word
-import Foreign.C
-import Foreign.Marshal.Alloc
-import Foreign.Marshal.Array
-import Foreign.Ptr
-import Foreign.Storable
-
-data Socket
-  = MkSocket
-            CInt                 -- File Descriptor
-            Family
-            SocketType
-            ProtocolNumber       -- Protocol Number
-            (MVar SocketStatus)  -- Status Flag
-  deriving Typeable
-
-sockFd       (MkSocket n _ _ _ _) = n
-sockFamily   (MkSocket _ f _ _ _) = f
-sockType     (MkSocket _ _ t _ _) = t
-sockProtocol (MkSocket _ _ _ p _) = p
-sockStatus   (MkSocket _ _ _ _ s) = s
-
-instance Eq Socket where
-  (MkSocket _ _ _ _ m1) == (MkSocket _ _ _ _ m2) = m1 == m2
-
-instance Show Socket where
-  showsPrec _n (MkSocket fd _ _ _ _) =
-        showString "<socket: " . shows fd . showString ">"
-
-type ProtocolNumber = CInt
-
-data SocketStatus
-  -- Returned Status    Function called
-  = NotConnected        -- socket
-  | Bound               -- bind
-  | Listening           -- listen
-  | Connected           -- connect/accept
-  | ConvertedToHandle   -- is now a Handle, don't touch
-  | Closed              -- close
-    deriving (Eq, Show, Typeable)
-
------------------------------------------------------------------------------
--- Socket types
-
--- There are a few possible ways to do this.  The first is convert the
--- structs used in the C library into an equivalent Haskell type. An
--- other possible implementation is to keep all the internals in the C
--- code and use an Int## and a status flag. The second method is used
--- here since a lot of the C structures are not required to be
--- manipulated.
-
--- Originally the status was non-mutable so we had to return a new
--- socket each time we changed the status.  This version now uses
--- mutable variables to avoid the need to do this.  The result is a
--- cleaner interface and better security since the application
--- programmer now can't circumvent the status information to perform
--- invalid operations on sockets.
-
--- | Socket Types.
---
--- The existence of a constructor does not necessarily imply that that
--- socket type is supported on your system: see 'isSupportedSocketType'.
-data SocketType
-        = NoSocketType -- ^ 0, used in getAddrInfo hints, for example
-        | Stream -- ^ SOCK_STREAM
-        | Datagram -- ^ SOCK_DGRAM
-        | Raw -- ^ SOCK_RAW
-        | RDM -- ^ SOCK_RDM
-        | SeqPacket -- ^ SOCK_SEQPACKET
-        deriving (Eq, Ord, Read, Show, Typeable)
-
--- | Does the SOCK_ constant corresponding to the given SocketType exist on
--- this system?
-isSupportedSocketType :: SocketType -> Bool
-isSupportedSocketType = isJust . packSocketType'
-
--- | Find the SOCK_ constant corresponding to the SocketType value.
-packSocketType' :: SocketType -> Maybe CInt
-packSocketType' stype = case Just stype of
-    -- the Just above is to disable GHC's overlapping pattern
-    -- detection: see comments for packSocketOption
-    Just NoSocketType -> Just 0
-#ifdef SOCK_STREAM
-    Just Stream -> Just #const SOCK_STREAM
-#endif
-#ifdef SOCK_DGRAM
-    Just Datagram -> Just #const SOCK_DGRAM
-#endif
-#ifdef SOCK_RAW
-    Just Raw -> Just #const SOCK_RAW
-#endif
-#ifdef SOCK_RDM
-    Just RDM -> Just #const SOCK_RDM
-#endif
-#ifdef SOCK_SEQPACKET
-    Just SeqPacket -> Just #const SOCK_SEQPACKET
-#endif
-    _ -> Nothing
-
-packSocketType :: SocketType -> CInt
-packSocketType stype = fromMaybe (error errMsg) (packSocketType' stype)
-  where
-    errMsg = concat ["Network.Socket.packSocketType: ",
-                     "socket type ", show stype, " unsupported on this system"]
-
--- | Try packSocketType' on the SocketType, if it fails throw an error with
--- message starting "Network.Socket." ++ the String parameter
-packSocketTypeOrThrow :: String -> SocketType -> IO CInt
-packSocketTypeOrThrow caller stype = maybe err return (packSocketType' stype)
- where
-  err = ioError . userError . concat $ ["Network.Socket.", caller, ": ",
-    "socket type ", show stype, " unsupported on this system"]
-
-
-unpackSocketType:: CInt -> Maybe SocketType
-unpackSocketType t = case t of
-        0 -> Just NoSocketType
-#ifdef SOCK_STREAM
-        (#const SOCK_STREAM) -> Just Stream
-#endif
-#ifdef SOCK_DGRAM
-        (#const SOCK_DGRAM) -> Just Datagram
-#endif
-#ifdef SOCK_RAW
-        (#const SOCK_RAW) -> Just Raw
-#endif
-#ifdef SOCK_RDM
-        (#const SOCK_RDM) -> Just RDM
-#endif
-#ifdef SOCK_SEQPACKET
-        (#const SOCK_SEQPACKET) -> Just SeqPacket
-#endif
-        _ -> Nothing
-
--- | Try unpackSocketType on the CInt, if it fails throw an error with
--- message starting "Network.Socket." ++ the String parameter
-unpackSocketType' :: String -> CInt -> IO SocketType
-unpackSocketType' caller ty = maybe err return (unpackSocketType ty)
- where
-  err = ioError . userError . concat $ ["Network.Socket.", caller, ": ",
-    "socket type ", show ty, " unsupported on this system"]
-
-------------------------------------------------------------------------
--- Protocol Families.
-
--- | Address families.
---
--- A constructor being present here does not mean it is supported by the
--- operating system: see 'isSupportedFamily'.
-data Family
-    = AF_UNSPEC           -- unspecified
-    | AF_UNIX             -- local to host (pipes, portals
-    | AF_INET             -- internetwork: UDP, TCP, etc
-    | AF_INET6            -- Internet Protocol version 6
-    | AF_IMPLINK          -- arpanet imp addresses
-    | AF_PUP              -- pup protocols: e.g. BSP
-    | AF_CHAOS            -- mit CHAOS protocols
-    | AF_NS               -- XEROX NS protocols
-    | AF_NBS              -- nbs protocols
-    | AF_ECMA             -- european computer manufacturers
-    | AF_DATAKIT          -- datakit protocols
-    | AF_CCITT            -- CCITT protocols, X.25 etc
-    | AF_SNA              -- IBM SNA
-    | AF_DECnet           -- DECnet
-    | AF_DLI              -- Direct data link interface
-    | AF_LAT              -- LAT
-    | AF_HYLINK           -- NSC Hyperchannel
-    | AF_APPLETALK        -- Apple Talk
-    | AF_ROUTE            -- Internal Routing Protocol
-    | AF_NETBIOS          -- NetBios-style addresses
-    | AF_NIT              -- Network Interface Tap
-    | AF_802              -- IEEE 802.2, also ISO 8802
-    | AF_ISO              -- ISO protocols
-    | AF_OSI              -- umbrella of all families used by OSI
-    | AF_NETMAN           -- DNA Network Management
-    | AF_X25              -- CCITT X.25
-    | AF_AX25
-    | AF_OSINET           -- AFI
-    | AF_GOSSIP           -- US Government OSI
-    | AF_IPX              -- Novell Internet Protocol
-    | Pseudo_AF_XTP       -- eXpress Transfer Protocol (no AF)
-    | AF_CTF              -- Common Trace Facility
-    | AF_WAN              -- Wide Area Network protocols
-    | AF_SDL              -- SGI Data Link for DLPI
-    | AF_NETWARE
-    | AF_NDD
-    | AF_INTF             -- Debugging use only
-    | AF_COIP             -- connection-oriented IP, aka ST II
-    | AF_CNT              -- Computer Network Technology
-    | Pseudo_AF_RTIP      -- Help Identify RTIP packets
-    | Pseudo_AF_PIP       -- Help Identify PIP packets
-    | AF_SIP              -- Simple Internet Protocol
-    | AF_ISDN             -- Integrated Services Digital Network
-    | Pseudo_AF_KEY       -- Internal key-management function
-    | AF_NATM             -- native ATM access
-    | AF_ARP              -- (rev.) addr. res. prot. (RFC 826)
-    | Pseudo_AF_HDRCMPLT  -- Used by BPF to not rewrite hdrs in iface output
-    | AF_ENCAP
-    | AF_LINK             -- Link layer interface
-    | AF_RAW              -- Link layer interface
-    | AF_RIF              -- raw interface
-    | AF_NETROM           -- Amateur radio NetROM
-    | AF_BRIDGE           -- multiprotocol bridge
-    | AF_ATMPVC           -- ATM PVCs
-    | AF_ROSE             -- Amateur Radio X.25 PLP
-    | AF_NETBEUI          -- 802.2LLC
-    | AF_SECURITY         -- Security callback pseudo AF
-    | AF_PACKET           -- Packet family
-    | AF_ASH              -- Ash
-    | AF_ECONET           -- Acorn Econet
-    | AF_ATMSVC           -- ATM SVCs
-    | AF_IRDA             -- IRDA sockets
-    | AF_PPPOX            -- PPPoX sockets
-    | AF_WANPIPE          -- Wanpipe API sockets
-    | AF_BLUETOOTH        -- bluetooth sockets
-      deriving (Eq, Ord, Read, Show)
-
-packFamily :: Family -> CInt
-packFamily f = case packFamily' f of
-    Just fam -> fam
-    Nothing -> error $
-               "Network.Socket.packFamily: unsupported address family: " ++
-               show f
-
--- | Does the AF_ constant corresponding to the given family exist on this
--- system?
-isSupportedFamily :: Family -> Bool
-isSupportedFamily = isJust . packFamily'
-
-packFamily' :: Family -> Maybe CInt
-packFamily' f = case Just f of
-    -- the Just above is to disable GHC's overlapping pattern
-    -- detection: see comments for packSocketOption
-    Just AF_UNSPEC -> Just #const AF_UNSPEC
-#ifdef AF_UNIX
-    Just AF_UNIX -> Just #const AF_UNIX
-#endif
-#ifdef AF_INET
-    Just AF_INET -> Just #const AF_INET
-#endif
-#ifdef AF_INET6
-    Just AF_INET6 -> Just #const AF_INET6
-#endif
-#ifdef AF_IMPLINK
-    Just AF_IMPLINK -> Just #const AF_IMPLINK
-#endif
-#ifdef AF_PUP
-    Just AF_PUP -> Just #const AF_PUP
-#endif
-#ifdef AF_CHAOS
-    Just AF_CHAOS -> Just #const AF_CHAOS
-#endif
-#ifdef AF_NS
-    Just AF_NS -> Just #const AF_NS
-#endif
-#ifdef AF_NBS
-    Just AF_NBS -> Just #const AF_NBS
-#endif
-#ifdef AF_ECMA
-    Just AF_ECMA -> Just #const AF_ECMA
-#endif
-#ifdef AF_DATAKIT
-    Just AF_DATAKIT -> Just #const AF_DATAKIT
-#endif
-#ifdef AF_CCITT
-    Just AF_CCITT -> Just #const AF_CCITT
-#endif
-#ifdef AF_SNA
-    Just AF_SNA -> Just #const AF_SNA
-#endif
-#ifdef AF_DECnet
-    Just AF_DECnet -> Just #const AF_DECnet
-#endif
-#ifdef AF_DLI
-    Just AF_DLI -> Just #const AF_DLI
-#endif
-#ifdef AF_LAT
-    Just AF_LAT -> Just #const AF_LAT
-#endif
-#ifdef AF_HYLINK
-    Just AF_HYLINK -> Just #const AF_HYLINK
-#endif
-#ifdef AF_APPLETALK
-    Just AF_APPLETALK -> Just #const AF_APPLETALK
-#endif
-#ifdef AF_ROUTE
-    Just AF_ROUTE -> Just #const AF_ROUTE
-#endif
-#ifdef AF_NETBIOS
-    Just AF_NETBIOS -> Just #const AF_NETBIOS
-#endif
-#ifdef AF_NIT
-    Just AF_NIT -> Just #const AF_NIT
-#endif
-#ifdef AF_802
-    Just AF_802 -> Just #const AF_802
-#endif
-#ifdef AF_ISO
-    Just AF_ISO -> Just #const AF_ISO
-#endif
-#ifdef AF_OSI
-    Just AF_OSI -> Just #const AF_OSI
-#endif
-#ifdef AF_NETMAN
-    Just AF_NETMAN -> Just #const AF_NETMAN
-#endif
-#ifdef AF_X25
-    Just AF_X25 -> Just #const AF_X25
-#endif
-#ifdef AF_AX25
-    Just AF_AX25 -> Just #const AF_AX25
-#endif
-#ifdef AF_OSINET
-    Just AF_OSINET -> Just #const AF_OSINET
-#endif
-#ifdef AF_GOSSIP
-    Just AF_GOSSIP -> Just #const AF_GOSSIP
-#endif
-#ifdef AF_IPX
-    Just AF_IPX -> Just #const AF_IPX
-#endif
-#ifdef Pseudo_AF_XTP
-    Just Pseudo_AF_XTP -> Just #const Pseudo_AF_XTP
-#endif
-#ifdef AF_CTF
-    Just AF_CTF -> Just #const AF_CTF
-#endif
-#ifdef AF_WAN
-    Just AF_WAN -> Just #const AF_WAN
-#endif
-#ifdef AF_SDL
-    Just AF_SDL -> Just #const AF_SDL
-#endif
-#ifdef AF_NETWARE
-    Just AF_NETWARE -> Just #const AF_NETWARE
-#endif
-#ifdef AF_NDD
-    Just AF_NDD -> Just #const AF_NDD
-#endif
-#ifdef AF_INTF
-    Just AF_INTF -> Just #const AF_INTF
-#endif
-#ifdef AF_COIP
-    Just AF_COIP -> Just #const AF_COIP
-#endif
-#ifdef AF_CNT
-    Just AF_CNT -> Just #const AF_CNT
-#endif
-#ifdef Pseudo_AF_RTIP
-    Just Pseudo_AF_RTIP -> Just #const Pseudo_AF_RTIP
-#endif
-#ifdef Pseudo_AF_PIP
-    Just Pseudo_AF_PIP -> Just #const Pseudo_AF_PIP
-#endif
-#ifdef AF_SIP
-    Just AF_SIP -> Just #const AF_SIP
-#endif
-#ifdef AF_ISDN
-    Just AF_ISDN -> Just #const AF_ISDN
-#endif
-#ifdef Pseudo_AF_KEY
-    Just Pseudo_AF_KEY -> Just #const Pseudo_AF_KEY
-#endif
-#ifdef AF_NATM
-    Just AF_NATM -> Just #const AF_NATM
-#endif
-#ifdef AF_ARP
-    Just AF_ARP -> Just #const AF_ARP
-#endif
-#ifdef Pseudo_AF_HDRCMPLT
-    Just Pseudo_AF_HDRCMPLT -> Just #const Pseudo_AF_HDRCMPLT
-#endif
-#ifdef AF_ENCAP
-    Just AF_ENCAP -> Just #const AF_ENCAP
-#endif
-#ifdef AF_LINK
-    Just AF_LINK -> Just #const AF_LINK
-#endif
-#ifdef AF_RAW
-    Just AF_RAW -> Just #const AF_RAW
-#endif
-#ifdef AF_RIF
-    Just AF_RIF -> Just #const AF_RIF
-#endif
-#ifdef AF_NETROM
-    Just AF_NETROM -> Just #const AF_NETROM
-#endif
-#ifdef AF_BRIDGE
-    Just AF_BRIDGE -> Just #const AF_BRIDGE
-#endif
-#ifdef AF_ATMPVC
-    Just AF_ATMPVC -> Just #const AF_ATMPVC
-#endif
-#ifdef AF_ROSE
-    Just AF_ROSE -> Just #const AF_ROSE
-#endif
-#ifdef AF_NETBEUI
-    Just AF_NETBEUI -> Just #const AF_NETBEUI
-#endif
-#ifdef AF_SECURITY
-    Just AF_SECURITY -> Just #const AF_SECURITY
-#endif
-#ifdef AF_PACKET
-    Just AF_PACKET -> Just #const AF_PACKET
-#endif
-#ifdef AF_ASH
-    Just AF_ASH -> Just #const AF_ASH
-#endif
-#ifdef AF_ECONET
-    Just AF_ECONET -> Just #const AF_ECONET
-#endif
-#ifdef AF_ATMSVC
-    Just AF_ATMSVC -> Just #const AF_ATMSVC
-#endif
-#ifdef AF_IRDA
-    Just AF_IRDA -> Just #const AF_IRDA
-#endif
-#ifdef AF_PPPOX
-    Just AF_PPPOX -> Just #const AF_PPPOX
-#endif
-#ifdef AF_WANPIPE
-    Just AF_WANPIPE -> Just #const AF_WANPIPE
-#endif
-#ifdef AF_BLUETOOTH
-    Just AF_BLUETOOTH -> Just #const AF_BLUETOOTH
-#endif
-    _ -> Nothing
-
---------- ----------
-
-unpackFamily :: CInt -> Family
-unpackFamily f = case f of
-        (#const AF_UNSPEC) -> AF_UNSPEC
-#ifdef AF_UNIX
-        (#const AF_UNIX) -> AF_UNIX
-#endif
-#ifdef AF_INET
-        (#const AF_INET) -> AF_INET
-#endif
-#ifdef AF_INET6
-        (#const AF_INET6) -> AF_INET6
-#endif
-#ifdef AF_IMPLINK
-        (#const AF_IMPLINK) -> AF_IMPLINK
-#endif
-#ifdef AF_PUP
-        (#const AF_PUP) -> AF_PUP
-#endif
-#ifdef AF_CHAOS
-        (#const AF_CHAOS) -> AF_CHAOS
-#endif
-#ifdef AF_NS
-        (#const AF_NS) -> AF_NS
-#endif
-#ifdef AF_NBS
-        (#const AF_NBS) -> AF_NBS
-#endif
-#ifdef AF_ECMA
-        (#const AF_ECMA) -> AF_ECMA
-#endif
-#ifdef AF_DATAKIT
-        (#const AF_DATAKIT) -> AF_DATAKIT
-#endif
-#ifdef AF_CCITT
-        (#const AF_CCITT) -> AF_CCITT
-#endif
-#ifdef AF_SNA
-        (#const AF_SNA) -> AF_SNA
-#endif
-#ifdef AF_DECnet
-        (#const AF_DECnet) -> AF_DECnet
-#endif
-#ifdef AF_DLI
-        (#const AF_DLI) -> AF_DLI
-#endif
-#ifdef AF_LAT
-        (#const AF_LAT) -> AF_LAT
-#endif
-#ifdef AF_HYLINK
-        (#const AF_HYLINK) -> AF_HYLINK
-#endif
-#ifdef AF_APPLETALK
-        (#const AF_APPLETALK) -> AF_APPLETALK
-#endif
-#ifdef AF_ROUTE
-        (#const AF_ROUTE) -> AF_ROUTE
-#endif
-#ifdef AF_NETBIOS
-        (#const AF_NETBIOS) -> AF_NETBIOS
-#endif
-#ifdef AF_NIT
-        (#const AF_NIT) -> AF_NIT
-#endif
-#ifdef AF_802
-        (#const AF_802) -> AF_802
-#endif
-#ifdef AF_ISO
-        (#const AF_ISO) -> AF_ISO
-#endif
-#ifdef AF_OSI
-# if (!defined(AF_ISO)) || (defined(AF_ISO) && (AF_ISO != AF_OSI))
-        (#const AF_OSI) -> AF_OSI
-# endif
-#endif
-#ifdef AF_NETMAN
-        (#const AF_NETMAN) -> AF_NETMAN
-#endif
-#ifdef AF_X25
-        (#const AF_X25) -> AF_X25
-#endif
-#ifdef AF_AX25
-        (#const AF_AX25) -> AF_AX25
-#endif
-#ifdef AF_OSINET
-        (#const AF_OSINET) -> AF_OSINET
-#endif
-#ifdef AF_GOSSIP
-        (#const AF_GOSSIP) -> AF_GOSSIP
-#endif
-#if defined(AF_IPX) && (!defined(AF_NS) || AF_NS != AF_IPX)
-        (#const AF_IPX) -> AF_IPX
-#endif
-#ifdef Pseudo_AF_XTP
-        (#const Pseudo_AF_XTP) -> Pseudo_AF_XTP
-#endif
-#ifdef AF_CTF
-        (#const AF_CTF) -> AF_CTF
-#endif
-#ifdef AF_WAN
-        (#const AF_WAN) -> AF_WAN
-#endif
-#ifdef AF_SDL
-        (#const AF_SDL) -> AF_SDL
-#endif
-#ifdef AF_NETWARE
-        (#const AF_NETWARE) -> AF_NETWARE
-#endif
-#ifdef AF_NDD
-        (#const AF_NDD) -> AF_NDD
-#endif
-#ifdef AF_INTF
-        (#const AF_INTF) -> AF_INTF
-#endif
-#ifdef AF_COIP
-        (#const AF_COIP) -> AF_COIP
-#endif
-#ifdef AF_CNT
-        (#const AF_CNT) -> AF_CNT
-#endif
-#ifdef Pseudo_AF_RTIP
-        (#const Pseudo_AF_RTIP) -> Pseudo_AF_RTIP
-#endif
-#ifdef Pseudo_AF_PIP
-        (#const Pseudo_AF_PIP) -> Pseudo_AF_PIP
-#endif
-#ifdef AF_SIP
-        (#const AF_SIP) -> AF_SIP
-#endif
-#ifdef AF_ISDN
-        (#const AF_ISDN) -> AF_ISDN
-#endif
-#ifdef Pseudo_AF_KEY
-        (#const Pseudo_AF_KEY) -> Pseudo_AF_KEY
-#endif
-#ifdef AF_NATM
-        (#const AF_NATM) -> AF_NATM
-#endif
-#ifdef AF_ARP
-        (#const AF_ARP) -> AF_ARP
-#endif
-#ifdef Pseudo_AF_HDRCMPLT
-        (#const Pseudo_AF_HDRCMPLT) -> Pseudo_AF_HDRCMPLT
-#endif
-#ifdef AF_ENCAP
-        (#const AF_ENCAP) -> AF_ENCAP
-#endif
-#ifdef AF_LINK
-        (#const AF_LINK) -> AF_LINK
-#endif
-#ifdef AF_RAW
-        (#const AF_RAW) -> AF_RAW
-#endif
-#ifdef AF_RIF
-        (#const AF_RIF) -> AF_RIF
-#endif
-#ifdef AF_NETROM
-        (#const AF_NETROM) -> AF_NETROM
-#endif
-#ifdef AF_BRIDGE
-        (#const AF_BRIDGE) -> AF_BRIDGE
-#endif
-#ifdef AF_ATMPVC
-        (#const AF_ATMPVC) -> AF_ATMPVC
-#endif
-#ifdef AF_ROSE
-        (#const AF_ROSE) -> AF_ROSE
-#endif
-#ifdef AF_NETBEUI
-        (#const AF_NETBEUI) -> AF_NETBEUI
-#endif
-#ifdef AF_SECURITY
-        (#const AF_SECURITY) -> AF_SECURITY
-#endif
-#ifdef AF_PACKET
-        (#const AF_PACKET) -> AF_PACKET
-#endif
-#ifdef AF_ASH
-        (#const AF_ASH) -> AF_ASH
-#endif
-#ifdef AF_ECONET
-        (#const AF_ECONET) -> AF_ECONET
-#endif
-#ifdef AF_ATMSVC
-        (#const AF_ATMSVC) -> AF_ATMSVC
-#endif
-#ifdef AF_IRDA
-        (#const AF_IRDA) -> AF_IRDA
-#endif
-#ifdef AF_PPPOX
-        (#const AF_PPPOX) -> AF_PPPOX
-#endif
-#ifdef AF_WANPIPE
-        (#const AF_WANPIPE) -> AF_WANPIPE
-#endif
-#ifdef AF_BLUETOOTH
-        (#const AF_BLUETOOTH) -> AF_BLUETOOTH
-#endif
-        unknown -> error ("Network.Socket.unpackFamily: unknown address " ++
-                          "family " ++ show unknown)
-
-------------------------------------------------------------------------
--- Port Numbers
-
-newtype PortNumber = PortNum Word16 deriving (Eq, Ord, Typeable)
--- newtyped to prevent accidental use of sane-looking
--- port numbers that haven't actually been converted to
--- network-byte-order first.
-
-instance Show PortNumber where
-  showsPrec p pn = showsPrec p (portNumberToInt pn)
-
-intToPortNumber :: Int -> PortNumber
-intToPortNumber v = PortNum (htons (fromIntegral v))
-
-portNumberToInt :: PortNumber -> Int
-portNumberToInt (PortNum po) = fromIntegral (ntohs po)
-
-foreign import CALLCONV unsafe "my_ntohs" ntohs :: Word16 -> Word16
-foreign import CALLCONV unsafe "my_htons" htons :: Word16 -> Word16
---foreign import CALLCONV unsafe "ntohl" ntohl :: Word32 -> Word32
-
-instance Enum PortNumber where
-    toEnum   = intToPortNumber
-    fromEnum = portNumberToInt
-
-instance Num PortNumber where
-   fromInteger i = intToPortNumber (fromInteger i)
-    -- for completeness.
-   (+) x y   = intToPortNumber (portNumberToInt x + portNumberToInt y)
-   (-) x y   = intToPortNumber (portNumberToInt x - portNumberToInt y)
-   negate x  = intToPortNumber (-portNumberToInt x)
-   (*) x y   = intToPortNumber (portNumberToInt x * portNumberToInt y)
-   abs n     = intToPortNumber (abs (portNumberToInt n))
-   signum n  = intToPortNumber (signum (portNumberToInt n))
-
-instance Real PortNumber where
-    toRational x = toInteger x % 1
-
-instance Integral PortNumber where
-    quotRem a b = let (c,d) = quotRem (portNumberToInt a) (portNumberToInt b) in
-                  (intToPortNumber c, intToPortNumber d)
-    toInteger a = toInteger (portNumberToInt a)
-
-instance Storable PortNumber where
-   sizeOf    _ = sizeOf    (undefined :: Word16)
-   alignment _ = alignment (undefined :: Word16)
-   poke p (PortNum po) = poke (castPtr p) po
-   peek p = PortNum `liftM` peek (castPtr p)
-
-------------------------------------------------------------------------
--- Socket addresses
-
--- The scheme used for addressing sockets is somewhat quirky. The
--- calls in the BSD socket API that need to know the socket address
--- all operate in terms of struct sockaddr, a `virtual' type of
--- socket address.
-
--- The Internet family of sockets are addressed as struct sockaddr_in,
--- so when calling functions that operate on struct sockaddr, we have
--- to type cast the Internet socket address into a struct sockaddr.
--- Instances of the structure for different families might *not* be
--- the same size. Same casting is required of other families of
--- sockets such as Xerox NS. Similarly for Unix domain sockets.
-
--- To represent these socket addresses in Haskell-land, we do what BSD
--- didn't do, and use a union/algebraic type for the different
--- families. Currently only Unix domain sockets and the Internet
--- families are supported.
-
-#if defined(IPV6_SOCKET_SUPPORT)
-type FlowInfo = Word32
-type ScopeID = Word32
-#endif
-
-data SockAddr       -- C Names
-  = SockAddrInet
-    PortNumber  -- sin_port  (network byte order)
-    HostAddress -- sin_addr  (ditto)
-#if defined(IPV6_SOCKET_SUPPORT)
-  | SockAddrInet6
-        PortNumber      -- sin6_port (network byte order)
-        FlowInfo        -- sin6_flowinfo (ditto)
-        HostAddress6    -- sin6_addr (ditto)
-        ScopeID         -- sin6_scope_id (ditto)
-#endif
-#if defined(DOMAIN_SOCKET_SUPPORT)
-  | SockAddrUnix
-        String          -- sun_path
-#endif
-  deriving (Eq, Ord, Typeable)
-
-#if defined(WITH_WINSOCK) || defined(cygwin32_HOST_OS)
-type CSaFamily = (#type unsigned short)
-#elif defined(darwin_HOST_OS)
-type CSaFamily = (#type u_char)
-#else
-type CSaFamily = (#type sa_family_t)
-#endif
-
--- | Computes the storage requirements (in bytes) of the given
--- 'SockAddr'.  This function differs from 'Foreign.Storable.sizeOf'
--- in that the value of the argument /is/ used.
-sizeOfSockAddr :: SockAddr -> Int
-#if defined(DOMAIN_SOCKET_SUPPORT)
-sizeOfSockAddr (SockAddrUnix path) =
-    case path of
-        '\0':_ -> (#const sizeof(sa_family_t)) + length path
-        _      -> #const sizeof(struct sockaddr_un)
-#endif
-sizeOfSockAddr (SockAddrInet _ _) = #const sizeof(struct sockaddr_in)
-#if defined(IPV6_SOCKET_SUPPORT)
-sizeOfSockAddr (SockAddrInet6 _ _ _ _) = #const sizeof(struct sockaddr_in6)
-#endif
-
--- | Computes the storage requirements (in bytes) required for a
--- 'SockAddr' with the given 'Family'.
-sizeOfSockAddrByFamily :: Family -> Int
-#if defined(DOMAIN_SOCKET_SUPPORT)
-sizeOfSockAddrByFamily AF_UNIX  = #const sizeof(struct sockaddr_un)
-#endif
-#if defined(IPV6_SOCKET_SUPPORT)
-sizeOfSockAddrByFamily AF_INET6 = #const sizeof(struct sockaddr_in6)
-#endif
-sizeOfSockAddrByFamily AF_INET  = #const sizeof(struct sockaddr_in)
-
--- | Use a 'SockAddr' with a function requiring a pointer to a
--- 'SockAddr' and the length of that 'SockAddr'.
-withSockAddr :: SockAddr -> (Ptr SockAddr -> Int -> IO a) -> IO a
-withSockAddr addr f = do
-    let sz = sizeOfSockAddr addr
-    allocaBytes sz $ \p -> pokeSockAddr p addr >> f (castPtr p) sz
-
--- | Create a new 'SockAddr' for use with a function requiring a
--- pointer to a 'SockAddr' and the length of that 'SockAddr'.
-withNewSockAddr :: Family -> (Ptr SockAddr -> Int -> IO a) -> IO a
-withNewSockAddr family f = do
-    let sz = sizeOfSockAddrByFamily family
-    allocaBytes sz $ \ptr -> f ptr sz
-
--- We can't write an instance of 'Storable' for 'SockAddr' because
--- @sockaddr@ is a sum type of variable size but
--- 'Foreign.Storable.sizeOf' is required to be constant.
-
--- Note that on Darwin, the sockaddr structure must be zeroed before
--- use.
-
--- | Write the given 'SockAddr' to the given memory location.
-pokeSockAddr :: Ptr a -> SockAddr -> IO ()
-#if defined(DOMAIN_SOCKET_SUPPORT)
-pokeSockAddr p (SockAddrUnix path) = do
-#if defined(darwin_HOST_OS)
-    zeroMemory p (#const sizeof(struct sockaddr_un))
-#endif
-#if defined(HAVE_STRUCT_SOCKADDR_SA_LEN)
-    (#poke struct sockaddr_un, sun_len) p ((#const sizeof(struct sockaddr_un)) :: Word8)
-#endif
-    (#poke struct sockaddr_un, sun_family) p ((#const AF_UNIX) :: CSaFamily)
-    let pathC = map castCharToCChar path
-        poker = case path of ('\0':_) -> pokeArray; _ -> pokeArray0 0
-    poker ((#ptr struct sockaddr_un, sun_path) p) pathC
-#endif
-pokeSockAddr p (SockAddrInet (PortNum port) addr) = do
-#if defined(darwin_HOST_OS)
-    zeroMemory p (#const sizeof(struct sockaddr_in))
-#endif
-#if defined(HAVE_STRUCT_SOCKADDR_SA_LEN)
-    (#poke struct sockaddr_in, sin_len) p ((#const sizeof(struct sockaddr_in)) :: Word8)
-#endif
-    (#poke struct sockaddr_in, sin_family) p ((#const AF_INET) :: CSaFamily)
-    (#poke struct sockaddr_in, sin_port) p port
-    (#poke struct sockaddr_in, sin_addr) p addr
-#if defined(IPV6_SOCKET_SUPPORT)
-pokeSockAddr p (SockAddrInet6 (PortNum port) flow addr scope) = do
-#if defined(darwin_HOST_OS)
-    zeroMemory p (#const sizeof(struct sockaddr_in6))
-#endif
-#if defined(HAVE_STRUCT_SOCKADDR_SA_LEN)
-    (#poke struct sockaddr_in6, sin6_len) p ((#const sizeof(struct sockaddr_in6)) :: Word8)
-#endif
-    (#poke struct sockaddr_in6, sin6_family) p ((#const AF_INET6) :: CSaFamily)
-    (#poke struct sockaddr_in6, sin6_port) p port
-    (#poke struct sockaddr_in6, sin6_flowinfo) p flow
-    (#poke struct sockaddr_in6, sin6_addr) p addr
-    (#poke struct sockaddr_in6, sin6_scope_id) p scope
-#endif
-
--- | Read a 'SockAddr' from the given memory location.
-peekSockAddr :: Ptr SockAddr -> IO SockAddr
-peekSockAddr p = do
-  family <- (#peek struct sockaddr, sa_family) p
-  case family :: CSaFamily of
-#if defined(DOMAIN_SOCKET_SUPPORT)
-    (#const AF_UNIX) -> do
-        str <- peekCString ((#ptr struct sockaddr_un, sun_path) p)
-        return (SockAddrUnix str)
-#endif
-    (#const AF_INET) -> do
-        addr <- (#peek struct sockaddr_in, sin_addr) p
-        port <- (#peek struct sockaddr_in, sin_port) p
-        return (SockAddrInet (PortNum port) addr)
-#if defined(IPV6_SOCKET_SUPPORT)
-    (#const AF_INET6) -> do
-        port <- (#peek struct sockaddr_in6, sin6_port) p
-        flow <- (#peek struct sockaddr_in6, sin6_flowinfo) p
-        addr <- (#peek struct sockaddr_in6, sin6_addr) p
-        scope <- (#peek struct sockaddr_in6, sin6_scope_id) p
-        return (SockAddrInet6 (PortNum port) flow addr scope)
-#endif
-
-------------------------------------------------------------------------
-
--- | Network byte order.
-type HostAddress = Word32
-
-#if defined(IPV6_SOCKET_SUPPORT)
--- | Host byte order.
-type HostAddress6 = (Word32, Word32, Word32, Word32)
-
--- The peek32 and poke32 functions work around the fact that the RFCs
--- don't require 32-bit-wide address fields to be present.  We can
--- only portably rely on an 8-bit field, s6_addr.
-
-s6_addr_offset :: Int
-s6_addr_offset = (#offset struct in6_addr, s6_addr)
-
-peek32 :: Ptr a -> Int -> IO Word32
-peek32 p i0 = do
-    let i' = i0 * 4
-        peekByte n = peekByteOff p (s6_addr_offset + i' + n) :: IO Word8
-        a `sl` i = fromIntegral a `shiftL` i
-    a0 <- peekByte 0
-    a1 <- peekByte 1
-    a2 <- peekByte 2
-    a3 <- peekByte 3
-    return ((a0 `sl` 24) .|. (a1 `sl` 16) .|. (a2 `sl` 8) .|. (a3 `sl` 0))
-
-poke32 :: Ptr a -> Int -> Word32 -> IO ()
-poke32 p i0 a = do
-    let i' = i0 * 4
-        pokeByte n = pokeByteOff p (s6_addr_offset + i' + n)
-        x `sr` i = fromIntegral (x `shiftR` i) :: Word8
-    pokeByte 0 (a `sr` 24)
-    pokeByte 1 (a `sr` 16)
-    pokeByte 2 (a `sr`  8)
-    pokeByte 3 (a `sr`  0)
-
-instance Storable HostAddress6 where
-    sizeOf _    = (#const sizeof(struct in6_addr))
-    alignment _ = alignment (undefined :: CInt)
-
-    peek p = do
-        a <- peek32 p 0
-        b <- peek32 p 1
-        c <- peek32 p 2
-        d <- peek32 p 3
-        return (a, b, c, d)
-
-    poke p (a, b, c, d) = do
-        poke32 p 0 a
-        poke32 p 1 b
-        poke32 p 2 c
-        poke32 p 3 d
-#endif
-
-------------------------------------------------------------------------
--- Helper functions
-
-foreign import ccall unsafe "string.h" memset :: Ptr a -> CInt -> CSize -> IO ()
-
--- | Zero a structure.
-zeroMemory :: Ptr a -> CSize -> IO ()
-zeroMemory dest nbytes = memset dest 0 (fromIntegral nbytes)
diff --git a/standalone/android/tmp/network-2.4.1.2/Network/URI.hs b/standalone/android/tmp/network-2.4.1.2/Network/URI.hs
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/Network/URI.hs
+++ /dev/null
@@ -1,1349 +0,0 @@
-{-# LANGUAGE CPP #-}
---------------------------------------------------------------------------------
--- |
---  Module      :  Network.URI
---  Copyright   :  (c) 2004, Graham Klyne
---  License     :  BSD-style (see end of this file)
---
---  Maintainer  :  Graham Klyne <gk@ninebynine.org>
---  Stability   :  provisional
---  Portability :  portable
---
---  This module defines functions for handling URIs.  It presents substantially the
---  same interface as the older GHC Network.URI module, but is implemented using
---  Parsec rather than a Regex library that is not available with Hugs.  The internal
---  representation of URI has been changed so that URI strings are more
---  completely preserved when round-tripping to a URI value and back.
---
---  In addition, four methods are provided for parsing different
---  kinds of URI string (as noted in RFC3986):
---      'parseURI',
---      'parseURIReference',
---      'parseRelativeReference' and
---      'parseAbsoluteURI'.
---
---  Further, four methods are provided for classifying different
---  kinds of URI string (as noted in RFC3986):
---      'isURI',
---      'isURIReference',
---      'isRelativeReference' and
---      'isAbsoluteURI'.
---
---  The long-standing official reference for URI handling was RFC2396 [1],
---  as updated by RFC 2732 [2], but this was replaced by a new specification,
---  RFC3986 [3] in January 2005.  This latter specification has been used
---  as the primary reference for constructing the URI parser implemented
---  here, and it is intended that there is a direct relationship between
---  the syntax definition in that document and this parser implementation.
---
---  RFC 1808 [4] contains a number of test cases for relative URI handling.
---  Dan Connolly's Python module @uripath.py@ [5] also contains useful details
---  and test cases.
---
---  Some of the code has been copied from the previous GHC implementation,
---  but the parser is replaced with one that performs more complete
---  syntax checking of the URI itself, according to RFC3986 [3].
---
---  References
---
---  (1) <http://www.ietf.org/rfc/rfc2396.txt>
---
---  (2) <http://www.ietf.org/rfc/rfc2732.txt>
---
---  (3) <http://www.ietf.org/rfc/rfc3986.txt>
---
---  (4) <http://www.ietf.org/rfc/rfc1808.txt>
---
---  (5) <http://www.w3.org/2000/10/swap/uripath.py>
---
---------------------------------------------------------------------------------
-
-module Network.URI
-    (
-    -- * The URI type
-      URI(..)
-    , URIAuth(..)
-    , nullURI
-      
-    -- * Parsing
-    , parseURI
-    , parseURIReference
-    , parseRelativeReference
-    , parseAbsoluteURI
-      
-    -- * Test for strings containing various kinds of URI
-    , isURI
-    , isURIReference
-    , isRelativeReference
-    , isAbsoluteURI
-    , isIPv6address
-    , isIPv4address
-      
-    -- * Predicates
-    , uriIsAbsolute
-    , uriIsRelative
-      
-    -- * Relative URIs
-    , relativeTo
-    , nonStrictRelativeTo
-    , relativeFrom
-      
-    -- * Operations on URI strings
-    -- | Support for putting strings into URI-friendly
-    --   escaped format and getting them back again.
-    --   This can't be done transparently in all cases, because certain
-    --   characters have different meanings in different kinds of URI.
-    --   The URI spec [3], section 2.4, indicates that all URI components
-    --   should be escaped before they are assembled as a URI:
-    --   \"Once produced, a URI is always in its percent-encoded form\"
-    , uriToString
-    , isReserved, isUnreserved
-    , isAllowedInURI, isUnescapedInURI
-    , isUnescapedInURIComponent
-    , escapeURIChar
-    , escapeURIString
-    , unEscapeString
-      
-    -- * URI Normalization functions
-    , normalizeCase
-    , normalizeEscape
-    , normalizePathSegments
-      
-    -- * Deprecated functions
-    , parseabsoluteURI
-    , escapeString
-    , reserved, unreserved
-    , scheme, authority, path, query, fragment
-    ) where
-
-import Text.ParserCombinators.Parsec
-    ( GenParser, ParseError
-    , parse, (<|>), (<?>), try
-    , option, many, many1, count, notFollowedBy
-    , char, satisfy, oneOf, string, eof
-    , unexpected
-    )
-
-import Control.Monad (MonadPlus(..))
-import Data.Char (ord, chr, isHexDigit, toLower, toUpper, digitToInt)
-import Data.Bits ((.|.),(.&.),shiftL,shiftR)
-import Debug.Trace (trace)
-import Numeric (showIntAtBase)
-
-import Data.Typeable (Typeable)
-#if MIN_VERSION_base(4,0,0)
-import Data.Data (Data)
-#else
-import Data.Generics (Data)
-#endif
-
-------------------------------------------------------------
---  The URI datatype
-------------------------------------------------------------
-
--- |Represents a general universal resource identifier using
---  its component parts.
---
---  For example, for the URI
---
---  >   foo://anonymous@www.haskell.org:42/ghc?query#frag
---
---  the components are:
---
-data URI = URI
-    { uriScheme     :: String           -- ^ @foo:@
-    , uriAuthority  :: Maybe URIAuth    -- ^ @\/\/anonymous\@www.haskell.org:42@
-    , uriPath       :: String           -- ^ @\/ghc@
-    , uriQuery      :: String           -- ^ @?query@
-    , uriFragment   :: String           -- ^ @#frag@
-    } deriving (Eq, Ord, Typeable, Data)
-
--- |Type for authority value within a URI
-data URIAuth = URIAuth
-    { uriUserInfo   :: String           -- ^ @anonymous\@@
-    , uriRegName    :: String           -- ^ @www.haskell.org@
-    , uriPort       :: String           -- ^ @:42@
-    } deriving (Eq, Ord, Show, Typeable, Data)
-
--- |Blank URI
-nullURI :: URI
-nullURI = URI
-    { uriScheme     = ""
-    , uriAuthority  = Nothing
-    , uriPath       = ""
-    , uriQuery      = ""
-    , uriFragment   = ""
-    }
-
---  URI as instance of Show.  Note that for security reasons, the default
---  behaviour is to suppress any userinfo field (see RFC3986, section 7.5).
---  This can be overridden by using uriToString directly with first
---  argument @id@ (noting that this returns a ShowS value rather than a string).
---
---  [[[Another design would be to embed the userinfo mapping function in
---  the URIAuth value, with the default value suppressing userinfo formatting,
---  but providing a function to return a new URI value with userinfo
---  data exposed by show.]]]
---
-instance Show URI where
-    showsPrec _ = uriToString defaultUserInfoMap
-
-defaultUserInfoMap :: String -> String
-defaultUserInfoMap uinf = user++newpass
-    where
-        (user,pass) = break (==':') uinf
-        newpass     = if null pass || (pass == "@")
-                                   || (pass == ":@")
-                        then pass
-                        else ":...@"
-
-testDefaultUserInfoMap :: [Bool]
-testDefaultUserInfoMap =
-     [ defaultUserInfoMap ""                == ""
-     , defaultUserInfoMap "@"               == "@"
-     , defaultUserInfoMap "user@"           == "user@"
-     , defaultUserInfoMap "user:@"          == "user:@"
-     , defaultUserInfoMap "user:anonymous@" == "user:...@"
-     , defaultUserInfoMap "user:pass@"      == "user:...@"
-     , defaultUserInfoMap "user:pass"       == "user:...@"
-     , defaultUserInfoMap "user:anonymous"  == "user:...@"
-     ]
-
-------------------------------------------------------------
---  Parse a URI
-------------------------------------------------------------
-
--- |Turn a string containing a URI into a 'URI'.
---  Returns 'Nothing' if the string is not a valid URI;
---  (an absolute URI with optional fragment identifier).
---
---  NOTE: this is different from the previous network.URI,
---  whose @parseURI@ function works like 'parseURIReference'
---  in this module.
---
-parseURI :: String -> Maybe URI
-parseURI = parseURIAny uri
-
--- |Parse a URI reference to a 'URI' value.
---  Returns 'Nothing' if the string is not a valid URI reference.
---  (an absolute or relative URI with optional fragment identifier).
---
-parseURIReference :: String -> Maybe URI
-parseURIReference = parseURIAny uriReference
-
--- |Parse a relative URI to a 'URI' value.
---  Returns 'Nothing' if the string is not a valid relative URI.
---  (a relative URI with optional fragment identifier).
---
-parseRelativeReference :: String -> Maybe URI
-parseRelativeReference = parseURIAny relativeRef
-
--- |Parse an absolute URI to a 'URI' value.
---  Returns 'Nothing' if the string is not a valid absolute URI.
---  (an absolute URI without a fragment identifier).
---
-parseAbsoluteURI :: String -> Maybe URI
-parseAbsoluteURI = parseURIAny absoluteURI
-
--- |Test if string contains a valid URI
---  (an absolute URI with optional fragment identifier).
---
-isURI :: String -> Bool
-isURI = isValidParse uri
-
--- |Test if string contains a valid URI reference
---  (an absolute or relative URI with optional fragment identifier).
---
-isURIReference :: String -> Bool
-isURIReference = isValidParse uriReference
-
--- |Test if string contains a valid relative URI
---  (a relative URI with optional fragment identifier).
---
-isRelativeReference :: String -> Bool
-isRelativeReference = isValidParse relativeRef
-
--- |Test if string contains a valid absolute URI
---  (an absolute URI without a fragment identifier).
---
-isAbsoluteURI :: String -> Bool
-isAbsoluteURI = isValidParse absoluteURI
-
--- |Test if string contains a valid IPv6 address
---
-isIPv6address :: String -> Bool
-isIPv6address = isValidParse ipv6address
-
--- |Test if string contains a valid IPv4 address
---
-isIPv4address :: String -> Bool
-isIPv4address = isValidParse ipv4address
-
--- |Test function: parse and reconstruct a URI reference
---
-testURIReference :: String -> String
-testURIReference uristr = show (parseAll uriReference "" uristr)
-
---  Helper function for turning a string into a URI
---
-parseURIAny :: URIParser URI -> String -> Maybe URI
-parseURIAny parser uristr = case parseAll parser "" uristr of
-        Left  _ -> Nothing
-        Right u -> Just u
-
---  Helper function to test a string match to a parser
---
-isValidParse :: URIParser a -> String -> Bool
-isValidParse parser uristr = case parseAll parser "" uristr of
-        -- Left  e -> error (show e)
-        Left  _ -> False
-        Right _ -> True
-
-parseAll :: URIParser a -> String -> String -> Either ParseError a
-parseAll parser filename uristr = parse newparser filename uristr
-    where
-        newparser =
-            do  { res <- parser
-                ; eof
-                ; return res
-                }
-
-------------------------------------------------------------
---  Predicates
-------------------------------------------------------------
-
-uriIsAbsolute :: URI -> Bool
-uriIsAbsolute (URI {uriScheme = scheme}) = scheme /= ""
-
-uriIsRelative :: URI -> Bool
-uriIsRelative = not . uriIsAbsolute
-
-------------------------------------------------------------
---  URI parser body based on Parsec elements and combinators
-------------------------------------------------------------
-
---  Parser parser type.
---  Currently
-type URIParser a = GenParser Char () a
-
---  RFC3986, section 2.1
---
---  Parse and return a 'pct-encoded' sequence
---
-escaped :: URIParser String
-escaped =
-    do  { char '%'
-        ; h1 <- hexDigitChar
-        ; h2 <- hexDigitChar
-        ; return $ ['%',h1,h2]
-        }
-
---  RFC3986, section 2.2
---
--- |Returns 'True' if the character is a \"reserved\" character in a
---  URI.  To include a literal instance of one of these characters in a
---  component of a URI, it must be escaped.
---
-isReserved :: Char -> Bool
-isReserved c = isGenDelims c || isSubDelims c
-
-isGenDelims :: Char -> Bool
-isGenDelims c = c `elem` ":/?#[]@"
-
-isSubDelims :: Char -> Bool
-isSubDelims c = c `elem` "!$&'()*+,;="
-
-genDelims :: URIParser String
-genDelims = do { c <- satisfy isGenDelims ; return [c] }
-
-subDelims :: URIParser String
-subDelims = do { c <- satisfy isSubDelims ; return [c] }
-
---  RFC3986, section 2.3
---
--- |Returns 'True' if the character is an \"unreserved\" character in
---  a URI.  These characters do not need to be escaped in a URI.  The
---  only characters allowed in a URI are either \"reserved\",
---  \"unreserved\", or an escape sequence (@%@ followed by two hex digits).
---
-isUnreserved :: Char -> Bool
-isUnreserved c = isAlphaNumChar c || (c `elem` "-_.~")
-
-unreservedChar :: URIParser String
-unreservedChar = do { c <- satisfy isUnreserved ; return [c] }
-
---  RFC3986, section 3
---
---   URI         = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
---
---   hier-part   = "//" authority path-abempty
---               / path-abs
---               / path-rootless
---               / path-empty
-
-uri :: URIParser URI
-uri =
-    do  { us <- try uscheme
-        -- ; ua <- option Nothing ( do { try (string "//") ; uauthority } )
-        -- ; up <- upath
-        ; (ua,up) <- hierPart
-        ; uq <- option "" ( do { char '?' ; uquery    } )
-        ; uf <- option "" ( do { char '#' ; ufragment } )
-        ; return $ URI
-            { uriScheme    = us
-            , uriAuthority = ua
-            , uriPath      = up
-            , uriQuery     = uq
-            , uriFragment  = uf
-            }
-        }
-
-hierPart :: URIParser ((Maybe URIAuth),String)
-hierPart =
-        do  { try (string "//")
-            ; ua <- uauthority
-            ; up <- pathAbEmpty
-            ; return (ua,up)
-            }
-    <|> do  { up <- pathAbs
-            ; return (Nothing,up)
-            }
-    <|> do  { up <- pathRootLess
-            ; return (Nothing,up)
-            }
-    <|> do  { return (Nothing,"")
-            }
-
---  RFC3986, section 3.1
-
-uscheme :: URIParser String
-uscheme =
-    do  { s <- oneThenMany alphaChar (satisfy isSchemeChar)
-        ; char ':'
-        ; return $ s++":"
-        }
-
---  RFC3986, section 3.2
-
-uauthority :: URIParser (Maybe URIAuth)
-uauthority =
-    do  { uu <- option "" (try userinfo)
-        ; uh <- host
-        ; up <- option "" port
-        ; return $ Just $ URIAuth
-            { uriUserInfo = uu
-            , uriRegName  = uh
-            , uriPort     = up
-            }
-        }
-
---  RFC3986, section 3.2.1
-
-userinfo :: URIParser String
-userinfo =
-    do  { uu <- many (uchar ";:&=+$,")
-        ; char '@'
-        ; return (concat uu ++"@")
-        }
-
---  RFC3986, section 3.2.2
-
-host :: URIParser String
-host = ipLiteral <|> try ipv4address <|> regName
-
-ipLiteral :: URIParser String
-ipLiteral =
-    do  { char '['
-        ; ua <- ( ipv6address <|> ipvFuture )
-        ; char ']'
-        ; return $ "[" ++ ua ++ "]"
-        }
-    <?> "IP address literal"
-
-ipvFuture :: URIParser String
-ipvFuture =
-    do  { char 'v'
-        ; h <- hexDigitChar
-        ; char '.'
-        ; a <- many1 (satisfy isIpvFutureChar)
-        ; return $ 'v':h:'.':a
-        }
-
-isIpvFutureChar :: Char -> Bool
-isIpvFutureChar c = isUnreserved c || isSubDelims c || (c==';')
-
-ipv6address :: URIParser String
-ipv6address =
-        try ( do
-                { a2 <- count 6 h4c
-                ; a3 <- ls32
-                ; return $ concat a2 ++ a3
-                } )
-    <|> try ( do
-                { string "::"
-                ; a2 <- count 5 h4c
-                ; a3 <- ls32
-                ; return $ "::" ++ concat a2 ++ a3
-                } )
-    <|> try ( do
-                { a1 <- opt_n_h4c_h4 0
-                ; string "::"
-                ; a2 <- count 4 h4c
-                ; a3 <- ls32
-                ; return $ a1 ++ "::" ++ concat a2 ++ a3
-                } )
-    <|> try ( do
-                { a1 <- opt_n_h4c_h4 1
-                ; string "::"
-                ; a2 <- count 3 h4c
-                ; a3 <- ls32
-                ; return $ a1 ++ "::" ++ concat a2 ++ a3
-                } )
-    <|> try ( do
-                { a1 <- opt_n_h4c_h4 2
-                ; string "::"
-                ; a2 <- count 2 h4c
-                ; a3 <- ls32
-                ; return $ a1 ++ "::" ++ concat a2 ++ a3
-                } )
-    <|> try ( do
-                { a1 <- opt_n_h4c_h4 3
-                ; string "::"
-                ; a2 <- h4c
-                ; a3 <- ls32
-                ; return $ a1 ++ "::" ++ a2 ++ a3
-                } )
-    <|> try ( do
-                { a1 <- opt_n_h4c_h4 4
-                ; string "::"
-                ; a3 <- ls32
-                ; return $ a1 ++ "::" ++ a3
-                } )
-    <|> try ( do
-                { a1 <- opt_n_h4c_h4 5
-                ; string "::"
-                ; a3 <- h4
-                ; return $ a1 ++ "::" ++ a3
-                } )
-    <|> try ( do
-                { a1 <- opt_n_h4c_h4 6
-                ; string "::"
-                ; return $ a1 ++ "::"
-                } )
-    <?> "IPv6 address"
-
-opt_n_h4c_h4 :: Int -> URIParser String
-opt_n_h4c_h4 n = option "" $
-    do  { a1 <- countMinMax 0 n h4c
-        ; a2 <- h4
-        ; return $ concat a1 ++ a2
-        }
-
-ls32 :: URIParser String
-ls32 =  try ( do
-                { a1 <- h4c
-                ; a2 <- h4
-                ; return (a1++a2)
-                } )
-    <|> ipv4address
-
-h4c :: URIParser String
-h4c = try $
-    do  { a1 <- h4
-        ; char ':'
-        ; notFollowedBy (char ':')
-        ; return $ a1 ++ ":"
-        }
-
-h4 :: URIParser String
-h4 = countMinMax 1 4 hexDigitChar
-
-ipv4address :: URIParser String
-ipv4address =
-    do  { a1 <- decOctet ; char '.'
-        ; a2 <- decOctet ; char '.'
-        ; a3 <- decOctet ; char '.'
-        ; a4 <- decOctet
-        ; notFollowedBy regName
-        ; return $ a1++"."++a2++"."++a3++"."++a4
-        }
-    <?> "IPv4 Address"
-
-decOctet :: URIParser String
-decOctet =
-    do  { a1 <- countMinMax 1 3 digitChar
-        ; if (read a1 :: Integer) > 255 then
-            fail "Decimal octet value too large"
-          else
-            return a1
-        }
-
-regName :: URIParser String
-regName =
-    do  { ss <- countMinMax 0 255 ( unreservedChar <|> escaped <|> subDelims )
-        ; return $ concat ss
-        }
-    <?> "Registered name"
-
---  RFC3986, section 3.2.3
-
-port :: URIParser String
-port =
-    do  { char ':'
-        ; p <- many digitChar
-        ; return (':':p)
-        }
-
---
---  RFC3986, section 3.3
---
---   path          = path-abempty    ; begins with "/" or is empty
---                 / path-abs        ; begins with "/" but not "//"
---                 / path-noscheme   ; begins with a non-colon segment
---                 / path-rootless   ; begins with a segment
---                 / path-empty      ; zero characters
---
---   path-abempty  = *( "/" segment )
---   path-abs      = "/" [ segment-nz *( "/" segment ) ]
---   path-noscheme = segment-nzc *( "/" segment )
---   path-rootless = segment-nz *( "/" segment )
---   path-empty    = 0<pchar>
---
---   segment       = *pchar
---   segment-nz    = 1*pchar
---   segment-nzc   = 1*( unreserved / pct-encoded / sub-delims / "@" )
---
---   pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
-
-{-
-upath :: URIParser String
-upath = pathAbEmpty
-    <|> pathAbs
-    <|> pathNoScheme
-    <|> pathRootLess
-    <|> pathEmpty
--}
-
-pathAbEmpty :: URIParser String
-pathAbEmpty =
-    do  { ss <- many slashSegment
-        ; return $ concat ss
-        }
-
-pathAbs :: URIParser String
-pathAbs =
-    do  { char '/'
-        ; ss <- option "" pathRootLess
-        ; return $ '/':ss
-        }
-
-pathNoScheme :: URIParser String
-pathNoScheme =
-    do  { s1 <- segmentNzc
-        ; ss <- many slashSegment
-        ; return $ concat (s1:ss)
-        }
-
-pathRootLess :: URIParser String
-pathRootLess =
-    do  { s1 <- segmentNz
-        ; ss <- many slashSegment
-        ; return $ concat (s1:ss)
-        }
-
-slashSegment :: URIParser String
-slashSegment =
-    do  { char '/'
-        ; s <- segment
-        ; return ('/':s)
-        }
-
-segment :: URIParser String
-segment =
-    do  { ps <- many pchar
-        ; return $ concat ps
-        }
-
-segmentNz :: URIParser String
-segmentNz =
-    do  { ps <- many1 pchar
-        ; return $ concat ps
-        }
-
-segmentNzc :: URIParser String
-segmentNzc =
-    do  { ps <- many1 (uchar "@")
-        ; return $ concat ps
-        }
-
-pchar :: URIParser String
-pchar = uchar ":@"
-
--- helper function for pchar and friends
-uchar :: String -> URIParser String
-uchar extras =
-        unreservedChar
-    <|> escaped
-    <|> subDelims
-    <|> do { c <- oneOf extras ; return [c] }
-
---  RFC3986, section 3.4
-
-uquery :: URIParser String
-uquery =
-    do  { ss <- many $ uchar (":@"++"/?")
-        ; return $ '?':concat ss
-        }
-
---  RFC3986, section 3.5
-
-ufragment :: URIParser String
-ufragment =
-    do  { ss <- many $ uchar (":@"++"/?")
-        ; return $ '#':concat ss
-        }
-
---  Reference, Relative and Absolute URI forms
---
---  RFC3986, section 4.1
-
-uriReference :: URIParser URI
-uriReference = uri <|> relativeRef
-
---  RFC3986, section 4.2
---
---   relative-URI  = relative-part [ "?" query ] [ "#" fragment ]
---
---   relative-part = "//" authority path-abempty
---                 / path-abs
---                 / path-noscheme
---                 / path-empty
-
-relativeRef :: URIParser URI
-relativeRef =
-    do  { notMatching uscheme
-        -- ; ua <- option Nothing ( do { try (string "//") ; uauthority } )
-        -- ; up <- upath
-        ; (ua,up) <- relativePart
-        ; uq <- option "" ( do { char '?' ; uquery    } )
-        ; uf <- option "" ( do { char '#' ; ufragment } )
-        ; return $ URI
-            { uriScheme    = ""
-            , uriAuthority = ua
-            , uriPath      = up
-            , uriQuery     = uq
-            , uriFragment  = uf
-            }
-        }
-
-relativePart :: URIParser ((Maybe URIAuth),String)
-relativePart =
-        do  { try (string "//")
-            ; ua <- uauthority
-            ; up <- pathAbEmpty
-            ; return (ua,up)
-            }
-    <|> do  { up <- pathAbs
-            ; return (Nothing,up)
-            }
-    <|> do  { up <- pathNoScheme
-            ; return (Nothing,up)
-            }
-    <|> do  { return (Nothing,"")
-            }
-
---  RFC3986, section 4.3
-
-absoluteURI :: URIParser URI
-absoluteURI =
-    do  { us <- uscheme
-        -- ; ua <- option Nothing ( do { try (string "//") ; uauthority } )
-        -- ; up <- upath
-        ; (ua,up) <- hierPart
-        ; uq <- option "" ( do { char '?' ; uquery    } )
-        ; return $ URI
-            { uriScheme    = us
-            , uriAuthority = ua
-            , uriPath      = up
-            , uriQuery     = uq
-            , uriFragment  = ""
-            }
-        }
-
---  Imports from RFC 2234
-
-    -- NOTE: can't use isAlphaNum etc. because these deal with ISO 8859
-    -- (and possibly Unicode!) chars.
-    -- [[[Above was a comment originally in GHC Network/URI.hs:
-    --    when IRIs are introduced then most codepoints above 128(?) should
-    --    be treated as unreserved, and higher codepoints for letters should
-    --    certainly be allowed.
-    -- ]]]
-
-isAlphaChar :: Char -> Bool
-isAlphaChar c    = (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')
-
-isDigitChar :: Char -> Bool
-isDigitChar c    = (c >= '0' && c <= '9')
-
-isAlphaNumChar :: Char -> Bool
-isAlphaNumChar c = isAlphaChar c || isDigitChar c
-
-isHexDigitChar :: Char -> Bool
-isHexDigitChar c = isHexDigit c
-
-isSchemeChar :: Char -> Bool
-isSchemeChar c   = (isAlphaNumChar c) || (c `elem` "+-.")
-
-alphaChar :: URIParser Char
-alphaChar = satisfy isAlphaChar         -- or: Parsec.letter ?
-
-digitChar :: URIParser Char
-digitChar = satisfy isDigitChar         -- or: Parsec.digit ?
-
-alphaNumChar :: URIParser Char
-alphaNumChar = satisfy isAlphaNumChar
-
-hexDigitChar :: URIParser Char
-hexDigitChar = satisfy isHexDigitChar   -- or: Parsec.hexDigit ?
-
---  Additional parser combinators for common patterns
-
-oneThenMany :: GenParser t s a -> GenParser t s a -> GenParser t s [a]
-oneThenMany p1 pr =
-    do  { a1 <- p1
-        ; ar <- many pr
-        ; return (a1:ar)
-        }
-
-countMinMax :: Int -> Int -> GenParser t s a -> GenParser t s [a]
-countMinMax m n p | m > 0 =
-    do  { a1 <- p
-        ; ar <- countMinMax (m-1) (n-1) p
-        ; return (a1:ar)
-        }
-countMinMax _ n _ | n <= 0 = return []
-countMinMax _ n p = option [] $
-    do  { a1 <- p
-        ; ar <- countMinMax 0 (n-1) p
-        ; return (a1:ar)
-        }
-
-notMatching :: Show a => GenParser tok st a -> GenParser tok st ()
-notMatching p = do { a <- try p ; unexpected (show a) } <|> return ()
-
-------------------------------------------------------------
---  Reconstruct a URI string
-------------------------------------------------------------
---
--- |Turn a 'URI' into a string.
---
---  Uses a supplied function to map the userinfo part of the URI.
---
---  The Show instance for URI uses a mapping that hides any password
---  that may be present in the URI.  Use this function with argument @id@
---  to preserve the password in the formatted output.
---
-uriToString :: (String->String) -> URI -> ShowS
-uriToString userinfomap URI { uriScheme=myscheme
-                            , uriAuthority=myauthority
-                            , uriPath=mypath
-                            , uriQuery=myquery
-                            , uriFragment=myfragment
-                            } =
-    (myscheme++) . (uriAuthToString userinfomap myauthority)
-               . (mypath++) . (myquery++) . (myfragment++)
-
-uriAuthToString :: (String->String) -> (Maybe URIAuth) -> ShowS
-uriAuthToString _           Nothing   = id          -- shows ""
-uriAuthToString userinfomap
-        (Just URIAuth { uriUserInfo = myuinfo
-                      , uriRegName  = myregname
-                      , uriPort     = myport
-                      } ) =
-    ("//"++) . (if null myuinfo then id else ((userinfomap myuinfo)++))
-             . (myregname++)
-             . (myport++)
-
-------------------------------------------------------------
---  Character classes
-------------------------------------------------------------
-
--- | Returns 'True' if the character is allowed in a URI.
---
-isAllowedInURI :: Char -> Bool
-isAllowedInURI c = isReserved c || isUnreserved c || c == '%' -- escape char
-
--- | Returns 'True' if the character is allowed unescaped in a URI.
---
-isUnescapedInURI :: Char -> Bool
-isUnescapedInURI c = isReserved c || isUnreserved c
-
--- | Returns 'True' if the character is allowed unescaped in a URI component.
---
-isUnescapedInURIComponent :: Char -> Bool
-isUnescapedInURIComponent c = not (isReserved c || not (isUnescapedInURI c))
-
-------------------------------------------------------------
---  Escape sequence handling
-------------------------------------------------------------
-
--- |Escape character if supplied predicate is not satisfied,
---  otherwise return character as singleton string.
---
-escapeURIChar :: (Char->Bool) -> Char -> String
-escapeURIChar p c
-    | p c       = [c]
-    | otherwise = concatMap (\i -> '%' : myShowHex i "") (utf8EncodeChar c)
-    where
-        myShowHex :: Int -> ShowS
-        myShowHex n r =  case showIntAtBase 16 (toChrHex) n r of
-            []  -> "00"
-            [x] -> ['0',x]
-            cs  -> cs
-        toChrHex d
-            | d < 10    = chr (ord '0' + fromIntegral d)
-            | otherwise = chr (ord 'A' + fromIntegral (d - 10))
-
--- From http://hackage.haskell.org/package/utf8-string
--- by Eric Mertens, BSD3
--- Returns [Int] for use with showIntAtBase
-utf8EncodeChar :: Char -> [Int]
-utf8EncodeChar = map fromIntegral . go . ord
- where
-  go oc
-   | oc <= 0x7f       = [oc]
-
-   | oc <= 0x7ff      = [ 0xc0 + (oc `shiftR` 6)
-                        , 0x80 + oc .&. 0x3f
-                        ]
-
-   | oc <= 0xffff     = [ 0xe0 + (oc `shiftR` 12)
-                        , 0x80 + ((oc `shiftR` 6) .&. 0x3f)
-                        , 0x80 + oc .&. 0x3f
-                        ]
-   | otherwise        = [ 0xf0 + (oc `shiftR` 18)
-                        , 0x80 + ((oc `shiftR` 12) .&. 0x3f)
-                        , 0x80 + ((oc `shiftR` 6) .&. 0x3f)
-                        , 0x80 + oc .&. 0x3f
-                        ]
-
--- |Can be used to make a string valid for use in a URI.
---
-escapeURIString
-    :: (Char->Bool)     -- ^ a predicate which returns 'False'
-                        --   if the character should be escaped
-    -> String           -- ^ the string to process
-    -> String           -- ^ the resulting URI string
-escapeURIString p s = concatMap (escapeURIChar p) s
-
--- |Turns all instances of escaped characters in the string back
---  into literal characters.
---
-unEscapeString :: String -> String
-unEscapeString [] = ""
-unEscapeString s@(c:cs) = case unEscapeByte s of
-    Just (byte, rest) -> unEscapeUtf8 byte rest
-    Nothing -> c : unEscapeString cs
-
-unEscapeByte :: String -> Maybe (Int, String)
-unEscapeByte ('%':x1:x2:s) | isHexDigit x1 && isHexDigit x2 =
-    Just (digitToInt x1 * 16 + digitToInt x2, s)
-unEscapeByte _ = Nothing
-
--- Adapted from http://hackage.haskell.org/package/utf8-string
--- by Eric Mertens, BSD3
-unEscapeUtf8 :: Int -> String -> String
-unEscapeUtf8 c rest
-    | c < 0x80 = chr c : unEscapeString rest
-    | c < 0xc0 = replacement_character : unEscapeString rest
-    | c < 0xe0 = multi1
-    | c < 0xf0 = multi_byte 2 0xf 0x800
-    | c < 0xf8 = multi_byte 3 0x7 0x10000
-    | c < 0xfc = multi_byte 4 0x3 0x200000
-    | c < 0xfe = multi_byte 5 0x1 0x4000000
-    | otherwise    = replacement_character : unEscapeString rest
-    where
-    replacement_character = '\xfffd'
-    multi1 = case unEscapeByte rest of
-      Just (c1, ds) | c1 .&. 0xc0 == 0x80 ->
-        let d = ((fromEnum c .&. 0x1f) `shiftL` 6) .|.  fromEnum (c1 .&. 0x3f)
-        in if d >= 0x000080 then toEnum d : unEscapeString ds
-                            else replacement_character : unEscapeString ds
-      _ -> replacement_character : unEscapeString rest
-
-    multi_byte i mask overlong =
-      aux i rest (unEscapeByte rest) (c .&. mask)
-      where
-        aux 0 rs _ acc
-          | overlong <= acc && acc <= 0x10ffff &&
-            (acc < 0xd800 || 0xdfff < acc)     &&
-            (acc < 0xfffe || 0xffff < acc)      = chr acc : unEscapeString rs
-          | otherwise = replacement_character : unEscapeString rs
-
-        aux n _ (Just (r, rs)) acc
-          | r .&. 0xc0 == 0x80 = aux (n-1) rs (unEscapeByte rs)
-                               $! shiftL acc 6 .|. (r .&. 0x3f)
-
-        aux _ rs _ _ = replacement_character : unEscapeString rs
-
-------------------------------------------------------------
--- Resolving a relative URI relative to a base URI
-------------------------------------------------------------
-
--- |Returns a new 'URI' which represents the value of the
---  first 'URI' interpreted as relative to the second 'URI'.
---  For example:
---
---  > "foo" `relativeTo` "http://bar.org/" = "http://bar.org/foo"
---  > "http:foo" `nonStrictRelativeTo` "http://bar.org/" = "http://bar.org/foo"
---
---  Algorithm from RFC3986 [3], section 5.2.2
---
-
-nonStrictRelativeTo :: URI -> URI -> URI
-nonStrictRelativeTo ref base = relativeTo ref' base
-    where
-        ref' = if uriScheme ref == uriScheme base
-               then ref { uriScheme="" }
-               else ref
-
-isDefined :: ( MonadPlus m, Eq (m a) ) => m a -> Bool
-isDefined a = a /= mzero
-
--- | Returns a new 'URI' which represents the value of the first 'URI'
--- interpreted as relative to the second 'URI'.
---
--- Algorithm from RFC3986 [3], section 5.2
-relativeTo :: URI -> URI -> URI
-relativeTo ref base
-    | isDefined ( uriScheme ref ) =
-        just_segments ref
-    | isDefined ( uriAuthority ref ) =
-        just_segments ref { uriScheme = uriScheme base }
-    | isDefined ( uriPath ref ) =
-        if (head (uriPath ref) == '/') then
-            just_segments ref
-                { uriScheme    = uriScheme base
-                , uriAuthority = uriAuthority base
-                }
-        else
-            just_segments ref
-                { uriScheme    = uriScheme base
-                , uriAuthority = uriAuthority base
-                , uriPath      = mergePaths base ref
-                }
-    | isDefined ( uriQuery ref ) =
-        just_segments ref
-            { uriScheme    = uriScheme base
-            , uriAuthority = uriAuthority base
-            , uriPath      = uriPath base
-            }
-    | otherwise =
-        just_segments ref
-            { uriScheme    = uriScheme base
-            , uriAuthority = uriAuthority base
-            , uriPath      = uriPath base
-            , uriQuery     = uriQuery base
-            }
-    where
-        just_segments u =
-            u { uriPath = removeDotSegments (uriPath u) }
-        mergePaths b r
-            | isDefined (uriAuthority b) && null pb = '/':pr
-            | otherwise                             = dropLast pb ++ pr
-            where
-                pb = uriPath b
-                pr = uriPath r
-        dropLast = fst . splitLast -- reverse . dropWhile (/='/') . reverse
-
---  Remove dot segments, but protect leading '/' character
-removeDotSegments :: String -> String
-removeDotSegments ('/':ps) = '/':elimDots ps []
-removeDotSegments ps       = elimDots ps []
-
---  Second arg accumulates segments processed so far in reverse order
-elimDots :: String -> [String] -> String
--- elimDots ps rs | traceVal "\nps " ps $ traceVal "rs " rs $ False = error ""
-elimDots [] [] = ""
-elimDots [] rs = concat (reverse rs)
-elimDots (    '.':'/':ps)     rs = elimDots ps rs
-elimDots (    '.':[]    )     rs = elimDots [] rs
-elimDots (    '.':'.':'/':ps) rs = elimDots ps (drop 1 rs)
-elimDots (    '.':'.':[]    ) rs = elimDots [] (drop 1 rs)
-elimDots ps rs = elimDots ps1 (r:rs)
-    where
-        (r,ps1) = nextSegment ps
-
---  Returns the next segment and the rest of the path from a path string.
---  Each segment ends with the next '/' or the end of string.
---
-nextSegment :: String -> (String,String)
-nextSegment ps =
-    case break (=='/') ps of
-        (r,'/':ps1) -> (r++"/",ps1)
-        (r,_)       -> (r,[])
-
---  Split last (name) segment from path, returning (path,name)
-splitLast :: String -> (String,String)
-splitLast p = (reverse revpath,reverse revname)
-    where
-        (revname,revpath) = break (=='/') $ reverse p
-
-------------------------------------------------------------
--- Finding a URI relative to a base URI
-------------------------------------------------------------
-
--- |Returns a new 'URI' which represents the relative location of
---  the first 'URI' with respect to the second 'URI'.  Thus, the
---  values supplied are expected to be absolute URIs, and the result
---  returned may be a relative URI.
---
---  Example:
---
---  > "http://example.com/Root/sub1/name2#frag"
---  >   `relativeFrom` "http://example.com/Root/sub2/name2#frag"
---  >   == "../sub1/name2#frag"
---
---  There is no single correct implementation of this function,
---  but any acceptable implementation must satisfy the following:
---
---  > (uabs `relativeFrom` ubase) `relativeTo` ubase == uabs
---
---  For any valid absolute URI.
---  (cf. <http://lists.w3.org/Archives/Public/uri/2003Jan/0008.html>
---       <http://lists.w3.org/Archives/Public/uri/2003Jan/0005.html>)
---
-relativeFrom :: URI -> URI -> URI
-relativeFrom uabs base
-    | diff uriScheme    uabs base = uabs
-    | diff uriAuthority uabs base = uabs { uriScheme = "" }
-    | diff uriPath      uabs base = uabs
-        { uriScheme    = ""
-        , uriAuthority = Nothing
-        , uriPath      = relPathFrom (removeBodyDotSegments $ uriPath uabs)
-                                     (removeBodyDotSegments $ uriPath base)
-        }
-    | diff uriQuery     uabs base = uabs
-        { uriScheme    = ""
-        , uriAuthority = Nothing
-        , uriPath      = ""
-        }
-    | otherwise = uabs          -- Always carry fragment from uabs
-        { uriScheme    = ""
-        , uriAuthority = Nothing
-        , uriPath      = ""
-        , uriQuery     = ""
-        }
-    where
-        diff :: Eq b => (a -> b) -> a -> a -> Bool
-        diff sel u1 u2 = sel u1 /= sel u2
-        -- Remove dot segments except the final segment
-        removeBodyDotSegments p = removeDotSegments p1 ++ p2
-            where
-                (p1,p2) = splitLast p
-
-relPathFrom :: String -> String -> String
-relPathFrom []   _    = "/"
-relPathFrom pabs []   = pabs
-relPathFrom pabs base =                 -- Construct a relative path segments
-    if sa1 == sb1                       -- if the paths share a leading segment
-        then if (sa1 == "/")            -- other than a leading '/'
-            then if (sa2 == sb2)
-                then relPathFrom1 ra2 rb2
-                else pabs
-            else relPathFrom1 ra1 rb1
-        else pabs
-    where
-        (sa1,ra1) = nextSegment pabs
-        (sb1,rb1) = nextSegment base
-        (sa2,ra2) = nextSegment ra1
-        (sb2,rb2) = nextSegment rb1
-
---  relPathFrom1 strips off trailing names from the supplied paths,
---  and calls difPathFrom to find the relative path from base to
---  target
-relPathFrom1 :: String -> String -> String
-relPathFrom1 pabs base = relName
-    where
-        (sa,na) = splitLast pabs
-        (sb,nb) = splitLast base
-        rp      = relSegsFrom sa sb
-        relName = if null rp then
-                      if (na == nb) then ""
-                      else if protect na then "./"++na
-                      else na
-                  else
-                      rp++na
-        -- Precede name with some path if it is null or contains a ':'
-        protect s = null s || ':' `elem` s
-
---  relSegsFrom discards any common leading segments from both paths,
---  then invokes difSegsFrom to calculate a relative path from the end
---  of the base path to the end of the target path.
---  The final name is handled separately, so this deals only with
---  "directory" segtments.
---
-relSegsFrom :: String -> String -> String
-{-
-relSegsFrom sabs base
-    | traceVal "\nrelSegsFrom\nsabs " sabs $ traceVal "base " base $
-      False = error ""
--}
-relSegsFrom []   []   = ""      -- paths are identical
-relSegsFrom sabs base =
-    if sa1 == sb1
-        then relSegsFrom ra1 rb1
-        else difSegsFrom sabs base
-    where
-        (sa1,ra1) = nextSegment sabs
-        (sb1,rb1) = nextSegment base
-
---  difSegsFrom calculates a path difference from base to target,
---  not including the final name at the end of the path
---  (i.e. results always ends with '/')
---
---  This function operates under the invariant that the supplied
---  value of sabs is the desired path relative to the beginning of
---  base.  Thus, when base is empty, the desired path has been found.
---
-difSegsFrom :: String -> String -> String
-{-
-difSegsFrom sabs base
-    | traceVal "\ndifSegsFrom\nsabs " sabs $ traceVal "base " base $
-      False = error ""
--}
-difSegsFrom sabs ""   = sabs
-difSegsFrom sabs base = difSegsFrom ("../"++sabs) (snd $ nextSegment base)
-
-------------------------------------------------------------
---  Other normalization functions
-------------------------------------------------------------
-
--- |Case normalization; cf. RFC3986 section 6.2.2.1
---  NOTE:  authority case normalization is not performed
---
-normalizeCase :: String -> String
-normalizeCase uristr = ncScheme uristr
-    where
-        ncScheme (':':cs)                = ':':ncEscape cs
-        ncScheme (c:cs) | isSchemeChar c = toLower c:ncScheme cs
-        ncScheme _                       = ncEscape uristr -- no scheme present
-        ncEscape ('%':h1:h2:cs) = '%':toUpper h1:toUpper h2:ncEscape cs
-        ncEscape (c:cs)         = c:ncEscape cs
-        ncEscape []             = []
-
--- |Encoding normalization; cf. RFC3986 section 6.2.2.2
---
-normalizeEscape :: String -> String
-normalizeEscape ('%':h1:h2:cs)
-    | isHexDigit h1 && isHexDigit h2 && isUnreserved escval =
-        escval:normalizeEscape cs
-    where
-        escval = chr (digitToInt h1*16+digitToInt h2)
-normalizeEscape (c:cs)         = c:normalizeEscape cs
-normalizeEscape []             = []
-
--- |Path segment normalization; cf. RFC3986 section 6.2.2.4
---
-normalizePathSegments :: String -> String
-normalizePathSegments uristr = normstr juri
-    where
-        juri = parseURI uristr
-        normstr Nothing  = uristr
-        normstr (Just u) = show (normuri u)
-        normuri u = u { uriPath = removeDotSegments (uriPath u) }
-
-------------------------------------------------------------
---  Local trace helper functions
-------------------------------------------------------------
-
-traceShow :: Show a => String -> a -> a
-traceShow msg x = trace (msg ++ show x) x
-
-traceVal :: Show a => String -> a -> b -> b
-traceVal msg x y = trace (msg ++ show x) y
-
-------------------------------------------------------------
---  Deprecated functions
-------------------------------------------------------------
-
-{-# DEPRECATED parseabsoluteURI "use parseAbsoluteURI" #-}
-parseabsoluteURI :: String -> Maybe URI
-parseabsoluteURI = parseAbsoluteURI
-
-{-# DEPRECATED escapeString "use escapeURIString, and note the flipped arguments" #-}
-escapeString :: String -> (Char->Bool) -> String
-escapeString = flip escapeURIString
-
-{-# DEPRECATED reserved "use isReserved" #-}
-reserved :: Char -> Bool
-reserved = isReserved
-
-{-# DEPRECATED unreserved "use isUnreserved" #-}
-unreserved :: Char -> Bool
-unreserved = isUnreserved
-
---  Additional component access functions for backward compatibility
-
-{-# DEPRECATED scheme "use uriScheme" #-}
-scheme :: URI -> String
-scheme = orNull init . uriScheme
-
-{-# DEPRECATED authority "use uriAuthority, and note changed functionality" #-}
-authority :: URI -> String
-authority = dropss . ($"") . uriAuthToString id . uriAuthority
-    where
-        -- Old-style authority component does not include leading '//'
-        dropss ('/':'/':s) = s
-        dropss s           = s
-
-{-# DEPRECATED path "use uriPath" #-}
-path :: URI -> String
-path = uriPath
-
-{-# DEPRECATED query "use uriQuery, and note changed functionality" #-}
-query :: URI -> String
-query = orNull tail . uriQuery
-
-{-# DEPRECATED fragment "use uriFragment, and note changed functionality" #-}
-fragment :: URI -> String
-fragment = orNull tail . uriFragment
-
-orNull :: ([a]->[a]) -> [a] -> [a]
-orNull _ [] = []
-orNull f as = f as
-
---------------------------------------------------------------------------------
---
---  Copyright (c) 2004, G. KLYNE.  All rights reserved.
---  Distributed as free software under the following license.
---
---  Redistribution and use in source and binary forms, with or without
---  modification, are permitted provided that the following conditions
---  are met:
---
---  - Redistributions of source code must retain the above copyright notice,
---  this list of conditions and the following disclaimer.
---
---  - Redistributions in binary form must reproduce the above copyright
---  notice, this list of conditions and the following disclaimer in the
---  documentation and/or other materials provided with the distribution.
---
---  - Neither name of the copyright holders nor the names of its
---  contributors may be used to endorse or promote products derived from
---  this software without specific prior written permission.
---
---  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND THE CONTRIBUTORS
---  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
---  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
---  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
---  HOLDERS OR THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
---  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
---  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
---  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
---  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
---  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
---  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---
---------------------------------------------------------------------------------
diff --git a/standalone/android/tmp/network-2.4.1.2/README b/standalone/android/tmp/network-2.4.1.2/README
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/README
+++ /dev/null
@@ -1,4 +0,0 @@
-To build this package using Cabal directly from git, you must run
-"autoreconf" before the usual Cabal build steps (configure/build/install).
-autoreconf is included in the GNU autoconf tools.  There is no need to run
-the "configure" script: the "setup configure" step will do this for you.
diff --git a/standalone/android/tmp/network-2.4.1.2/Setup.hs b/standalone/android/tmp/network-2.4.1.2/Setup.hs
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/Setup.hs
+++ /dev/null
@@ -1,6 +0,0 @@
-module Main (main) where
-
-import Distribution.Simple
-
-main :: IO ()
-main = defaultMainWithHooks autoconfUserHooks
diff --git a/standalone/android/tmp/network-2.4.1.2/cabal.config b/standalone/android/tmp/network-2.4.1.2/cabal.config
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/cabal.config
+++ /dev/null
@@ -1,199 +0,0 @@
-constraints: Crypto ==4.2.5.1,
-             binary ==0.7.6.1,
-             DAV ==1.0.3,
-             HTTP ==4000.2.17,
-             HUnit ==1.2.5.2,
-             IfElse ==0.85,
-             MissingH ==1.2.1.0,
-             MonadRandom ==0.1.13,
-             QuickCheck ==2.7.6,
-             SafeSemaphore ==0.10.1,
-             aeson ==0.7.0.6,
-             ansi-wl-pprint ==0.6.7.1,
-             appar ==0.1.4,
-             asn1-encoding ==0.8.1.3,
-             asn1-parse ==0.8.1,
-             asn1-types ==0.2.3,
-             async ==2.0.1.5,
-             attoparsec ==0.11.3.4,
-             attoparsec-conduit ==1.1.0,
-             authenticate ==1.3.2.10,
-             base-unicode-symbols ==0.2.2.4,
-             base16-bytestring ==0.1.1.6,
-             base64-bytestring ==1.0.0.1,
-             bifunctors ==4.1.1.1,
-             bloomfilter ==2.0.0.0,
-             byteable ==0.1.1,
-             byteorder ==1.0.4,
-             case-insensitive ==1.2.0.1,
-             cereal ==0.4.0.1,
-             cipher-aes ==0.2.8,
-             cipher-des ==0.0.6,
-             cipher-rc4 ==0.1.4,
-             clientsession ==0.9.0.3,
-             comonad ==4.2,
-             conduit ==1.1.6,
-             conduit-extra ==1.1.3,
-             connection ==0.2.3,
-             contravariant ==0.6.1.1,
-             cookie ==0.4.1.2,
-             cprng-aes ==0.5.2,
-             crypto-api ==0.13.2,
-             crypto-cipher-types ==0.0.9,
-             crypto-numbers ==0.2.3,
-             crypto-pubkey ==0.2.4,
-             crypto-pubkey-types ==0.4.2.2,
-             crypto-random ==0.0.7,
-             cryptohash ==0.11.6,
-             cryptohash-conduit ==0.1.1,
-             css-text ==0.1.2.1,
-             data-default ==0.5.3,
-             data-default-class ==0.0.1,
-             data-default-instances-base ==0.0.1,
-             data-default-instances-containers ==0.0.1,
-             data-default-instances-dlist ==0.0.1,
-             data-default-instances-old-locale ==0.0.1,
-             sandi ==0.3.0.1,
-             dbus ==0.10.8,
-             distributive ==0.4.4,
-             dlist ==0.7.0.1,
-             dns ==1.3.0,
-             edit-distance ==0.2.1.2,
-             either ==4.3,
-             email-validate ==1.0.0,
-             entropy ==0.2.1,
-             errors ==1.4.7,
-             exceptions ==0.6.1,
-             failure ==0.2.0.3,
-             fast-logger ==2.1.5,
-             fdo-notify ==0.3.1,
-             feed ==0.3.9.2,
-             file-embed ==0.0.6,
-             fingertree ==0.1.0.0,
-             free ==4.9,
-             gnuidn ==0.2,
-             gnutls ==0.1.4,
-             gsasl ==0.3.5,
-             hS3 ==0.5.7,
-             hashable ==1.2.1.0,
-             hinotify ==0.3.5,
-             hjsmin ==0.1.4.7,
-             hslogger ==1.2.1,
-             http-client ==0.4.11.1,
-             http-client-tls ==0.2.2,
-             http-conduit ==2.1.5,
-             http-date ==0.0.2,
-             http-types ==0.8.5,
-             hxt ==9.3.1.4,
-             hxt-charproperties ==9.1.1.1,
-             hxt-regex-xmlschema ==9.0.4,
-             hxt-unicode ==9.0.2.2,
-             idna ==0.2,
-             iproute ==1.2.11,
-             json ==0.5,
-             keys ==3.10.1,
-             language-javascript ==0.5.13,
-             lens ==4.4.0.2,
-             libxml-sax ==0.7.5,
-             mime-mail ==0.4.1.2,
-             mime-types ==0.1.0.4,
-             mmorph ==1.0.3,
-             monad-control ==0.3.2.2,
-             monad-logger ==0.3.6.1,
-             monad-loops ==0.4.2.1,
-             monads-tf ==0.1.0.2,
-             mtl ==2.1.2,
-             nats ==0.1.2,
-             network ==2.4.1.2,
-             network-conduit ==1.1.0,
-             network-info ==0.2.0.5,
-             network-multicast ==0.0.10,
-             network-protocol-xmpp ==0.4.6,
-             network-uri ==2.6.0.1,
-             optparse-applicative ==0.11.0.2,
-             parallel ==3.2.0.4,
-             path-pieces ==0.1.4,
-             pem ==0.2.2,
-             persistent ==1.3.3,
-             persistent-template ==1.3.2.2,
-             pointed ==4.0,
-             prelude-extras ==0.4,
-             profunctors ==4.0.4,
-             publicsuffixlist ==0.1,
-             punycode ==2.0,
-             random ==1.0.1.1,
-             ranges ==0.2.4,
-             reducers ==3.10.2.1,
-             reflection ==1.2.0.1,
-             regex-base ==0.93.2,
-             regex-compat ==0.95.1,
-             regex-posix ==0.95.2,
-             regex-tdfa ==1.2.0,
-             resource-pool ==0.2.1.1,
-             resourcet ==1.1.2.3,
-             safe ==0.3.8,
-             securemem ==0.1.3,
-             semigroupoids ==4.2,
-             semigroups ==0.15.3,
-             shakespeare ==2.0.5,
-             silently ==1.2.4.1,
-             simple-sendfile ==0.2.14,
-             skein ==1.0.9,
-             socks ==0.5.4,
-             split ==0.2.2,
-             stm ==2.4.2,
-             stm-chans ==3.0.0.2,
-             streaming-commons ==0.1.4.1,
-             stringprep ==0.1.5,
-             stringsearch ==0.3.6.5,
-             syb ==0.4.0,
-             system-fileio ==0.3.14,
-             system-filepath ==0.4.12,
-             tagged ==0.7.2,
-             tagsoup ==0.13.1,
-             tagstream-conduit ==0.5.5.1,
-             text ==1.1.1.0,
-             text-icu ==0.6.3.7,
-             tf-random ==0.5,
-             tls ==1.2.9,
-             transformers ==0.3.0.0,
-             transformers-base ==0.4.1,
-             transformers-compat ==0.3.3.3,
-             unbounded-delays ==0.1.0.8,
-             unix-compat ==0.4.1.3,
-             unix-time ==0.2.2,
-             unordered-containers ==0.2.5.0,
-             utf8-string ==0.3.7,
-             uuid ==1.3.3,
-             vault ==0.3.0.3,
-             vector ==0.10.0.1,
-             void ==0.6.1,
-             wai ==3.0.1.1,
-             wai-app-static ==3.0.0.1,
-             wai-extra ==3.0.1.2,
-             wai-logger ==2.1.1,
-             warp ==3.0.0.5,
-             warp-tls ==3.0.0,
-             word8 ==0.1.1,
-             x509 ==1.4.11,
-             x509-store ==1.4.4,
-             x509-system ==1.4.5,
-             x509-validation ==1.5.0,
-             xml ==1.3.13,
-             xml-conduit ==1.2.1,
-             xml-hamlet ==0.4.0.9,
-             xml-types ==0.3.4,
-             xss-sanitize ==0.3.5.2,
-             yaml ==0.8.9.3,
-             yesod ==1.2.6.1,
-             yesod-auth ==1.3.4.6,
-             yesod-core ==1.2.20.1,
-             yesod-default ==1.2.0,
-             yesod-form ==1.3.16,
-             yesod-persistent ==1.2.3.1,
-             yesod-routes ==1.2.0.7,
-             yesod-static ==1.2.4,
-             zlib ==0.5.4.1,
-             bytestring ==0.10.4.0,
-             scientific ==0.3.3.1,
-             clock ==0.4.6.0
diff --git a/standalone/android/tmp/network-2.4.1.2/cbits/HsNet.c b/standalone/android/tmp/network-2.4.1.2/cbits/HsNet.c
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/cbits/HsNet.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* -----------------------------------------------------------------------------
- * (c) The University of Glasgow 2002
- *
- * static versions of the inline functions from HsNet.h
- * -------------------------------------------------------------------------- */
-
-#define INLINE
-#include "HsNet.h"
-
-#include <sys/endian.h>
-uint16_t my_htons(uint16_t v)
-{
-	htons(v);
-}
-uint32_t my_htonl(uint32_t v)
-{
-	htonl(v);
-}
-uint16_t my_ntohs(uint16_t v)
-{
-	ntohs(v);
-}
diff --git a/standalone/android/tmp/network-2.4.1.2/cbits/ancilData.c b/standalone/android/tmp/network-2.4.1.2/cbits/ancilData.c
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/cbits/ancilData.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- *  Copyright(c), 2002 The GHC Team.
- */
-
-#ifdef aix_HOST_OS
-#define _LINUX_SOURCE_COMPAT 
-// Required to get CMSG_SPACE/CMSG_LEN macros.  See #265.
-// Alternative is to #define COMPAT_43 and use the 
-// HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS code instead, but that means
-// fiddling with the configure script too.
-#endif
-
-#include "HsNet.h"
-#include <string.h>
-
-#if HAVE_STRUCT_MSGHDR_MSG_CONTROL || HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS /* until end */
-
-/* 
- *  Support for transmitting file descriptors.
- *
- *  
- */
- 
-
-/*
- * sendmsg() and recvmsg() wrappers for transmitting
- * ancillary socket data.
- *
- * Doesn't provide the full generality of either, specifically:
- *
- *  - no support for scattered read/writes.
- *  - only possible to send one ancillary chunk of data at a time.
- */
-
-int
-sendFd(int sock,
-       int outfd)
-{
-  struct msghdr msg = {0};
-  struct iovec iov[1];
-  char  buf[2];
-#if HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS
-  msg.msg_accrights = (void*)&outfd;
-  msg.msg_accrightslen = sizeof(int);
-#else
-  struct cmsghdr *cmsg;
-  char ancBuffer[CMSG_SPACE(sizeof(int))];
-  char* dPtr;
-  
-  msg.msg_control = ancBuffer;
-  msg.msg_controllen = sizeof(ancBuffer);
-
-  cmsg = CMSG_FIRSTHDR(&msg);
-  cmsg->cmsg_level = SOL_SOCKET;
-  cmsg->cmsg_type = SCM_RIGHTS;
-  cmsg->cmsg_len = CMSG_LEN(sizeof(int));
-  dPtr = (char*)CMSG_DATA(cmsg);
-  
-  *(int*)dPtr = outfd;
-  msg.msg_controllen = cmsg->cmsg_len;
-#endif
-
-  buf[0] = 0; buf[1] = '\0';
-  iov[0].iov_base = buf;
-  iov[0].iov_len  = 2;
-
-  msg.msg_iov = iov;
-  msg.msg_iovlen = 1;
-  
-  return sendmsg(sock,&msg,0);
-}
-
-int
-recvFd(int sock)
-{
-  struct msghdr msg = {0};
-  char  duffBuf[10];
-  int rc;
-  int len = sizeof(int);
-  struct iovec iov[1];
-#if HAVE_STRUCT_MSGHDR_MSG_CONTROL
-  struct cmsghdr *cmsg = NULL;
-  struct cmsghdr *cptr;
-#else
-  int* fdBuffer;
-#endif
-
-  iov[0].iov_base = duffBuf;
-  iov[0].iov_len  = sizeof(duffBuf);
-  msg.msg_iov = iov;
-  msg.msg_iovlen = 1;
-
-#if HAVE_STRUCT_MSGHDR_MSG_CONTROL
-  cmsg = (struct cmsghdr*)malloc(CMSG_SPACE(len));
-  if (cmsg==NULL) {
-    return -1;
-  }
-  
-  msg.msg_control = (void *)cmsg;
-  msg.msg_controllen = CMSG_LEN(len);
-#else
-  fdBuffer = (int*)malloc(len);
-  if (fdBuffer) {
-    msg.msg_accrights    = (void *)fdBuffer;
-  } else {
-    return -1;
-  }
-  msg.msg_accrightslen = len;
-#endif
-
-  if ((rc = recvmsg(sock,&msg,0)) < 0) {
-    return rc;
-  }
-  
-#if HAVE_STRUCT_MSGHDR_MSG_CONTROL
-  cptr = (struct cmsghdr*)CMSG_FIRSTHDR(&msg);
-  return *(int*)CMSG_DATA(cptr);
-#else
-  return *(int*)fdBuffer;
-#endif
-}
-
-#endif
diff --git a/standalone/android/tmp/network-2.4.1.2/cbits/asyncAccept.c b/standalone/android/tmp/network-2.4.1.2/cbits/asyncAccept.c
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/cbits/asyncAccept.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * (c) sof, 2003.
- */
-
-#include "HsNet.h"
-#include "HsFFI.h"
-
-#if defined(HAVE_WINSOCK2_H) && !defined(__CYGWIN__)
-
-/* all the way to the end */
-
-/*
- * To support non-blocking accept()s with WinSock, we use the asyncDoProc#
- * primop, which lets a Haskell thread call an external routine without
- * blocking the progress of other threads. 
- *
- * As can readily be seen, this is a low-level mechanism.
- *
- */
-
-typedef struct AcceptData {
-    int   fdSock;
-    int   newSock;
-    void* sockAddr;
-    int   size;
-} AcceptData;
-
-/*
- * Fill in parameter block that's passed along when the RTS invokes the 
- * accept()-calling proc below (acceptDoProc())
- */
-void*
-newAcceptParams(int sock,
-		int sz,
-		void* sockaddr)
-{
-    AcceptData* data = (AcceptData*)malloc(sizeof(AcceptData));
-    if (!data) return NULL;
-    data->fdSock   = sock;
-    data->newSock  = 0;
-    data->sockAddr = sockaddr;
-    data->size     = sz;
-    
-    return data;
-}
-
-/* Accessors for return code and accept()'s socket result. */
-
-int
-acceptNewSock(void* d)
-{
-    return (((AcceptData*)d)->newSock);
-}
-
-/* Routine invoked by an RTS worker thread */
-int
-acceptDoProc(void* param)
-{
-    SOCKET s;
-
-    AcceptData* data = (AcceptData*)param;
-    s = accept( data->fdSock,
-		data->sockAddr,
-		&data->size);
-    data->newSock = s;
-    if ( s == INVALID_SOCKET ) {
-	return GetLastError();
-    } else {
-	return 0;
-    }
-}
-#endif
diff --git a/standalone/android/tmp/network-2.4.1.2/cbits/initWinSock.c b/standalone/android/tmp/network-2.4.1.2/cbits/initWinSock.c
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/cbits/initWinSock.c
+++ /dev/null
@@ -1,52 +0,0 @@
-#include "HsNet.h"
-#include "HsFFI.h"
-
-#if defined(HAVE_WINSOCK2_H) && !defined(__CYGWIN__)
-
-static int winsock_inited = 0;
-static int winsock_uninited = 0;
-
-/* Initialising WinSock... */
-int
-initWinSock ()
-{
-  WORD wVersionRequested;
-  WSADATA wsaData;  
-  int err;
-
-  if (!winsock_inited) {
-    wVersionRequested = MAKEWORD( 2, 2 );
-
-    err = WSAStartup ( wVersionRequested, &wsaData );
-    
-    if ( err != 0 ) {
-       return err;
-    }
-
-    if ( LOBYTE( wsaData.wVersion ) != 2 ||
-       HIBYTE( wsaData.wVersion ) != 2 ) {
-      WSACleanup();
-      return (-1);
-    }
-
-    winsock_inited = 1;
-  }
-  return 0;
-}
-
-static void
-shutdownHandler(void)
-{
-  WSACleanup();
-}
-
-void
-shutdownWinSock()
-{
-    if (!winsock_uninited) {
-	atexit(shutdownHandler);
-	winsock_uninited = 1;
-    }
-}
-
-#endif
diff --git a/standalone/android/tmp/network-2.4.1.2/cbits/winSockErr.c b/standalone/android/tmp/network-2.4.1.2/cbits/winSockErr.c
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/cbits/winSockErr.c
+++ /dev/null
@@ -1,76 +0,0 @@
-#include "HsNet.h"
-#include "HsFFI.h"
-
-#if defined(HAVE_WINSOCK2_H) && !defined(__CYGWIN__)
-#include <stdio.h>
-
-/* to the end */
-
-const char*
-getWSErrorDescr(int err)
-{
-  static char  otherErrMsg[256];
-
-  switch (err) {
-  case WSAEINTR:  return "Interrupted function call (WSAEINTR)";
-  case WSAEBADF:  return "bad socket descriptor (WSAEBADF)";
-  case WSAEACCES: return "Permission denied (WSAEACCESS)";
-  case WSAEFAULT: return "Bad address (WSAEFAULT)";
-  case WSAEINVAL: return "Invalid argument (WSAEINVAL)";
-  case WSAEMFILE: return "Too many open files (WSAEMFILE)";
-  case WSAEWOULDBLOCK:  return "Resource temporarily unavailable (WSAEWOULDBLOCK)";
-  case WSAEINPROGRESS:  return "Operation now in progress (WSAEINPROGRESS)";
-  case WSAEALREADY:     return "Operation already in progress (WSAEALREADY)";
-  case WSAENOTSOCK:     return "Socket operation on non-socket (WSAENOTSOCK)";
-  case WSAEDESTADDRREQ: return "Destination address required (WSAEDESTADDRREQ)";
-  case WSAEMSGSIZE:    	return "Message too long (WSAEMSGSIZE)";
-  case WSAEPROTOTYPE:   return "Protocol wrong type for socket (WSAEPROTOTYPE)";
-  case WSAENOPROTOOPT:  return "Bad protocol option (WSAENOPROTOOPT)";
-  case WSAEPROTONOSUPPORT: return "Protocol not supported (WSAEPROTONOSUPPORT)";
-  case WSAESOCKTNOSUPPORT: return "Socket type not supported (WSAESOCKTNOSUPPORT)";
-  case WSAEOPNOTSUPP:      return "Operation not supported (WSAEOPNOTSUPP)";
-  case WSAEPFNOSUPPORT:    return "Protocol family not supported (WSAEPFNOSUPPORT)";
-  case WSAEAFNOSUPPORT:    return "Address family not supported by protocol family (WSAEAFNOSUPPORT)";
-  case WSAEADDRINUSE:      return "Address already in use (WSAEADDRINUSE)";
-  case WSAEADDRNOTAVAIL:   return "Cannot assign requested address (WSAEADDRNOTAVAIL)";
-  case WSAENETDOWN:        return "Network is down (WSAENETDOWN)";
-  case WSAENETUNREACH:     return "Network is unreachable (WSAENETUNREACH)";
-  case WSAENETRESET:       return "Network dropped connection on reset (WSAENETRESET)";
-  case WSAECONNABORTED:    return "Software caused connection abort (WSAECONNABORTED)";
-  case WSAECONNRESET:      return "Connection reset by peer (WSAECONNRESET)";
-  case WSAENOBUFS:         return "No buffer space available (WSAENOBUFS)";
-  case WSAEISCONN:         return "Socket is already connected (WSAEISCONN)";
-  case WSAENOTCONN:        return "Socket is not connected (WSAENOTCONN)";
-  case WSAESHUTDOWN:       return "Cannot send after socket shutdown (WSAESHUTDOWN)";
-  case WSAETOOMANYREFS:    return "Too many references (WSAETOOMANYREFS)";
-  case WSAETIMEDOUT:       return "Connection timed out (WSAETIMEDOUT)";
-  case WSAECONNREFUSED:    return "Connection refused (WSAECONNREFUSED)";
-  case WSAELOOP:           return "Too many levels of symbolic links (WSAELOOP)";
-  case WSAENAMETOOLONG:    return "Filename too long (WSAENAMETOOLONG)";
-  case WSAEHOSTDOWN:       return "Host is down (WSAEHOSTDOWN)";
-  case WSAEHOSTUNREACH:    return "Host is unreachable (WSAEHOSTUNREACH)";
-  case WSAENOTEMPTY:       return "Resource not empty (WSAENOTEMPTY)";
-  case WSAEPROCLIM:        return "Too many processes (WSAEPROCLIM)";
-  case WSAEUSERS:          return "Too many users (WSAEUSERS)";
-  case WSAEDQUOT:          return "Disk quota exceeded (WSAEDQUOT)";
-  case WSAESTALE:          return "Stale NFS file handle (WSAESTALE)";
-  case WSAEREMOTE:         return "Too many levels of remote in path (WSAEREMOTE)";
-  case WSAEDISCON:         return "Graceful shutdown in progress (WSAEDISCON)";
-  case WSASYSNOTREADY:     return "Network subsystem is unavailable (WSASYSNOTREADY)";
-  case WSAVERNOTSUPPORTED: return "Winsock.dll version out of range (WSAVERNOTSUPPORTED)";
-  case WSANOTINITIALISED:  return "Successful WSAStartup not yet performed (WSANOTINITIALISED)";
-#ifdef WSATYPE_NOT_FOUND
-  case WSATYPE_NOT_FOUND:  return "Class type not found (WSATYPE_NOT_FOUND)";
-#endif
-  case WSAHOST_NOT_FOUND:  return "Host not found (WSAHOST_NOT_FOUND)";
-  case WSATRY_AGAIN:       return "Nonauthoritative host not found (WSATRY_AGAIN)";
-  case WSANO_RECOVERY:     return "This is a nonrecoverable error (WSANO_RECOVERY)";
-  case WSANO_DATA:         return "Valid name, no data record of requested type (WSANO_DATA)";
-  default:
-    sprintf(otherErrMsg, "Unknown WinSock error: %u", err);
-    return otherErrMsg;
-  }
-}
-
-#endif
-
diff --git a/standalone/android/tmp/network-2.4.1.2/config.guess b/standalone/android/tmp/network-2.4.1.2/config.guess
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/config.guess
+++ /dev/null
@@ -1,1420 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-#   Copyright 1992-2014 Free Software Foundation, Inc.
-
-timestamp='2014-03-23'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program.  This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-#
-# Originally written by Per Bothner.
-#
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-#
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
-
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright 1992-2014 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )	# Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help" >&2
-       exit 1 ;;
-    * )
-       break ;;
-  esac
-done
-
-if test $# != 0; then
-  echo "$me: too many arguments$help" >&2
-  exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,)    echo "int x;" > $dummy.c ;
-	for c in cc gcc c89 c99 ; do
-	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
-	     CC_FOR_BUILD="$c"; break ;
-	  fi ;
-	done ;
-	if test x"$CC_FOR_BUILD" = x ; then
-	  CC_FOR_BUILD=no_compiler_found ;
-	fi
-	;;
- ,,*)   CC_FOR_BUILD=$CC ;;
- ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
-	PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-case "${UNAME_SYSTEM}" in
-Linux|GNU|GNU/*)
-	# If the system lacks a compiler, then just pick glibc.
-	# We could probably try harder.
-	LIBC=gnu
-
-	eval $set_cc_for_build
-	cat <<-EOF > $dummy.c
-	#include <features.h>
-	#if defined(__UCLIBC__)
-	LIBC=uclibc
-	#elif defined(__dietlibc__)
-	LIBC=dietlibc
-	#else
-	LIBC=gnu
-	#endif
-	EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
-	;;
-esac
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-    *:NetBSD:*:*)
-	# NetBSD (nbsd) targets should (where applicable) match one or
-	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
-	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
-	# switched to ELF, *-*-netbsd* would select the old
-	# object file format.  This provides both forward
-	# compatibility and a consistent mechanism for selecting the
-	# object file format.
-	#
-	# Note: NetBSD doesn't particularly care about the vendor
-	# portion of the name.  We always set it to "unknown".
-	sysctl="sysctl -n hw.machine_arch"
-	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
-	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
-	case "${UNAME_MACHINE_ARCH}" in
-	    armeb) machine=armeb-unknown ;;
-	    arm*) machine=arm-unknown ;;
-	    sh3el) machine=shl-unknown ;;
-	    sh3eb) machine=sh-unknown ;;
-	    sh5el) machine=sh5le-unknown ;;
-	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
-	esac
-	# The Operating System including object format, if it has switched
-	# to ELF recently, or will in the future.
-	case "${UNAME_MACHINE_ARCH}" in
-	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-		eval $set_cc_for_build
-		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-			| grep -q __ELF__
-		then
-		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
-		    # Return netbsd for either.  FIX?
-		    os=netbsd
-		else
-		    os=netbsdelf
-		fi
-		;;
-	    *)
-		os=netbsd
-		;;
-	esac
-	# The OS release
-	# Debian GNU/NetBSD machines have a different userland, and
-	# thus, need a distinct triplet. However, they do not need
-	# kernel version information, so it can be replaced with a
-	# suitable tag, in the style of linux-gnu.
-	case "${UNAME_VERSION}" in
-	    Debian*)
-		release='-gnu'
-		;;
-	    *)
-		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-		;;
-	esac
-	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
-	# contains redundant information, the shorter form:
-	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-	echo "${machine}-${os}${release}"
-	exit ;;
-    *:Bitrig:*:*)
-	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
-	echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
-	exit ;;
-    *:OpenBSD:*:*)
-	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
-	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
-    *:ekkoBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
-	exit ;;
-    *:SolidBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
-	exit ;;
-    macppc:MirBSD:*:*)
-	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
-	exit ;;
-    *:MirBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-	exit ;;
-    alpha:OSF1:*:*)
-	case $UNAME_RELEASE in
-	*4.0)
-		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-		;;
-	*5.*)
-		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
-		;;
-	esac
-	# According to Compaq, /usr/sbin/psrinfo has been available on
-	# OSF/1 and Tru64 systems produced since 1995.  I hope that
-	# covers most systems running today.  This code pipes the CPU
-	# types through head -n 1, so we only detect the type of CPU 0.
-	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
-	case "$ALPHA_CPU_TYPE" in
-	    "EV4 (21064)")
-		UNAME_MACHINE="alpha" ;;
-	    "EV4.5 (21064)")
-		UNAME_MACHINE="alpha" ;;
-	    "LCA4 (21066/21068)")
-		UNAME_MACHINE="alpha" ;;
-	    "EV5 (21164)")
-		UNAME_MACHINE="alphaev5" ;;
-	    "EV5.6 (21164A)")
-		UNAME_MACHINE="alphaev56" ;;
-	    "EV5.6 (21164PC)")
-		UNAME_MACHINE="alphapca56" ;;
-	    "EV5.7 (21164PC)")
-		UNAME_MACHINE="alphapca57" ;;
-	    "EV6 (21264)")
-		UNAME_MACHINE="alphaev6" ;;
-	    "EV6.7 (21264A)")
-		UNAME_MACHINE="alphaev67" ;;
-	    "EV6.8CB (21264C)")
-		UNAME_MACHINE="alphaev68" ;;
-	    "EV6.8AL (21264B)")
-		UNAME_MACHINE="alphaev68" ;;
-	    "EV6.8CX (21264D)")
-		UNAME_MACHINE="alphaev68" ;;
-	    "EV6.9A (21264/EV69A)")
-		UNAME_MACHINE="alphaev69" ;;
-	    "EV7 (21364)")
-		UNAME_MACHINE="alphaev7" ;;
-	    "EV7.9 (21364A)")
-		UNAME_MACHINE="alphaev79" ;;
-	esac
-	# A Pn.n version is a patched version.
-	# A Vn.n version is a released version.
-	# A Tn.n version is a released field test version.
-	# A Xn.n version is an unreleased experimental baselevel.
-	# 1.2 uses "1.2" for uname -r.
-	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
-	exitcode=$?
-	trap '' 0
-	exit $exitcode ;;
-    Alpha\ *:Windows_NT*:*)
-	# How do we know it's Interix rather than the generic POSIX subsystem?
-	# Should we change UNAME_MACHINE based on the output of uname instead
-	# of the specific Alpha model?
-	echo alpha-pc-interix
-	exit ;;
-    21064:Windows_NT:50:3)
-	echo alpha-dec-winnt3.5
-	exit ;;
-    Amiga*:UNIX_System_V:4.0:*)
-	echo m68k-unknown-sysv4
-	exit ;;
-    *:[Aa]miga[Oo][Ss]:*:*)
-	echo ${UNAME_MACHINE}-unknown-amigaos
-	exit ;;
-    *:[Mm]orph[Oo][Ss]:*:*)
-	echo ${UNAME_MACHINE}-unknown-morphos
-	exit ;;
-    *:OS/390:*:*)
-	echo i370-ibm-openedition
-	exit ;;
-    *:z/VM:*:*)
-	echo s390-ibm-zvmoe
-	exit ;;
-    *:OS400:*:*)
-	echo powerpc-ibm-os400
-	exit ;;
-    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-	echo arm-acorn-riscix${UNAME_RELEASE}
-	exit ;;
-    arm*:riscos:*:*|arm*:RISCOS:*:*)
-	echo arm-unknown-riscos
-	exit ;;
-    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
-	echo hppa1.1-hitachi-hiuxmpp
-	exit ;;
-    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
-	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
-	if test "`(/bin/universe) 2>/dev/null`" = att ; then
-		echo pyramid-pyramid-sysv3
-	else
-		echo pyramid-pyramid-bsd
-	fi
-	exit ;;
-    NILE*:*:*:dcosx)
-	echo pyramid-pyramid-svr4
-	exit ;;
-    DRS?6000:unix:4.0:6*)
-	echo sparc-icl-nx6
-	exit ;;
-    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
-	case `/usr/bin/uname -p` in
-	    sparc) echo sparc-icl-nx7; exit ;;
-	esac ;;
-    s390x:SunOS:*:*)
-	echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4H:SunOS:5.*:*)
-	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
-	echo i386-pc-auroraux${UNAME_RELEASE}
-	exit ;;
-    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
-	eval $set_cc_for_build
-	SUN_ARCH="i386"
-	# If there is a compiler, see if it is configured for 64-bit objects.
-	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
-	# This test works for both compilers.
-	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-		grep IS_64BIT_ARCH >/dev/null
-	    then
-		SUN_ARCH="x86_64"
-	    fi
-	fi
-	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4*:SunOS:6*:*)
-	# According to config.sub, this is the proper way to canonicalize
-	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
-	# it's likely to be more like Solaris than SunOS4.
-	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4*:SunOS:*:*)
-	case "`/usr/bin/arch -k`" in
-	    Series*|S4*)
-		UNAME_RELEASE=`uname -v`
-		;;
-	esac
-	# Japanese Language versions have a version number like `4.1.3-JL'.
-	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-	exit ;;
-    sun3*:SunOS:*:*)
-	echo m68k-sun-sunos${UNAME_RELEASE}
-	exit ;;
-    sun*:*:4.2BSD:*)
-	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
-	case "`/bin/arch`" in
-	    sun3)
-		echo m68k-sun-sunos${UNAME_RELEASE}
-		;;
-	    sun4)
-		echo sparc-sun-sunos${UNAME_RELEASE}
-		;;
-	esac
-	exit ;;
-    aushp:SunOS:*:*)
-	echo sparc-auspex-sunos${UNAME_RELEASE}
-	exit ;;
-    # The situation for MiNT is a little confusing.  The machine name
-    # can be virtually everything (everything which is not
-    # "atarist" or "atariste" at least should have a processor
-    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
-    # to the lowercase version "mint" (or "freemint").  Finally
-    # the system name "TOS" denotes a system which is actually not
-    # MiNT.  But MiNT is downward compatible to TOS, so this should
-    # be no problem.
-    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-	echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
-    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-	echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
-    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-	echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
-    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-	echo m68k-milan-mint${UNAME_RELEASE}
-	exit ;;
-    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-	echo m68k-hades-mint${UNAME_RELEASE}
-	exit ;;
-    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-	echo m68k-unknown-mint${UNAME_RELEASE}
-	exit ;;
-    m68k:machten:*:*)
-	echo m68k-apple-machten${UNAME_RELEASE}
-	exit ;;
-    powerpc:machten:*:*)
-	echo powerpc-apple-machten${UNAME_RELEASE}
-	exit ;;
-    RISC*:Mach:*:*)
-	echo mips-dec-mach_bsd4.3
-	exit ;;
-    RISC*:ULTRIX:*:*)
-	echo mips-dec-ultrix${UNAME_RELEASE}
-	exit ;;
-    VAX*:ULTRIX*:*:*)
-	echo vax-dec-ultrix${UNAME_RELEASE}
-	exit ;;
-    2020:CLIX:*:* | 2430:CLIX:*:*)
-	echo clipper-intergraph-clix${UNAME_RELEASE}
-	exit ;;
-    mips:*:*:UMIPS | mips:*:*:RISCos)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h>  /* for printf() prototype */
-	int main (int argc, char *argv[]) {
-#else
-	int main (argc, argv) int argc; char *argv[]; {
-#endif
-	#if defined (host_mips) && defined (MIPSEB)
-	#if defined (SYSTYPE_SYSV)
-	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
-	#endif
-	#if defined (SYSTYPE_SVR4)
-	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
-	#endif
-	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
-	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
-	#endif
-	#endif
-	  exit (-1);
-	}
-EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c &&
-	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
-	  SYSTEM_NAME=`$dummy $dummyarg` &&
-	    { echo "$SYSTEM_NAME"; exit; }
-	echo mips-mips-riscos${UNAME_RELEASE}
-	exit ;;
-    Motorola:PowerMAX_OS:*:*)
-	echo powerpc-motorola-powermax
-	exit ;;
-    Motorola:*:4.3:PL8-*)
-	echo powerpc-harris-powermax
-	exit ;;
-    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
-	echo powerpc-harris-powermax
-	exit ;;
-    Night_Hawk:Power_UNIX:*:*)
-	echo powerpc-harris-powerunix
-	exit ;;
-    m88k:CX/UX:7*:*)
-	echo m88k-harris-cxux7
-	exit ;;
-    m88k:*:4*:R4*)
-	echo m88k-motorola-sysv4
-	exit ;;
-    m88k:*:3*:R3*)
-	echo m88k-motorola-sysv3
-	exit ;;
-    AViiON:dgux:*:*)
-	# DG/UX returns AViiON for all architectures
-	UNAME_PROCESSOR=`/usr/bin/uname -p`
-	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
-	then
-	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
-	       [ ${TARGET_BINARY_INTERFACE}x = x ]
-	    then
-		echo m88k-dg-dgux${UNAME_RELEASE}
-	    else
-		echo m88k-dg-dguxbcs${UNAME_RELEASE}
-	    fi
-	else
-	    echo i586-dg-dgux${UNAME_RELEASE}
-	fi
-	exit ;;
-    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
-	echo m88k-dolphin-sysv3
-	exit ;;
-    M88*:*:R3*:*)
-	# Delta 88k system running SVR3
-	echo m88k-motorola-sysv3
-	exit ;;
-    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
-	echo m88k-tektronix-sysv3
-	exit ;;
-    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
-	echo m68k-tektronix-bsd
-	exit ;;
-    *:IRIX*:*:*)
-	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-	exit ;;
-    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
-	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
-    i*86:AIX:*:*)
-	echo i386-ibm-aix
-	exit ;;
-    ia64:AIX:*:*)
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
-	else
-		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-	fi
-	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
-	exit ;;
-    *:AIX:2:3)
-	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-		eval $set_cc_for_build
-		sed 's/^		//' << EOF >$dummy.c
-		#include <sys/systemcfg.h>
-
-		main()
-			{
-			if (!__power_pc())
-				exit(1);
-			puts("powerpc-ibm-aix3.2.5");
-			exit(0);
-			}
-EOF
-		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
-		then
-			echo "$SYSTEM_NAME"
-		else
-			echo rs6000-ibm-aix3.2.5
-		fi
-	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
-		echo rs6000-ibm-aix3.2.4
-	else
-		echo rs6000-ibm-aix3.2
-	fi
-	exit ;;
-    *:AIX:*:[4567])
-	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
-	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
-		IBM_ARCH=rs6000
-	else
-		IBM_ARCH=powerpc
-	fi
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
-	else
-		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-	fi
-	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-	exit ;;
-    *:AIX:*:*)
-	echo rs6000-ibm-aix
-	exit ;;
-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
-	echo romp-ibm-bsd4.4
-	exit ;;
-    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
-	exit ;;                             # report: romp-ibm BSD 4.3
-    *:BOSX:*:*)
-	echo rs6000-bull-bosx
-	exit ;;
-    DPX/2?00:B.O.S.:*:*)
-	echo m68k-bull-sysv3
-	exit ;;
-    9000/[34]??:4.3bsd:1.*:*)
-	echo m68k-hp-bsd
-	exit ;;
-    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-	echo m68k-hp-bsd4.4
-	exit ;;
-    9000/[34678]??:HP-UX:*:*)
-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-	case "${UNAME_MACHINE}" in
-	    9000/31? )            HP_ARCH=m68000 ;;
-	    9000/[34]?? )         HP_ARCH=m68k ;;
-	    9000/[678][0-9][0-9])
-		if [ -x /usr/bin/getconf ]; then
-		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-		    case "${sc_cpu_version}" in
-		      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-		      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-		      532)                      # CPU_PA_RISC2_0
-			case "${sc_kernel_bits}" in
-			  32) HP_ARCH="hppa2.0n" ;;
-			  64) HP_ARCH="hppa2.0w" ;;
-			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-			esac ;;
-		    esac
-		fi
-		if [ "${HP_ARCH}" = "" ]; then
-		    eval $set_cc_for_build
-		    sed 's/^		//' << EOF >$dummy.c
-
-		#define _HPUX_SOURCE
-		#include <stdlib.h>
-		#include <unistd.h>
-
-		int main ()
-		{
-		#if defined(_SC_KERNEL_BITS)
-		    long bits = sysconf(_SC_KERNEL_BITS);
-		#endif
-		    long cpu  = sysconf (_SC_CPU_VERSION);
-
-		    switch (cpu)
-			{
-			case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-			case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-			case CPU_PA_RISC2_0:
-		#if defined(_SC_KERNEL_BITS)
-			    switch (bits)
-				{
-				case 64: puts ("hppa2.0w"); break;
-				case 32: puts ("hppa2.0n"); break;
-				default: puts ("hppa2.0"); break;
-				} break;
-		#else  /* !defined(_SC_KERNEL_BITS) */
-			    puts ("hppa2.0"); break;
-		#endif
-			default: puts ("hppa1.0"); break;
-			}
-		    exit (0);
-		}
-EOF
-		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
-		    test -z "$HP_ARCH" && HP_ARCH=hppa
-		fi ;;
-	esac
-	if [ ${HP_ARCH} = "hppa2.0w" ]
-	then
-	    eval $set_cc_for_build
-
-	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
-	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
-	    # generating 64-bit code.  GNU and HP use different nomenclature:
-	    #
-	    # $ CC_FOR_BUILD=cc ./config.guess
-	    # => hppa2.0w-hp-hpux11.23
-	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
-	    # => hppa64-hp-hpux11.23
-
-	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-		grep -q __LP64__
-	    then
-		HP_ARCH="hppa2.0w"
-	    else
-		HP_ARCH="hppa64"
-	    fi
-	fi
-	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-	exit ;;
-    ia64:HP-UX:*:*)
-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-	echo ia64-hp-hpux${HPUX_REV}
-	exit ;;
-    3050*:HI-UX:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <unistd.h>
-	int
-	main ()
-	{
-	  long cpu = sysconf (_SC_CPU_VERSION);
-	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
-	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
-	     results, however.  */
-	  if (CPU_IS_PA_RISC (cpu))
-	    {
-	      switch (cpu)
-		{
-		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
-		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
-		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
-		  default: puts ("hppa-hitachi-hiuxwe2"); break;
-		}
-	    }
-	  else if (CPU_IS_HP_MC68K (cpu))
-	    puts ("m68k-hitachi-hiuxwe2");
-	  else puts ("unknown-hitachi-hiuxwe2");
-	  exit (0);
-	}
-EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
-		{ echo "$SYSTEM_NAME"; exit; }
-	echo unknown-hitachi-hiuxwe2
-	exit ;;
-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
-	echo hppa1.1-hp-bsd
-	exit ;;
-    9000/8??:4.3bsd:*:*)
-	echo hppa1.0-hp-bsd
-	exit ;;
-    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
-	echo hppa1.0-hp-mpeix
-	exit ;;
-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
-	echo hppa1.1-hp-osf
-	exit ;;
-    hp8??:OSF1:*:*)
-	echo hppa1.0-hp-osf
-	exit ;;
-    i*86:OSF1:*:*)
-	if [ -x /usr/sbin/sysversion ] ; then
-	    echo ${UNAME_MACHINE}-unknown-osf1mk
-	else
-	    echo ${UNAME_MACHINE}-unknown-osf1
-	fi
-	exit ;;
-    parisc*:Lites*:*:*)
-	echo hppa1.1-hp-lites
-	exit ;;
-    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
-	echo c1-convex-bsd
-	exit ;;
-    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
-	if getsysinfo -f scalar_acc
-	then echo c32-convex-bsd
-	else echo c2-convex-bsd
-	fi
-	exit ;;
-    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
-	echo c34-convex-bsd
-	exit ;;
-    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
-	echo c38-convex-bsd
-	exit ;;
-    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
-	echo c4-convex-bsd
-	exit ;;
-    CRAY*Y-MP:*:*:*)
-	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*[A-Z]90:*:*:*)
-	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
-	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
-	      -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*TS:*:*:*)
-	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*T3E:*:*:*)
-	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*SV1:*:*:*)
-	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    *:UNICOS/mp:*:*)
-	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit ;;
-    5000:UNIX_System_V:4.*:*)
-	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit ;;
-    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-	exit ;;
-    sparc*:BSD/OS:*:*)
-	echo sparc-unknown-bsdi${UNAME_RELEASE}
-	exit ;;
-    *:BSD/OS:*:*)
-	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-	exit ;;
-    *:FreeBSD:*:*)
-	UNAME_PROCESSOR=`/usr/bin/uname -p`
-	case ${UNAME_PROCESSOR} in
-	    amd64)
-		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-	    *)
-		echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-	esac
-	exit ;;
-    i*:CYGWIN*:*)
-	echo ${UNAME_MACHINE}-pc-cygwin
-	exit ;;
-    *:MINGW64*:*)
-	echo ${UNAME_MACHINE}-pc-mingw64
-	exit ;;
-    *:MINGW*:*)
-	echo ${UNAME_MACHINE}-pc-mingw32
-	exit ;;
-    *:MSYS*:*)
-	echo ${UNAME_MACHINE}-pc-msys
-	exit ;;
-    i*:windows32*:*)
-	# uname -m includes "-pc" on this system.
-	echo ${UNAME_MACHINE}-mingw32
-	exit ;;
-    i*:PW*:*)
-	echo ${UNAME_MACHINE}-pc-pw32
-	exit ;;
-    *:Interix*:*)
-	case ${UNAME_MACHINE} in
-	    x86)
-		echo i586-pc-interix${UNAME_RELEASE}
-		exit ;;
-	    authenticamd | genuineintel | EM64T)
-		echo x86_64-unknown-interix${UNAME_RELEASE}
-		exit ;;
-	    IA64)
-		echo ia64-unknown-interix${UNAME_RELEASE}
-		exit ;;
-	esac ;;
-    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
-	echo i${UNAME_MACHINE}-pc-mks
-	exit ;;
-    8664:Windows_NT:*)
-	echo x86_64-pc-mks
-	exit ;;
-    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-	# How do we know it's Interix rather than the generic POSIX subsystem?
-	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-	# UNAME_MACHINE based on the output of uname instead of i386?
-	echo i586-pc-interix
-	exit ;;
-    i*:UWIN*:*)
-	echo ${UNAME_MACHINE}-pc-uwin
-	exit ;;
-    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
-	echo x86_64-unknown-cygwin
-	exit ;;
-    p*:CYGWIN*:*)
-	echo powerpcle-unknown-cygwin
-	exit ;;
-    prep*:SunOS:5.*:*)
-	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    *:GNU:*:*)
-	# the GNU system
-	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-	exit ;;
-    *:GNU/*:*:*)
-	# other systems with GNU libc and userland
-	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
-	exit ;;
-    i*86:Minix:*:*)
-	echo ${UNAME_MACHINE}-pc-minix
-	exit ;;
-    aarch64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    aarch64_be:Linux:*:*)
-	UNAME_MACHINE=aarch64_be
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    alpha:Linux:*:*)
-	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-	  EV5)   UNAME_MACHINE=alphaev5 ;;
-	  EV56)  UNAME_MACHINE=alphaev56 ;;
-	  PCA56) UNAME_MACHINE=alphapca56 ;;
-	  PCA57) UNAME_MACHINE=alphapca56 ;;
-	  EV6)   UNAME_MACHINE=alphaev6 ;;
-	  EV67)  UNAME_MACHINE=alphaev67 ;;
-	  EV68*) UNAME_MACHINE=alphaev68 ;;
-	esac
-	objdump --private-headers /bin/sh | grep -q ld.so.1
-	if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    arc:Linux:*:* | arceb:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    arm*:Linux:*:*)
-	eval $set_cc_for_build
-	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
-	    | grep -q __ARM_EABI__
-	then
-	    echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	else
-	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
-		| grep -q __ARM_PCS_VFP
-	    then
-		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
-	    else
-		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
-	    fi
-	fi
-	exit ;;
-    avr32*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    cris:Linux:*:*)
-	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
-	exit ;;
-    crisv32:Linux:*:*)
-	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
-	exit ;;
-    frv:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    hexagon:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    i*86:Linux:*:*)
-	echo ${UNAME_MACHINE}-pc-linux-${LIBC}
-	exit ;;
-    ia64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    m32r*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    m68*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    mips:Linux:*:* | mips64:Linux:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#undef CPU
-	#undef ${UNAME_MACHINE}
-	#undef ${UNAME_MACHINE}el
-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=${UNAME_MACHINE}el
-	#else
-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=${UNAME_MACHINE}
-	#else
-	CPU=
-	#endif
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
-	;;
-    openrisc*:Linux:*:*)
-	echo or1k-unknown-linux-${LIBC}
-	exit ;;
-    or32:Linux:*:* | or1k*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    padre:Linux:*:*)
-	echo sparc-unknown-linux-${LIBC}
-	exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-unknown-linux-${LIBC}
-	exit ;;
-    parisc:Linux:*:* | hppa:Linux:*:*)
-	# Look for CPU level
-	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-	  PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
-	  PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
-	  *)    echo hppa-unknown-linux-${LIBC} ;;
-	esac
-	exit ;;
-    ppc64:Linux:*:*)
-	echo powerpc64-unknown-linux-${LIBC}
-	exit ;;
-    ppc:Linux:*:*)
-	echo powerpc-unknown-linux-${LIBC}
-	exit ;;
-    ppc64le:Linux:*:*)
-	echo powerpc64le-unknown-linux-${LIBC}
-	exit ;;
-    ppcle:Linux:*:*)
-	echo powerpcle-unknown-linux-${LIBC}
-	exit ;;
-    s390:Linux:*:* | s390x:Linux:*:*)
-	echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
-	exit ;;
-    sh64*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    sh*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    sparc:Linux:*:* | sparc64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    tile*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    vax:Linux:*:*)
-	echo ${UNAME_MACHINE}-dec-linux-${LIBC}
-	exit ;;
-    x86_64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    xtensa*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    i*86:DYNIX/ptx:4*:*)
-	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
-	# earlier versions are messed up and put the nodename in both
-	# sysname and nodename.
-	echo i386-sequent-sysv4
-	exit ;;
-    i*86:UNIX_SV:4.2MP:2.*)
-	# Unixware is an offshoot of SVR4, but it has its own version
-	# number series starting with 2...
-	# I am not positive that other SVR4 systems won't match this,
-	# I just have to hope.  -- rms.
-	# Use sysv4.2uw... so that sysv4* matches it.
-	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-	exit ;;
-    i*86:OS/2:*:*)
-	# If we were able to find `uname', then EMX Unix compatibility
-	# is probably installed.
-	echo ${UNAME_MACHINE}-pc-os2-emx
-	exit ;;
-    i*86:XTS-300:*:STOP)
-	echo ${UNAME_MACHINE}-unknown-stop
-	exit ;;
-    i*86:atheos:*:*)
-	echo ${UNAME_MACHINE}-unknown-atheos
-	exit ;;
-    i*86:syllable:*:*)
-	echo ${UNAME_MACHINE}-pc-syllable
-	exit ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
-	echo i386-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    i*86:*DOS:*:*)
-	echo ${UNAME_MACHINE}-pc-msdosdjgpp
-	exit ;;
-    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
-	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
-	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
-	else
-		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
-	fi
-	exit ;;
-    i*86:*:5:[678]*)
-	# UnixWare 7.x, OpenUNIX and OpenServer 6.
-	case `/bin/uname -X | grep "^Machine"` in
-	    *486*)	     UNAME_MACHINE=i486 ;;
-	    *Pentium)	     UNAME_MACHINE=i586 ;;
-	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
-	esac
-	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
-	exit ;;
-    i*86:*:3.2:*)
-	if test -f /usr/options/cb.name; then
-		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
-	elif /bin/uname -X 2>/dev/null >/dev/null ; then
-		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
-		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
-		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
-			&& UNAME_MACHINE=i586
-		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
-			&& UNAME_MACHINE=i686
-		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
-			&& UNAME_MACHINE=i686
-		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
-	else
-		echo ${UNAME_MACHINE}-pc-sysv32
-	fi
-	exit ;;
-    pc:*:*:*)
-	# Left here for compatibility:
-	# uname -m prints for DJGPP always 'pc', but it prints nothing about
-	# the processor, so we play safe by assuming i586.
-	# Note: whatever this is, it MUST be the same as what config.sub
-	# prints for the "djgpp" host, or else GDB configury will decide that
-	# this is a cross-build.
-	echo i586-pc-msdosdjgpp
-	exit ;;
-    Intel:Mach:3*:*)
-	echo i386-pc-mach3
-	exit ;;
-    paragon:*:*:*)
-	echo i860-intel-osf1
-	exit ;;
-    i860:*:4.*:*) # i860-SVR4
-	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
-	else # Add other i860-SVR4 vendors below as they are discovered.
-	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
-	fi
-	exit ;;
-    mini*:CTIX:SYS*5:*)
-	# "miniframe"
-	echo m68010-convergent-sysv
-	exit ;;
-    mc68k:UNIX:SYSTEM5:3.51m)
-	echo m68k-convergent-sysv
-	exit ;;
-    M680?0:D-NIX:5.3:*)
-	echo m68k-diab-dnix
-	exit ;;
-    M68*:*:R3V[5678]*:*)
-	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
-    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
-	OS_REL=''
-	test -r /etc/.relid \
-	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && { echo i486-ncr-sysv4; exit; } ;;
-    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
-	OS_REL='.3'
-	test -r /etc/.relid \
-	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	    && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
-	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-	echo m68k-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    mc68030:UNIX_System_V:4.*:*)
-	echo m68k-atari-sysv4
-	exit ;;
-    TSUNAMI:LynxOS:2.*:*)
-	echo sparc-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    rs6000:LynxOS:2.*:*)
-	echo rs6000-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
-	echo powerpc-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    SM[BE]S:UNIX_SV:*:*)
-	echo mips-dde-sysv${UNAME_RELEASE}
-	exit ;;
-    RM*:ReliantUNIX-*:*:*)
-	echo mips-sni-sysv4
-	exit ;;
-    RM*:SINIX-*:*:*)
-	echo mips-sni-sysv4
-	exit ;;
-    *:SINIX-*:*:*)
-	if uname -p 2>/dev/null >/dev/null ; then
-		UNAME_MACHINE=`(uname -p) 2>/dev/null`
-		echo ${UNAME_MACHINE}-sni-sysv4
-	else
-		echo ns32k-sni-sysv
-	fi
-	exit ;;
-    PENTIUM:*:4.0*:*)	# Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-			# says <Richard.M.Bartel@ccMail.Census.GOV>
-	echo i586-unisys-sysv4
-	exit ;;
-    *:UNIX_System_V:4*:FTX*)
-	# From Gerald Hewes <hewes@openmarket.com>.
-	# How about differentiating between stratus architectures? -djm
-	echo hppa1.1-stratus-sysv4
-	exit ;;
-    *:*:*:FTX*)
-	# From seanf@swdc.stratus.com.
-	echo i860-stratus-sysv4
-	exit ;;
-    i*86:VOS:*:*)
-	# From Paul.Green@stratus.com.
-	echo ${UNAME_MACHINE}-stratus-vos
-	exit ;;
-    *:VOS:*:*)
-	# From Paul.Green@stratus.com.
-	echo hppa1.1-stratus-vos
-	exit ;;
-    mc68*:A/UX:*:*)
-	echo m68k-apple-aux${UNAME_RELEASE}
-	exit ;;
-    news*:NEWS-OS:6*:*)
-	echo mips-sony-newsos6
-	exit ;;
-    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
-	if [ -d /usr/nec ]; then
-		echo mips-nec-sysv${UNAME_RELEASE}
-	else
-		echo mips-unknown-sysv${UNAME_RELEASE}
-	fi
-	exit ;;
-    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
-	echo powerpc-be-beos
-	exit ;;
-    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
-	echo powerpc-apple-beos
-	exit ;;
-    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
-	echo i586-pc-beos
-	exit ;;
-    BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
-	echo i586-pc-haiku
-	exit ;;
-    x86_64:Haiku:*:*)
-	echo x86_64-unknown-haiku
-	exit ;;
-    SX-4:SUPER-UX:*:*)
-	echo sx4-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-5:SUPER-UX:*:*)
-	echo sx5-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-6:SUPER-UX:*:*)
-	echo sx6-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-7:SUPER-UX:*:*)
-	echo sx7-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-8:SUPER-UX:*:*)
-	echo sx8-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-8R:SUPER-UX:*:*)
-	echo sx8r-nec-superux${UNAME_RELEASE}
-	exit ;;
-    Power*:Rhapsody:*:*)
-	echo powerpc-apple-rhapsody${UNAME_RELEASE}
-	exit ;;
-    *:Rhapsody:*:*)
-	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-	exit ;;
-    *:Darwin:*:*)
-	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-	eval $set_cc_for_build
-	if test "$UNAME_PROCESSOR" = unknown ; then
-	    UNAME_PROCESSOR=powerpc
-	fi
-	if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
-	    if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-		if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-		    (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-		    grep IS_64BIT_ARCH >/dev/null
-		then
-		    case $UNAME_PROCESSOR in
-			i386) UNAME_PROCESSOR=x86_64 ;;
-			powerpc) UNAME_PROCESSOR=powerpc64 ;;
-		    esac
-		fi
-	    fi
-	elif test "$UNAME_PROCESSOR" = i386 ; then
-	    # Avoid executing cc on OS X 10.9, as it ships with a stub
-	    # that puts up a graphical alert prompting to install
-	    # developer tools.  Any system running Mac OS X 10.7 or
-	    # later (Darwin 11 and later) is required to have a 64-bit
-	    # processor. This is not true of the ARM version of Darwin
-	    # that Apple uses in portable devices.
-	    UNAME_PROCESSOR=x86_64
-	fi
-	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-	exit ;;
-    *:procnto*:*:* | *:QNX:[0123456789]*:*)
-	UNAME_PROCESSOR=`uname -p`
-	if test "$UNAME_PROCESSOR" = "x86"; then
-		UNAME_PROCESSOR=i386
-		UNAME_MACHINE=pc
-	fi
-	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
-	exit ;;
-    *:QNX:*:4*)
-	echo i386-pc-qnx
-	exit ;;
-    NEO-?:NONSTOP_KERNEL:*:*)
-	echo neo-tandem-nsk${UNAME_RELEASE}
-	exit ;;
-    NSE-*:NONSTOP_KERNEL:*:*)
-	echo nse-tandem-nsk${UNAME_RELEASE}
-	exit ;;
-    NSR-?:NONSTOP_KERNEL:*:*)
-	echo nsr-tandem-nsk${UNAME_RELEASE}
-	exit ;;
-    *:NonStop-UX:*:*)
-	echo mips-compaq-nonstopux
-	exit ;;
-    BS2000:POSIX*:*:*)
-	echo bs2000-siemens-sysv
-	exit ;;
-    DS/*:UNIX_System_V:*:*)
-	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
-	exit ;;
-    *:Plan9:*:*)
-	# "uname -m" is not consistent, so use $cputype instead. 386
-	# is converted to i386 for consistency with other x86
-	# operating systems.
-	if test "$cputype" = "386"; then
-	    UNAME_MACHINE=i386
-	else
-	    UNAME_MACHINE="$cputype"
-	fi
-	echo ${UNAME_MACHINE}-unknown-plan9
-	exit ;;
-    *:TOPS-10:*:*)
-	echo pdp10-unknown-tops10
-	exit ;;
-    *:TENEX:*:*)
-	echo pdp10-unknown-tenex
-	exit ;;
-    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
-	echo pdp10-dec-tops20
-	exit ;;
-    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
-	echo pdp10-xkl-tops20
-	exit ;;
-    *:TOPS-20:*:*)
-	echo pdp10-unknown-tops20
-	exit ;;
-    *:ITS:*:*)
-	echo pdp10-unknown-its
-	exit ;;
-    SEI:*:*:SEIUX)
-	echo mips-sei-seiux${UNAME_RELEASE}
-	exit ;;
-    *:DragonFly:*:*)
-	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-	exit ;;
-    *:*VMS:*:*)
-	UNAME_MACHINE=`(uname -p) 2>/dev/null`
-	case "${UNAME_MACHINE}" in
-	    A*) echo alpha-dec-vms ; exit ;;
-	    I*) echo ia64-dec-vms ; exit ;;
-	    V*) echo vax-dec-vms ; exit ;;
-	esac ;;
-    *:XENIX:*:SysV)
-	echo i386-pc-xenix
-	exit ;;
-    i*86:skyos:*:*)
-	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
-	exit ;;
-    i*86:rdos:*:*)
-	echo ${UNAME_MACHINE}-pc-rdos
-	exit ;;
-    i*86:AROS:*:*)
-	echo ${UNAME_MACHINE}-pc-aros
-	exit ;;
-    x86_64:VMkernel:*:*)
-	echo ${UNAME_MACHINE}-unknown-esx
-	exit ;;
-esac
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-and
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo               = `(hostinfo) 2>/dev/null`
-/bin/universe          = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch              = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM  = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/standalone/android/tmp/network-2.4.1.2/config.sub b/standalone/android/tmp/network-2.4.1.2/config.sub
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/config.sub
+++ /dev/null
@@ -1,1799 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-#   Copyright 1992-2014 Free Software Foundation, Inc.
-
-timestamp='2014-09-11'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program.  This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-
-
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support.  The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright 1992-2014 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )	# Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help"
-       exit 1 ;;
-
-    *local*)
-       # First pass through any local machine types.
-       echo $1
-       exit ;;
-
-    * )
-       break ;;
-  esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
-    exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
-    exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
-  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-  knetbsd*-gnu* | netbsd*-gnu* | \
-  kopensolaris*-gnu* | \
-  storm-chaos* | os2-emx* | rtmk-nova*)
-    os=-$maybe_os
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-    ;;
-  android-linux)
-    os=-linux-android
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
-    ;;
-  *)
-    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
-    if [ $basic_machine != $1 ]
-    then os=`echo $1 | sed 's/.*-/-/'`
-    else os=; fi
-    ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work.  We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
-	-sun*os*)
-		# Prevent following clause from handling this invalid input.
-		;;
-	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple | -axis | -knuth | -cray | -microblaze*)
-		os=
-		basic_machine=$1
-		;;
-	-bluegene*)
-		os=-cnk
-		;;
-	-sim | -cisco | -oki | -wec | -winbond)
-		os=
-		basic_machine=$1
-		;;
-	-scout)
-		;;
-	-wrs)
-		os=-vxworks
-		basic_machine=$1
-		;;
-	-chorusos*)
-		os=-chorusos
-		basic_machine=$1
-		;;
-	-chorusrdb)
-		os=-chorusrdb
-		basic_machine=$1
-		;;
-	-hiux*)
-		os=-hiuxwe2
-		;;
-	-sco6)
-		os=-sco5v6
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco5)
-		os=-sco3.2v5
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco4)
-		os=-sco3.2v4
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco3.2.[4-9]*)
-		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco3.2v[4-9]*)
-		# Don't forget version if it is 3.2v4 or newer.
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco5v6*)
-		# Don't forget version if it is 3.2v4 or newer.
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco*)
-		os=-sco3.2v2
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-udk*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-isc)
-		os=-isc2.2
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-clix*)
-		basic_machine=clipper-intergraph
-		;;
-	-isc*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-lynx*178)
-		os=-lynxos178
-		;;
-	-lynx*5)
-		os=-lynxos5
-		;;
-	-lynx*)
-		os=-lynxos
-		;;
-	-ptx*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
-		;;
-	-windowsnt*)
-		os=`echo $os | sed -e 's/windowsnt/winnt/'`
-		;;
-	-psos*)
-		os=-psos
-		;;
-	-mint | -mint[0-9]*)
-		basic_machine=m68k-atari
-		os=-mint
-		;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
-	# Recognize the basic CPU types without company name.
-	# Some are omitted here because they have special meanings below.
-	1750a | 580 \
-	| a29k \
-	| aarch64 | aarch64_be \
-	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
-	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
-	| am33_2.0 \
-	| arc | arceb \
-	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
-	| avr | avr32 \
-	| be32 | be64 \
-	| bfin \
-	| c4x | c8051 | clipper \
-	| d10v | d30v | dlx | dsp16xx \
-	| epiphany \
-	| fido | fr30 | frv \
-	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-	| hexagon \
-	| i370 | i860 | i960 | ia64 \
-	| ip2k | iq2000 \
-	| k1om \
-	| le32 | le64 \
-	| lm32 \
-	| m32c | m32r | m32rle | m68000 | m68k | m88k \
-	| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
-	| mips | mipsbe | mipseb | mipsel | mipsle \
-	| mips16 \
-	| mips64 | mips64el \
-	| mips64octeon | mips64octeonel \
-	| mips64orion | mips64orionel \
-	| mips64r5900 | mips64r5900el \
-	| mips64vr | mips64vrel \
-	| mips64vr4100 | mips64vr4100el \
-	| mips64vr4300 | mips64vr4300el \
-	| mips64vr5000 | mips64vr5000el \
-	| mips64vr5900 | mips64vr5900el \
-	| mipsisa32 | mipsisa32el \
-	| mipsisa32r2 | mipsisa32r2el \
-	| mipsisa32r6 | mipsisa32r6el \
-	| mipsisa64 | mipsisa64el \
-	| mipsisa64r2 | mipsisa64r2el \
-	| mipsisa64r6 | mipsisa64r6el \
-	| mipsisa64sb1 | mipsisa64sb1el \
-	| mipsisa64sr71k | mipsisa64sr71kel \
-	| mipsr5900 | mipsr5900el \
-	| mipstx39 | mipstx39el \
-	| mn10200 | mn10300 \
-	| moxie \
-	| mt \
-	| msp430 \
-	| nds32 | nds32le | nds32be \
-	| nios | nios2 | nios2eb | nios2el \
-	| ns16k | ns32k \
-	| open8 | or1k | or1knd | or32 \
-	| pdp10 | pdp11 | pj | pjl \
-	| powerpc | powerpc64 | powerpc64le | powerpcle \
-	| pyramid \
-	| riscv32 | riscv64 \
-	| rl78 | rx \
-	| score \
-	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
-	| sh64 | sh64le \
-	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
-	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-	| spu \
-	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
-	| ubicom32 \
-	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
-	| we32k \
-	| x86 | xc16x | xstormy16 | xtensa \
-	| z8k | z80)
-		basic_machine=$basic_machine-unknown
-		;;
-	c54x)
-		basic_machine=tic54x-unknown
-		;;
-	c55x)
-		basic_machine=tic55x-unknown
-		;;
-	c6x)
-		basic_machine=tic6x-unknown
-		;;
-	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
-		basic_machine=$basic_machine-unknown
-		os=-none
-		;;
-	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
-		;;
-	ms1)
-		basic_machine=mt-unknown
-		;;
-
-	strongarm | thumb | xscale)
-		basic_machine=arm-unknown
-		;;
-	xgate)
-		basic_machine=$basic_machine-unknown
-		os=-none
-		;;
-	xscaleeb)
-		basic_machine=armeb-unknown
-		;;
-
-	xscaleel)
-		basic_machine=armel-unknown
-		;;
-
-	# We use `pc' rather than `unknown'
-	# because (1) that's what they normally are, and
-	# (2) the word "unknown" tends to confuse beginning users.
-	i*86 | x86_64)
-	  basic_machine=$basic_machine-pc
-	  ;;
-	# Object if more than one company name word.
-	*-*-*)
-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-		exit 1
-		;;
-	# Recognize the basic CPU types with company name.
-	580-* \
-	| a29k-* \
-	| aarch64-* | aarch64_be-* \
-	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
-	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
-	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-	| avr-* | avr32-* \
-	| be32-* | be64-* \
-	| bfin-* | bs2000-* \
-	| c[123]* | c30-* | [cjt]90-* | c4x-* \
-	| c8051-* | clipper-* | craynv-* | cydra-* \
-	| d10v-* | d30v-* | dlx-* \
-	| elxsi-* \
-	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
-	| h8300-* | h8500-* \
-	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-	| hexagon-* \
-	| i*86-* | i860-* | i960-* | ia64-* \
-	| ip2k-* | iq2000-* \
-	| k1om-* \
-	| le32-* | le64-* \
-	| lm32-* \
-	| m32c-* | m32r-* | m32rle-* \
-	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
-	| microblaze-* | microblazeel-* \
-	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-	| mips16-* \
-	| mips64-* | mips64el-* \
-	| mips64octeon-* | mips64octeonel-* \
-	| mips64orion-* | mips64orionel-* \
-	| mips64r5900-* | mips64r5900el-* \
-	| mips64vr-* | mips64vrel-* \
-	| mips64vr4100-* | mips64vr4100el-* \
-	| mips64vr4300-* | mips64vr4300el-* \
-	| mips64vr5000-* | mips64vr5000el-* \
-	| mips64vr5900-* | mips64vr5900el-* \
-	| mipsisa32-* | mipsisa32el-* \
-	| mipsisa32r2-* | mipsisa32r2el-* \
-	| mipsisa32r6-* | mipsisa32r6el-* \
-	| mipsisa64-* | mipsisa64el-* \
-	| mipsisa64r2-* | mipsisa64r2el-* \
-	| mipsisa64r6-* | mipsisa64r6el-* \
-	| mipsisa64sb1-* | mipsisa64sb1el-* \
-	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
-	| mipsr5900-* | mipsr5900el-* \
-	| mipstx39-* | mipstx39el-* \
-	| mmix-* \
-	| mt-* \
-	| msp430-* \
-	| nds32-* | nds32le-* | nds32be-* \
-	| nios-* | nios2-* | nios2eb-* | nios2el-* \
-	| none-* | np1-* | ns16k-* | ns32k-* \
-	| open8-* \
-	| or1k*-* \
-	| orion-* \
-	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
-	| pyramid-* \
-	| rl78-* | romp-* | rs6000-* | rx-* \
-	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
-	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
-	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
-	| tahoe-* \
-	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-	| tile*-* \
-	| tron-* \
-	| ubicom32-* \
-	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
-	| vax-* \
-	| we32k-* \
-	| x86-* | x86_64-* | xc16x-* | xps100-* \
-	| xstormy16-* | xtensa*-* \
-	| ymp-* \
-	| z8k-* | z80-*)
-		;;
-	# Recognize the basic CPU types without company name, with glob match.
-	xtensa*)
-		basic_machine=$basic_machine-unknown
-		;;
-	# Recognize the various machine names and aliases which stand
-	# for a CPU type and a company and sometimes even an OS.
-	386bsd)
-		basic_machine=i386-unknown
-		os=-bsd
-		;;
-	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
-		basic_machine=m68000-att
-		;;
-	3b*)
-		basic_machine=we32k-att
-		;;
-	a29khif)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	abacus)
-		basic_machine=abacus-unknown
-		;;
-	adobe68k)
-		basic_machine=m68010-adobe
-		os=-scout
-		;;
-	alliant | fx80)
-		basic_machine=fx80-alliant
-		;;
-	altos | altos3068)
-		basic_machine=m68k-altos
-		;;
-	am29k)
-		basic_machine=a29k-none
-		os=-bsd
-		;;
-	amd64)
-		basic_machine=x86_64-pc
-		;;
-	amd64-*)
-		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	amdahl)
-		basic_machine=580-amdahl
-		os=-sysv
-		;;
-	amiga | amiga-*)
-		basic_machine=m68k-unknown
-		;;
-	amigaos | amigados)
-		basic_machine=m68k-unknown
-		os=-amigaos
-		;;
-	amigaunix | amix)
-		basic_machine=m68k-unknown
-		os=-sysv4
-		;;
-	apollo68)
-		basic_machine=m68k-apollo
-		os=-sysv
-		;;
-	apollo68bsd)
-		basic_machine=m68k-apollo
-		os=-bsd
-		;;
-	aros)
-		basic_machine=i386-pc
-		os=-aros
-		;;
-	aux)
-		basic_machine=m68k-apple
-		os=-aux
-		;;
-	balance)
-		basic_machine=ns32k-sequent
-		os=-dynix
-		;;
-	blackfin)
-		basic_machine=bfin-unknown
-		os=-linux
-		;;
-	blackfin-*)
-		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
-		os=-linux
-		;;
-	bluegene*)
-		basic_machine=powerpc-ibm
-		os=-cnk
-		;;
-	c54x-*)
-		basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	c55x-*)
-		basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	c6x-*)
-		basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	c90)
-		basic_machine=c90-cray
-		os=-unicos
-		;;
-	cegcc)
-		basic_machine=arm-unknown
-		os=-cegcc
-		;;
-	convex-c1)
-		basic_machine=c1-convex
-		os=-bsd
-		;;
-	convex-c2)
-		basic_machine=c2-convex
-		os=-bsd
-		;;
-	convex-c32)
-		basic_machine=c32-convex
-		os=-bsd
-		;;
-	convex-c34)
-		basic_machine=c34-convex
-		os=-bsd
-		;;
-	convex-c38)
-		basic_machine=c38-convex
-		os=-bsd
-		;;
-	cray | j90)
-		basic_machine=j90-cray
-		os=-unicos
-		;;
-	craynv)
-		basic_machine=craynv-cray
-		os=-unicosmp
-		;;
-	cr16 | cr16-*)
-		basic_machine=cr16-unknown
-		os=-elf
-		;;
-	crds | unos)
-		basic_machine=m68k-crds
-		;;
-	crisv32 | crisv32-* | etraxfs*)
-		basic_machine=crisv32-axis
-		;;
-	cris | cris-* | etrax*)
-		basic_machine=cris-axis
-		;;
-	crx)
-		basic_machine=crx-unknown
-		os=-elf
-		;;
-	da30 | da30-*)
-		basic_machine=m68k-da30
-		;;
-	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
-		basic_machine=mips-dec
-		;;
-	decsystem10* | dec10*)
-		basic_machine=pdp10-dec
-		os=-tops10
-		;;
-	decsystem20* | dec20*)
-		basic_machine=pdp10-dec
-		os=-tops20
-		;;
-	delta | 3300 | motorola-3300 | motorola-delta \
-	      | 3300-motorola | delta-motorola)
-		basic_machine=m68k-motorola
-		;;
-	delta88)
-		basic_machine=m88k-motorola
-		os=-sysv3
-		;;
-	dicos)
-		basic_machine=i686-pc
-		os=-dicos
-		;;
-	djgpp)
-		basic_machine=i586-pc
-		os=-msdosdjgpp
-		;;
-	dpx20 | dpx20-*)
-		basic_machine=rs6000-bull
-		os=-bosx
-		;;
-	dpx2* | dpx2*-bull)
-		basic_machine=m68k-bull
-		os=-sysv3
-		;;
-	ebmon29k)
-		basic_machine=a29k-amd
-		os=-ebmon
-		;;
-	elxsi)
-		basic_machine=elxsi-elxsi
-		os=-bsd
-		;;
-	encore | umax | mmax)
-		basic_machine=ns32k-encore
-		;;
-	es1800 | OSE68k | ose68k | ose | OSE)
-		basic_machine=m68k-ericsson
-		os=-ose
-		;;
-	fx2800)
-		basic_machine=i860-alliant
-		;;
-	genix)
-		basic_machine=ns32k-ns
-		;;
-	gmicro)
-		basic_machine=tron-gmicro
-		os=-sysv
-		;;
-	go32)
-		basic_machine=i386-pc
-		os=-go32
-		;;
-	h3050r* | hiux*)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	h8300hms)
-		basic_machine=h8300-hitachi
-		os=-hms
-		;;
-	h8300xray)
-		basic_machine=h8300-hitachi
-		os=-xray
-		;;
-	h8500hms)
-		basic_machine=h8500-hitachi
-		os=-hms
-		;;
-	harris)
-		basic_machine=m88k-harris
-		os=-sysv3
-		;;
-	hp300-*)
-		basic_machine=m68k-hp
-		;;
-	hp300bsd)
-		basic_machine=m68k-hp
-		os=-bsd
-		;;
-	hp300hpux)
-		basic_machine=m68k-hp
-		os=-hpux
-		;;
-	hp3k9[0-9][0-9] | hp9[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k2[0-9][0-9] | hp9k31[0-9])
-		basic_machine=m68000-hp
-		;;
-	hp9k3[2-9][0-9])
-		basic_machine=m68k-hp
-		;;
-	hp9k6[0-9][0-9] | hp6[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k7[0-79][0-9] | hp7[0-79][0-9])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k78[0-9] | hp78[0-9])
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][13679] | hp8[0-9][13679])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][0-9] | hp8[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hppa-next)
-		os=-nextstep3
-		;;
-	hppaosf)
-		basic_machine=hppa1.1-hp
-		os=-osf
-		;;
-	hppro)
-		basic_machine=hppa1.1-hp
-		os=-proelf
-		;;
-	i370-ibm* | ibm*)
-		basic_machine=i370-ibm
-		;;
-	i*86v32)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv32
-		;;
-	i*86v4*)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv4
-		;;
-	i*86v)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv
-		;;
-	i*86sol2)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-solaris2
-		;;
-	i386mach)
-		basic_machine=i386-mach
-		os=-mach
-		;;
-	i386-vsta | vsta)
-		basic_machine=i386-unknown
-		os=-vsta
-		;;
-	iris | iris4d)
-		basic_machine=mips-sgi
-		case $os in
-		    -irix*)
-			;;
-		    *)
-			os=-irix4
-			;;
-		esac
-		;;
-	isi68 | isi)
-		basic_machine=m68k-isi
-		os=-sysv
-		;;
-	m68knommu)
-		basic_machine=m68k-unknown
-		os=-linux
-		;;
-	m68knommu-*)
-		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
-		os=-linux
-		;;
-	m88k-omron*)
-		basic_machine=m88k-omron
-		;;
-	magnum | m3230)
-		basic_machine=mips-mips
-		os=-sysv
-		;;
-	merlin)
-		basic_machine=ns32k-utek
-		os=-sysv
-		;;
-	microblaze*)
-		basic_machine=microblaze-xilinx
-		;;
-	mingw64)
-		basic_machine=x86_64-pc
-		os=-mingw64
-		;;
-	mingw32)
-		basic_machine=i686-pc
-		os=-mingw32
-		;;
-	mingw32ce)
-		basic_machine=arm-unknown
-		os=-mingw32ce
-		;;
-	miniframe)
-		basic_machine=m68000-convergent
-		;;
-	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
-		basic_machine=m68k-atari
-		os=-mint
-		;;
-	mips3*-*)
-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
-		;;
-	mips3*)
-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
-		;;
-	monitor)
-		basic_machine=m68k-rom68k
-		os=-coff
-		;;
-	morphos)
-		basic_machine=powerpc-unknown
-		os=-morphos
-		;;
-	moxiebox)
-		basic_machine=moxie-unknown
-		os=-moxiebox
-		;;
-	msdos)
-		basic_machine=i386-pc
-		os=-msdos
-		;;
-	ms1-*)
-		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
-		;;
-	msys)
-		basic_machine=i686-pc
-		os=-msys
-		;;
-	mvs)
-		basic_machine=i370-ibm
-		os=-mvs
-		;;
-	nacl)
-		basic_machine=le32-unknown
-		os=-nacl
-		;;
-	ncr3000)
-		basic_machine=i486-ncr
-		os=-sysv4
-		;;
-	netbsd386)
-		basic_machine=i386-unknown
-		os=-netbsd
-		;;
-	netwinder)
-		basic_machine=armv4l-rebel
-		os=-linux
-		;;
-	news | news700 | news800 | news900)
-		basic_machine=m68k-sony
-		os=-newsos
-		;;
-	news1000)
-		basic_machine=m68030-sony
-		os=-newsos
-		;;
-	news-3600 | risc-news)
-		basic_machine=mips-sony
-		os=-newsos
-		;;
-	necv70)
-		basic_machine=v70-nec
-		os=-sysv
-		;;
-	next | m*-next )
-		basic_machine=m68k-next
-		case $os in
-		    -nextstep* )
-			;;
-		    -ns2*)
-		      os=-nextstep2
-			;;
-		    *)
-		      os=-nextstep3
-			;;
-		esac
-		;;
-	nh3000)
-		basic_machine=m68k-harris
-		os=-cxux
-		;;
-	nh[45]000)
-		basic_machine=m88k-harris
-		os=-cxux
-		;;
-	nindy960)
-		basic_machine=i960-intel
-		os=-nindy
-		;;
-	mon960)
-		basic_machine=i960-intel
-		os=-mon960
-		;;
-	nonstopux)
-		basic_machine=mips-compaq
-		os=-nonstopux
-		;;
-	np1)
-		basic_machine=np1-gould
-		;;
-	neo-tandem)
-		basic_machine=neo-tandem
-		;;
-	nse-tandem)
-		basic_machine=nse-tandem
-		;;
-	nsr-tandem)
-		basic_machine=nsr-tandem
-		;;
-	op50n-* | op60c-*)
-		basic_machine=hppa1.1-oki
-		os=-proelf
-		;;
-	openrisc | openrisc-*)
-		basic_machine=or32-unknown
-		;;
-	os400)
-		basic_machine=powerpc-ibm
-		os=-os400
-		;;
-	OSE68000 | ose68000)
-		basic_machine=m68000-ericsson
-		os=-ose
-		;;
-	os68k)
-		basic_machine=m68k-none
-		os=-os68k
-		;;
-	pa-hitachi)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	paragon)
-		basic_machine=i860-intel
-		os=-osf
-		;;
-	parisc)
-		basic_machine=hppa-unknown
-		os=-linux
-		;;
-	parisc-*)
-		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
-		os=-linux
-		;;
-	pbd)
-		basic_machine=sparc-tti
-		;;
-	pbb)
-		basic_machine=m68k-tti
-		;;
-	pc532 | pc532-*)
-		basic_machine=ns32k-pc532
-		;;
-	pc98)
-		basic_machine=i386-pc
-		;;
-	pc98-*)
-		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentium | p5 | k5 | k6 | nexgen | viac3)
-		basic_machine=i586-pc
-		;;
-	pentiumpro | p6 | 6x86 | athlon | athlon_*)
-		basic_machine=i686-pc
-		;;
-	pentiumii | pentium2 | pentiumiii | pentium3)
-		basic_machine=i686-pc
-		;;
-	pentium4)
-		basic_machine=i786-pc
-		;;
-	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
-		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentiumpro-* | p6-* | 6x86-* | athlon-*)
-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentium4-*)
-		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pn)
-		basic_machine=pn-gould
-		;;
-	power)	basic_machine=power-ibm
-		;;
-	ppc | ppcbe)	basic_machine=powerpc-unknown
-		;;
-	ppc-* | ppcbe-*)
-		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppcle | powerpclittle | ppc-le | powerpc-little)
-		basic_machine=powerpcle-unknown
-		;;
-	ppcle-* | powerpclittle-*)
-		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppc64)	basic_machine=powerpc64-unknown
-		;;
-	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
-		basic_machine=powerpc64le-unknown
-		;;
-	ppc64le-* | powerpc64little-*)
-		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ps2)
-		basic_machine=i386-ibm
-		;;
-	pw32)
-		basic_machine=i586-unknown
-		os=-pw32
-		;;
-	rdos | rdos64)
-		basic_machine=x86_64-pc
-		os=-rdos
-		;;
-	rdos32)
-		basic_machine=i386-pc
-		os=-rdos
-		;;
-	rom68k)
-		basic_machine=m68k-rom68k
-		os=-coff
-		;;
-	rm[46]00)
-		basic_machine=mips-siemens
-		;;
-	rtpc | rtpc-*)
-		basic_machine=romp-ibm
-		;;
-	s390 | s390-*)
-		basic_machine=s390-ibm
-		;;
-	s390x | s390x-*)
-		basic_machine=s390x-ibm
-		;;
-	sa29200)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	sb1)
-		basic_machine=mipsisa64sb1-unknown
-		;;
-	sb1el)
-		basic_machine=mipsisa64sb1el-unknown
-		;;
-	sde)
-		basic_machine=mipsisa32-sde
-		os=-elf
-		;;
-	sei)
-		basic_machine=mips-sei
-		os=-seiux
-		;;
-	sequent)
-		basic_machine=i386-sequent
-		;;
-	sh)
-		basic_machine=sh-hitachi
-		os=-hms
-		;;
-	sh5el)
-		basic_machine=sh5le-unknown
-		;;
-	sh64)
-		basic_machine=sh64-unknown
-		;;
-	sparclite-wrs | simso-wrs)
-		basic_machine=sparclite-wrs
-		os=-vxworks
-		;;
-	sps7)
-		basic_machine=m68k-bull
-		os=-sysv2
-		;;
-	spur)
-		basic_machine=spur-unknown
-		;;
-	st2000)
-		basic_machine=m68k-tandem
-		;;
-	stratus)
-		basic_machine=i860-stratus
-		os=-sysv4
-		;;
-	strongarm-* | thumb-*)
-		basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	sun2)
-		basic_machine=m68000-sun
-		;;
-	sun2os3)
-		basic_machine=m68000-sun
-		os=-sunos3
-		;;
-	sun2os4)
-		basic_machine=m68000-sun
-		os=-sunos4
-		;;
-	sun3os3)
-		basic_machine=m68k-sun
-		os=-sunos3
-		;;
-	sun3os4)
-		basic_machine=m68k-sun
-		os=-sunos4
-		;;
-	sun4os3)
-		basic_machine=sparc-sun
-		os=-sunos3
-		;;
-	sun4os4)
-		basic_machine=sparc-sun
-		os=-sunos4
-		;;
-	sun4sol2)
-		basic_machine=sparc-sun
-		os=-solaris2
-		;;
-	sun3 | sun3-*)
-		basic_machine=m68k-sun
-		;;
-	sun4)
-		basic_machine=sparc-sun
-		;;
-	sun386 | sun386i | roadrunner)
-		basic_machine=i386-sun
-		;;
-	sv1)
-		basic_machine=sv1-cray
-		os=-unicos
-		;;
-	symmetry)
-		basic_machine=i386-sequent
-		os=-dynix
-		;;
-	t3e)
-		basic_machine=alphaev5-cray
-		os=-unicos
-		;;
-	t90)
-		basic_machine=t90-cray
-		os=-unicos
-		;;
-	tile*)
-		basic_machine=$basic_machine-unknown
-		os=-linux-gnu
-		;;
-	tx39)
-		basic_machine=mipstx39-unknown
-		;;
-	tx39el)
-		basic_machine=mipstx39el-unknown
-		;;
-	toad1)
-		basic_machine=pdp10-xkl
-		os=-tops20
-		;;
-	tower | tower-32)
-		basic_machine=m68k-ncr
-		;;
-	tpf)
-		basic_machine=s390x-ibm
-		os=-tpf
-		;;
-	udi29k)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	ultra3)
-		basic_machine=a29k-nyu
-		os=-sym1
-		;;
-	v810 | necv810)
-		basic_machine=v810-nec
-		os=-none
-		;;
-	vaxv)
-		basic_machine=vax-dec
-		os=-sysv
-		;;
-	vms)
-		basic_machine=vax-dec
-		os=-vms
-		;;
-	vpp*|vx|vx-*)
-		basic_machine=f301-fujitsu
-		;;
-	vxworks960)
-		basic_machine=i960-wrs
-		os=-vxworks
-		;;
-	vxworks68)
-		basic_machine=m68k-wrs
-		os=-vxworks
-		;;
-	vxworks29k)
-		basic_machine=a29k-wrs
-		os=-vxworks
-		;;
-	w65*)
-		basic_machine=w65-wdc
-		os=-none
-		;;
-	w89k-*)
-		basic_machine=hppa1.1-winbond
-		os=-proelf
-		;;
-	xbox)
-		basic_machine=i686-pc
-		os=-mingw32
-		;;
-	xps | xps100)
-		basic_machine=xps100-honeywell
-		;;
-	xscale-* | xscalee[bl]-*)
-		basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
-		;;
-	ymp)
-		basic_machine=ymp-cray
-		os=-unicos
-		;;
-	z8k-*-coff)
-		basic_machine=z8k-unknown
-		os=-sim
-		;;
-	z80-*-coff)
-		basic_machine=z80-unknown
-		os=-sim
-		;;
-	none)
-		basic_machine=none-none
-		os=-none
-		;;
-
-# Here we handle the default manufacturer of certain CPU types.  It is in
-# some cases the only manufacturer, in others, it is the most popular.
-	w89k)
-		basic_machine=hppa1.1-winbond
-		;;
-	op50n)
-		basic_machine=hppa1.1-oki
-		;;
-	op60c)
-		basic_machine=hppa1.1-oki
-		;;
-	romp)
-		basic_machine=romp-ibm
-		;;
-	mmix)
-		basic_machine=mmix-knuth
-		;;
-	rs6000)
-		basic_machine=rs6000-ibm
-		;;
-	vax)
-		basic_machine=vax-dec
-		;;
-	pdp10)
-		# there are many clones, so DEC is not a safe bet
-		basic_machine=pdp10-unknown
-		;;
-	pdp11)
-		basic_machine=pdp11-dec
-		;;
-	we32k)
-		basic_machine=we32k-att
-		;;
-	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
-		basic_machine=sh-unknown
-		;;
-	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
-		basic_machine=sparc-sun
-		;;
-	cydra)
-		basic_machine=cydra-cydrome
-		;;
-	orion)
-		basic_machine=orion-highlevel
-		;;
-	orion105)
-		basic_machine=clipper-highlevel
-		;;
-	mac | mpw | mac-mpw)
-		basic_machine=m68k-apple
-		;;
-	pmac | pmac-mpw)
-		basic_machine=powerpc-apple
-		;;
-	*-unknown)
-		# Make sure to match an already-canonicalized machine name.
-		;;
-	*)
-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-		exit 1
-		;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
-	*-digital*)
-		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
-		;;
-	*-commodore*)
-		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
-		;;
-	*)
-		;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
-	# First match some system type aliases
-	# that might get confused with valid system types.
-	# -solaris* is a basic system type, with this one exception.
-	-auroraux)
-		os=-auroraux
-		;;
-	-solaris1 | -solaris1.*)
-		os=`echo $os | sed -e 's|solaris1|sunos4|'`
-		;;
-	-solaris)
-		os=-solaris2
-		;;
-	-svr4*)
-		os=-sysv4
-		;;
-	-unixware*)
-		os=-sysv4.2uw
-		;;
-	-gnu/linux*)
-		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
-		;;
-	# First accept the basic system types.
-	# The portable systems comes first.
-	# Each alternative MUST END IN A *, to match a version number.
-	# -sysv* is not here because it comes later, after sysvr4.
-	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
-	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-	      | -sym* | -kopensolaris* | -plan9* \
-	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* | -aros* \
-	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-	      | -bitrig* | -openbsd* | -solidbsd* \
-	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
-	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-	      | -chorusos* | -chorusrdb* | -cegcc* \
-	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
-	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
-	      | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
-	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
-	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
-	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
-	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
-	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
-	# Remember, each alternative MUST END IN *, to match a version number.
-		;;
-	-qnx*)
-		case $basic_machine in
-		    x86-* | i*86-*)
-			;;
-		    *)
-			os=-nto$os
-			;;
-		esac
-		;;
-	-nto-qnx*)
-		;;
-	-nto*)
-		os=`echo $os | sed -e 's|nto|nto-qnx|'`
-		;;
-	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
-	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
-		;;
-	-mac*)
-		os=`echo $os | sed -e 's|mac|macos|'`
-		;;
-	-linux-dietlibc)
-		os=-linux-dietlibc
-		;;
-	-linux*)
-		os=`echo $os | sed -e 's|linux|linux-gnu|'`
-		;;
-	-sunos5*)
-		os=`echo $os | sed -e 's|sunos5|solaris2|'`
-		;;
-	-sunos6*)
-		os=`echo $os | sed -e 's|sunos6|solaris3|'`
-		;;
-	-opened*)
-		os=-openedition
-		;;
-	-os400*)
-		os=-os400
-		;;
-	-wince*)
-		os=-wince
-		;;
-	-osfrose*)
-		os=-osfrose
-		;;
-	-osf*)
-		os=-osf
-		;;
-	-utek*)
-		os=-bsd
-		;;
-	-dynix*)
-		os=-bsd
-		;;
-	-acis*)
-		os=-aos
-		;;
-	-atheos*)
-		os=-atheos
-		;;
-	-syllable*)
-		os=-syllable
-		;;
-	-386bsd)
-		os=-bsd
-		;;
-	-ctix* | -uts*)
-		os=-sysv
-		;;
-	-nova*)
-		os=-rtmk-nova
-		;;
-	-ns2 )
-		os=-nextstep2
-		;;
-	-nsk*)
-		os=-nsk
-		;;
-	# Preserve the version number of sinix5.
-	-sinix5.*)
-		os=`echo $os | sed -e 's|sinix|sysv|'`
-		;;
-	-sinix*)
-		os=-sysv4
-		;;
-	-tpf*)
-		os=-tpf
-		;;
-	-triton*)
-		os=-sysv3
-		;;
-	-oss*)
-		os=-sysv3
-		;;
-	-svr4)
-		os=-sysv4
-		;;
-	-svr3)
-		os=-sysv3
-		;;
-	-sysvr4)
-		os=-sysv4
-		;;
-	# This must come after -sysvr4.
-	-sysv*)
-		;;
-	-ose*)
-		os=-ose
-		;;
-	-es1800*)
-		os=-ose
-		;;
-	-xenix)
-		os=-xenix
-		;;
-	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-		os=-mint
-		;;
-	-aros*)
-		os=-aros
-		;;
-	-zvmoe)
-		os=-zvmoe
-		;;
-	-dicos*)
-		os=-dicos
-		;;
-	-nacl*)
-		;;
-	-none)
-		;;
-	*)
-		# Get rid of the `-' at the beginning of $os.
-		os=`echo $os | sed 's/[^-]*-//'`
-		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
-		exit 1
-		;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system.  Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
-	score-*)
-		os=-elf
-		;;
-	spu-*)
-		os=-elf
-		;;
-	*-acorn)
-		os=-riscix1.2
-		;;
-	arm*-rebel)
-		os=-linux
-		;;
-	arm*-semi)
-		os=-aout
-		;;
-	c4x-* | tic4x-*)
-		os=-coff
-		;;
-	c8051-*)
-		os=-elf
-		;;
-	hexagon-*)
-		os=-elf
-		;;
-	tic54x-*)
-		os=-coff
-		;;
-	tic55x-*)
-		os=-coff
-		;;
-	tic6x-*)
-		os=-coff
-		;;
-	# This must come before the *-dec entry.
-	pdp10-*)
-		os=-tops20
-		;;
-	pdp11-*)
-		os=-none
-		;;
-	*-dec | vax-*)
-		os=-ultrix4.2
-		;;
-	m68*-apollo)
-		os=-domain
-		;;
-	i386-sun)
-		os=-sunos4.0.2
-		;;
-	m68000-sun)
-		os=-sunos3
-		;;
-	m68*-cisco)
-		os=-aout
-		;;
-	mep-*)
-		os=-elf
-		;;
-	mips*-cisco)
-		os=-elf
-		;;
-	mips*-*)
-		os=-elf
-		;;
-	or32-*)
-		os=-coff
-		;;
-	*-tti)	# must be before sparc entry or we get the wrong os.
-		os=-sysv3
-		;;
-	sparc-* | *-sun)
-		os=-sunos4.1.1
-		;;
-	*-be)
-		os=-beos
-		;;
-	*-haiku)
-		os=-haiku
-		;;
-	*-ibm)
-		os=-aix
-		;;
-	*-knuth)
-		os=-mmixware
-		;;
-	*-wec)
-		os=-proelf
-		;;
-	*-winbond)
-		os=-proelf
-		;;
-	*-oki)
-		os=-proelf
-		;;
-	*-hp)
-		os=-hpux
-		;;
-	*-hitachi)
-		os=-hiux
-		;;
-	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
-		os=-sysv
-		;;
-	*-cbm)
-		os=-amigaos
-		;;
-	*-dg)
-		os=-dgux
-		;;
-	*-dolphin)
-		os=-sysv3
-		;;
-	m68k-ccur)
-		os=-rtu
-		;;
-	m88k-omron*)
-		os=-luna
-		;;
-	*-next )
-		os=-nextstep
-		;;
-	*-sequent)
-		os=-ptx
-		;;
-	*-crds)
-		os=-unos
-		;;
-	*-ns)
-		os=-genix
-		;;
-	i370-*)
-		os=-mvs
-		;;
-	*-next)
-		os=-nextstep3
-		;;
-	*-gould)
-		os=-sysv
-		;;
-	*-highlevel)
-		os=-bsd
-		;;
-	*-encore)
-		os=-bsd
-		;;
-	*-sgi)
-		os=-irix
-		;;
-	*-siemens)
-		os=-sysv4
-		;;
-	*-masscomp)
-		os=-rtu
-		;;
-	f30[01]-fujitsu | f700-fujitsu)
-		os=-uxpv
-		;;
-	*-rom68k)
-		os=-coff
-		;;
-	*-*bug)
-		os=-coff
-		;;
-	*-apple)
-		os=-macos
-		;;
-	*-atari*)
-		os=-mint
-		;;
-	*)
-		os=-none
-		;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer.  We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
-	*-unknown)
-		case $os in
-			-riscix*)
-				vendor=acorn
-				;;
-			-sunos*)
-				vendor=sun
-				;;
-			-cnk*|-aix*)
-				vendor=ibm
-				;;
-			-beos*)
-				vendor=be
-				;;
-			-hpux*)
-				vendor=hp
-				;;
-			-mpeix*)
-				vendor=hp
-				;;
-			-hiux*)
-				vendor=hitachi
-				;;
-			-unos*)
-				vendor=crds
-				;;
-			-dgux*)
-				vendor=dg
-				;;
-			-luna*)
-				vendor=omron
-				;;
-			-genix*)
-				vendor=ns
-				;;
-			-mvs* | -opened*)
-				vendor=ibm
-				;;
-			-os400*)
-				vendor=ibm
-				;;
-			-ptx*)
-				vendor=sequent
-				;;
-			-tpf*)
-				vendor=ibm
-				;;
-			-vxsim* | -vxworks* | -windiss*)
-				vendor=wrs
-				;;
-			-aux*)
-				vendor=apple
-				;;
-			-hms*)
-				vendor=hitachi
-				;;
-			-mpw* | -macos*)
-				vendor=apple
-				;;
-			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-				vendor=atari
-				;;
-			-vos*)
-				vendor=stratus
-				;;
-		esac
-		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
-		;;
-esac
-
-echo $basic_machine$os
-exit
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/standalone/android/tmp/network-2.4.1.2/configure b/standalone/android/tmp/network-2.4.1.2/configure
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/configure
+++ /dev/null
@@ -1,5327 +0,0 @@
-#! /bin/sh
-set -- --host=arm-linux-androideabi
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for Haskell network package 2.3.0.14.
-#
-# Report bugs to <libraries@haskell.org>.
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
-#
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-	expr "X$arg" : "X\\(.*\\)$as_nl";
-	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""	$as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
-
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# Use a proper internal environment variable to ensure we don't fall
-  # into an infinite loop, continuously re-executing ourselves.
-  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
-    _as_can_reexec=no; export _as_can_reexec;
-    # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
-  *v*x* | *x*v* ) as_opts=-vx ;;
-  *v* ) as_opts=-v ;;
-  *x* ) as_opts=-x ;;
-  * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
-  fi
-  # We don't want this to propagate to other subprocesses.
-          { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
-  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '\${1+\"\$@\"}'='\"\$@\"'
-  setopt NO_GLOB_SUBST
-else
-  case \`(set -o) 2>/dev/null\` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-"
-  as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
-  exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
-  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
-  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
-  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
-  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
-  if (eval "$as_required") 2>/dev/null; then :
-  as_have_required=yes
-else
-  as_have_required=no
-fi
-  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  as_found=:
-  case $as_dir in #(
-	 /*)
-	   for as_base in sh bash ksh sh5; do
-	     # Try only shells that exist, to save several forks.
-	     as_shell=$as_dir/$as_base
-	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
-		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  CONFIG_SHELL=$as_shell as_have_required=yes
-		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  break 2
-fi
-fi
-	   done;;
-       esac
-  as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
-	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
-  CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
-      if test "x$CONFIG_SHELL" != x; then :
-  export CONFIG_SHELL
-             # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
-  *v*x* | *x*v* ) as_opts=-vx ;;
-  *v* ) as_opts=-v ;;
-  *x* ) as_opts=-x ;;
-  * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
-    if test x$as_have_required = xno; then :
-  $as_echo "$0: This script requires a shell more modern than all"
-  $as_echo "$0: the shells that I found on your system."
-  if test x${ZSH_VERSION+set} = xset ; then
-    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
-    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
-  else
-    $as_echo "$0: Please tell bug-autoconf@gnu.org and
-$0: libraries@haskell.org about your system, including any
-$0: error possibly output before this message. Then install
-$0: a modern shell, or manually run the script under such a
-$0: shell if you do have one."
-  fi
-  exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
-  test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
-  fi
-  $as_echo "$as_me: error: $2" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-
-  as_lineno_1=$LINENO as_lineno_1a=$LINENO
-  as_lineno_2=$LINENO as_lineno_2a=$LINENO
-  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
-  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
-  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
-  sed -n '
-    p
-    /[$]LINENO/=
-  ' <$as_myself |
-    sed '
-      s/[$]LINENO.*/&-/
-      t lineno
-      b
-      :lineno
-      N
-      :loop
-      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
-      t loop
-      s/-\n.*//
-    ' >$as_me.lineno &&
-  chmod +x "$as_me.lineno" ||
-    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
-  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
-  # already done that, so ensure we don't try to do so again and fall
-  # in an infinite loop.  This has already happened in practice.
-  _as_can_reexec=no; export _as_can_reexec
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensitive to this).
-  . "./$as_me.lineno"
-  # Exit status is that of the last command.
-  exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='	';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -pR'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -pR'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -pR'
-  fi
-else
-  as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME='Haskell network package'
-PACKAGE_TARNAME='network'
-PACKAGE_VERSION='2.3.0.14'
-PACKAGE_STRING='Haskell network package 2.3.0.14'
-PACKAGE_BUGREPORT='libraries@haskell.org'
-PACKAGE_URL=''
-
-ac_unique_file="include/HsNet.h"
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-#  include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-#  include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-EXTRA_SRCS
-EXTRA_LIBS
-EXTRA_CPPFLAGS
-CALLCONV
-EGREP
-GREP
-CPP
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-with_cc
-'
-      ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
-  # If the previous option needs an argument, assign it.
-  if test -n "$ac_prev"; then
-    eval $ac_prev=\$ac_option
-    ac_prev=
-    continue
-  fi
-
-  case $ac_option in
-  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *=)   ac_optarg= ;;
-  *)    ac_optarg=yes ;;
-  esac
-
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
-  case $ac_dashdash$ac_option in
-  --)
-    ac_dashdash=yes ;;
-
-  -bindir | --bindir | --bindi | --bind | --bin | --bi)
-    ac_prev=bindir ;;
-  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir=$ac_optarg ;;
-
-  -build | --build | --buil | --bui | --bu)
-    ac_prev=build_alias ;;
-  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-    build_alias=$ac_optarg ;;
-
-  -cache-file | --cache-file | --cache-fil | --cache-fi \
-  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-    ac_prev=cache_file ;;
-  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-    cache_file=$ac_optarg ;;
-
-  --config-cache | -C)
-    cache_file=config.cache ;;
-
-  -datadir | --datadir | --datadi | --datad)
-    ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=*)
-    datadir=$ac_optarg ;;
-
-  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
-  | --dataroo | --dataro | --datar)
-    ac_prev=datarootdir ;;
-  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
-  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
-    datarootdir=$ac_optarg ;;
-
-  -disable-* | --disable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=no ;;
-
-  -docdir | --docdir | --docdi | --doc | --do)
-    ac_prev=docdir ;;
-  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
-    docdir=$ac_optarg ;;
-
-  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
-    ac_prev=dvidir ;;
-  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
-    dvidir=$ac_optarg ;;
-
-  -enable-* | --enable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=\$ac_optarg ;;
-
-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-  | --exec | --exe | --ex)
-    ac_prev=exec_prefix ;;
-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-  | --exec=* | --exe=* | --ex=*)
-    exec_prefix=$ac_optarg ;;
-
-  -gas | --gas | --ga | --g)
-    # Obsolete; use --with-gas.
-    with_gas=yes ;;
-
-  -help | --help | --hel | --he | -h)
-    ac_init_help=long ;;
-  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
-    ac_init_help=recursive ;;
-  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
-    ac_init_help=short ;;
-
-  -host | --host | --hos | --ho)
-    ac_prev=host_alias ;;
-  -host=* | --host=* | --hos=* | --ho=*)
-    host_alias=$ac_optarg ;;
-
-  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
-    ac_prev=htmldir ;;
-  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
-  | --ht=*)
-    htmldir=$ac_optarg ;;
-
-  -includedir | --includedir | --includedi | --included | --include \
-  | --includ | --inclu | --incl | --inc)
-    ac_prev=includedir ;;
-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-  | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir=$ac_optarg ;;
-
-  -infodir | --infodir | --infodi | --infod | --info | --inf)
-    ac_prev=infodir ;;
-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir=$ac_optarg ;;
-
-  -libdir | --libdir | --libdi | --libd)
-    ac_prev=libdir ;;
-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir=$ac_optarg ;;
-
-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-  | --libexe | --libex | --libe)
-    ac_prev=libexecdir ;;
-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-  | --libexe=* | --libex=* | --libe=*)
-    libexecdir=$ac_optarg ;;
-
-  -localedir | --localedir | --localedi | --localed | --locale)
-    ac_prev=localedir ;;
-  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
-    localedir=$ac_optarg ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst | --locals)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
-    localstatedir=$ac_optarg ;;
-
-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-    ac_prev=mandir ;;
-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir=$ac_optarg ;;
-
-  -nfp | --nfp | --nf)
-    # Obsolete; use --without-fp.
-    with_fp=no ;;
-
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c | -n)
-    no_create=yes ;;
-
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-    no_recursion=yes ;;
-
-  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
-  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
-  | --oldin | --oldi | --old | --ol | --o)
-    ac_prev=oldincludedir ;;
-  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
-  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
-  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir=$ac_optarg ;;
-
-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-    ac_prev=prefix ;;
-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix=$ac_optarg ;;
-
-  -program-prefix | --program-prefix | --program-prefi | --program-pref \
-  | --program-pre | --program-pr | --program-p)
-    ac_prev=program_prefix ;;
-  -program-prefix=* | --program-prefix=* | --program-prefi=* \
-  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix=$ac_optarg ;;
-
-  -program-suffix | --program-suffix | --program-suffi | --program-suff \
-  | --program-suf | --program-su | --program-s)
-    ac_prev=program_suffix ;;
-  -program-suffix=* | --program-suffix=* | --program-suffi=* \
-  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix=$ac_optarg ;;
-
-  -program-transform-name | --program-transform-name \
-  | --program-transform-nam | --program-transform-na \
-  | --program-transform-n | --program-transform- \
-  | --program-transform | --program-transfor \
-  | --program-transfo | --program-transf \
-  | --program-trans | --program-tran \
-  | --progr-tra | --program-tr | --program-t)
-    ac_prev=program_transform_name ;;
-  -program-transform-name=* | --program-transform-name=* \
-  | --program-transform-nam=* | --program-transform-na=* \
-  | --program-transform-n=* | --program-transform-=* \
-  | --program-transform=* | --program-transfor=* \
-  | --program-transfo=* | --program-transf=* \
-  | --program-trans=* | --program-tran=* \
-  | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name=$ac_optarg ;;
-
-  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
-    ac_prev=pdfdir ;;
-  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
-    pdfdir=$ac_optarg ;;
-
-  -psdir | --psdir | --psdi | --psd | --ps)
-    ac_prev=psdir ;;
-  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
-    psdir=$ac_optarg ;;
-
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil)
-    silent=yes ;;
-
-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-    ac_prev=sbindir ;;
-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-  | --sbi=* | --sb=*)
-    sbindir=$ac_optarg ;;
-
-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-  | --sharedst | --shareds | --shared | --share | --shar \
-  | --sha | --sh)
-    ac_prev=sharedstatedir ;;
-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-  | --sha=* | --sh=*)
-    sharedstatedir=$ac_optarg ;;
-
-  -site | --site | --sit)
-    ac_prev=site ;;
-  -site=* | --site=* | --sit=*)
-    site=$ac_optarg ;;
-
-  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-    ac_prev=srcdir ;;
-  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir=$ac_optarg ;;
-
-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-  | --syscon | --sysco | --sysc | --sys | --sy)
-    ac_prev=sysconfdir ;;
-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir=$ac_optarg ;;
-
-  -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target_alias ;;
-  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target_alias=$ac_optarg ;;
-
-  -v | -verbose | --verbose | --verbos | --verbo | --verb)
-    verbose=yes ;;
-
-  -version | --version | --versio | --versi | --vers | -V)
-    ac_init_version=: ;;
-
-  -with-* | --with-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=\$ac_optarg ;;
-
-  -without-* | --without-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=no ;;
-
-  --x)
-    # Obsolete; use --with-x.
-    with_x=yes ;;
-
-  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
-  | --x-incl | --x-inc | --x-in | --x-i)
-    ac_prev=x_includes ;;
-  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
-  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-    x_includes=$ac_optarg ;;
-
-  -x-libraries | --x-libraries | --x-librarie | --x-librari \
-  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
-    ac_prev=x_libraries ;;
-  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
-  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-    x_libraries=$ac_optarg ;;
-
-  -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
-    ;;
-
-  *=*)
-    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
-    # Reject names that are not valid shell variable names.
-    case $ac_envvar in #(
-      '' | [0-9]* | *[!_$as_cr_alnum]* )
-      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
-    esac
-    eval $ac_envvar=\$ac_optarg
-    export $ac_envvar ;;
-
-  *)
-    # FIXME: should be removed in autoconf 3.0.
-    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
-    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
-    ;;
-
-  esac
-done
-
-if test -n "$ac_prev"; then
-  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
-  case $enable_option_checking in
-    no) ;;
-    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
-    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
-  esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
-		datadir sysconfdir sharedstatedir localstatedir includedir \
-		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-		libdir localedir mandir
-do
-  eval ac_val=\$$ac_var
-  # Remove trailing slashes.
-  case $ac_val in
-    */ )
-      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
-      eval $ac_var=\$ac_val;;
-  esac
-  # Be sure to have absolute directory names.
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* )  continue;;
-    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
-  esac
-  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
-  if test "x$build_alias" = x; then
-    cross_compiling=maybe
-  elif test "x$build_alias" != "x$host_alias"; then
-    cross_compiling=yes
-  fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  as_fn_error $? "pwd does not report name of working directory"
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
-  ac_srcdir_defaulted=yes
-  # Try the directory containing this script, then the parent directory.
-  ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_myself" : 'X\(//\)[^/]' \| \
-	 X"$as_myself" : 'X\(//\)$' \| \
-	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-  srcdir=$ac_confdir
-  if test ! -r "$srcdir/$ac_unique_file"; then
-    srcdir=..
-  fi
-else
-  ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
-  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
-	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
-	pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
-  srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
-  eval ac_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_env_${ac_var}_value=\$${ac_var}
-  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
-  # Omit some internal or obsolete options to make the list less imposing.
-  # This message is too long to be a string in the A/UX 3.1 sh.
-  cat <<_ACEOF
-\`configure' configures Haskell network package 2.3.0.14 to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE.  See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
-  -h, --help              display this help and exit
-      --help=short        display options specific to this package
-      --help=recursive    display the short help of all the included packages
-  -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking ...' messages
-      --cache-file=FILE   cache test results in FILE [disabled]
-  -C, --config-cache      alias for \`--cache-file=config.cache'
-  -n, --no-create         do not create output files
-      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
-
-Installation directories:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-                          [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                          [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
-  --bindir=DIR            user executables [EPREFIX/bin]
-  --sbindir=DIR           system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR        program executables [EPREFIX/libexec]
-  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
-  --libdir=DIR            object code libraries [EPREFIX/lib]
-  --includedir=DIR        C header files [PREFIX/include]
-  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
-  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
-  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
-  --infodir=DIR           info documentation [DATAROOTDIR/info]
-  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
-  --mandir=DIR            man documentation [DATAROOTDIR/man]
-  --docdir=DIR            documentation root [DATAROOTDIR/doc/network]
-  --htmldir=DIR           html documentation [DOCDIR]
-  --dvidir=DIR            dvi documentation [DOCDIR]
-  --pdfdir=DIR            pdf documentation [DOCDIR]
-  --psdir=DIR             ps documentation [DOCDIR]
-_ACEOF
-
-  cat <<\_ACEOF
-
-System types:
-  --build=BUILD     configure for building on BUILD [guessed]
-  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-  case $ac_init_help in
-     short | recursive ) echo "Configuration of Haskell network package 2.3.0.14:";;
-   esac
-  cat <<\_ACEOF
-
-Optional Packages:
-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-C compiler
-
-Some influential environment variables:
-  CC          C compiler command
-  CFLAGS      C compiler flags
-  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
-              nonstandard directory <lib dir>
-  LIBS        libraries to pass to the linker, e.g. -l<library>
-  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
-              you have headers in a nonstandard directory <include dir>
-  CPP         C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to <libraries@haskell.org>.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
-  # If there are subdirs, report their specific --help.
-  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d "$ac_dir" ||
-      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
-      continue
-    ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-    cd "$ac_dir" || { ac_status=$?; continue; }
-    # Check for guested configure.
-    if test -f "$ac_srcdir/configure.gnu"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
-    elif test -f "$ac_srcdir/configure"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure" --help=recursive
-    else
-      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-    fi || ac_status=$?
-    cd "$ac_pwd" || { ac_status=$?; break; }
-  done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
-  cat <<\_ACEOF
-Haskell network package configure 2.3.0.14
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
-  exit
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext
-  if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } > conftest.i && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-    ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval \${$3+:} false; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_header_compiler=yes
-else
-  ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  ac_header_preproc=yes
-else
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
-  yes:no: )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-  no:yes:* )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( $as_echo "## ------------------------------------ ##
-## Report this to libraries@haskell.org ##
-## ------------------------------------ ##"
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: program exited with status $ac_status" >&5
-       $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=$ac_status
-fi
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_run
-
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_compile
-
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext conftest$ac_exeext
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 test -x conftest$ac_exeext
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
-  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
-  # interfere with the next link command; also delete a directory that is
-  # left behind by Apple's compiler.  We do this before executing the actions.
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_link
-
-# ac_fn_c_check_func LINENO FUNC VAR
-# ----------------------------------
-# Tests whether FUNC exists, setting the cache variable VAR accordingly
-ac_fn_c_check_func ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $2 innocuous_$2
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $2 (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $2
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $2 ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$2 || defined __stub___$2
-choke me
-#endif
-
-int
-main ()
-{
-return $2 ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_func
-
-# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
-# ----------------------------------------------------
-# Tries to find if the field MEMBER exists in type AGGR, after including
-# INCLUDES, setting cache variable VAR accordingly.
-ac_fn_c_check_member ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
-$as_echo_n "checking for $2.$3... " >&6; }
-if eval \${$4+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$5
-int
-main ()
-{
-static $2 ac_aggr;
-if (ac_aggr.$3)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$4=yes"
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$5
-int
-main ()
-{
-static $2 ac_aggr;
-if (sizeof ac_aggr.$3)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$4=yes"
-else
-  eval "$4=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$4
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_member
-
-# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
-# ---------------------------------------------
-# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
-# accordingly.
-ac_fn_c_check_decl ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  as_decl_name=`echo $2|sed 's/ *(.*//'`
-  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
-$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-#ifndef $as_decl_name
-#ifdef __cplusplus
-  (void) $as_decl_use;
-#else
-  (void) $as_decl_name;
-#endif
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_decl
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by Haskell network package $as_me 2.3.0.14, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
-
-  $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
-
-/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
-/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
-/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    $as_echo "PATH: $as_dir"
-  done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
-  for ac_arg
-  do
-    case $ac_arg in
-    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
-    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-    | -silent | --silent | --silen | --sile | --sil)
-      continue ;;
-    *\'*)
-      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    case $ac_pass in
-    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
-    2)
-      as_fn_append ac_configure_args1 " '$ac_arg'"
-      if test $ac_must_keep_next = true; then
-	ac_must_keep_next=false # Got value, back to normal.
-      else
-	case $ac_arg in
-	  *=* | --config-cache | -C | -disable-* | --disable-* \
-	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
-	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
-	  | -with-* | --with-* | -without-* | --without-* | --x)
-	    case "$ac_configure_args0 " in
-	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
-	    esac
-	    ;;
-	  -* ) ac_must_keep_next=true ;;
-	esac
-      fi
-      as_fn_append ac_configure_args " '$ac_arg'"
-      ;;
-    esac
-  done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset ac_configure_args1;}
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log.  We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
-  # Save into config.log some information that might help in debugging.
-  {
-    echo
-
-    $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
-    echo
-    # The following way of writing the cache mishandles newlines in values,
-(
-  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-  (set) 2>&1 |
-    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      sed -n \
-	"s/'\''/'\''\\\\'\'''\''/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
-      ;; #(
-    *)
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-)
-    echo
-
-    $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
-    echo
-    for ac_var in $ac_subst_vars
-    do
-      eval ac_val=\$$ac_var
-      case $ac_val in
-      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-      esac
-      $as_echo "$ac_var='\''$ac_val'\''"
-    done | sort
-    echo
-
-    if test -n "$ac_subst_files"; then
-      $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
-      echo
-      for ac_var in $ac_subst_files
-      do
-	eval ac_val=\$$ac_var
-	case $ac_val in
-	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-	esac
-	$as_echo "$ac_var='\''$ac_val'\''"
-      done | sort
-      echo
-    fi
-
-    if test -s confdefs.h; then
-      $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
-      echo
-      cat confdefs.h
-      echo
-    fi
-    test "$ac_signal" != 0 &&
-      $as_echo "$as_me: caught signal $ac_signal"
-    $as_echo "$as_me: exit $exit_status"
-  } >&5
-  rm -f core *.core core.conftest.* &&
-    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
-    exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
-  # We do not want a PATH search for config.site.
-  case $CONFIG_SITE in #((
-    -*)  ac_site_file1=./$CONFIG_SITE;;
-    */*) ac_site_file1=$CONFIG_SITE;;
-    *)   ac_site_file1=./$CONFIG_SITE;;
-  esac
-elif test "x$prefix" != xNONE; then
-  ac_site_file1=$prefix/share/config.site
-  ac_site_file2=$prefix/etc/config.site
-else
-  ac_site_file1=$ac_default_prefix/share/config.site
-  ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
-  test "x$ac_site_file" = xNONE && continue
-  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
-    sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file" \
-      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
-  fi
-done
-
-if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special files
-  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
-  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
-    case $cache_file in
-      [\\/]* | ?:[\\/]* ) . "$cache_file";;
-      *)                      . "./$cache_file";;
-    esac
-  fi
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
-  >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
-  eval ac_old_set=\$ac_cv_env_${ac_var}_set
-  eval ac_new_set=\$ac_env_${ac_var}_set
-  eval ac_old_val=\$ac_cv_env_${ac_var}_value
-  eval ac_new_val=\$ac_env_${ac_var}_value
-  case $ac_old_set,$ac_new_set in
-    set,)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,set)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,);;
-    *)
-      if test "x$ac_old_val" != "x$ac_new_val"; then
-	# differences in whitespace do not lead to failure.
-	ac_old_val_w=`echo x $ac_old_val`
-	ac_new_val_w=`echo x $ac_new_val`
-	if test "$ac_old_val_w" != "$ac_new_val_w"; then
-	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-	  ac_cache_corrupted=:
-	else
-	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
-	  eval $ac_var=\$ac_old_val
-	fi
-	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
-$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
-	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
-$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
-      fi;;
-  esac
-  # Pass precious variables to config.status.
-  if test "$ac_new_set" = set; then
-    case $ac_new_val in
-    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
-    *) ac_arg=$ac_var=$ac_new_val ;;
-    esac
-    case " $ac_configure_args " in
-      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
-    esac
-  fi
-done
-if $ac_cache_corrupted; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-ac_includes_default="$ac_includes_default
-#ifdef HAVE_SYS_SOCKET_H
-# include <sys/socket.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-# include <netdb.h>
-#endif
-#ifdef HAVE_WINSOCK2_H
-# include <winsock2.h>
-#endif
-#ifdef HAVE_WS2TCPIP_H
-# include <ws2tcpip.h>
-// fix for MingW not defining IPV6_V6ONLY
-# define IPV6_V6ONLY 27
-#endif
-#ifdef HAVE_WSPIAPI_H
-# include <wspiapi.h>
-#endif"
-
-# Safety check: Ensure that we are in the correct source directory.
-
-
-ac_config_headers="$ac_config_headers include/HsNetworkConfig.h"
-
-
-ac_aux_dir=
-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
-  if test -f "$ac_dir/install-sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f "$ac_dir/install.sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f "$ac_dir/shtool"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
-done
-if test -z "$ac_aux_dir"; then
-  as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
-
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
-  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
-  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "x$host_alias" = x; then
-  ac_cv_host=$ac_cv_build
-else
-  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-
-
-# Check whether --with-cc was given.
-if test "${with_cc+set}" = set; then :
-  withval=$with_cc; CC=$withval
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-          if test -n "$ac_tool_prefix"; then
-    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  fi
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl.exe
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl.exe
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CC" && break
-done
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
-  esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link_default") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile.  We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
-	;;
-    [ab].out )
-	# We found the default executable, but exeext='' is most
-	# certainly right.
-	break;;
-    *.* )
-	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
-	then :; else
-	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	fi
-	# We set ac_cv_exeext here because the later test for it is not
-	# safe: cross compilers may not add the suffix if given an `-o'
-	# argument, so we may need to know it at that point already.
-	# Even if this section looks crufty: it has the advantage of
-	# actually working.
-	break;;
-    * )
-	break;;
-  esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
-  ac_file=''
-fi
-if test -z "$ac_file"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	  break;;
-    * ) break;;
-  esac
-done
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
-  { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-  if { ac_try='./conftest$ac_cv_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
-    fi
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  for ac_file in conftest.o conftest.obj conftest.*; do
-  test -f "$ac_file" || continue;
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-       break;;
-  esac
-done
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GCC=yes
-else
-  GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_c_werror_flag=$ac_c_werror_flag
-   ac_c_werror_flag=yes
-   ac_cv_prog_cc_g=no
-   CFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-else
-  CFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
-  ac_c_werror_flag=$ac_save_c_werror_flag
-	 CFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
-   inside strings and character constants.  */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
-	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
-  test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
-  x)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
-  xno)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
-  *)
-    CC="$CC $ac_cv_prog_cc_c89"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
-$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if ${ac_cv_c_const+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-#ifndef __cplusplus
-  /* Ultrix mips cc rejects this sort of thing.  */
-  typedef int charset[2];
-  const charset cs = { 0, 0 };
-  /* SunOS 4.1.1 cc rejects this.  */
-  char const *const *pcpcc;
-  char **ppc;
-  /* NEC SVR4.0.2 mips cc rejects this.  */
-  struct point {int x, y;};
-  static struct point const zero = {0,0};
-  /* AIX XL C 1.02.0.0 rejects this.
-     It does not let you subtract one const X* pointer from another in
-     an arm of an if-expression whose if-part is not a constant
-     expression */
-  const char *g = "string";
-  pcpcc = &g + (g ? g-g : 0);
-  /* HPUX 7.0 cc rejects these. */
-  ++pcpcc;
-  ppc = (char**) pcpcc;
-  pcpcc = (char const *const *) ppc;
-  { /* SCO 3.2v4 cc rejects this sort of thing.  */
-    char tx;
-    char *t = &tx;
-    char const *s = 0 ? (char *) 0 : (char const *) 0;
-
-    *t++ = 0;
-    if (s) return 0;
-  }
-  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
-    int x[] = {25, 17};
-    const int *foo = &x[0];
-    ++foo;
-  }
-  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
-    typedef const int *iptr;
-    iptr p = 0;
-    ++p;
-  }
-  { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
-       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
-    struct s { int j; const int *ap[3]; } bx;
-    struct s *b = &bx; b->j = 5;
-  }
-  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
-    const int foo = 10;
-    if (!foo) return 0;
-  }
-  return !cs[0] && !zero.x;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_c_const=yes
-else
-  ac_cv_c_const=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
-$as_echo "$ac_cv_c_const" >&6; }
-if test $ac_cv_c_const = no; then
-
-$as_echo "#define const /**/" >>confdefs.h
-
-fi
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if ${ac_cv_prog_CPP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-  break
-fi
-
-    done
-    ac_cv_prog_CPP=$CPP
-
-fi
-  CPP=$ac_cv_prog_CPP
-else
-  ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$GREP"; then
-  ac_path_GREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in grep ggrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
-  # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'GREP' >> "conftest.nl"
-    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_GREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_GREP="$ac_path_GREP"
-      ac_path_GREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_GREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_GREP"; then
-    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
-   then ac_cv_path_EGREP="$GREP -E"
-   else
-     if test -z "$EGREP"; then
-  ac_path_EGREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in egrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
-  # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'EGREP' >> "conftest.nl"
-    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_EGREP="$ac_path_EGREP"
-      ac_path_EGREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_EGREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_EGREP=$EGREP
-fi
-
-   fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_stdc=yes
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-		   (('a' <= (c) && (c) <= 'i') \
-		     || ('j' <= (c) && (c) <= 'r') \
-		     || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-	|| toupper (i) != TOUPPER (i))
-      return 2;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
-		  inttypes.h stdint.h unistd.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-for ac_header in fcntl.h limits.h stdlib.h sys/types.h unistd.h winsock2.h ws2tcpip.h wspiapi.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-for ac_header in arpa/inet.h netdb.h netinet/in.h netinet/tcp.h sys/socket.h sys/uio.h sys/un.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-for ac_func in readlink symlink
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-ac_fn_c_check_member "$LINENO" "struct msghdr" "msg_control" "ac_cv_member_struct_msghdr_msg_control" "#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#if HAVE_SYS_SOCKET_H
-# include <sys/socket.h>
-#endif
-#if HAVE_SYS_UIO_H
-# include <sys/uio.h>
-#endif
-"
-if test "x$ac_cv_member_struct_msghdr_msg_control" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_MSGHDR_MSG_CONTROL 1
-_ACEOF
-
-
-fi
-ac_fn_c_check_member "$LINENO" "struct msghdr" "msg_accrights" "ac_cv_member_struct_msghdr_msg_accrights" "#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#if HAVE_SYS_SOCKET_H
-# include <sys/socket.h>
-#endif
-#if HAVE_SYS_UIO_H
-# include <sys/uio.h>
-#endif
-"
-if test "x$ac_cv_member_struct_msghdr_msg_accrights" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS 1
-_ACEOF
-
-
-fi
-
-
-ac_fn_c_check_member "$LINENO" "struct sockaddr" "sa_len" "ac_cv_member_struct_sockaddr_sa_len" "#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#if HAVE_SYS_SOCKET_H
-# include <sys/socket.h>
-#endif
-"
-if test "x$ac_cv_member_struct_sockaddr_sa_len" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_SOCKADDR_SA_LEN 1
-_ACEOF
-
-
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for in_addr_t in netinet/in.h" >&5
-$as_echo_n "checking for in_addr_t in netinet/in.h... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <netinet/in.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "in_addr_t" >/dev/null 2>&1; then :
-
-$as_echo "#define HAVE_IN_ADDR_T 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f conftest*
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SO_PEERCRED and struct ucred in sys/socket.h" >&5
-$as_echo_n "checking for SO_PEERCRED and struct ucred in sys/socket.h... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-#include <sys/socket.h>
-#ifndef SO_PEERCRED
-# error no SO_PEERCRED
-#endif
-struct ucred u;
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_ucred=yes
-else
-  ac_cv_ucred=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-if test "x$ac_cv_ucred" = xno; then
-    old_CFLAGS="$CFLAGS"
-    CFLAGS="-D_GNU_SOURCE $CFLAGS"
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-#include <sys/socket.h>
-#ifndef SO_PEERCRED
-# error no SO_PEERCRED
-#endif
-struct ucred u;
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_ucred=yes
-else
-  ac_cv_ucred=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    if test "x$ac_cv_ucred" = xyes; then
-        EXTRA_CPPFLAGS=-D_GNU_SOURCE
-    fi
-else
-    old_CFLAGS="$CFLAGS"
-fi
-if test "x$ac_cv_ucred" = xno; then
-    CFLAGS="$old_CFLAGS"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-else
-
-$as_echo "#define HAVE_STRUCT_UCRED 1" >>confdefs.h
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _head_libws2_32_a in -lws2_32" >&5
-$as_echo_n "checking for _head_libws2_32_a in -lws2_32... " >&6; }
-if ${ac_cv_lib_ws2_32__head_libws2_32_a+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lws2_32  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char _head_libws2_32_a ();
-int
-main ()
-{
-return _head_libws2_32_a ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_ws2_32__head_libws2_32_a=yes
-else
-  ac_cv_lib_ws2_32__head_libws2_32_a=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ws2_32__head_libws2_32_a" >&5
-$as_echo "$ac_cv_lib_ws2_32__head_libws2_32_a" >&6; }
-if test "x$ac_cv_lib_ws2_32__head_libws2_32_a" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBWS2_32 1
-_ACEOF
-
-  LIBS="-lws2_32 $LIBS"
-
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for getaddrinfo" >&5
-$as_echo_n "checking for getaddrinfo... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$ac_includes_default
-int testme(){ getaddrinfo; }
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-$as_echo "#define HAVE_GETADDRINFO 1" >>confdefs.h
- ac_have_getaddrinfo=yes; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test "x$ac_have_getaddrinfo" = x; then
-  old_CFLAGS="$CFLAGS"
-  if test "z$ac_cv_lib_ws2_32__head_libws2_32_a" = zyes; then
-    CFLAGS="-DWINVER=0x0501 $CFLAGS"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getaddrinfo if WINVER is 0x0501" >&5
-$as_echo_n "checking for getaddrinfo if WINVER is 0x0501... " >&6; }
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$ac_includes_default
-    int testme(){ getaddrinfo; }
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-$as_echo "#define HAVE_GETADDRINFO 1" >>confdefs.h
-
-$as_echo "#define NEED_WINVER_XP 1" >>confdefs.h
- EXTRA_CPPFLAGS="-DWINVER=0x0501 $EXTRA_CPPFLAGS"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  CFLAGS="$old_CFLAGS"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  fi
-fi
-
-for ac_func in gai_strerror
-do :
-  ac_fn_c_check_func "$LINENO" "gai_strerror" "ac_cv_func_gai_strerror"
-if test "x$ac_cv_func_gai_strerror" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_GAI_STRERROR 1
-_ACEOF
-
-fi
-done
-
-
-ac_fn_c_check_decl "$LINENO" "AI_ADDRCONFIG" "ac_cv_have_decl_AI_ADDRCONFIG" "$ac_includes_default"
-if test "x$ac_cv_have_decl_AI_ADDRCONFIG" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_AI_ADDRCONFIG $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "AI_ALL" "ac_cv_have_decl_AI_ALL" "$ac_includes_default"
-if test "x$ac_cv_have_decl_AI_ALL" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_AI_ALL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "AI_NUMERICSERV" "ac_cv_have_decl_AI_NUMERICSERV" "$ac_includes_default"
-if test "x$ac_cv_have_decl_AI_NUMERICSERV" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_AI_NUMERICSERV $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "AI_V4MAPPED" "ac_cv_have_decl_AI_V4MAPPED" "$ac_includes_default"
-if test "x$ac_cv_have_decl_AI_V4MAPPED" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_AI_V4MAPPED $ac_have_decl
-_ACEOF
-
-
-ac_fn_c_check_decl "$LINENO" "IPV6_V6ONLY" "ac_cv_have_decl_IPV6_V6ONLY" "$ac_includes_default"
-if test "x$ac_cv_have_decl_IPV6_V6ONLY" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_IPV6_V6ONLY $ac_have_decl
-_ACEOF
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sendfile in sys/sendfile.h" >&5
-$as_echo_n "checking for sendfile in sys/sendfile.h... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/sendfile.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "sendfile" >/dev/null 2>&1; then :
-
-$as_echo "#define HAVE_LINUX_SENDFILE 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f conftest*
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sendfile in sys/socket.h" >&5
-$as_echo_n "checking for sendfile in sys/socket.h... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/socket.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "sendfile" >/dev/null 2>&1; then :
-
-$as_echo "#define HAVE_BSD_SENDFILE 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f conftest*
-
-
-for ac_func in gethostent
-do :
-  ac_fn_c_check_func "$LINENO" "gethostent" "ac_cv_func_gethostent"
-if test "x$ac_cv_func_gethostent" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_GETHOSTENT 1
-_ACEOF
-
-fi
-done
-
-
-for ac_func in accept4
-do :
-  ac_fn_c_check_func "$LINENO" "accept4" "ac_cv_func_accept4"
-if test "x$ac_cv_func_accept4" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_ACCEPT4 1
-_ACEOF
-
-fi
-done
-
-
-case "$host" in
-*-mingw32)
-	EXTRA_SRCS="cbits/initWinSock.c, cbits/winSockErr.c, cbits/asyncAccept.c"
-	EXTRA_LIBS=ws2_32
-	CALLCONV=stdcall ;;
-*-solaris2*)
-	EXTRA_SRCS="cbits/ancilData.c"
-	EXTRA_LIBS="nsl, socket"
-	CALLCONV=ccall ;;
-*)
-	EXTRA_SRCS="cbits/ancilData.c"
-	EXTRA_LIBS=
-	CALLCONV=ccall ;;
-esac
-
-
-
-
-
-ac_config_files="$ac_config_files network.buildinfo"
-
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems.  If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
-  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-
-  (set) 2>&1 |
-    case $as_nl`(ac_space=' '; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      # `set' does not quote correctly, so add quotes: double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \.
-      sed -n \
-	"s/'/'\\\\''/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-      ;; #(
-    *)
-      # `set' quotes correctly as required by POSIX, so do not add quotes.
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-) |
-  sed '
-     /^ac_cv_env_/b end
-     t clear
-     :clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
-     t end
-     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-     :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
-  if test -w "$cache_file"; then
-    if test "x$cache_file" != "x/dev/null"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
-      if test ! -f "$cache_file" || test -h "$cache_file"; then
-	cat confcache >"$cache_file"
-      else
-        case $cache_file in #(
-        */* | ?:*)
-	  mv -f confcache "$cache_file"$$ &&
-	  mv -f "$cache_file"$$ "$cache_file" ;; #(
-        *)
-	  mv -f confcache "$cache_file" ;;
-	esac
-      fi
-    fi
-  else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
-  fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-  # 1. Remove the extension, and $U if already installed.
-  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
-  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
-  #    will be set to the directory where LIBOBJS objects are built.
-  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
-  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-
-SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-	expr "X$arg" : "X\\(.*\\)$as_nl";
-	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""	$as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
-
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
-  fi
-  $as_echo "$as_me: error: $2" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='	';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -pR'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -pR'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -pR'
-  fi
-else
-  as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
-  test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by Haskell network package $as_me 2.3.0.14, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
-
-  CONFIG_FILES    = $CONFIG_FILES
-  CONFIG_HEADERS  = $CONFIG_HEADERS
-  CONFIG_LINKS    = $CONFIG_LINKS
-  CONFIG_COMMANDS = $CONFIG_COMMANDS
-  $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration.  Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
-  -h, --help       print this help, then exit
-  -V, --version    print version number and configuration settings, then exit
-      --config     print configuration, then exit
-  -q, --quiet, --silent
-                   do not print progress messages
-  -d, --debug      don't remove temporary files
-      --recheck    update $as_me by reconfiguring in the same conditions
-      --file=FILE[:TEMPLATE]
-                   instantiate the configuration file FILE
-      --header=FILE[:TEMPLATE]
-                   instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Report bugs to <libraries@haskell.org>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-Haskell network package config.status 2.3.0.14
-configured by $0, generated by GNU Autoconf 2.69,
-  with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
-  case $1 in
-  --*=?*)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
-    ac_shift=:
-    ;;
-  --*=)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=
-    ac_shift=:
-    ;;
-  *)
-    ac_option=$1
-    ac_optarg=$2
-    ac_shift=shift
-    ;;
-  esac
-
-  case $ac_option in
-  # Handling of the options.
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    ac_cs_recheck=: ;;
-  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-    $as_echo "$ac_cs_version"; exit ;;
-  --config | --confi | --conf | --con | --co | --c )
-    $as_echo "$ac_cs_config"; exit ;;
-  --debug | --debu | --deb | --de | --d | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    '') as_fn_error $? "missing file argument" ;;
-    esac
-    as_fn_append CONFIG_FILES " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --header | --heade | --head | --hea )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --he | --h)
-    # Conflict between --help and --header
-    as_fn_error $? "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
-  --help | --hel | -h )
-    $as_echo "$ac_cs_usage"; exit ;;
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-    ac_cs_silent=: ;;
-
-  # This is an error.
-  -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
-  *) as_fn_append ac_config_targets " $1"
-     ac_need_defaults=false ;;
-
-  esac
-  shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
-  exec 6>/dev/null
-  ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
-  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-  shift
-  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
-  CONFIG_SHELL='$SHELL'
-  export CONFIG_SHELL
-  exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-  $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
-  case $ac_config_target in
-    "include/HsNetworkConfig.h") CONFIG_HEADERS="$CONFIG_HEADERS include/HsNetworkConfig.h" ;;
-    "network.buildinfo") CONFIG_FILES="$CONFIG_FILES network.buildinfo" ;;
-
-  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
-  esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used.  Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-fi
-
-# Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
-  tmp= ac_tmp=
-  trap 'exit_status=$?
-  : "${ac_tmp:=$tmp}"
-  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
-  trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
-  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -d "$tmp"
-}  ||
-{
-  tmp=./conf$$-$RANDOM
-  (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
-  eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\\r'
-else
-  ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
-  echo "cat >conf$$subs.awk <<_ACEOF" &&
-  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
-  echo "_ACEOF"
-} >conf$$subs.sh ||
-  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
-  . ./conf$$subs.sh ||
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
-  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
-  if test $ac_delim_n = $ac_delim_num; then
-    break
-  elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
-  N
-  s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
-  for (key in S) S_is_set[key] = 1
-  FS = ""
-
-}
-{
-  line = $ 0
-  nfields = split(line, field, "@")
-  substed = 0
-  len = length(field[1])
-  for (i = 2; i < nfields; i++) {
-    key = field[i]
-    keylen = length(key)
-    if (S_is_set[key]) {
-      value = S[key]
-      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
-      len += length(value) + length(field[++i])
-      substed = 1
-    } else
-      len += 1 + keylen
-  }
-
-  print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
-  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
-  cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
-  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
-h
-s///
-s/^/:/
-s/[	 ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[	 ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[	 ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
-  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_tt"; then
-    break
-  elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any.  Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  for (key in D) D_is_set[key] = 1
-  FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
-  line = \$ 0
-  split(line, arg, " ")
-  if (arg[1] == "#") {
-    defundef = arg[2]
-    mac1 = arg[3]
-  } else {
-    defundef = substr(arg[1], 2)
-    mac1 = arg[2]
-  }
-  split(mac1, mac2, "(") #)
-  macro = mac2[1]
-  prefix = substr(line, 1, index(line, defundef) - 1)
-  if (D_is_set[macro]) {
-    # Preserve the white space surrounding the "#".
-    print prefix "define", macro P[macro] D[macro]
-    next
-  } else {
-    # Replace #undef with comments.  This is necessary, for example,
-    # in the case of _POSIX_SOURCE, which is predefined and required
-    # on some systems where configure will not decide to define it.
-    if (defundef == "undef") {
-      print "/*", prefix defundef, macro, "*/"
-      next
-    }
-  }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    "
-shift
-for ac_tag
-do
-  case $ac_tag in
-  :[FHLC]) ac_mode=$ac_tag; continue;;
-  esac
-  case $ac_mode$ac_tag in
-  :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
-  :[FH]-) ac_tag=-:-;;
-  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
-  esac
-  ac_save_IFS=$IFS
-  IFS=:
-  set x $ac_tag
-  IFS=$ac_save_IFS
-  shift
-  ac_file=$1
-  shift
-
-  case $ac_mode in
-  :L) ac_source=$1;;
-  :[FH])
-    ac_file_inputs=
-    for ac_f
-    do
-      case $ac_f in
-      -) ac_f="$ac_tmp/stdin";;
-      *) # Look for the file first in the build tree, then in the source tree
-	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
-	 # because $ac_f cannot contain `:'.
-	 test -f "$ac_f" ||
-	   case $ac_f in
-	   [\\/$]*) false;;
-	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
-	   esac ||
-	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
-      esac
-      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
-      as_fn_append ac_file_inputs " '$ac_f'"
-    done
-
-    # Let's still pretend it is `configure' which instantiates (i.e., don't
-    # use $as_me), people would be surprised to read:
-    #    /* config.h.  Generated by config.status.  */
-    configure_input='Generated from '`
-	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
-	`' by configure.'
-    if test x"$ac_file" != x-; then
-      configure_input="$ac_file.  $configure_input"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
-    fi
-    # Neutralize special characters interpreted by sed in replacement strings.
-    case $configure_input in #(
-    *\&* | *\|* | *\\* )
-       ac_sed_conf_input=`$as_echo "$configure_input" |
-       sed 's/[\\\\&|]/\\\\&/g'`;; #(
-    *) ac_sed_conf_input=$configure_input;;
-    esac
-
-    case $ac_tag in
-    *:-:* | *:-) cat >"$ac_tmp/stdin" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
-    esac
-    ;;
-  esac
-
-  ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-  as_dir="$ac_dir"; as_fn_mkdir_p
-  ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
-  case $ac_mode in
-  :F)
-  #
-  # CONFIG_FILE
-  #
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
-  p
-  q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  ac_datarootdir_hack='
-  s&@datadir@&$datadir&g
-  s&@docdir@&$docdir&g
-  s&@infodir@&$infodir&g
-  s&@localedir@&$localedir&g
-  s&@mandir@&$mandir&g
-  s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
-  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
-      "$ac_tmp/out"`; test -z "$ac_out"; } &&
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&2;}
-
-  rm -f "$ac_tmp/stdin"
-  case $ac_file in
-  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
-  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
-  esac \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
-  :H)
-  #
-  # CONFIG_HEADER
-  #
-  if test x"$ac_file" != x-; then
-    {
-      $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
-    } >"$ac_tmp/config.h" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
-    else
-      rm -f "$ac_file"
-      mv "$ac_tmp/config.h" "$ac_file" \
-	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    fi
-  else
-    $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error $? "could not create -" "$LINENO" 5
-  fi
- ;;
-
-
-  esac
-
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
-  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded.  So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status.  When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
-  ac_cs_success=:
-  ac_config_status_args=
-  test "$silent" = yes &&
-    ac_config_status_args="$ac_config_status_args --quiet"
-  exec 5>/dev/null
-  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
-  exec 5>>config.log
-  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
-  # would make configure fail if this is the last instruction.
-  $ac_cs_success || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/standalone/android/tmp/network-2.4.1.2/configure.ac b/standalone/android/tmp/network-2.4.1.2/configure.ac
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/configure.ac
+++ /dev/null
@@ -1,184 +0,0 @@
-AC_INIT([Haskell network package], [2.3.0.14], [libraries@haskell.org], [network])
-
-ac_includes_default="$ac_includes_default
-#ifdef HAVE_SYS_SOCKET_H
-# include <sys/socket.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-# include <netdb.h>
-#endif
-#ifdef HAVE_WINSOCK2_H
-# include <winsock2.h>
-#endif
-#ifdef HAVE_WS2TCPIP_H
-# include <ws2tcpip.h>
-// fix for MingW not defining IPV6_V6ONLY
-# define IPV6_V6ONLY 27
-#endif
-#ifdef HAVE_WSPIAPI_H
-# include <wspiapi.h>
-#endif"
-
-# Safety check: Ensure that we are in the correct source directory.
-AC_CONFIG_SRCDIR([include/HsNet.h])
-
-AC_CONFIG_HEADERS([include/HsNetworkConfig.h])
-
-AC_CANONICAL_HOST
-
-AC_ARG_WITH([cc],
-            [C compiler],
-            [CC=$withval])
-AC_PROG_CC()
-
-AC_C_CONST
-
-dnl ** check for specific header (.h) files that we are interested in
-AC_CHECK_HEADERS([fcntl.h limits.h stdlib.h sys/types.h unistd.h winsock2.h ws2tcpip.h wspiapi.h])
-AC_CHECK_HEADERS([arpa/inet.h netdb.h netinet/in.h netinet/tcp.h sys/socket.h sys/uio.h sys/un.h])
-
-AC_CHECK_FUNCS([readlink symlink])
-
-dnl ** check what fields struct msghdr contains
-AC_CHECK_MEMBERS([struct msghdr.msg_control, struct msghdr.msg_accrights], [], [], [#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#if HAVE_SYS_SOCKET_H
-# include <sys/socket.h>
-#endif
-#if HAVE_SYS_UIO_H
-# include <sys/uio.h>
-#endif])
-
-dnl ** check if struct sockaddr contains sa_len
-AC_CHECK_MEMBERS([struct sockaddr.sa_len], [], [], [#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#if HAVE_SYS_SOCKET_H
-# include <sys/socket.h>
-#endif])
-
-dnl --------------------------------------------------
-dnl * test for in_addr_t
-dnl --------------------------------------------------
-AC_MSG_CHECKING(for in_addr_t in netinet/in.h)
-AC_EGREP_HEADER(in_addr_t, netinet/in.h,
- [ AC_DEFINE([HAVE_IN_ADDR_T], [1], [Define to 1 if in_addr_t is available.]) AC_MSG_RESULT(yes) ],
- AC_MSG_RESULT(no))
-
-dnl --------------------------------------------------
-dnl * test for SO_PEERCRED and struct ucred
-dnl --------------------------------------------------
-AC_MSG_CHECKING(for SO_PEERCRED and struct ucred in sys/socket.h)
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
-#include <sys/socket.h>
-#ifndef SO_PEERCRED
-# error no SO_PEERCRED
-#endif
-struct ucred u;]])],ac_cv_ucred=yes,ac_cv_ucred=no)
-if test "x$ac_cv_ucred" = xno; then
-    old_CFLAGS="$CFLAGS"
-    CFLAGS="-D_GNU_SOURCE $CFLAGS"
-    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
-#include <sys/socket.h>
-#ifndef SO_PEERCRED
-# error no SO_PEERCRED
-#endif
-struct ucred u;]])],ac_cv_ucred=yes,ac_cv_ucred=no)
-    if test "x$ac_cv_ucred" = xyes; then
-        EXTRA_CPPFLAGS=-D_GNU_SOURCE
-    fi
-else
-    old_CFLAGS="$CFLAGS"
-fi
-if test "x$ac_cv_ucred" = xno; then
-    CFLAGS="$old_CFLAGS"
-    AC_MSG_RESULT(no)
-else
-    AC_DEFINE([HAVE_STRUCT_UCRED], [1], [Define to 1 if you have both SO_PEERCRED and struct ucred.])
-    AC_MSG_RESULT(yes)
-fi
-
-dnl --------------------------------------------------
-dnl * check for Windows networking libraries
-dnl --------------------------------------------------
-AC_CHECK_LIB(ws2_32, _head_libws2_32_a)
-
-dnl --------------------------------------------------
-dnl * test for getaddrinfo as proxy for IPv6 support
-dnl --------------------------------------------------
-AC_MSG_CHECKING(for getaddrinfo)
-dnl Can't use AC_CHECK_FUNC here, because it doesn't do the right
-dnl thing on Windows.
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[$ac_includes_default
-int testme(){ getaddrinfo; }]])],[AC_DEFINE([HAVE_GETADDRINFO], [1], [Define to 1 if you have the `getaddrinfo' function.]) ac_have_getaddrinfo=yes; AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no)])
-
-dnl Under mingw, we may need to set WINVER to 0x0501 to expose getaddrinfo.
-if test "x$ac_have_getaddrinfo" = x; then
-  old_CFLAGS="$CFLAGS"
-  if test "z$ac_cv_lib_ws2_32__head_libws2_32_a" = zyes; then
-    CFLAGS="-DWINVER=0x0501 $CFLAGS"
-    AC_MSG_CHECKING(for getaddrinfo if WINVER is 0x0501)
-    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[$ac_includes_default
-    int testme(){ getaddrinfo; }]])],[AC_DEFINE([HAVE_GETADDRINFO], [1], [Define to 1 if you have the `getaddrinfo' function.]) AC_DEFINE([NEED_WINVER_XP], [1], [Define to 1 if the `getaddrinfo' function needs WINVER set.]) EXTRA_CPPFLAGS="-DWINVER=0x0501 $EXTRA_CPPFLAGS"; AC_MSG_RESULT(yes)],[CFLAGS="$old_CFLAGS"; AC_MSG_RESULT(no)])
-  fi
-fi
-
-dnl Missing under mingw, sigh.
-AC_CHECK_FUNCS(gai_strerror)
-
-dnl -------------------------------------------------------
-dnl * test for AI_* flags that not all implementations have
-dnl -------------------------------------------------------
-AC_CHECK_DECLS([AI_ADDRCONFIG, AI_ALL, AI_NUMERICSERV, AI_V4MAPPED])
-
-dnl -------------------------------------------------------
-dnl * test for IPV6_V6ONLY flags that not all implementations have
-dnl -------------------------------------------------------
-AC_CHECK_DECLS([IPV6_V6ONLY])
-
-dnl --------------------------------------------------
-dnl * test for Linux sendfile(2)
-dnl --------------------------------------------------
-AC_MSG_CHECKING(for sendfile in sys/sendfile.h)
-AC_EGREP_HEADER(sendfile, sys/sendfile.h,
- [ AC_DEFINE([HAVE_LINUX_SENDFILE], [1], [Define to 1 if you have a Linux sendfile(2) implementation.]) AC_MSG_RESULT(yes) ],
- AC_MSG_RESULT(no))
-
-dnl --------------------------------------------------
-dnl * test for BSD sendfile(2)
-dnl --------------------------------------------------
-AC_MSG_CHECKING(for sendfile in sys/socket.h)
-AC_EGREP_HEADER(sendfile, sys/socket.h,
- [ AC_DEFINE([HAVE_BSD_SENDFILE], [1], [Define to 1 if you have a BSDish sendfile(2) implementation.]) AC_MSG_RESULT(yes) ],
- AC_MSG_RESULT(no))
-
-AC_CHECK_FUNCS(gethostent)
-
-AC_CHECK_FUNCS(accept4)
-
-case "$host" in
-*-mingw32)
-	EXTRA_SRCS="cbits/initWinSock.c, cbits/winSockErr.c, cbits/asyncAccept.c"
-	EXTRA_LIBS=ws2_32
-	CALLCONV=stdcall ;;
-*-solaris2*)
-	EXTRA_SRCS="cbits/ancilData.c"
-	EXTRA_LIBS="nsl, socket"
-	CALLCONV=ccall ;;
-*)
-	EXTRA_SRCS="cbits/ancilData.c"
-	EXTRA_LIBS=
-	CALLCONV=ccall ;;
-esac
-AC_SUBST([CALLCONV])
-AC_SUBST([EXTRA_CPPFLAGS])
-AC_SUBST([EXTRA_LIBS])
-AC_SUBST([EXTRA_SRCS])
-
-AC_CONFIG_FILES([network.buildinfo])
-
-AC_OUTPUT
diff --git a/standalone/android/tmp/network-2.4.1.2/examples/EchoClient.hs b/standalone/android/tmp/network-2.4.1.2/examples/EchoClient.hs
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/examples/EchoClient.hs
+++ /dev/null
@@ -1,18 +0,0 @@
--- Echo client program
-module Main where
-
-import Network.Socket hiding (recv)
-import Network.Socket.ByteString (recv, sendAll)
-import qualified Data.ByteString.Char8 as C
-
-main :: IO ()
-main = withSocketsDo $
-    do addrinfos <- getAddrInfo Nothing (Just "") (Just "3000")
-       let serveraddr = head addrinfos
-       sock <- socket (addrFamily serveraddr) Stream defaultProtocol
-       connect sock (addrAddress serveraddr)
-       sendAll sock $ C.pack "Hello, world!"
-       msg <- recv sock 1024
-       sClose sock
-       putStr "Received "
-       C.putStrLn msg
diff --git a/standalone/android/tmp/network-2.4.1.2/examples/EchoServer.hs b/standalone/android/tmp/network-2.4.1.2/examples/EchoServer.hs
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/examples/EchoServer.hs
+++ /dev/null
@@ -1,27 +0,0 @@
--- Echo server program
-module Main where
-
-import Control.Monad (unless)
-import Network.Socket hiding (recv)
-import qualified Data.ByteString as S
-import Network.Socket.ByteString (recv, sendAll)
-
-main :: IO ()
-main = withSocketsDo $
-    do addrinfos <- getAddrInfo
-                    (Just (defaultHints {addrFlags = [AI_PASSIVE]}))
-                    Nothing (Just "3000")
-       let serveraddr = head addrinfos
-       sock <- socket (addrFamily serveraddr) Stream defaultProtocol
-       bindSocket sock (addrAddress serveraddr)
-       listen sock 1
-       (conn, _) <- accept sock
-       talk conn
-       sClose conn
-       sClose sock
-
-    where
-      talk :: Socket -> IO ()
-      talk conn =
-          do msg <- recv conn 1024
-             unless (S.null msg) $ sendAll conn msg >> talk conn
diff --git a/standalone/android/tmp/network-2.4.1.2/include/HsNet.h b/standalone/android/tmp/network-2.4.1.2/include/HsNet.h
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/include/HsNet.h
+++ /dev/null
@@ -1,179 +0,0 @@
-/* -----------------------------------------------------------------------------
- *
- * Definitions for package `net' which are visible in Haskell land.
- *
- * ---------------------------------------------------------------------------*/
-
-#ifndef HSNET_H
-#define HSNET_H
-
-#include "HsNetworkConfig.h"
-
-#ifdef NEED_WINVER
-# define WINVER 0x0501
-#endif
-
-/* ultra-evil... */
-#undef PACKAGE_BUGREPORT
-#undef PACKAGE_NAME
-#undef PACKAGE_STRING
-#undef PACKAGE_TARNAME
-#undef PACKAGE_VERSION
-
-#ifndef INLINE
-# if defined(_MSC_VER)
-#  define INLINE extern __inline
-# elif defined(__GNUC__)
-#  define INLINE extern inline
-# else
-#  define INLINE inline
-# endif
-#endif
-
-#ifdef HAVE_GETADDRINFO
-# define IPV6_SOCKET_SUPPORT 1
-#else
-# undef IPV6_SOCKET_SUPPORT
-#endif
-
-#if defined(HAVE_WINSOCK2_H) && !defined(__CYGWIN__)
-#include <winsock2.h>
-# ifdef HAVE_WS2TCPIP_H
-#  include <ws2tcpip.h>
-// fix for MingW not defining IPV6_V6ONLY
-#  define IPV6_V6ONLY 27
-# endif
-# ifdef HAVE_WSPIAPI_H
-#  include <wspiapi.h>
-# endif
-
-extern void  shutdownWinSock();
-extern int   initWinSock ();
-extern const char* getWSErrorDescr(int err);
-extern void* newAcceptParams(int sock,
-			     int sz,
-			     void* sockaddr);
-extern int   acceptNewSock(void* d);
-extern int   acceptDoProc(void* param);
-
-#else
-
-#ifdef HAVE_LIMITS_H
-# include <limits.h>
-#endif
-#ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_FCNTL_H
-# include <fcntl.h>
-#endif
-#ifdef HAVE_SYS_UIO_H
-# include <sys/uio.h>
-#endif
-#ifdef HAVE_SYS_SOCKET_H
-# include <sys/socket.h>
-#endif
-#ifdef HAVE_NETINET_TCP_H
-# include <netinet/tcp.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
-#ifdef HAVE_SYS_UN_H
-# include <sys/un.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-# include <arpa/inet.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-
-#ifdef HAVE_BSD_SENDFILE
-#include <sys/uio.h>
-#endif
-#ifdef HAVE_LINUX_SENDFILE
-#if !defined(__USE_FILE_OFFSET64)
-#include <sys/sendfile.h>
-#endif
-#endif
-
-extern int
-sendFd(int sock, int outfd);
-
-extern int
-recvFd(int sock);
-
-#endif /* HAVE_WINSOCK2_H && !__CYGWIN */
-
-INLINE char *
-my_inet_ntoa(
-#if defined(HAVE_WINSOCK2_H)
-             u_long addr
-#elif defined(HAVE_IN_ADDR_T)
-             in_addr_t addr
-#elif defined(HAVE_INTTYPES_H)
-             u_int32_t addr
-#else
-             unsigned long addr
-#endif
-	    )
-{ 
-    struct in_addr a;
-    a.s_addr = addr;
-    return inet_ntoa(a);
-}
-
-#ifdef HAVE_GETADDRINFO
-INLINE int
-hsnet_getnameinfo(const struct sockaddr* a,socklen_t b, char* c,
-# if defined(HAVE_WINSOCK2_H) && !defined(__CYGWIN__)
-                  DWORD d, char* e, DWORD f, int g)
-# else
-                  socklen_t d, char* e, socklen_t f, int g)
-# endif
-{
-  return getnameinfo(a,b,c,d,e,f,g);
-}
-
-INLINE int
-hsnet_getaddrinfo(const char *hostname, const char *servname,
-		  const struct addrinfo *hints, struct addrinfo **res)
-{
-    return getaddrinfo(hostname, servname, hints, res);
-}
-
-INLINE void
-hsnet_freeaddrinfo(struct addrinfo *ai)
-{
-    freeaddrinfo(ai);
-}
-#endif
-
-#if defined(HAVE_WINSOCK2_H) && !defined(cygwin32_HOST_OS)
-# define WITH_WINSOCK  1
-#endif
-
-#if !defined(mingw32_HOST_OS) && !defined(_WIN32)
-# define DOMAIN_SOCKET_SUPPORT 1
-#endif
-
-#if !defined(CALLCONV)
-# if defined(WITH_WINSOCK)
-#  define CALLCONV stdcall
-# else
-#  define CALLCONV ccall
-# endif
-#endif
-
-#if !defined(IOV_MAX)
-# define IOV_MAX 1024
-#endif
-
-#endif /* HSNET_H */
diff --git a/standalone/android/tmp/network-2.4.1.2/include/HsNetworkConfig.h b/standalone/android/tmp/network-2.4.1.2/include/HsNetworkConfig.h
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/include/HsNetworkConfig.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/* include/HsNetworkConfig.h.  Generated from HsNetworkConfig.h.in by configure.  */
-/* include/HsNetworkConfig.h.in.  Generated from configure.ac by autoheader.  */
-
-/* Define to 1 if you have the `accept4' function. */
-/* #undef HAVE_ACCEPT4 */
-
-/* Define to 1 if you have the <arpa/inet.h> header file. */
-#define HAVE_ARPA_INET_H 1
-
-/* Define to 1 if you have a BSDish sendfile(2) implementation. */
-#define HAVE_BSD_SENDFILE 1
-
-/* Define to 1 if you have the declaration of `AI_ADDRCONFIG', and to 0 if you
-   don't. */
-#define HAVE_DECL_AI_ADDRCONFIG 1
-
-/* Define to 1 if you have the declaration of `AI_ALL', and to 0 if you don't.
-   */
-#define HAVE_DECL_AI_ALL 1
-
-/* Define to 1 if you have the declaration of `AI_NUMERICSERV', and to 0 if
-   you don't. */
-#define HAVE_DECL_AI_NUMERICSERV 1
-
-/* Define to 1 if you have the declaration of `AI_V4MAPPED', and to 0 if you
-   don't. */
-#define HAVE_DECL_AI_V4MAPPED 1
-
-/* Define to 1 if you have the declaration of `IPV6_V6ONLY', and to 0 if you
-   don't. */
-#define HAVE_DECL_IPV6_V6ONLY 1
-
-/* Define to 1 if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H 1
-
-/* Define to 1 if you have the `gai_strerror' function. */
-#define HAVE_GAI_STRERROR 1
-
-/* Define to 1 if you have the `getaddrinfo' function. */
-#define HAVE_GETADDRINFO 1
-
-/* Define to 1 if you have the `gethostent' function. */
-#define HAVE_GETHOSTENT 1
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define to 1 if in_addr_t is available. */
-#define HAVE_IN_ADDR_T 1
-
-/* Define to 1 if you have the `ws2_32' library (-lws2_32). */
-/* #undef HAVE_LIBWS2_32 */
-
-/* Define to 1 if you have the <limits.h> header file. */
-#define HAVE_LIMITS_H 1
-
-/* Define to 1 if you have a Linux sendfile(2) implementation. */
-/* #undef HAVE_LINUX_SENDFILE */
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the <netdb.h> header file. */
-#define HAVE_NETDB_H 1
-
-/* Define to 1 if you have the <netinet/in.h> header file. */
-#define HAVE_NETINET_IN_H 1
-
-/* Define to 1 if you have the <netinet/tcp.h> header file. */
-#define HAVE_NETINET_TCP_H 1
-
-/* Define to 1 if you have the `readlink' function. */
-#define HAVE_READLINK 1
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if `msg_accrights' is a member of `struct msghdr'. */
-/* #undef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */
-
-/* Define to 1 if `msg_control' is a member of `struct msghdr'. */
-#define HAVE_STRUCT_MSGHDR_MSG_CONTROL 1
-
-/* Define to 1 if `sa_len' is a member of `struct sockaddr'. */
-#define HAVE_STRUCT_SOCKADDR_SA_LEN 1
-
-/* Define to 1 if you have both SO_PEERCRED and struct ucred. */
-/* #undef HAVE_STRUCT_UCRED */
-
-/* Define to 1 if you have the `symlink' function. */
-#define HAVE_SYMLINK 1
-
-/* Define to 1 if you have the <sys/socket.h> header file. */
-#define HAVE_SYS_SOCKET_H 1
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the <sys/uio.h> header file. */
-#define HAVE_SYS_UIO_H 1
-
-/* Define to 1 if you have the <sys/un.h> header file. */
-#define HAVE_SYS_UN_H 1
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Define to 1 if you have the <winsock2.h> header file. */
-/* #undef HAVE_WINSOCK2_H */
-
-/* Define to 1 if you have the <ws2tcpip.h> header file. */
-/* #undef HAVE_WS2TCPIP_H */
-
-/* Define to 1 if you have the <wspiapi.h> header file. */
-/* #undef HAVE_WSPIAPI_H */
-
-/* Define to 1 if the `getaddrinfo' function needs WINVER set. */
-/* #undef NEED_WINVER_XP */
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT "libraries@haskell.org"
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME "Haskell network package"
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "Haskell network package 2.3.0.14"
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME "network"
-
-/* Define to the home page for this package. */
-#define PACKAGE_URL ""
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION "2.3.0.14"
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Define to empty if `const' does not conform to ANSI C. */
-/* #undef const */
diff --git a/standalone/android/tmp/network-2.4.1.2/include/HsNetworkConfig.h.in b/standalone/android/tmp/network-2.4.1.2/include/HsNetworkConfig.h.in
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/include/HsNetworkConfig.h.in
+++ /dev/null
@@ -1,153 +0,0 @@
-/* include/HsNetworkConfig.h.in.  Generated from configure.ac by autoheader.  */
-
-/* Define to 1 if you have the `accept4' function. */
-#undef HAVE_ACCEPT4
-
-/* Define to 1 if you have the <arpa/inet.h> header file. */
-#undef HAVE_ARPA_INET_H
-
-/* Define to 1 if you have a BSDish sendfile(2) implementation. */
-#undef HAVE_BSD_SENDFILE
-
-/* Define to 1 if you have the declaration of `AI_ADDRCONFIG', and to 0 if you
-   don't. */
-#undef HAVE_DECL_AI_ADDRCONFIG
-
-/* Define to 1 if you have the declaration of `AI_ALL', and to 0 if you don't.
-   */
-#undef HAVE_DECL_AI_ALL
-
-/* Define to 1 if you have the declaration of `AI_NUMERICSERV', and to 0 if
-   you don't. */
-#undef HAVE_DECL_AI_NUMERICSERV
-
-/* Define to 1 if you have the declaration of `AI_V4MAPPED', and to 0 if you
-   don't. */
-#undef HAVE_DECL_AI_V4MAPPED
-
-/* Define to 1 if you have the declaration of `IPV6_V6ONLY', and to 0 if you
-   don't. */
-#undef HAVE_DECL_IPV6_V6ONLY
-
-/* Define to 1 if you have the <fcntl.h> header file. */
-#undef HAVE_FCNTL_H
-
-/* Define to 1 if you have the `gai_strerror' function. */
-#undef HAVE_GAI_STRERROR
-
-/* Define to 1 if you have the `getaddrinfo' function. */
-#undef HAVE_GETADDRINFO
-
-/* Define to 1 if you have the `gethostent' function. */
-#undef HAVE_GETHOSTENT
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if in_addr_t is available. */
-#undef HAVE_IN_ADDR_T
-
-/* Define to 1 if you have the `ws2_32' library (-lws2_32). */
-#undef HAVE_LIBWS2_32
-
-/* Define to 1 if you have the <limits.h> header file. */
-#undef HAVE_LIMITS_H
-
-/* Define to 1 if you have a Linux sendfile(2) implementation. */
-#undef HAVE_LINUX_SENDFILE
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if you have the <netdb.h> header file. */
-#undef HAVE_NETDB_H
-
-/* Define to 1 if you have the <netinet/in.h> header file. */
-#undef HAVE_NETINET_IN_H
-
-/* Define to 1 if you have the <netinet/tcp.h> header file. */
-#undef HAVE_NETINET_TCP_H
-
-/* Define to 1 if you have the `readlink' function. */
-#undef HAVE_READLINK
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if `msg_accrights' is a member of `struct msghdr'. */
-#undef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS
-
-/* Define to 1 if `msg_control' is a member of `struct msghdr'. */
-#undef HAVE_STRUCT_MSGHDR_MSG_CONTROL
-
-/* Define to 1 if `sa_len' is a member of `struct sockaddr'. */
-#undef HAVE_STRUCT_SOCKADDR_SA_LEN
-
-/* Define to 1 if you have both SO_PEERCRED and struct ucred. */
-#undef HAVE_STRUCT_UCRED
-
-/* Define to 1 if you have the `symlink' function. */
-#undef HAVE_SYMLINK
-
-/* Define to 1 if you have the <sys/socket.h> header file. */
-#undef HAVE_SYS_SOCKET_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <sys/uio.h> header file. */
-#undef HAVE_SYS_UIO_H
-
-/* Define to 1 if you have the <sys/un.h> header file. */
-#undef HAVE_SYS_UN_H
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to 1 if you have the <winsock2.h> header file. */
-#undef HAVE_WINSOCK2_H
-
-/* Define to 1 if you have the <ws2tcpip.h> header file. */
-#undef HAVE_WS2TCPIP_H
-
-/* Define to 1 if you have the <wspiapi.h> header file. */
-#undef HAVE_WSPIAPI_H
-
-/* Define to 1 if the `getaddrinfo' function needs WINVER set. */
-#undef NEED_WINVER_XP
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the home page for this package. */
-#undef PACKAGE_URL
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define to empty if `const' does not conform to ANSI C. */
-#undef const
diff --git a/standalone/android/tmp/network-2.4.1.2/install-sh b/standalone/android/tmp/network-2.4.1.2/install-sh
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/install-sh
+++ /dev/null
@@ -1,295 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2003-09-24.23
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.  It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-transformbasename=
-transform_arg=
-instcmd="$mvprog"
-chmodcmd="$chmodprog 0755"
-chowncmd=
-chgrpcmd=
-stripcmd=
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=
-dst=
-dir_arg=
-
-usage="Usage: $0 [OPTION]... SRCFILE DSTFILE
-   or: $0 -d DIR1 DIR2...
-
-In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default.
-In the second, create the directory path DIR.
-
-Options:
--b=TRANSFORMBASENAME
--c         copy source (using $cpprog) instead of moving (using $mvprog).
--d         create directories instead of installing files.
--g GROUP   $chgrp installed files to GROUP.
--m MODE    $chmod installed files to MODE.
--o USER    $chown installed files to USER.
--s         strip installed files (using $stripprog).
--t=TRANSFORM
---help     display this help and exit.
---version  display version info and exit.
-
-Environment variables override the default commands:
-  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
-"
-
-while test -n "$1"; do
-  case $1 in
-    -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
-        shift
-        continue;;
-
-    -c) instcmd=$cpprog
-        shift
-        continue;;
-
-    -d) dir_arg=true
-        shift
-        continue;;
-
-    -g) chgrpcmd="$chgrpprog $2"
-        shift
-        shift
-        continue;;
-
-    --help) echo "$usage"; exit 0;;
-
-    -m) chmodcmd="$chmodprog $2"
-        shift
-        shift
-        continue;;
-
-    -o) chowncmd="$chownprog $2"
-        shift
-        shift
-        continue;;
-
-    -s) stripcmd=$stripprog
-        shift
-        continue;;
-
-    -t=*) transformarg=`echo $1 | sed 's/-t=//'`
-        shift
-        continue;;
-
-    --version) echo "$0 $scriptversion"; exit 0;;
-
-    *)  if test -z "$src"; then
-          src=$1
-        else
-          # this colon is to work around a 386BSD /bin/sh bug
-          :
-          dst=$1
-        fi
-        shift
-        continue;;
-  esac
-done
-
-if test -z "$src"; then
-  echo "$0: no input file specified." >&2
-  exit 1
-fi
-
-# Protect names starting with `-'.
-case $src in
-  -*) src=./$src ;;
-esac
-
-if test -n "$dir_arg"; then
-  dst=$src
-  src=
-
-  if test -d "$dst"; then
-    instcmd=:
-    chmodcmd=
-  else
-    instcmd=$mkdirprog
-  fi
-else
-  # Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-  # might cause directories to be created, which would be especially bad
-  # if $src (and thus $dsttmp) contains '*'.
-  if test ! -f "$src" && test ! -d "$src"; then
-    echo "$0: $src does not exist." >&2
-    exit 1
-  fi
-
-  if test -z "$dst"; then
-    echo "$0: no destination specified." >&2
-    exit 1
-  fi
-
-  # Protect names starting with `-'.
-  case $dst in
-    -*) dst=./$dst ;;
-  esac
-
-  # If destination is a directory, append the input filename; won't work
-  # if double slashes aren't ignored.
-  if test -d "$dst"; then
-    dst=$dst/`basename "$src"`
-  fi
-fi
-
-# This sed command emulates the dirname command.
-dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
-
-# Make sure that the destination directory exists.
-
-# Skip lots of stat calls in the usual case.
-if test ! -d "$dstdir"; then
-  defaultIFS='
-	'
-  IFS="${IFS-$defaultIFS}"
-
-  oIFS=$IFS
-  # Some sh's can't handle IFS=/ for some reason.
-  IFS='%'
-  set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
-  IFS=$oIFS
-
-  pathcomp=
-
-  while test $# -ne 0 ; do
-    pathcomp=$pathcomp$1
-    shift
-    test -d "$pathcomp" || $mkdirprog "$pathcomp"
-    pathcomp=$pathcomp/
-  done
-fi
-
-if test -n "$dir_arg"; then
-  $doit $instcmd "$dst" \
-    && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
-    && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
-    && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
-    && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
-
-else
-  # If we're going to rename the final executable, determine the name now.
-  if test -z "$transformarg"; then
-    dstfile=`basename "$dst"`
-  else
-    dstfile=`basename "$dst" $transformbasename \
-             | sed $transformarg`$transformbasename
-  fi
-
-  # don't allow the sed command to completely eliminate the filename.
-  test -z "$dstfile" && dstfile=`basename "$dst"`
-
-  # Make a couple of temp file names in the proper directory.
-  dsttmp=$dstdir/_inst.$$_
-  rmtmp=$dstdir/_rm.$$_
-
-  # Trap to clean up those temp files at exit.
-  trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
-  trap '(exit $?); exit' 1 2 13 15
-
-  # Move or copy the file name to the temp name
-  $doit $instcmd "$src" "$dsttmp" &&
-
-  # and set any options; do chmod last to preserve setuid bits.
-  #
-  # If any of these fail, we abort the whole thing.  If we want to
-  # ignore errors from any of these, just make sure not to ignore
-  # errors from the above "$doit $instcmd $src $dsttmp" command.
-  #
-  { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
-    && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
-    && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
-    && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
-
-  # Now remove or move aside any old file at destination location.  We
-  # try this two ways since rm can't unlink itself on some systems and
-  # the destination file might be busy for other reasons.  In this case,
-  # the final cleanup might fail but the new file should still install
-  # successfully.
-  {
-    if test -f "$dstdir/$dstfile"; then
-      $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
-      || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
-      || {
-	  echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
-	  (exit 1); exit
-      }
-    else
-      :
-    fi
-  } &&
-
-  # Now rename the file to the real destination.
-  $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
-fi &&
-
-# The final little trick to "correctly" pass the exit status to the exit trap.
-{
-  (exit 0); exit
-}
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/standalone/android/tmp/network-2.4.1.2/network.buildinfo.in b/standalone/android/tmp/network-2.4.1.2/network.buildinfo.in
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/network.buildinfo.in
+++ /dev/null
@@ -1,5 +0,0 @@
-ghc-options: -DCALLCONV=@CALLCONV@ @EXTRA_CPPFLAGS@
-ghc-prof-options: -DCALLCONV=@CALLCONV@ @EXTRA_CPPFLAGS@
-cc-options: -DCALLCONV=@CALLCONV@ @EXTRA_CPPFLAGS@
-c-sources: @EXTRA_SRCS@
-extra-libraries: @EXTRA_LIBS@
diff --git a/standalone/android/tmp/network-2.4.1.2/network.cabal b/standalone/android/tmp/network-2.4.1.2/network.cabal
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/network.cabal
+++ /dev/null
@@ -1,103 +0,0 @@
-name:           network
-version:        2.4.1.2
-license:        BSD3
-license-file:   LICENSE
-maintainer:     Johan Tibell <johan.tibell@gmail.com>
-synopsis:       Low-level networking interface
-description:    Low-level networking interface
-category:       Network
-build-type:     Configure
-cabal-version:  >=1.8
-extra-tmp-files:
-  config.log config.status autom4te.cache network.buildinfo
-  include/HsNetworkConfig.h
-extra-source-files:
-  README examples/*.hs tests/*.hs config.guess config.sub install-sh
-  configure.ac configure network.buildinfo.in
-  include/HsNetworkConfig.h.in include/HsNet.h
-  -- C sources only used on some systems
-  cbits/ancilData.c cbits/asyncAccept.c cbits/initWinSock.c
-  cbits/winSockErr.c
-homepage:       https://github.com/haskell/network
-bug-reports:    https://github.com/haskell/network/issues
-
-library
-  exposed-modules:
-    Network
-    Network.BSD
-    Network.Socket
-    Network.Socket.ByteString
-    Network.Socket.ByteString.Lazy
-    Network.Socket.Internal
-    Network.URI
-  other-modules:
-    Network.Socket.ByteString.Internal
-    Network.Socket.Types
-
-  if !os(windows)
-    other-modules:
-      Network.Socket.ByteString.IOVec
-      Network.Socket.ByteString.MsgHdr
-
-  build-depends:
-    base >= 3 && < 5,
-    bytestring,
-    parsec >= 3.0
-
-  if !os(windows)
-    build-depends:
-      unix >= 2
-
-  extensions:
-    CPP, DeriveDataTypeable, ForeignFunctionInterface, TypeSynonymInstances
-  include-dirs: include
-  includes: HsNet.h
-  install-includes: HsNet.h HsNetworkConfig.h
-  c-sources: cbits/HsNet.c
-  if impl(ghc >= 6.8)
-    ghc-options: -fwarn-tabs
-
-test-suite simple
-  hs-source-dirs: tests
-  main-is: Simple.hs
-  type: exitcode-stdio-1.0
-
-  build-depends:
-    base < 5,
-    bytestring,
-    HUnit,
-    network,
-    test-framework,
-    test-framework-hunit
-
-test-suite regression
-  hs-source-dirs: tests
-  main-is: Regression.hs
-  type: exitcode-stdio-1.0
-
-  build-depends:
-    base < 5,
-    bytestring,
-    HUnit,
-    network,
-    test-framework,
-    test-framework-hunit
-
-  ghc-options: -Wall
-
-test-suite uri
-  hs-source-dirs: tests
-  main-is: uri001.hs
-  type: exitcode-stdio-1.0
-
-  build-depends:
-    base < 5,
-    HUnit,
-    network,
-    test-framework,
-    test-framework-hunit,
-    test-framework-quickcheck2
-
-source-repository head
-  type:     git
-  location: git://github.com/haskell/network.git
diff --git a/standalone/android/tmp/network-2.4.1.2/tests/Regression.hs b/standalone/android/tmp/network-2.4.1.2/tests/Regression.hs
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/tests/Regression.hs
+++ /dev/null
@@ -1,31 +0,0 @@
--- | Tests for things that didn't work in the past.
-module Main where
-
-import Network.Socket
-import Test.Framework (Test, defaultMain)
-import Test.Framework.Providers.HUnit (testCase)
-
-------------------------------------------------------------------------
--- Tests
-
--- Used to segfault on OS X 10.8.2 due to AI_NUMERICSERV being set
--- without a service being set. This is a OS X bug.
-testGetAddrInfo :: IO ()
-testGetAddrInfo = do
-    let hints = defaultHints { addrFlags = [AI_NUMERICSERV] }
-    _ <- getAddrInfo (Just hints) (Just "localhost") Nothing
-    return ()
-
-------------------------------------------------------------------------
--- List of all tests
-
-tests :: [Test]
-tests =
-    [ testCase "testGetAddrInfo" testGetAddrInfo
-    ]
-
-------------------------------------------------------------------------
--- Test harness
-
-main :: IO ()
-main = withSocketsDo $ defaultMain tests
diff --git a/standalone/android/tmp/network-2.4.1.2/tests/Simple.hs b/standalone/android/tmp/network-2.4.1.2/tests/Simple.hs
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/tests/Simple.hs
+++ /dev/null
@@ -1,244 +0,0 @@
-{-# LANGUAGE ScopedTypeVariables #-}
-
-module Main where
-
-import Control.Concurrent (ThreadId, forkIO, myThreadId)
-import Control.Concurrent.MVar (newEmptyMVar, putMVar, takeMVar, readMVar)
-import qualified Control.Exception as E
-import qualified Data.ByteString as S
-import qualified Data.ByteString.Char8 as C
-import Network.Socket hiding (recv, recvFrom, send, sendTo)
-import Network.Socket.ByteString
-import Test.Framework (Test, defaultMain, testGroup)
-import Test.Framework.Providers.HUnit (testCase)
-import Test.HUnit (Assertion, (@=?))
-
-------------------------------------------------------------------------
-
-serverAddr :: String
-serverAddr = "127.0.0.1"
-
-testMsg :: S.ByteString
-testMsg = C.pack "This is a test message."
-
-------------------------------------------------------------------------
--- Tests
-
-------------------------------------------------------------------------
--- Sending and receiving
-
-testSend :: Assertion
-testSend = tcpTest client server
-  where
-    server sock = recv sock 1024 >>= (@=?) testMsg
-    client sock = send sock testMsg
-
-testSendAll :: Assertion
-testSendAll = tcpTest client server
-  where
-    server sock = recv sock 1024 >>= (@=?) testMsg
-    client sock = sendAll sock testMsg
-
-testSendTo :: Assertion
-testSendTo = udpTest client server
-  where
-    server sock = recv sock 1024 >>= (@=?) testMsg
-    client sock serverPort = do
-        addr <- inet_addr serverAddr
-        sendTo sock testMsg (SockAddrInet serverPort addr)
-
-testSendAllTo :: Assertion
-testSendAllTo = udpTest client server
-  where
-    server sock = recv sock 1024 >>= (@=?) testMsg
-    client sock serverPort = do
-        addr <- inet_addr serverAddr
-        sendAllTo sock testMsg (SockAddrInet serverPort addr)
-
-testSendMany :: Assertion
-testSendMany = tcpTest client server
-  where
-    server sock = recv sock 1024 >>= (@=?) (S.append seg1 seg2)
-    client sock = sendMany sock [seg1, seg2]
-
-    seg1 = C.pack "This is a "
-    seg2 = C.pack "test message."
-
-testSendManyTo :: Assertion
-testSendManyTo = udpTest client server
-  where
-    server sock = recv sock 1024 >>= (@=?) (S.append seg1 seg2)
-    client sock serverPort = do
-        addr <- inet_addr serverAddr
-        sendManyTo sock [seg1, seg2] (SockAddrInet serverPort addr)
-
-    seg1 = C.pack "This is a "
-    seg2 = C.pack "test message."
-
-testRecv :: Assertion
-testRecv = tcpTest client server
-  where
-    server sock = recv sock 1024 >>= (@=?) testMsg
-    client sock = send sock testMsg
-
-testOverFlowRecv :: Assertion
-testOverFlowRecv = tcpTest client server
-  where
-    server sock = do seg1 <- recv sock (S.length testMsg - 3)
-                     seg2 <- recv sock 1024
-                     let msg = S.append seg1 seg2
-                     testMsg @=? msg
-
-    client sock = send sock testMsg
-
-testRecvFrom :: Assertion
-testRecvFrom = tcpTest client server
-  where
-    server sock = do (msg, _) <- recvFrom sock 1024
-                     testMsg @=? msg
-
-    client sock = do
-        serverPort <- getPeerPort sock
-        addr <- inet_addr serverAddr
-        sendTo sock testMsg (SockAddrInet serverPort addr)
-
-testOverFlowRecvFrom :: Assertion
-testOverFlowRecvFrom = tcpTest client server
-  where
-    server sock = do (seg1, _) <- recvFrom sock (S.length testMsg - 3)
-                     (seg2, _) <- recvFrom sock 1024
-                     let msg = S.append seg1 seg2
-                     testMsg @=? msg
-
-    client sock = send sock testMsg
-
-------------------------------------------------------------------------
--- Other
-
-------------------------------------------------------------------------
--- List of all tests
-
-basicTests :: Test
-basicTests = testGroup "Basic socket operations"
-    [
-      -- Sending and receiving
-      testCase "testSend" testSend
-    , testCase "testSendAll" testSendAll
-    , testCase "testSendTo" testSendTo
-    , testCase "testSendAllTo" testSendAllTo
-    , testCase "testSendMany" testSendMany
-    , testCase "testSendManyTo" testSendManyTo
-    , testCase "testRecv" testRecv
-    , testCase "testOverFlowRecv" testOverFlowRecv
-    , testCase "testRecvFrom" testRecvFrom
-    , testCase "testOverFlowRecvFrom" testOverFlowRecvFrom
-    ]
-
-tests :: [Test]
-tests = [basicTests]
-
-------------------------------------------------------------------------
--- Test helpers
-
--- | Returns the 'PortNumber' of the peer. Will throw an 'error' if
--- used on a non-IP socket.
-getPeerPort :: Socket -> IO PortNumber
-getPeerPort sock = do
-    sockAddr <- getPeerName sock
-    case sockAddr of
-        (SockAddrInet port _) -> return port
-        (SockAddrInet6 port _ _ _) -> return port
-        _ -> error "getPeerPort: only works with IP sockets"
-
--- | Establish a connection between client and server and then run
--- 'clientAct' and 'serverAct', in different threads.  Both actions
--- get passed a connected 'Socket', used for communicating between
--- client and server.  'tcpTest' makes sure that the 'Socket' is
--- closed after the actions have run.
-tcpTest :: (Socket -> IO a) -> (Socket -> IO b) -> IO ()
-tcpTest clientAct serverAct = do
-    portVar <- newEmptyMVar
-    test (clientSetup portVar) clientAct (serverSetup portVar) server
-  where
-    clientSetup portVar = do
-        sock <- socket AF_INET Stream defaultProtocol
-        addr <- inet_addr serverAddr
-        serverPort <- readMVar portVar
-        connect sock $ SockAddrInet serverPort addr
-        return sock
-
-    serverSetup portVar = do
-        sock <- socket AF_INET Stream defaultProtocol
-        setSocketOption sock ReuseAddr 1
-        addr <- inet_addr serverAddr
-        bindSocket sock (SockAddrInet aNY_PORT addr)
-        listen sock 1
-        serverPort <- socketPort sock
-        putMVar portVar serverPort
-        return sock
-
-    server sock = do
-        (clientSock, _) <- accept sock
-        serverAct clientSock
-        sClose clientSock
-
--- | Create an unconnected 'Socket' for sending UDP and receiving
--- datagrams and then run 'clientAct' and 'serverAct'.
-udpTest :: (Socket -> PortNumber -> IO a) -> (Socket -> IO b) -> IO ()
-udpTest clientAct serverAct = do
-    portVar <- newEmptyMVar
-    test clientSetup (client portVar) (serverSetup portVar) serverAct
-  where
-    clientSetup = socket AF_INET Datagram defaultProtocol
-
-    client portVar sock = do
-        serverPort <- readMVar portVar
-        clientAct sock serverPort
-
-    serverSetup portVar = do
-        sock <- socket AF_INET Datagram defaultProtocol
-        setSocketOption sock ReuseAddr 1
-        addr <- inet_addr serverAddr
-        bindSocket sock (SockAddrInet aNY_PORT addr)
-        serverPort <- socketPort sock
-        putMVar portVar serverPort
-        return sock
-
--- | Run a client/server pair and synchronize them so that the server
--- is started before the client and the specified server action is
--- finished before the client closes the 'Socket'.
-test :: IO Socket -> (Socket -> IO b) -> IO Socket -> (Socket -> IO c) -> IO ()
-test clientSetup clientAct serverSetup serverAct = do
-    tid <- myThreadId
-    barrier <- newEmptyMVar
-    forkIO $ server barrier
-    client tid barrier
-  where
-    server barrier = do
-        E.bracket serverSetup sClose $ \sock -> do
-            serverReady
-            serverAct sock
-            putMVar barrier ()
-      where
-        -- | Signal to the client that it can proceed.
-        serverReady = putMVar barrier ()
-
-    client tid barrier = do
-        takeMVar barrier
-        -- Transfer exceptions to the main thread.
-        bracketWithReraise tid clientSetup sClose $ \res -> do
-            clientAct res
-            takeMVar barrier
-
--- | Like 'bracket' but catches and reraises the exception in another
--- thread, specified by the first argument.
-bracketWithReraise :: ThreadId -> IO a -> (a -> IO b) -> (a -> IO ()) -> IO ()
-bracketWithReraise tid before after thing =
-    E.bracket before after thing
-    `E.catch` \ (e :: E.SomeException) -> E.throwTo tid e
-
-------------------------------------------------------------------------
--- Test harness
-
-main :: IO ()
-main = withSocketsDo $ defaultMain tests
diff --git a/standalone/android/tmp/network-2.4.1.2/tests/uri001.hs b/standalone/android/tmp/network-2.4.1.2/tests/uri001.hs
deleted file mode 100644
--- a/standalone/android/tmp/network-2.4.1.2/tests/uri001.hs
+++ /dev/null
@@ -1,1431 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
---------------------------------------------------------------------------------
---  $Id: URITest.hs,v 1.8 2005/07/19 22:01:27 gklyne Exp $
---
---  Copyright (c) 2004, G. KLYNE.  All rights reserved.
---  See end of this file for licence information.
---------------------------------------------------------------------------------
--- |
---  Module      :  URITest
---  Copyright   :  (c) 2004, Graham Klyne
---  License     :  BSD-style (see end of this file)
---
---  Maintainer  :  Graham Klyne
---  Stability   :  provisional
---  Portability :  H98
---
---  This Module contains test cases for module URI.
---
---  To run this test without using Cabal to build the package
---  (2013-01-05, instructions tested on MacOS):
---  1. Install Haskell platform
---  2. cabal install test-framework
---  3. cabal install test-framework-hunit
---  4. ghc -XDeriveDataTypeable -D"MIN_VERSION_base(x,y,z)=1" ../Network/URI.hs uri001.hs
---  5. ./uri001
---
---  Previous build instructions:
---  Using GHC, I compile with this command line:
---  ghc --make -fglasgow-exts
---      -i..\;C:\Dev\Haskell\Lib\HUnit;C:\Dev\Haskell\Lib\Parsec
---      -o URITest.exe URITest -main-is URITest.main
---  The -i line may need changing for alternative installations.
---
---------------------------------------------------------------------------------
-
-module Main where
-
-import Network.URI
-    ( URI(..), URIAuth(..)
-    , nullURI
-    , parseURI, parseURIReference, parseRelativeReference, parseAbsoluteURI
-    , parseAbsoluteURI
-    , isURI, isURIReference, isRelativeReference, isAbsoluteURI
-    , uriIsAbsolute, uriIsRelative
-    , relativeTo, nonStrictRelativeTo
-    , relativeFrom
-    , uriToString
-    , isUnescapedInURIComponent
-    , isUnescapedInURI, escapeURIString, unEscapeString
-    , normalizeCase, normalizeEscape, normalizePathSegments
-    )
-
-import Test.HUnit
-
-import Data.Maybe (fromJust)
-import System.IO (openFile, IOMode(WriteMode), hClose)
-import qualified Test.Framework as TF
-import qualified Test.Framework.Providers.HUnit as TF
-import qualified Test.Framework.Providers.QuickCheck2 as TF
-
--- Test supplied string for valid URI reference syntax
---   isValidURIRef :: String -> Bool
--- Test supplied string for valid absolute URI reference syntax
---   isAbsoluteURIRef :: String -> Bool
--- Test supplied string for valid absolute URI syntax
---   isAbsoluteURI :: String -> Bool
-
-data URIType = AbsId    -- URI form (absolute, no fragment)
-             | AbsRf    -- Absolute URI reference
-             | RelRf    -- Relative URI reference
-             | InvRf    -- Invalid URI reference
-isValidT :: URIType -> Bool
-isValidT InvRf = False
-isValidT _     = True
-
-isAbsRfT :: URIType -> Bool
-isAbsRfT AbsId = True
-isAbsRfT AbsRf = True
-isAbsRfT _     = False
-
-isRelRfT :: URIType -> Bool
-isRelRfT RelRf = True
-isRelRfT _     = False
-
-isAbsIdT :: URIType -> Bool
-isAbsIdT AbsId = True
-isAbsIdT _     = False
-
-testEq :: (Eq a, Show a) => String -> a -> a -> Assertion
-testEq lab a1 a2 = assertEqual lab a1 a2
-
-testURIRef :: URIType -> String -> Assertion
-testURIRef t u = sequence_
-  [ testEq ("test_isURIReference:"++u) (isValidT t) (isURIReference u)
-  , testEq ("test_isRelativeReference:"++u)  (isRelRfT t) (isRelativeReference  u)
-  , testEq ("test_isAbsoluteURI:"++u)  (isAbsIdT t) (isAbsoluteURI  u)
-  ]
-
-testURIRefComponents :: String -> (Maybe URI) -> String -> Assertion
-testURIRefComponents _lab uv us =
-    testEq ("testURIRefComponents:"++us) uv (parseURIReference us)
-
-
-testURIRef001 = testURIRef AbsRf "http://example.org/aaa/bbb#ccc"
-testURIRef002 = testURIRef AbsId "mailto:local@domain.org"
-testURIRef003 = testURIRef AbsRf "mailto:local@domain.org#frag"
-testURIRef004 = testURIRef AbsRf "HTTP://EXAMPLE.ORG/AAA/BBB#CCC"
-testURIRef005 = testURIRef RelRf "//example.org/aaa/bbb#ccc"
-testURIRef006 = testURIRef RelRf "/aaa/bbb#ccc"
-testURIRef007 = testURIRef RelRf "bbb#ccc"
-testURIRef008 = testURIRef RelRf "#ccc"
-testURIRef009 = testURIRef RelRf "#"
-testURIRef010 = testURIRef RelRf "/"
--- escapes
-testURIRef011 = testURIRef AbsRf "http://example.org/aaa%2fbbb#ccc"
-testURIRef012 = testURIRef AbsRf "http://example.org/aaa%2Fbbb#ccc"
-testURIRef013 = testURIRef RelRf "%2F"
-testURIRef014 = testURIRef RelRf "aaa%2Fbbb"
--- ports
-testURIRef015 = testURIRef AbsRf "http://example.org:80/aaa/bbb#ccc"
-testURIRef016 = testURIRef AbsRf "http://example.org:/aaa/bbb#ccc"
-testURIRef017 = testURIRef AbsRf "http://example.org./aaa/bbb#ccc"
-testURIRef018 = testURIRef AbsRf "http://example.123./aaa/bbb#ccc"
--- bare authority
-testURIRef019 = testURIRef AbsId "http://example.org"
--- IPv6 literals (from RFC2732):
-testURIRef021 = testURIRef AbsId "http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html"
-testURIRef022 = testURIRef AbsId "http://[1080:0:0:0:8:800:200C:417A]/index.html"
-testURIRef023 = testURIRef AbsId "http://[3ffe:2a00:100:7031::1]"
-testURIRef024 = testURIRef AbsId "http://[1080::8:800:200C:417A]/foo"
-testURIRef025 = testURIRef AbsId "http://[::192.9.5.5]/ipng"
-testURIRef026 = testURIRef AbsId "http://[::FFFF:129.144.52.38]:80/index.html"
-testURIRef027 = testURIRef AbsId "http://[2010:836B:4179::836B:4179]"
-testURIRef028 = testURIRef RelRf "//[2010:836B:4179::836B:4179]"
-testURIRef029 = testURIRef InvRf "[2010:836B:4179::836B:4179]"
--- RFC2396 test cases
-testURIRef031 = testURIRef RelRf "./aaa"
-testURIRef032 = testURIRef RelRf "../aaa"
-testURIRef033 = testURIRef AbsId "g:h"
-testURIRef034 = testURIRef RelRf "g"
-testURIRef035 = testURIRef RelRf "./g"
-testURIRef036 = testURIRef RelRf "g/"
-testURIRef037 = testURIRef RelRf "/g"
-testURIRef038 = testURIRef RelRf "//g"
-testURIRef039 = testURIRef RelRf "?y"
-testURIRef040 = testURIRef RelRf "g?y"
-testURIRef041 = testURIRef RelRf "#s"
-testURIRef042 = testURIRef RelRf "g#s"
-testURIRef043 = testURIRef RelRf "g?y#s"
-testURIRef044 = testURIRef RelRf ";x"
-testURIRef045 = testURIRef RelRf "g;x"
-testURIRef046 = testURIRef RelRf "g;x?y#s"
-testURIRef047 = testURIRef RelRf "."
-testURIRef048 = testURIRef RelRf "./"
-testURIRef049 = testURIRef RelRf ".."
-testURIRef050 = testURIRef RelRf "../"
-testURIRef051 = testURIRef RelRf "../g"
-testURIRef052 = testURIRef RelRf "../.."
-testURIRef053 = testURIRef RelRf "../../"
-testURIRef054 = testURIRef RelRf "../../g"
-testURIRef055 = testURIRef RelRf "../../../g"
-testURIRef056 = testURIRef RelRf "../../../../g"
-testURIRef057 = testURIRef RelRf "/./g"
-testURIRef058 = testURIRef RelRf "/../g"
-testURIRef059 = testURIRef RelRf "g."
-testURIRef060 = testURIRef RelRf ".g"
-testURIRef061 = testURIRef RelRf "g.."
-testURIRef062 = testURIRef RelRf "..g"
-testURIRef063 = testURIRef RelRf "./../g"
-testURIRef064 = testURIRef RelRf "./g/."
-testURIRef065 = testURIRef RelRf "g/./h"
-testURIRef066 = testURIRef RelRf "g/../h"
-testURIRef067 = testURIRef RelRf "g;x=1/./y"
-testURIRef068 = testURIRef RelRf "g;x=1/../y"
-testURIRef069 = testURIRef RelRf "g?y/./x"
-testURIRef070 = testURIRef RelRf "g?y/../x"
-testURIRef071 = testURIRef RelRf "g#s/./x"
-testURIRef072 = testURIRef RelRf "g#s/../x"
-testURIRef073 = testURIRef RelRf ""
-testURIRef074 = testURIRef RelRf "A'C"
-testURIRef075 = testURIRef RelRf "A$C"
-testURIRef076 = testURIRef RelRf "A@C"
-testURIRef077 = testURIRef RelRf "A,C"
--- Invalid
-testURIRef080 = testURIRef InvRf "http://foo.org:80Path/More"
-testURIRef081 = testURIRef InvRf "::"
-testURIRef082 = testURIRef InvRf " "
-testURIRef083 = testURIRef InvRf "%"
-testURIRef084 = testURIRef InvRf "A%Z"
-testURIRef085 = testURIRef InvRf "%ZZ"
-testURIRef086 = testURIRef InvRf "%AZ"
-testURIRef087 = testURIRef InvRf "A C"
--- testURIRef088 = -- (case removed)
--- testURIRef089 = -- (case removed)
-testURIRef090 = testURIRef InvRf "A\"C"
-testURIRef091 = testURIRef InvRf "A`C"
-testURIRef092 = testURIRef InvRf "A<C"
-testURIRef093 = testURIRef InvRf "A>C"
-testURIRef094 = testURIRef InvRf "A^C"
-testURIRef095 = testURIRef InvRf "A\\C"
-testURIRef096 = testURIRef InvRf "A{C"
-testURIRef097 = testURIRef InvRf "A|C"
-testURIRef098 = testURIRef InvRf "A}C"
--- From RFC2396:
--- rel_segment   = 1*( unreserved | escaped |
---                     ";" | "@" | "&" | "=" | "+" | "$" | "," )
--- unreserved    = alphanum | mark
--- mark          = "-" | "_" | "." | "!" | "~" | "*" | "'" |
---                 "(" | ")"
--- Note RFC 2732 allows '[', ']' ONLY for reserved purpose of IPv6 literals,
--- or does it?
-testURIRef101 = testURIRef InvRf "A[C"
-testURIRef102 = testURIRef InvRf "A]C"
-testURIRef103 = testURIRef InvRf "A[**]C"
-testURIRef104 = testURIRef InvRf "http://[xyz]/"
-testURIRef105 = testURIRef InvRf "http://]/"
-testURIRef106 = testURIRef InvRf "http://example.org/[2010:836B:4179::836B:4179]"
-testURIRef107 = testURIRef InvRf "http://example.org/abc#[2010:836B:4179::836B:4179]"
-testURIRef108 = testURIRef InvRf "http://example.org/xxx/[qwerty]#a[b]"
--- Random other things that crop up
-testURIRef111 = testURIRef AbsRf "http://example/Andr&#567;"
-testURIRef112 = testURIRef AbsId "file:///C:/DEV/Haskell/lib/HXmlToolbox-3.01/examples/"
-testURIRef113 = testURIRef AbsId "http://46229EFFE16A9BD60B9F1BE88B2DB047ADDED785/demo.mp3"
-testURIRef114 = testURIRef InvRf "http://example.org/xxx/qwerty#a#b"
-testURIRef115 = testURIRef InvRf "dcp.tcp.pft://192.168.0.1:1002:3002?fec=1&crc=0"
-testURIRef116 = testURIRef AbsId "dcp.tcp.pft://192.168.0.1:1002?fec=1&crc=0"
-testURIRef117 = testURIRef AbsId "foo://"
--- URIs prefixed with IPv4 addresses
-testURIRef118 = testURIRef AbsId "http://192.168.0.1.example.com/"
-testURIRef119 = testURIRef AbsId "http://192.168.0.1.example.com./"
--- URI prefixed with 3 octets of an IPv4 address and a subdomain part with a leading digit.
-testURIRef120 = testURIRef AbsId "http://192.168.0.1test.example.com/"
--- URI with IPv(future) address
-testURIRef121 = testURIRef AbsId "http://[v9.123.abc;456.def]/"
-testURIRef122 = testEq "v.future authority" 
-                       (Just (URIAuth "" "[v9.123.abc;456.def]" ":42"))
-                       ((maybe Nothing uriAuthority) . parseURI $ "http://[v9.123.abc;456.def]:42/") 
--- URI with non-ASCII characters, fail with Network.HTTP escaping code (see below)
--- Currently not supported by Network.URI, but captured here for possible future reference
--- when IRI support may be added.
-testURIRef123 = testURIRef AbsId "http://example.com/test123/䡥汬漬⁗潲汤/index.html"
-testURIRef124 = testURIRef AbsId "http://example.com/test124/Москва/index.html"
-
--- From report by Alexander Ivanov:
--- should return " 䡥汬漬⁗潲汤", but returns "Hello, World" instead
--- print $ urlDecode $ urlEncode " 䡥汬漬⁗潲汤"
--- should return "Москва"
--- print $ urlDecode $ urlEncode "Москва"
-
-testURIRefSuite = TF.testGroup "Test URIrefs" testURIRefList
-testURIRefList =
-  [ TF.testCase "testURIRef001" testURIRef001
-  , TF.testCase "testURIRef002" testURIRef002
-  , TF.testCase "testURIRef003" testURIRef003
-  , TF.testCase "testURIRef004" testURIRef004
-  , TF.testCase "testURIRef005" testURIRef005
-  , TF.testCase "testURIRef006" testURIRef006
-  , TF.testCase "testURIRef007" testURIRef007
-  , TF.testCase "testURIRef008" testURIRef008
-  , TF.testCase "testURIRef009" testURIRef009
-  , TF.testCase "testURIRef010" testURIRef010
-    --
-  , TF.testCase "testURIRef011" testURIRef011
-  , TF.testCase "testURIRef012" testURIRef012
-  , TF.testCase "testURIRef013" testURIRef013
-  , TF.testCase "testURIRef014" testURIRef014
-  , TF.testCase "testURIRef015" testURIRef015
-  , TF.testCase "testURIRef016" testURIRef016
-  , TF.testCase "testURIRef017" testURIRef017
-  , TF.testCase "testURIRef018" testURIRef018
-    --
-  , TF.testCase "testURIRef019" testURIRef019
-    --
-  , TF.testCase "testURIRef021" testURIRef021
-  , TF.testCase "testURIRef022" testURIRef022
-  , TF.testCase "testURIRef023" testURIRef023
-  , TF.testCase "testURIRef024" testURIRef024
-  , TF.testCase "testURIRef025" testURIRef025
-  , TF.testCase "testURIRef026" testURIRef026
-  , TF.testCase "testURIRef027" testURIRef027
-  , TF.testCase "testURIRef028" testURIRef028
-  , TF.testCase "testURIRef029" testURIRef029
-    --
-  , TF.testCase "testURIRef031" testURIRef031
-  , TF.testCase "testURIRef032" testURIRef032
-  , TF.testCase "testURIRef033" testURIRef033
-  , TF.testCase "testURIRef034" testURIRef034
-  , TF.testCase "testURIRef035" testURIRef035
-  , TF.testCase "testURIRef036" testURIRef036
-  , TF.testCase "testURIRef037" testURIRef037
-  , TF.testCase "testURIRef038" testURIRef038
-  , TF.testCase "testURIRef039" testURIRef039
-  , TF.testCase "testURIRef040" testURIRef040
-  , TF.testCase "testURIRef041" testURIRef041
-  , TF.testCase "testURIRef042" testURIRef042
-  , TF.testCase "testURIRef043" testURIRef043
-  , TF.testCase "testURIRef044" testURIRef044
-  , TF.testCase "testURIRef045" testURIRef045
-  , TF.testCase "testURIRef046" testURIRef046
-  , TF.testCase "testURIRef047" testURIRef047
-  , TF.testCase "testURIRef048" testURIRef048
-  , TF.testCase "testURIRef049" testURIRef049
-  , TF.testCase "testURIRef050" testURIRef050
-  , TF.testCase "testURIRef051" testURIRef051
-  , TF.testCase "testURIRef052" testURIRef052
-  , TF.testCase "testURIRef053" testURIRef053
-  , TF.testCase "testURIRef054" testURIRef054
-  , TF.testCase "testURIRef055" testURIRef055
-  , TF.testCase "testURIRef056" testURIRef056
-  , TF.testCase "testURIRef057" testURIRef057
-  , TF.testCase "testURIRef058" testURIRef058
-  , TF.testCase "testURIRef059" testURIRef059
-  , TF.testCase "testURIRef060" testURIRef060
-  , TF.testCase "testURIRef061" testURIRef061
-  , TF.testCase "testURIRef062" testURIRef062
-  , TF.testCase "testURIRef063" testURIRef063
-  , TF.testCase "testURIRef064" testURIRef064
-  , TF.testCase "testURIRef065" testURIRef065
-  , TF.testCase "testURIRef066" testURIRef066
-  , TF.testCase "testURIRef067" testURIRef067
-  , TF.testCase "testURIRef068" testURIRef068
-  , TF.testCase "testURIRef069" testURIRef069
-  , TF.testCase "testURIRef070" testURIRef070
-  , TF.testCase "testURIRef071" testURIRef071
-  , TF.testCase "testURIRef072" testURIRef072
-  , TF.testCase "testURIRef073" testURIRef073
-  , TF.testCase "testURIRef074" testURIRef074
-  , TF.testCase "testURIRef075" testURIRef075
-  , TF.testCase "testURIRef076" testURIRef076
-  , TF.testCase "testURIRef077" testURIRef077
-    --
-  , TF.testCase "testURIRef080" testURIRef080
-  , TF.testCase "testURIRef081" testURIRef081
-  , TF.testCase "testURIRef082" testURIRef082
-  , TF.testCase "testURIRef083" testURIRef083
-  , TF.testCase "testURIRef084" testURIRef084
-  , TF.testCase "testURIRef085" testURIRef085
-  , TF.testCase "testURIRef086" testURIRef086
-  , TF.testCase "testURIRef087" testURIRef087
-    -- testURIRef088,
-    -- testURIRef089,
-  , TF.testCase "testURIRef090" testURIRef090
-  , TF.testCase "testURIRef091" testURIRef091
-  , TF.testCase "testURIRef092" testURIRef092
-  , TF.testCase "testURIRef093" testURIRef093
-  , TF.testCase "testURIRef094" testURIRef094
-  , TF.testCase "testURIRef095" testURIRef095
-  , TF.testCase "testURIRef096" testURIRef096
-  , TF.testCase "testURIRef097" testURIRef097
-  , TF.testCase "testURIRef098" testURIRef098
-    -- testURIRef099,
-    --
-  , TF.testCase "testURIRef101" testURIRef101
-  , TF.testCase "testURIRef102" testURIRef102
-  , TF.testCase "testURIRef103" testURIRef103
-  , TF.testCase "testURIRef104" testURIRef104
-  , TF.testCase "testURIRef105" testURIRef105
-  , TF.testCase "testURIRef106" testURIRef106
-  , TF.testCase "testURIRef107" testURIRef107
-  , TF.testCase "testURIRef108" testURIRef108
-    --
-  , TF.testCase "testURIRef111" testURIRef111
-  , TF.testCase "testURIRef112" testURIRef112
-  , TF.testCase "testURIRef113" testURIRef113
-  , TF.testCase "testURIRef114" testURIRef114
-  , TF.testCase "testURIRef115" testURIRef115
-  , TF.testCase "testURIRef116" testURIRef116
-  , TF.testCase "testURIRef117" testURIRef117
-    --
-  , TF.testCase "testURIRef118" testURIRef118
-  , TF.testCase "testURIRef119" testURIRef119
-  , TF.testCase "testURIRef120" testURIRef120
-    --
-  , TF.testCase "testURIRef121" testURIRef121
-  , TF.testCase "testURIRef122" testURIRef122
-    -- IRI test cases not currently supported
-  -- , TF.testCase "testURIRef123" testURIRef123
-  -- , TF.testCase "testURIRef124" testURIRef124
-  ]
-
--- test decomposition of URI into components
-testComponent01 = testURIRefComponents "testComponent01"
-        ( Just $ URI
-            { uriScheme    = "http:"
-            , uriAuthority = Just (URIAuth "user:pass@" "example.org" ":99")
-            , uriPath      = "/aaa/bbb"
-            , uriQuery     = "?qqq"
-            , uriFragment  = "#fff"
-            } )
-        "http://user:pass@example.org:99/aaa/bbb?qqq#fff"
-testComponent02 = testURIRefComponents "testComponent02"
-        ( const Nothing
-        ( Just $ URI
-            { uriScheme    = "http:"
-            , uriAuthority = Just (URIAuth "user:pass@" "example.org" ":99")
-            , uriPath      = "aaa/bbb"
-            , uriQuery     = ""
-            , uriFragment  = ""
-            } )
-        )
-        "http://user:pass@example.org:99aaa/bbb"
-testComponent03 = testURIRefComponents "testComponent03"
-        ( Just $ URI
-            { uriScheme    = "http:"
-            , uriAuthority = Just (URIAuth "user:pass@" "example.org" ":99")
-            , uriPath      = ""
-            , uriQuery     = "?aaa/bbb"
-            , uriFragment  = ""
-            } )
-        "http://user:pass@example.org:99?aaa/bbb"
-testComponent04 = testURIRefComponents "testComponent03"
-        ( Just $ URI
-            { uriScheme    = "http:"
-            , uriAuthority = Just (URIAuth "user:pass@" "example.org" ":99")
-            , uriPath      = ""
-            , uriQuery     = ""
-            , uriFragment  = "#aaa/bbb"
-            } )
-        "http://user:pass@example.org:99#aaa/bbb"
--- These test cases contributed by Robert Buck (mathworks.com)
-testComponent11 = testURIRefComponents "testComponent03"
-        ( Just $ URI
-            { uriScheme    = "about:"
-            , uriAuthority = Nothing
-            , uriPath      = ""
-            , uriQuery     = ""
-            , uriFragment  = ""
-            } )
-        "about:"
-testComponent12 = testURIRefComponents "testComponent03"
-        ( Just $ URI
-            { uriScheme    = "file:"
-            , uriAuthority = Just (URIAuth "" "windowsauth" "")
-            , uriPath      = "/d$"
-            , uriQuery     = ""
-            , uriFragment  = ""
-            } )
-        "file://windowsauth/d$"
-
-testComponentSuite = TF.testGroup "Test URIrefs" $
-  [ TF.testCase "testComponent01" testComponent01
-  , TF.testCase "testComponent02" testComponent02
-  , TF.testCase "testComponent03" testComponent03
-  , TF.testCase "testComponent04" testComponent04
-  , TF.testCase "testComponent11" testComponent11
-  , TF.testCase "testComponent12" testComponent12
-  ]
-
--- Get reference relative to given base
---   relativeRef :: String -> String -> String
---
--- Get absolute URI given base and relative reference
---   absoluteURI :: String -> String -> String
---
--- Test cases taken from: http://www.w3.org/2000/10/swap/uripath.py
--- (Thanks, Dan Connolly)
---
--- NOTE:  absoluteURI base (relativeRef base u) is always equivalent to u.
--- cf. http://lists.w3.org/Archives/Public/uri/2003Jan/0008.html
-
-testRelSplit :: String -> String -> String -> String -> Assertion
-testRelSplit label base uabs urel =
-    testEq label urel (mkrel puabs pubas)
-    where
-        mkrel (Just u1) (Just u2) = show (u1 `relativeFrom` u2)
-        mkrel Nothing   _         = "Invalid URI: "++urel
-        mkrel _         Nothing   = "Invalid URI: "++uabs
-        puabs = parseURIReference uabs
-        pubas = parseURIReference base
-
-testRelJoin  :: String -> String -> String -> String -> Assertion
-testRelJoin label base urel uabs =
-    testEq label uabs (mkabs purel pubas)
-    where
-        mkabs (Just u1) (Just u2) = show (u1 `relativeTo` u2)
-        mkabs Nothing   _         = "Invalid URI: "++urel
-        mkabs _         Nothing   = "Invalid URI: "++uabs
-        purel = parseURIReference urel
-        pubas = parseURIReference base
-
-testRelative :: String -> String -> String -> String -> Assertion
-testRelative label base uabs urel = sequence_
-    [
-    (testRelSplit (label++"(rel)") base uabs urel),
-    (testRelJoin  (label++"(abs)") base urel uabs)
-    ]
-
-testRelative01 = testRelative "testRelative01"
-                    "foo:xyz" "bar:abc" "bar:abc"
-testRelative02 = testRelative "testRelative02"
-                    "http://example/x/y/z" "http://example/x/abc" "../abc"
-testRelative03 = testRelative "testRelative03"
-                    "http://example2/x/y/z" "http://example/x/abc" "//example/x/abc"
-                    -- "http://example2/x/y/z" "http://example/x/abc" "http://example/x/abc"
-testRelative04 = testRelative "testRelative04"
-                    "http://ex/x/y/z" "http://ex/x/r" "../r"
-testRelative05 = testRelative "testRelative05"
-                    "http://ex/x/y/z" "http://ex/r" "/r"
-                    -- "http://ex/x/y/z" "http://ex/r" "../../r"
-testRelative06 = testRelative "testRelative06"
-                    "http://ex/x/y/z" "http://ex/x/y/q/r" "q/r"
-testRelative07 = testRelative "testRelative07"
-                    "http://ex/x/y" "http://ex/x/q/r#s" "q/r#s"
-testRelative08 = testRelative "testRelative08"
-                    "http://ex/x/y" "http://ex/x/q/r#s/t" "q/r#s/t"
-testRelative09 = testRelative "testRelative09"
-                    "http://ex/x/y" "ftp://ex/x/q/r" "ftp://ex/x/q/r"
-testRelative10 = testRelative "testRelative10"
-                    -- "http://ex/x/y" "http://ex/x/y" "y"
-                    "http://ex/x/y" "http://ex/x/y" ""
-testRelative11 = testRelative "testRelative11"
-                    -- "http://ex/x/y/" "http://ex/x/y/" "./"
-                    "http://ex/x/y/" "http://ex/x/y/" ""
-testRelative12 = testRelative "testRelative12"
-                    -- "http://ex/x/y/pdq" "http://ex/x/y/pdq" "pdq"
-                    "http://ex/x/y/pdq" "http://ex/x/y/pdq" ""
-testRelative13 = testRelative "testRelative13"
-                    "http://ex/x/y/" "http://ex/x/y/z/" "z/"
-testRelative14 = testRelative "testRelative14"
-                    -- "file:/swap/test/animal.rdf" "file:/swap/test/animal.rdf#Animal" "animal.rdf#Animal"
-                    "file:/swap/test/animal.rdf" "file:/swap/test/animal.rdf#Animal" "#Animal"
-testRelative15 = testRelative "testRelative15"
-                    "file:/e/x/y/z" "file:/e/x/abc" "../abc"
-testRelative16 = testRelative "testRelative16"
-                    "file:/example2/x/y/z" "file:/example/x/abc" "/example/x/abc"
-testRelative17 = testRelative "testRelative17"
-                    "file:/ex/x/y/z" "file:/ex/x/r" "../r"
-testRelative18 = testRelative "testRelative18"
-                    "file:/ex/x/y/z" "file:/r" "/r"
-testRelative19 = testRelative "testRelative19"
-                    "file:/ex/x/y" "file:/ex/x/q/r" "q/r"
-testRelative20 = testRelative "testRelative20"
-                    "file:/ex/x/y" "file:/ex/x/q/r#s" "q/r#s"
-testRelative21 = testRelative "testRelative21"
-                    "file:/ex/x/y" "file:/ex/x/q/r#" "q/r#"
-testRelative22 = testRelative "testRelative22"
-                    "file:/ex/x/y" "file:/ex/x/q/r#s/t" "q/r#s/t"
-testRelative23 = testRelative "testRelative23"
-                    "file:/ex/x/y" "ftp://ex/x/q/r" "ftp://ex/x/q/r"
-testRelative24 = testRelative "testRelative24"
-                    -- "file:/ex/x/y" "file:/ex/x/y" "y"
-                    "file:/ex/x/y" "file:/ex/x/y" ""
-testRelative25 = testRelative "testRelative25"
-                    -- "file:/ex/x/y/" "file:/ex/x/y/" "./"
-                    "file:/ex/x/y/" "file:/ex/x/y/" ""
-testRelative26 = testRelative "testRelative26"
-                    -- "file:/ex/x/y/pdq" "file:/ex/x/y/pdq" "pdq"
-                    "file:/ex/x/y/pdq" "file:/ex/x/y/pdq" ""
-testRelative27 = testRelative "testRelative27"
-                    "file:/ex/x/y/" "file:/ex/x/y/z/" "z/"
-testRelative28 = testRelative "testRelative28"
-                    "file:/devel/WWW/2000/10/swap/test/reluri-1.n3"
-                    "file://meetings.example.com/cal#m1" "//meetings.example.com/cal#m1"
-                    -- "file:/devel/WWW/2000/10/swap/test/reluri-1.n3"
-                    -- "file://meetings.example.com/cal#m1" "file://meetings.example.com/cal#m1"
-testRelative29 = testRelative "testRelative29"
-                    "file:/home/connolly/w3ccvs/WWW/2000/10/swap/test/reluri-1.n3"
-                    "file://meetings.example.com/cal#m1" "//meetings.example.com/cal#m1"
-                    -- "file:/home/connolly/w3ccvs/WWW/2000/10/swap/test/reluri-1.n3"
-                    -- "file://meetings.example.com/cal#m1" "file://meetings.example.com/cal#m1"
-testRelative30 = testRelative "testRelative30"
-                    "file:/some/dir/foo" "file:/some/dir/#blort" "./#blort"
-testRelative31 = testRelative "testRelative31"
-                    "file:/some/dir/foo" "file:/some/dir/#" "./#"
-testRelative32 = testRelative "testRelative32"
-                    "http://ex/x/y" "http://ex/x/q:r" "./q:r"
-                    -- see RFC2396bis, section 5       ^^
-testRelative33 = testRelative "testRelative33"
-                    "http://ex/x/y" "http://ex/x/p=q:r" "./p=q:r"
-                    -- "http://ex/x/y" "http://ex/x/p=q:r" "p=q:r"
-testRelative34 = testRelative "testRelative34"
-                    "http://ex/x/y?pp/qq" "http://ex/x/y?pp/rr" "?pp/rr"
-testRelative35 = testRelative "testRelative35"
-                    "http://ex/x/y?pp/qq" "http://ex/x/y/z" "y/z"
-testRelative36 = testRelative "testRelative36"
-                    "mailto:local"
-                    "mailto:local/qual@domain.org#frag"
-                    "local/qual@domain.org#frag"
-testRelative37 = testRelative "testRelative37"
-                    "mailto:local/qual1@domain1.org"
-                    "mailto:local/more/qual2@domain2.org#frag"
-                    "more/qual2@domain2.org#frag"
-testRelative38 = testRelative "testRelative38"
-                    "http://ex/x/z?q" "http://ex/x/y?q" "y?q"
-testRelative39 = testRelative "testRelative39"
-                    "http://ex?p" "http://ex/x/y?q" "/x/y?q"
-testRelative40 = testRelative "testRelative40"
-                    "foo:a/b" "foo:a/c/d" "c/d"
-testRelative41 = testRelative "testRelative41"
-                    "foo:a/b" "foo:/c/d" "/c/d"
-testRelative42 = testRelative "testRelative42"
-                    "foo:a/b?c#d" "foo:a/b?c" ""
-testRelative43 = testRelative "testRelative42"
-                    "foo:a" "foo:b/c" "b/c"
-testRelative44 = testRelative "testRelative44"
-                    "foo:/a/y/z" "foo:/a/b/c" "../b/c"
-testRelative45 = testRelJoin "testRelative45"
-                    "foo:a" "./b/c" "foo:b/c"
-testRelative46 = testRelJoin "testRelative46"
-                    "foo:a" "/./b/c" "foo:/b/c"
-testRelative47 = testRelJoin "testRelative47"
-                    "foo://a//b/c" "../../d" "foo://a/d"
-testRelative48 = testRelJoin "testRelative48"
-                    "foo:a" "." "foo:"
-testRelative49 = testRelJoin "testRelative49"
-                    "foo:a" ".." "foo:"
-
--- add escape tests
-testRelative50 = testRelative "testRelative50"
-                    "http://example/x/y%2Fz" "http://example/x/abc" "abc"
-testRelative51 = testRelative "testRelative51"
-                    "http://example/a/x/y/z" "http://example/a/x%2Fabc" "../../x%2Fabc"
-testRelative52 = testRelative "testRelative52"
-                    "http://example/a/x/y%2Fz" "http://example/a/x%2Fabc" "../x%2Fabc"
-testRelative53 = testRelative "testRelative53"
-                    "http://example/x%2Fy/z" "http://example/x%2Fy/abc" "abc"
-testRelative54 = testRelative "testRelative54"
-                    "http://ex/x/y" "http://ex/x/q%3Ar" "q%3Ar"
-testRelative55 = testRelative "testRelative55"
-                    "http://example/x/y%2Fz" "http://example/x%2Fabc" "/x%2Fabc"
--- Apparently, TimBL prefers the following way to 41, 42 above
--- cf. http://lists.w3.org/Archives/Public/uri/2003Feb/0028.html
--- He also notes that there may be different relative fuctions
--- that satisfy the basic equivalence axiom:
--- cf. http://lists.w3.org/Archives/Public/uri/2003Jan/0008.html
-testRelative56 = testRelative "testRelative56"
-                    "http://example/x/y/z" "http://example/x%2Fabc" "/x%2Fabc"
-testRelative57 = testRelative "testRelative57"
-                    "http://example/x/y%2Fz" "http://example/x%2Fabc" "/x%2Fabc"
-
--- Other oddball tests
-    -- Check segment normalization code:
-testRelative60 = testRelJoin "testRelative60"
-                    "ftp://example/x/y" "http://example/a/b/../../c" "http://example/c"
-testRelative61 = testRelJoin "testRelative61"
-                    "ftp://example/x/y" "http://example/a/b/c/../../" "http://example/a/"
-testRelative62 = testRelJoin "testRelative62"
-                    "ftp://example/x/y" "http://example/a/b/c/./" "http://example/a/b/c/"
-testRelative63 = testRelJoin "testRelative63"
-                    "ftp://example/x/y" "http://example/a/b/c/.././" "http://example/a/b/"
-testRelative64 = testRelJoin "testRelative64"
-                    "ftp://example/x/y" "http://example/a/b/c/d/../../../../e" "http://example/e"
-testRelative65 = testRelJoin "testRelative65"
-                    "ftp://example/x/y" "http://example/a/b/c/d/../.././../../e" "http://example/e"
-    -- Check handling of queries and fragments with non-relative paths
-testRelative70 = testRelative "testRelative70"
-                    "mailto:local1@domain1?query1" "mailto:local2@domain2"
-                    "local2@domain2"
-testRelative71 = testRelative "testRelative71"
-                    "mailto:local1@domain1" "mailto:local2@domain2?query2"
-                    "local2@domain2?query2"
-testRelative72 = testRelative "testRelative72"
-                    "mailto:local1@domain1?query1" "mailto:local2@domain2?query2"
-                    "local2@domain2?query2"
-testRelative73 = testRelative "testRelative73"
-                    "mailto:local@domain?query1" "mailto:local@domain?query2"
-                    "?query2"
-testRelative74 = testRelative "testRelative74"
-                    "mailto:?query1" "mailto:local@domain?query2"
-                    "local@domain?query2"
-testRelative75 = testRelative "testRelative75"
-                    "mailto:local@domain?query1" "mailto:local@domain?query2"
-                    "?query2"
-testRelative76 = testRelative "testRelative76"
-                    "foo:bar" "http://example/a/b?c/../d"  "http://example/a/b?c/../d"
-testRelative77 = testRelative "testRelative77"
-                    "foo:bar" "http://example/a/b#c/../d"  "http://example/a/b#c/../d"
-{- These (78-81) are some awkward test cases thrown up by a question on the URI list:
-     http://lists.w3.org/Archives/Public/uri/2005Jul/0013
-   Mote that RFC 3986 discards path segents after the final '/' only when merging two
-   paths - otherwise the final segment in the base URI is mnaintained.  This leads to
-   difficulty in constructinmg a reversible relativeTo/relativeFrom pair of functions.
--}
-testRelative78 = testRelative "testRelative78"
-                    "http://www.example.com/data/limit/.." "http://www.example.com/data/limit/test.xml"
-                    "test.xml"
-testRelative79 = testRelative "testRelative79"
-                    "file:/some/dir/foo" "file:/some/dir/#blort" "./#blort"
-testRelative80 = testRelative "testRelative80"
-                    "file:/some/dir/foo" "file:/some/dir/#" "./#"
-testRelative81 = testRelative "testRelative81"
-                    "file:/some/dir/.." "file:/some/dir/#blort" "./#blort"
-
--- testRelative  base abs rel
--- testRelSplit  base abs rel
--- testRelJoin   base rel abs
-testRelative91 = testRelSplit "testRelative91"
-                    "http://example.org/base/uri" "http:this"
-                    "this"
-testRelative92 = testRelJoin "testRelative92"
-                    "http://example.org/base/uri" "http:this"
-                    "http:this"
-testRelative93 = testRelJoin "testRelative93"
-                    "http:base" "http:this"
-                    "http:this"
-testRelative94 = testRelJoin "testRelative94"
-                    "f:/a" ".//g"
-                    "f://g"
-testRelative95 = testRelJoin "testRelative95"
-                    "f://example.org/base/a" "b/c//d/e"
-                    "f://example.org/base/b/c//d/e"
-testRelative96 = testRelJoin "testRelative96"
-                    "mid:m@example.ord/c@example.org" "m2@example.ord/c2@example.org"
-                    "mid:m@example.ord/m2@example.ord/c2@example.org"
-testRelative97 = testRelJoin "testRelative97"
-                    "file:///C:/DEV/Haskell/lib/HXmlToolbox-3.01/examples/" "mini1.xml"
-                    "file:///C:/DEV/Haskell/lib/HXmlToolbox-3.01/examples/mini1.xml"
-testRelative98 = testRelative "testRelative98"
-                    "foo:a/y/z" "foo:a/b/c" "../b/c"
-testRelative99 = testRelJoin "testRelative99"
-                    "f:/a/" "..//g"
-                    "f://g"
-
-
-testRelativeSuite = TF.testGroup "Test Relative URIs" testRelativeList
-testRelativeList  =
-  [ TF.testCase "testRelative01" testRelative01
-  , TF.testCase "testRelative02" testRelative02
-  , TF.testCase "testRelative03" testRelative03
-  , TF.testCase "testRelative04" testRelative04
-  , TF.testCase "testRelative05" testRelative05
-  , TF.testCase "testRelative06" testRelative06
-  , TF.testCase "testRelative07" testRelative07
-  , TF.testCase "testRelative08" testRelative08
-  , TF.testCase "testRelative09" testRelative09
-  , TF.testCase "testRelative10" testRelative10
-  , TF.testCase "testRelative11" testRelative11
-  , TF.testCase "testRelative12" testRelative12
-  , TF.testCase "testRelative13" testRelative13
-  , TF.testCase "testRelative14" testRelative14
-  , TF.testCase "testRelative15" testRelative15
-  , TF.testCase "testRelative16" testRelative16
-  , TF.testCase "testRelative17" testRelative17
-  , TF.testCase "testRelative18" testRelative18
-  , TF.testCase "testRelative19" testRelative19
-  , TF.testCase "testRelative20" testRelative20
-  , TF.testCase "testRelative21" testRelative21
-  , TF.testCase "testRelative22" testRelative22
-  , TF.testCase "testRelative23" testRelative23
-  , TF.testCase "testRelative24" testRelative24
-  , TF.testCase "testRelative25" testRelative25
-  , TF.testCase "testRelative26" testRelative26
-  , TF.testCase "testRelative27" testRelative27
-  , TF.testCase "testRelative28" testRelative28
-  , TF.testCase "testRelative29" testRelative29
-  , TF.testCase "testRelative30" testRelative30
-  , TF.testCase "testRelative31" testRelative31
-  , TF.testCase "testRelative32" testRelative32
-  , TF.testCase "testRelative33" testRelative33
-  , TF.testCase "testRelative34" testRelative34
-  , TF.testCase "testRelative35" testRelative35
-  , TF.testCase "testRelative36" testRelative36
-  , TF.testCase "testRelative37" testRelative37
-  , TF.testCase "testRelative38" testRelative38
-  , TF.testCase "testRelative39" testRelative39
-  , TF.testCase "testRelative40" testRelative40
-  , TF.testCase "testRelative41" testRelative41
-  , TF.testCase "testRelative42" testRelative42
-  , TF.testCase "testRelative43" testRelative43
-  , TF.testCase "testRelative44" testRelative44
-  , TF.testCase "testRelative45" testRelative45
-  , TF.testCase "testRelative46" testRelative46
-  , TF.testCase "testRelative47" testRelative47
-  , TF.testCase "testRelative48" testRelative48
-  , TF.testCase "testRelative49" testRelative49
-    --
-  , TF.testCase "testRelative50" testRelative50
-  , TF.testCase "testRelative51" testRelative51
-  , TF.testCase "testRelative52" testRelative52
-  , TF.testCase "testRelative53" testRelative53
-  , TF.testCase "testRelative54" testRelative54
-  , TF.testCase "testRelative55" testRelative55
-  , TF.testCase "testRelative56" testRelative56
-  , TF.testCase "testRelative57" testRelative57
-    --
-  , TF.testCase "testRelative60" testRelative60
-  , TF.testCase "testRelative61" testRelative61
-  , TF.testCase "testRelative62" testRelative62
-  , TF.testCase "testRelative63" testRelative63
-  , TF.testCase "testRelative64" testRelative64
-  , TF.testCase "testRelative65" testRelative65
-    --
-  , TF.testCase "testRelative70" testRelative70
-  , TF.testCase "testRelative71" testRelative71
-  , TF.testCase "testRelative72" testRelative72
-  , TF.testCase "testRelative73" testRelative73
-  , TF.testCase "testRelative74" testRelative74
-  , TF.testCase "testRelative75" testRelative75
-  , TF.testCase "testRelative76" testRelative76
-  , TF.testCase "testRelative77" testRelative77
-  -- Awkward cases:
-  , TF.testCase "testRelative78" testRelative78
-  , TF.testCase "testRelative79" testRelative79
-  , TF.testCase "testRelative80" testRelative80
-  , TF.testCase "testRelative81" testRelative81
-    --
-  -- , TF.testCase "testRelative90" testRelative90
-  , TF.testCase "testRelative91" testRelative91
-  , TF.testCase "testRelative92" testRelative92
-  , TF.testCase "testRelative93" testRelative93
-  , TF.testCase "testRelative94" testRelative94
-  , TF.testCase "testRelative95" testRelative95
-  , TF.testCase "testRelative96" testRelative96
-  , TF.testCase "testRelative97" testRelative97
-  , TF.testCase "testRelative98" testRelative98
-  , TF.testCase "testRelative99" testRelative99
-  ]
-
--- RFC2396 relative-to-absolute URI tests
-
-rfcbase  = "http://a/b/c/d;p?q"
--- normal cases, RFC2396bis 5.4.1
-testRFC01 = testRelJoin "testRFC01" rfcbase "g:h" "g:h"
-testRFC02 = testRelJoin "testRFC02" rfcbase "g" "http://a/b/c/g"
-testRFC03 = testRelJoin "testRFC03" rfcbase "./g" "http://a/b/c/g"
-testRFC04 = testRelJoin "testRFC04" rfcbase "g/" "http://a/b/c/g/"
-testRFC05 = testRelJoin "testRFC05" rfcbase "/g" "http://a/g"
-testRFC06 = testRelJoin "testRFC06" rfcbase "//g" "http://g"
-testRFC07 = testRelJoin "testRFC07" rfcbase "?y" "http://a/b/c/d;p?y"
-testRFC08 = testRelJoin "testRFC08" rfcbase "g?y" "http://a/b/c/g?y"
-testRFC09 = testRelJoin "testRFC09" rfcbase "?q#s" "http://a/b/c/d;p?q#s"
-testRFC23 = testRelJoin "testRFC10" rfcbase "#s" "http://a/b/c/d;p?q#s"
-testRFC10 = testRelJoin "testRFC11" rfcbase "g#s" "http://a/b/c/g#s"
-testRFC11 = testRelJoin "testRFC12" rfcbase "g?y#s" "http://a/b/c/g?y#s"
-testRFC12 = testRelJoin "testRFC13" rfcbase ";x" "http://a/b/c/;x"
-testRFC13 = testRelJoin "testRFC14" rfcbase "g;x" "http://a/b/c/g;x"
-testRFC14 = testRelJoin "testRFC15" rfcbase "g;x?y#s" "http://a/b/c/g;x?y#s"
-testRFC24 = testRelJoin "testRFC16" rfcbase "" "http://a/b/c/d;p?q"
-testRFC15 = testRelJoin "testRFC17" rfcbase "." "http://a/b/c/"
-testRFC16 = testRelJoin "testRFC18" rfcbase "./" "http://a/b/c/"
-testRFC17 = testRelJoin "testRFC19" rfcbase ".." "http://a/b/"
-testRFC18 = testRelJoin "testRFC20" rfcbase "../" "http://a/b/"
-testRFC19 = testRelJoin "testRFC21" rfcbase "../g" "http://a/b/g"
-testRFC20 = testRelJoin "testRFC22" rfcbase "../.." "http://a/"
-testRFC21 = testRelJoin "testRFC23" rfcbase "../../" "http://a/"
-testRFC22 = testRelJoin "testRFC24" rfcbase "../../g" "http://a/g"
--- abnormal cases, RFC2396bis 5.4.2
-testRFC31 = testRelJoin "testRFC31" rfcbase "?q" rfcbase
-testRFC32 = testRelJoin "testRFC32" rfcbase "../../../g" "http://a/g"
-testRFC33 = testRelJoin "testRFC33" rfcbase "../../../../g" "http://a/g"
-testRFC34 = testRelJoin "testRFC34" rfcbase "/./g" "http://a/g"
-testRFC35 = testRelJoin "testRFC35" rfcbase "/../g" "http://a/g"
-testRFC36 = testRelJoin "testRFC36" rfcbase "g." "http://a/b/c/g."
-testRFC37 = testRelJoin "testRFC37" rfcbase ".g" "http://a/b/c/.g"
-testRFC38 = testRelJoin "testRFC38" rfcbase "g.." "http://a/b/c/g.."
-testRFC39 = testRelJoin "testRFC39" rfcbase "..g" "http://a/b/c/..g"
-testRFC40 = testRelJoin "testRFC40" rfcbase "./../g" "http://a/b/g"
-testRFC41 = testRelJoin "testRFC41" rfcbase "./g/." "http://a/b/c/g/"
-testRFC42 = testRelJoin "testRFC42" rfcbase "g/./h" "http://a/b/c/g/h"
-testRFC43 = testRelJoin "testRFC43" rfcbase "g/../h" "http://a/b/c/h"
-testRFC44 = testRelJoin "testRFC44" rfcbase "g;x=1/./y" "http://a/b/c/g;x=1/y"
-testRFC45 = testRelJoin "testRFC45" rfcbase "g;x=1/../y" "http://a/b/c/y"
-testRFC46 = testRelJoin "testRFC46" rfcbase "g?y/./x" "http://a/b/c/g?y/./x"
-testRFC47 = testRelJoin "testRFC47" rfcbase "g?y/../x" "http://a/b/c/g?y/../x"
-testRFC48 = testRelJoin "testRFC48" rfcbase "g#s/./x" "http://a/b/c/g#s/./x"
-testRFC49 = testRelJoin "testRFC49" rfcbase "g#s/../x" "http://a/b/c/g#s/../x"
-testRFC50 = testRelJoin "testRFC50" rfcbase "http:x" "http:x"
-
--- Null path tests
--- See RFC2396bis, section 5.2,
--- "If the base URI's path component is the empty string, then a single
---  slash character is copied to the buffer"
-testRFC60 = testRelative "testRFC60" "http://ex"     "http://ex/x/y?q" "/x/y?q"
-testRFC61 = testRelJoin  "testRFC61" "http://ex"     "x/y?q"           "http://ex/x/y?q"
-testRFC62 = testRelative "testRFC62" "http://ex?p"   "http://ex/x/y?q" "/x/y?q"
-testRFC63 = testRelJoin  "testRFC63" "http://ex?p"   "x/y?q"           "http://ex/x/y?q"
-testRFC64 = testRelative "testRFC64" "http://ex#f"   "http://ex/x/y?q" "/x/y?q"
-testRFC65 = testRelJoin  "testRFC65" "http://ex#f"   "x/y?q"           "http://ex/x/y?q"
-testRFC66 = testRelative "testRFC66" "http://ex?p"   "http://ex/x/y#g" "/x/y#g"
-testRFC67 = testRelJoin  "testRFC67" "http://ex?p"   "x/y#g"           "http://ex/x/y#g"
-testRFC68 = testRelative "testRFC68" "http://ex"     "http://ex/"      "/"
-testRFC69 = testRelJoin  "testRFC69" "http://ex"     "./"              "http://ex/"
-testRFC70 = testRelative "testRFC70" "http://ex"     "http://ex/a/b"   "/a/b"
-testRFC71 = testRelative "testRFC71" "http://ex/a/b" "http://ex"       "./"
-
-testRFC2396Suite = TF.testGroup "Test RFC2396 examples" testRFC2396List
-testRFC2396List  =
-  [ TF.testCase "testRFC01" testRFC01
-  , TF.testCase "testRFC02" testRFC02
-  , TF.testCase "testRFC03" testRFC03
-  , TF.testCase "testRFC04" testRFC04
-  , TF.testCase "testRFC05" testRFC05
-  , TF.testCase "testRFC06" testRFC06
-  , TF.testCase "testRFC07" testRFC07
-  , TF.testCase "testRFC08" testRFC08
-  , TF.testCase "testRFC09" testRFC09
-  , TF.testCase "testRFC10" testRFC10
-  , TF.testCase "testRFC11" testRFC11
-  , TF.testCase "testRFC12" testRFC12
-  , TF.testCase "testRFC13" testRFC13
-  , TF.testCase "testRFC14" testRFC14
-  , TF.testCase "testRFC15" testRFC15
-  , TF.testCase "testRFC16" testRFC16
-  , TF.testCase "testRFC17" testRFC17
-  , TF.testCase "testRFC18" testRFC18
-  , TF.testCase "testRFC19" testRFC19
-  , TF.testCase "testRFC20" testRFC20
-  , TF.testCase "testRFC21" testRFC21
-  , TF.testCase "testRFC22" testRFC22
-  , TF.testCase "testRFC23" testRFC23
-  , TF.testCase "testRFC24" testRFC24
-    -- testRFC30,
-  , TF.testCase "testRFC31" testRFC31
-  , TF.testCase "testRFC32" testRFC32
-  , TF.testCase "testRFC33" testRFC33
-  , TF.testCase "testRFC34" testRFC34
-  , TF.testCase "testRFC35" testRFC35
-  , TF.testCase "testRFC36" testRFC36
-  , TF.testCase "testRFC37" testRFC37
-  , TF.testCase "testRFC38" testRFC38
-  , TF.testCase "testRFC39" testRFC39
-  , TF.testCase "testRFC40" testRFC40
-  , TF.testCase "testRFC41" testRFC41
-  , TF.testCase "testRFC42" testRFC42
-  , TF.testCase "testRFC43" testRFC43
-  , TF.testCase "testRFC44" testRFC44
-  , TF.testCase "testRFC45" testRFC45
-  , TF.testCase "testRFC46" testRFC46
-  , TF.testCase "testRFC47" testRFC47
-  , TF.testCase "testRFC48" testRFC48
-  , TF.testCase "testRFC49" testRFC49
-  , TF.testCase "testRFC50" testRFC50
-    --
-  , TF.testCase "testRFC60" testRFC60
-  , TF.testCase "testRFC61" testRFC61
-  , TF.testCase "testRFC62" testRFC62
-  , TF.testCase "testRFC63" testRFC63
-  , TF.testCase "testRFC64" testRFC64
-  , TF.testCase "testRFC65" testRFC65
-  , TF.testCase "testRFC66" testRFC66
-  , TF.testCase "testRFC67" testRFC67
-  , TF.testCase "testRFC68" testRFC68
-  , TF.testCase "testRFC69" testRFC69
-  , TF.testCase "testRFC70" testRFC70
-  ]
-
--- And some other oddballs:
-mailbase = "mailto:local/option@domain.org?notaquery#frag"
-testMail01 = testRelJoin "testMail01"
-            mailbase "more@domain"
-            "mailto:local/more@domain"
-testMail02 = testRelJoin "testMail02"
-            mailbase "#newfrag"
-            "mailto:local/option@domain.org?notaquery#newfrag"
-testMail03 = testRelJoin "testMail03"
-            mailbase "l1/q1@domain"
-            "mailto:local/l1/q1@domain"
-
-testMail11 = testRelJoin "testMail11"
-             "mailto:local1@domain1?query1" "mailto:local2@domain2"
-             "mailto:local2@domain2"
-testMail12 = testRelJoin "testMail12"
-             "mailto:local1@domain1" "mailto:local2@domain2?query2"
-             "mailto:local2@domain2?query2"
-testMail13 = testRelJoin "testMail13"
-             "mailto:local1@domain1?query1" "mailto:local2@domain2?query2"
-             "mailto:local2@domain2?query2"
-testMail14 = testRelJoin "testMail14"
-             "mailto:local@domain?query1" "mailto:local@domain?query2"
-             "mailto:local@domain?query2"
-testMail15 = testRelJoin "testMail15"
-             "mailto:?query1" "mailto:local@domain?query2"
-             "mailto:local@domain?query2"
-testMail16 = testRelJoin "testMail16"
-             "mailto:local@domain?query1" "?query2"
-             "mailto:local@domain?query2"
-testInfo17 = testRelJoin "testInfo17"
-             "info:name/1234/../567" "name/9876/../543"
-             "info:name/name/543"
-testInfo18 = testRelJoin "testInfo18"
-             "info:/name/1234/../567" "name/9876/../543"
-             "info:/name/name/543"
-
-testOddballSuite = TF.testGroup "Test oddball examples" testOddballList
-testOddballList  =
-  [ TF.testCase "testMail01" testMail01
-  , TF.testCase "testMail02" testMail02
-  , TF.testCase "testMail03" testMail03
-  , TF.testCase "testMail11" testMail11
-  , TF.testCase "testMail12" testMail12
-  , TF.testCase "testMail13" testMail13
-  , TF.testCase "testMail14" testMail14
-  , TF.testCase "testMail15" testMail15
-  , TF.testCase "testMail16" testMail16
-  , TF.testCase "testInfo17" testInfo17
-  ]
-
---  Normalization tests
-
---  Case normalization; cf. RFC2396bis section 6.2.2.1
---  NOTE:  authority case normalization is not performed
-testNormalize01 = testEq "testNormalize01"
-                  "http://EXAMPLE.com/Root/%2A?%2B#%2C"
-                  (normalizeCase "HTTP://EXAMPLE.com/Root/%2a?%2b#%2c")
-
---  Encoding normalization; cf. RFC2396bis section 6.2.2.2
-testNormalize11 = testEq "testNormalize11"
-                  "HTTP://EXAMPLE.com/Root/~Me/"
-                  (normalizeEscape "HTTP://EXAMPLE.com/Root/%7eMe/")
-testNormalize12 = testEq "testNormalize12"
-                  "foo:%40AZ%5b%60az%7b%2f09%3a-._~"
-                  (normalizeEscape "foo:%40%41%5a%5b%60%61%7a%7b%2f%30%39%3a%2d%2e%5f%7e")
-testNormalize13 = testEq "testNormalize13"
-                  "foo:%3a%2f%3f%23%5b%5d%40"
-                  (normalizeEscape "foo:%3a%2f%3f%23%5b%5d%40")
-
---  Path segment normalization; cf. RFC2396bis section 6.2.2.4
-testNormalize21 = testEq "testNormalize21"
-                    "http://example/c"
-                    (normalizePathSegments "http://example/a/b/../../c")
-testNormalize22 = testEq "testNormalize22"
-                    "http://example/a/"
-                    (normalizePathSegments "http://example/a/b/c/../../")
-testNormalize23 = testEq "testNormalize23"
-                    "http://example/a/b/c/"
-                    (normalizePathSegments "http://example/a/b/c/./")
-testNormalize24 = testEq "testNormalize24"
-                    "http://example/a/b/"
-                    (normalizePathSegments "http://example/a/b/c/.././")
-testNormalize25 = testEq "testNormalize25"
-                    "http://example/e"
-                    (normalizePathSegments "http://example/a/b/c/d/../../../../e")
-testNormalize26 = testEq "testNormalize26"
-                    "http://example/e"
-                    (normalizePathSegments "http://example/a/b/c/d/../.././../../e")
-testNormalize27 = testEq "testNormalize27"
-                    "http://example/e"
-                    (normalizePathSegments "http://example/a/b/../.././../../e")
-testNormalize28 = testEq "testNormalize28"
-                    "foo:e"
-                    (normalizePathSegments "foo:a/b/../.././../../e")
-
-testNormalizeSuite = TF.testGroup "testNormalizeSuite"
-  [ TF.testCase "testNormalize01" testNormalize01
-  , TF.testCase "testNormalize11" testNormalize11
-  , TF.testCase "testNormalize12" testNormalize12
-  , TF.testCase "testNormalize13" testNormalize13
-  , TF.testCase "testNormalize21" testNormalize21
-  , TF.testCase "testNormalize22" testNormalize22
-  , TF.testCase "testNormalize23" testNormalize23
-  , TF.testCase "testNormalize24" testNormalize24
-  , TF.testCase "testNormalize25" testNormalize25
-  , TF.testCase "testNormalize26" testNormalize26
-  , TF.testCase "testNormalize27" testNormalize27
-  , TF.testCase "testNormalize28" testNormalize28
-  ]
-
--- URI formatting (show) tests
-
-ts02URI = URI   { uriScheme    = "http:"
-                , uriAuthority = Just (URIAuth "user:pass@" "example.org" ":99")
-                , uriPath      = "/aaa/bbb"
-                , uriQuery     = "?ccc"
-                , uriFragment  = "#ddd/eee"
-                }
-
-ts04URI = URI   { uriScheme    = "http:"
-                , uriAuthority = Just (URIAuth "user:anonymous@" "example.org" ":99")
-                , uriPath      = "/aaa/bbb"
-                , uriQuery     = "?ccc"
-                , uriFragment  = "#ddd/eee"
-                }
-
-ts02str = "http://user:...@example.org:99/aaa/bbb?ccc#ddd/eee"
-ts03str = "http://user:pass@example.org:99/aaa/bbb?ccc#ddd/eee"
-ts04str = "http://user:...@example.org:99/aaa/bbb?ccc#ddd/eee"
-
-testShowURI01 = testEq "testShowURI01" ""      (show nullURI)
-testShowURI02 = testEq "testShowURI02" ts02str (show ts02URI)
-testShowURI03 = testEq "testShowURI03" ts03str ((uriToString id ts02URI) "")
-testShowURI04 = testEq "testShowURI04" ts04str (show ts04URI)
-
-testShowURI = TF.testGroup "testShowURI"
-  [ TF.testCase "testShowURI01" testShowURI01
-  , TF.testCase "testShowURI02" testShowURI02
-  , TF.testCase "testShowURI03" testShowURI03
-  , TF.testCase "testShowURI04" testShowURI04
-  ]
-
-
--- URI escaping tests
-
-te01str = "http://example.org/az/09-_/.~:/?#[]@!$&'()*+,;="
-te02str = "http://example.org/a</b>/c%/d /e"
-te02esc = "http://example.org/a%3C/b%3E/c%25/d%20/e"
-
-testEscapeURIString01 = testEq "testEscapeURIString01"
-    te01str (escapeURIString isUnescapedInURI te01str)
-
-testEscapeURIString02 = testEq "testEscapeURIString02"
-    te02esc (escapeURIString isUnescapedInURI te02str)
-
-testEscapeURIString03 = testEq "testEscapeURIString03"
-    te01str (unEscapeString te01str)
-
-testEscapeURIString04 = testEq "testEscapeURIString04"
-    te02str (unEscapeString te02esc)
-
-testEscapeURIString05 = testEq "testEscapeURIString05"
-    "http%3A%2F%2Fexample.org%2Faz%2F09-_%2F.~%3A%2F%3F%23%5B%5D%40%21%24%26%27%28%29%2A%2B%2C%3B%3D"
-    (escapeURIString isUnescapedInURIComponent te01str)
-
-testEscapeURIString06 = testEq "testEscapeURIString06"
-    "hello%C3%B8%C2%A9%E6%97%A5%E6%9C%AC"
-    (escapeURIString isUnescapedInURIComponent "helloø©日本")
-
-propEscapeUnEscapeLoop :: String -> Bool
-propEscapeUnEscapeLoop s = s == (unEscapeString $! escaped)
-	where
-	escaped = escapeURIString (const False) s
-	{-# NOINLINE escaped #-}
-
-testEscapeURIString = TF.testGroup "testEscapeURIString"
-  [ TF.testCase "testEscapeURIString01" testEscapeURIString01
-  , TF.testCase "testEscapeURIString02" testEscapeURIString02
-  , TF.testCase "testEscapeURIString03" testEscapeURIString03
-  , TF.testCase "testEscapeURIString04" testEscapeURIString04
-  , TF.testCase "testEscapeURIString05" testEscapeURIString05
-  , TF.testCase "testEscapeURIString06" testEscapeURIString06
-  , TF.testProperty "propEscapeUnEscapeLoop" propEscapeUnEscapeLoop
-  ]
-
--- URI string normalization tests
-
-tn01str = "eXAMPLE://a/b/%7bfoo%7d"
-tn01nrm = "example://a/b/%7Bfoo%7D"
-
-tn02str = "example://a/b/%63/"
-tn02nrm = "example://a/b/c/"
-
-tn03str = "example://a/./b/../b/c/foo"
-tn03nrm = "example://a/b/c/foo"
-
-tn04str = "eXAMPLE://a/b/%7bfoo%7d"     -- From RFC2396bis, 6.2.2
-tn04nrm = "example://a/b/%7Bfoo%7D"
-
-tn06str = "file:/x/..//y"
-tn06nrm = "file://y"
-
-tn07str = "file:x/..//y/"
-tn07nrm = "file:/y/"
-
-testNormalizeURIString01 = testEq "testNormalizeURIString01"
-    tn01nrm (normalizeCase tn01str)
-testNormalizeURIString02 = testEq "testNormalizeURIString02"
-    tn02nrm (normalizeEscape tn02str)
-testNormalizeURIString03 = testEq "testNormalizeURIString03"
-    tn03nrm (normalizePathSegments tn03str)
-testNormalizeURIString04 = testEq "testNormalizeURIString04"
-    tn04nrm ((normalizeCase . normalizeEscape . normalizePathSegments) tn04str)
-testNormalizeURIString05 = testEq "testNormalizeURIString05"
-    tn04nrm ((normalizePathSegments . normalizeEscape . normalizeCase) tn04str)
-testNormalizeURIString06 = testEq "testNormalizeURIString06"
-    tn06nrm (normalizePathSegments tn06str)
-testNormalizeURIString07 = testEq "testNormalizeURIString07"
-    tn07nrm (normalizePathSegments tn07str)
-
-testNormalizeURIString = TF.testGroup "testNormalizeURIString"
-  [ TF.testCase "testNormalizeURIString01" testNormalizeURIString01
-  , TF.testCase "testNormalizeURIString02" testNormalizeURIString02
-  , TF.testCase "testNormalizeURIString03" testNormalizeURIString03
-  , TF.testCase "testNormalizeURIString04" testNormalizeURIString04
-  , TF.testCase "testNormalizeURIString05" testNormalizeURIString05
-  , TF.testCase "testNormalizeURIString06" testNormalizeURIString06
-  , TF.testCase "testNormalizeURIString07" testNormalizeURIString07
-  ]
-
--- Test strict vs non-strict relativeTo logic
-
-trbase = fromJust $ parseURIReference "http://bar.org/"
-
-testRelativeTo01 = testEq "testRelativeTo01"
-    "http://bar.org/foo"
-    (show $
-      (fromJust $ parseURIReference "foo") `relativeTo` trbase)
-
-testRelativeTo02 = testEq "testRelativeTo02"
-    "http:foo"
-    (show $
-      (fromJust $ parseURIReference "http:foo") `relativeTo` trbase)
-
-testRelativeTo03 = testEq "testRelativeTo03"
-    "http://bar.org/foo"
-    (show $
-      (fromJust $ parseURIReference "http:foo") `nonStrictRelativeTo` trbase)
-
-testRelativeTo = TF.testGroup "testRelativeTo"
-  [ TF.testCase "testRelativeTo01" testRelativeTo01
-  , TF.testCase "testRelativeTo02" testRelativeTo02
-  , TF.testCase "testRelativeTo03" testRelativeTo03
-  ]
-
--- Test alternative parsing functions
-testAltFn01 = testEq "testAltFn01" "Just http://a.b/c#f"
-    (show . parseURI $ "http://a.b/c#f")
-testAltFn02 = testEq "testAltFn02" "Just http://a.b/c#f"
-    (show . parseURIReference $ "http://a.b/c#f")
-testAltFn03 = testEq "testAltFn03" "Just c/d#f"
-    (show . parseRelativeReference $ "c/d#f")
-testAltFn04 = testEq "testAltFn04" "Nothing"
-    (show . parseRelativeReference $ "http://a.b/c#f")
-testAltFn05 = testEq "testAltFn05" "Just http://a.b/c"
-    (show . parseAbsoluteURI $ "http://a.b/c")
-testAltFn06 = testEq "testAltFn06" "Nothing"
-    (show . parseAbsoluteURI $ "http://a.b/c#f")
-testAltFn07 = testEq "testAltFn07" "Nothing"
-    (show . parseAbsoluteURI $ "c/d")
-testAltFn08 = testEq "testAltFn08" "Just http://a.b/c"
-    (show . parseAbsoluteURI $ "http://a.b/c")
-
-testAltFn11 = testEq "testAltFn11" True  (isURI "http://a.b/c#f")
-testAltFn12 = testEq "testAltFn12" True  (isURIReference "http://a.b/c#f")
-testAltFn13 = testEq "testAltFn13" True  (isRelativeReference "c/d#f")
-testAltFn14 = testEq "testAltFn14" False (isRelativeReference "http://a.b/c#f")
-testAltFn15 = testEq "testAltFn15" True  (isAbsoluteURI "http://a.b/c")
-testAltFn16 = testEq "testAltFn16" False (isAbsoluteURI "http://a.b/c#f")
-testAltFn17 = testEq "testAltFn17" False (isAbsoluteURI "c/d")
-
-testAltFn = TF.testGroup "testAltFn"
-  [ TF.testCase "testAltFn01" testAltFn01
-  , TF.testCase "testAltFn02" testAltFn02
-  , TF.testCase "testAltFn03" testAltFn03
-  , TF.testCase "testAltFn04" testAltFn04
-  , TF.testCase "testAltFn05" testAltFn05
-  , TF.testCase "testAltFn06" testAltFn06
-  , TF.testCase "testAltFn07" testAltFn07
-  , TF.testCase "testAltFn08" testAltFn08
-  , TF.testCase "testAltFn11" testAltFn11
-  , TF.testCase "testAltFn12" testAltFn12
-  , TF.testCase "testAltFn13" testAltFn13
-  , TF.testCase "testAltFn14" testAltFn14
-  , TF.testCase "testAltFn15" testAltFn15
-  , TF.testCase "testAltFn16" testAltFn16
-  , TF.testCase "testAltFn17" testAltFn17
-  ]
-
-testUriIsAbsolute :: String -> Assertion
-testUriIsAbsolute str =
-    assertBool str (uriIsAbsolute uri)
-    where
-    Just uri = parseURIReference str
-
-testUriIsRelative :: String -> Assertion
-testUriIsRelative str =
-    assertBool str (uriIsRelative uri)
-    where
-    Just uri = parseURIReference str
-
-testIsAbsolute = TF.testGroup "testIsAbsolute"
-  [ TF.testCase "testIsAbsolute01" $ testUriIsAbsolute "http://google.com"
-  , TF.testCase "testIsAbsolute02" $ testUriIsAbsolute "ftp://p.x.ca/woo?hai=a"
-  , TF.testCase "testIsAbsolute03" $ testUriIsAbsolute "mailto:bob@example.com"
-  ]
-
-testIsRelative = TF.testGroup "testIsRelative"
-  [ TF.testCase "testIsRelative01" $ testUriIsRelative "//google.com"
-  , TF.testCase "testIsRelative02" $ testUriIsRelative "/hello"
-  , TF.testCase "testIsRelative03" $ testUriIsRelative "this/is/a/path"
-  , TF.testCase "testIsRelative04" $ testUriIsRelative "?what=that"
-  ]
-
--- Full test suite
-allTests =
-  [ testURIRefSuite
-  , testComponentSuite
-  , testRelativeSuite
-  , testRFC2396Suite
-  , testOddballSuite
-  , testNormalizeSuite
-  , testShowURI
-  , testEscapeURIString
-  , testNormalizeURIString
-  , testRelativeTo
-  , testAltFn
-  , testIsAbsolute
-  , testIsRelative
-  ]
-
-main = TF.defaultMain allTests
-
-runTestFile t = do
-    h <- openFile "a.tmp" WriteMode
-    _ <- runTestText (putTextToHandle h False) t
-    hClose h
-tf = runTestFile
-tt = runTestTT
-
--- Miscellaneous values for hand-testing/debugging in Hugs:
-
-uref = testURIRefSuite
-tr01 = testRelative01
-tr02 = testRelative02
-tr03 = testRelative03
-tr04 = testRelative04
-rel  = testRelativeSuite
-rfc  = testRFC2396Suite
-oddb = testOddballSuite
-
-(Just bu02) = parseURIReference "http://example/x/y/z"
-(Just ou02) = parseURIReference "../abc"
-(Just ru02) = parseURIReference "http://example/x/abc"
--- fileuri = testURIReference "file:///C:/DEV/Haskell/lib/HXmlToolbox-3.01/examples/"
-
-cu02 = ou02 `relativeTo` bu02
-
---------------------------------------------------------------------------------
---
---  Copyright (c) 2004, G. KLYNE.  All rights reserved.
---  Distributed as free software under the following license.
---
---  Redistribution and use in source and binary forms, with or without
---  modification, are permitted provided that the following conditions
---  are met:
---
---  - Redistributions of source code must retain the above copyright notice,
---  this list of conditions and the following disclaimer.
---
---  - Redistributions in binary form must reproduce the above copyright
---  notice, this list of conditions and the following disclaimer in the
---  documentation and/or other materials provided with the distribution.
---
---  - Neither name of the copyright holders nor the names of its
---  contributors may be used to endorse or promote products derived from
---  this software without specific prior written permission.
---
---  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND THE CONTRIBUTORS
---  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
---  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
---  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
---  HOLDERS OR THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
---  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
---  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
---  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
---  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
---  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
---  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---
---------------------------------------------------------------------------------
--- $Source: /srv/cvs/cvs.haskell.org/fptools/libraries/network/tests/URITest.hs,v $
--- $Author: gklyne $
--- $Revision: 1.8 $
--- $Log: URITest.hs,v $
--- Revision 1.81 2012/08/01           aaronfriel
--- Added additional test case for the "xip.io" service style URLs and absolute URLs prefixed with ipv4 addresses.
---
--- Revision 1.8  2005/07/19 22:01:27  gklyne
--- Added some additional test cases raised by discussion on URI@w3.org mailing list about 2005-07-19.  The test p[roposed by this discussion exposed a subtle bug in relativeFrom not being an exact inverse of relativeTo.
---
--- Revision 1.7  2005/06/06 16:31:44  gklyne
--- Added two new test cases.
---
--- Revision 1.6  2005/05/31 17:18:36  gklyne
--- Added some additional test cases triggered by URI-list discussions.
---
--- Revision 1.5  2005/04/07 11:09:37  gklyne
--- Added test cases for alternate parsing functions (including deprecated 'parseabsoluteURI')
---
--- Revision 1.4  2005/04/05 12:47:32  gklyne
--- Added test case.
--- Changed module name, now requires GHC -main-is to compile.
--- All tests run OK with GHC 6.4 on MS-Windows.
---
--- Revision 1.3  2004/11/05 17:29:09  gklyne
--- Changed password-obscuring logic to reflect late change in revised URI
--- specification (password "anonymous" is no longer a special case).
--- Updated URI test module to use function 'escapeURIString'.
--- (Should unEscapeString be similarly updated?)
---
--- Revision 1.2  2004/10/27 13:06:55  gklyne
--- Updated URI module function names per:
--- http://www.haskell.org//pipermail/cvs-libraries/2004-October/002916.html
--- Added test cases to give better covereage of module functions.
---
--- Revision 1.1  2004/10/14 16:11:30  gklyne
--- Add URI unit test to cvs.haskell.org repository
---
--- Revision 1.17  2004/10/14 11:51:09  graham
--- Confirm that URITest runs with GHC.
--- Fix up some comments and other minor details.
---
--- Revision 1.16  2004/10/14 11:45:30  graham
--- Use moduke name main for GHC 6.2
---
--- Revision 1.15  2004/08/11 11:07:39  graham
--- Add new test case.
---
--- Revision 1.14  2004/06/30 11:35:27  graham
--- Update URI code to use hierarchical libraries for Parsec and Network.
---
--- Revision 1.13  2004/06/22 16:19:16  graham
--- New URI test case added.
---
--- Revision 1.12  2004/04/21 15:13:29  graham
--- Add test case
---
--- Revision 1.11  2004/04/21 14:54:05  graham
--- Fix up some tests
---
--- Revision 1.10  2004/04/20 14:54:13  graham
--- Fix up test cases related to port number in authority,
--- and add some more URI decomposition tests.
---
--- Revision 1.9  2004/04/07 15:06:17  graham
--- Add extra test case
--- Revise syntax in line with changes to RFC2396bis
---
--- Revision 1.8  2004/03/17 14:34:58  graham
--- Add Network.HTTP files to CVS
---
--- Revision 1.7  2004/03/16 14:19:38  graham
--- Change licence to BSD style;  add nullURI definition; new test cases.
---
--- Revision 1.6  2004/02/20 12:12:00  graham
--- Add URI normalization functions
---
--- Revision 1.5  2004/02/19 23:19:35  graham
--- Network.URI module passes all test cases
---
--- Revision 1.4  2004/02/17 20:06:02  graham
--- Revised URI parser to reflect latest RFC2396bis (-04)
---
--- Revision 1.3  2004/02/11 14:32:14  graham
--- Added work-in-progress notes.
---
--- Revision 1.2  2004/02/02 14:00:39  graham
--- Fix optional host name in URI.  Add test cases.
---
--- Revision 1.1  2004/01/27 21:13:45  graham
--- New URI module and test suite added,
--- implementing the GHC Network.URI interface.
---
