kn      !" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | }~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                       ! "!#!$!%!&!'!(")#*#+#,#-#.#/#0#1#2#3#4#5#6#7#8#9#:#;#<#=#>#?#@#A#B#C#D#E#F#G$H$I$J$K$L$M$N$O$P$Q$R$S$T$U$V$W$X$Y$Z$[$\$]$^$_$`$a$b$c$d$e$f$g$h%i%j%k%l%m%n%o%p%q%r%s%t%u%v%w%x%y%z%{%|%}%~%%%%%%%%%%%%%%&&&&&&&'(((((()******************************************++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + + + +++++++++++++++++++ +!+"+#+$,%,&,',(,),*,+,,,-,.,/,0,1-2-3-4-5-6-7-8-9-:-;-<-=->-?-@-A.B.C.D.E.F.G.H/I0J0K0L0M0N0O0P0Q0R0S0T0U0V1W1X2Y2Z2[2\2]3^4_5`5a5b5c5d5e5f5g6h6i6j6k6l6m6@Safe7Safe+4 nopqrstuvwx nopqrstuvnoqpprstuvwxSafeM*The function we want to pass a FilePath to%The text that the file should containThe function's return valueNone*NSafe+ yz{|        yz{|NoneMA wrapper around a String containing a known parsable URI. Not absolutely safe, because you could say read "URI' "bogus string"" :: URI'. But enough to save me from myself.Using the bogus Show instance of URI here. If it ever gets fixed this will stop working. Worth noting that show will obscure any password info embedded in the URI, so that's nice.}Parse the text returned when a directory is listed by a web server. This is currently only known to work with Apache. NOTE: there is a second copy of this function in Extra:Extra.Net. Please update both locations if you make changes. ~} ~}Safe  ! !!  ! None*3579 An example"A class of Bs insterspersed with Cs. It is used when converting the cabal dependencies to debian, where the "around" type is the binary package name and the "between" type is the version number.Minimum implementation is a method to return the leftmost B, and another to return the following (C,B) pairs. Its unfortunate to require lists in the implementation, a fold function would be better (though I find implementing such folds to be a pain in the you-know-what.)oThe class provides implementations of three folds, each of which exposes slightly different views of the data. "#$%&'("#$%&'("#$%&'("#$%&'( Safe)*+,-)*+,-)*+,-)*+,- NoneM`_withMethod - run |methodPath| bracketed with openMethod/closeMethod. |f| gets the open handle.adwhichMethodBinary - find the method executable associated with a URI throws an exception on failuregCfetch a single item, show console output see also: getLastModifiedhset of callbacks which do nothing. suitable for non-interactive usage. In the case authorization is required, no credentials will be supplied and the download should abort.X./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij=./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijB`_adebcjfg./012345678hi;<=>?@AIJKPTVWXBCDEFGHLMNOLMNOQRSLU^]\[ZY:9.. /0123456789:;<=>?@AIJKPTVWXBCDEFGHLMNOLMNOQRSLUYZ[\]^_`abcdefghij Safe+kA package's subsection is only evident in its control information, packages from different subsections all reside in the same index.oA section of a repository such as main, contrib, non-free, restricted. The indexes for a section are located below the distribution directory.qA distribution (aka release) name. This type is expected to refer to a subdirectory of the dists directory which is at the top level of a repository.y$Parse the value that appears in the Section= field of a .changes file. (Does this need to be unesacped?)klmnopqrstuvwxyzklmnopqrstuvwxyzqrstuopklmnvwxyz klmnopqrstuvwxyz Safe{$This function belongs in Cabal, see  2http://hackage.haskell.org/trac/hackage/ticket/935.{|{|{|{|Safe-345}This type is wrapped around values before we pretty print them so we can write our own Pretty instances for common types without polluting the name space of clients of this package with instances they don't want. }~}~}~}~None345N  filepath+ is a simple wrapper function that parses filepath using pControl  sourceName handle -  sourceName! is only used for error reportingparseControlFromString  sourceName text -  sourceName! is only used for error reporting fieldName paragraph looks up a  in a . N.B.$ trailing and leading whitespace is not stripped.]Strip the trailing and leading space and tab characters from a string. Folded whitespace is notL unfolded. This should probably be moved to someplace more general purpose.Protect field value text so the parser doesn't split it into multiple fields or paragraphs. This must modify all field text to enforce two conditions: (1) All lines other than the initial one must begin with a space or a tab, and (2) the trailing white space must not contain newlines. This is called before pretty printing to prevent the parser from misinterpreting field text as multiple fields or paragraphs.NNOTE: we do not strip the leading or trailing whitespace in the name or valueLines beginning with #BThis can usually be used as the implementation of protectFieldText5Move selected fields to the beginning of a paragraph.5Run a command and parse its output as a control file.ilook up the md5sum file in a paragraph Tries several different variations: MD5Sum: Md5Sum: MD5sum:bThis may have bad performance issues (dsf: Whoever wrote this comment should have explained why.)!None47MN(#None35NparseFromFile p filePath runs a string parser p on the input read from filePath using . Returns either a  ParseError () or a value of type a ().  main = do{ result <- parseFromFile numbers "digits.txt" ; case result of Left err -> print err Right xs -> print (sum xs) }None35N8A parser for debian control file. This parser handles control files that end without a newline as well as ones that have several blank lines at the end. It is very liberal and does not attempt validate the fields in any way. All trailing, leading, and folded whitespace is preserved in the field values. See .We are liberal in that we allow *any* field to have folded white space, even though the specific restricts that to a few fields.xWe go with the assumption that 'blank lines' mean lines that consist of entirely of zero or more whitespace characters.  NoneSafe35uThis is a name given to a combination of parts of one or more releases that can be specified by a sources.list file.XquoteWords - similar to words, but with special handling of double-quotes and brackets.pThe handling double quotes and [] is supposed to match: apt-0.6.44.2/apt-pkg/contrib/strutl.cc:ParseQuoteWord() The behaviour can be defined as:Break the string into space seperated words ignoring spaces that appear between "" or []. Strip trailing and leading white space around words. Strip out double quotes, but leave the square brackets intact.zparseSourceLine -- parses a source line the argument must be a non-empty, valid source line with comments stripped see:  None35DWe have to do this wackiness because ~ is less than the empty stringConvert a string to a debian version number. May throw an exception if the string is unparsable -- but I am not sure if that can currently happen. Are there any invalid version strings? Perhaps ones with underscore, or something?Split a DebianVersion into its three components: epoch, version, revision. It is not safe to use the parsed version number for this because you will lose information, such as leading zeros.  8None9None35:None;None  None35+A changelog is a series of ChangeLogEntries"The parser here never returns this5An entry in the list of files generated by the build.OA file generated by dpkg-buildpackage describing the result of a package build=The full pathname of the directory holding the .changes file.3The package name parsed from the .changes file name5The version number parsed from the .changes file name+The Distribution field of the .changes file3The architecture parsed from the .changes file name!The contents of the .changes file3The value of the Changes field of the .changes file'The parsed value of the Files attributeCShow just the top line of a changelog entry (for debugging output.)GParse the entries of a debian changelog and verify they are all valid.:Parse a Debian Changelog and return a lazy list of entriesKParse a single changelog entry, returning the entry and the remaining text.nParse the changelog information that shows up in the .changes file, i.e. a changelog entry with no signature.4     $$       None?Apply a filter to the version numbers of the changelog entries.-Filter out versions newer than the given one.*Find the log entry with the given version.None+345i parse a debian relation (i.e. the value of a Depends field). Return a parsec error or a value of type   XThis needs to be indented for use in a control file: intercalate "n " . lines . show:Check if a version number satisfies a version requirement.Wrap }I around type synonyms that might overlap with the `Pretty [a]` instance.eThe sort order is based on version number first, then on the kind of relation, sorting in the order , <= , ==, >= ,)          )          None35MfIgnore the ! if it is present, we already know this list has at least one, and the rest are implicit.    <None  =None  >None$  $   ?None*+35  !"#$%  !"#$%None+357Describes a mapping from cabal package name and version to debian package names. For example, versions of the cabal QuickCheck package less than 2 are mapped to "quickcheck1", while version 2 or greater is mapped to "quickcheck2".&>The Debian name given to versions older than the oldest split.'Each pair is The version where the split occurs, and the name to use for versions greater than or equal to that version. This list assumed to be in (must be kept in) ascending version number order.`The base of a debian binary package name, the string that appears between "libghc-" and "-dev".!fCreate a version split database that assigns a single debian package name base to all cabal versions."?Split the version range and give the older packages a new name.&ABrute force implementation - I'm assuming this is not a huge map.'Given a version split database, turn the debian version requirements into a debian package name base that ought to satisfy them.(&' !"#$%&')*  !"#$%&'  !"&%$#' (&' !"#$%&')*NoneN)) creates a map from a package name to all the versions of that package NOTE: Provides are not included in the map NOTE: the sort order is random -- this is perhaps a bug see also: *** finds packages that Provide other packages and adds them to the PackageNameMap. They will be adde to the end of the list, so that real packages have 'higher priority' than virtual packages. NOTE: Does not check for duplication or multiple use++,,[ returns all the packages that satisfy the specified relation TODO: Add architecture check()*+,()*+,()*+,()*+,NoneN.Econflicting packages and relations that require non-existant packages< TODO addProvides -- see DQL.ExecDJAS: deal with Provides/ (can a package provide more than one package?)PearliestInconsistency does what it sounds like the 'reverse as' is because the vars are order high to low, but we want to find the lowest numbered (aka, eariest) inconsistency ??Ubj - backjumping labeler<If the node already has a conflict set, then leave it alone.gOtherwise, the conflictset for the node is the combination of the conflict sets of its direct children.+-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW+-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW+789:6;/012345<=>?@ABCDEFGHIJKLMNOP.QR-STUVW"-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWNone +34579NXlErrors that control files might throw, with source file name and line number generated by template haskell.c=Class of things that contain a validated Debian control file.eOOpaque (constructor not exported) type to hold a validated Debian Control Fileg4Validate and return a control file in an opaque wrapper. May throw a ControlFileError. Currently we only verify that it has a Source field in the first paragraph and one or more subsequent paragraphs each with a Package field, and no syntax errors in the build dependencies (though they may be absent.)+-Comment paragraphs are rare, but they happen.,{Version of fieldValue that may throw a ControlFileError. We only use this internally on fields that we already validated.sThis could access fields we haven't validated, so it can return an error. Additionally, the field might be absent, in which case it returns Nothing.-LApply a function to the text from a named field in a control file paragraph.*XYZ[\]^_`ab./cde0fghij1k+lmnopqr,s-2345678XYZ[\]^_`abcdefghijklmnopqrs"efghjiXY[\^`aZZZ]Z_Z_ZbcdlmknopsrqXY[\^`aZZZ]Z_Z_Zb./cde0fghij1k+lmnopqr,s-2345678Nonetuvwx;XYZ[\]^_`abcdghjklmnopqrstuvwxAtuvwxcdXY[\^`aZZZ]Z_Z_ZbjghlmknopsrqtuvwxNone345IN {>Read and parse the status file for installed debian packages: varlibdpkgstatusYWrite a file which we might still be reading from in order to compute the text argument.PCompute the new file contents from the old. If f returns Nothing do not write.Create a map from pathname to the names of the packages that contains that pathname using the contents of the debian package info directory varlibdpkginfo.:Given a path, return the name of the package that owns it.EFrom Darcs.Utils - set the working directory and run an IO operation.'Get directory contents minus dot files.=If the current value of view x is Nothing, replace it with f. Version of 9? that first clamps its argument to the acceptable range (0-3).Set b if it currently isNothing and the argument isJust, that is 1. Nothing happens if the argument isNothing 2. Nothing happens if the current value isJust0This should probably be used in a lot of places.(yz{|}~:;<=>#yz{|}~#zy{|}~(yz{|}~:;<=>None+35,/Official Debian license types as described in  Xhttps://www.debian.org/doc/packaging-manuals/copyright-format/1.0/#license-specification.^No license required for any purpose; the work is not subject to copyright in any jurisdiction.Apache license 1.0, 2.0.Artistic license 1.0, 2.0.9Berkeley software distribution license, 2-clause version.9Berkeley software distribution license, 3-clause version.9Berkeley software distribution license, 4-clause version.JInternet Software Consortium, sometimes also known as the OpenBSD License.8Creative Commons Attribution license 1.0, 2.0, 2.5, 3.0.DCreative Commons Attribution Share Alike license 1.0, 2.0, 2.5, 3.0.GCreative Commons Attribution No Derivatives license 1.0, 2.0, 2.5, 3.0.GCreative Commons Attribution Non-Commercial license 1.0, 2.0, 2.5, 3.0.SCreative Commons Attribution Non-Commercial Share Alike license 1.0, 2.0, 2.5, 3.0.VCreative Commons Attribution Non-Commercial No Derivatives license 1.0, 2.0, 2.5, 3.0.*Creative Commons Zero 1.0 Universal. Omit  Universal6 from the license version when forming the short name.0Common Development and Distribution License 1.0.IBM Common Public License."The Eiffel Forum License 1.0, 2.0.The Expat license.)GNU General Public License 1.0, 2.0, 3.0.VGNU Lesser General Public License 2.1, 3.0, or GNU Library General Public License 2.0.GNU Free Documentation License 1.0, 1.1, 1.2, or 1.3. Use GFDL-NIV instead if there are no Front-Cover or Back-Cover Texts or Invariant Sections.GNU Free Documentation License, with no Front-Cover or Back-Cover Texts or Invariant Sections. Use the same version numbers as GFDL.1LaTeX Project Public License 1.0, 1.1, 1.2, 1.3c.Mozilla Public License 1.1.0erl license (use "GPL-1+ or Artistic-1" instead)Python license 2.0.Q Public License 1.0.SW3C Software License For more information, consult the W3C Intellectual Rights FAQ.zlib/libpng license.'Zope Public License 1.0, 1.1, 2.0, 2.1.Any other license name6The architectures for which a binary deb can be built.(The package is architecture independenct-The package can be built for any architecture"The list of suitable architecturesThe version number of the installed debhelper package is the highest acceptable value for compat in a debian/control file. If the package doesn't explicitly set an (acceptable) compat value we can use the value returned by this function, assuming debhelper is installed."Assumes debian-policy is installedTTurn the uploaders field of a cabal package into a list of RFC2822 NameAddr values.2Parse a string containing a single NameAddr value.TMaintainer is a mandatory field, so we need a value we can use when all else fails.hConvert the Cabal license to a Debian license. I would welcome input on how to make this more correct.XConvert a Debian license to a Cabal license. Additional cases and corrections welcome.3I think we need an actual parser for license names.`?@ABCDEFGWW-?@ABCDEFGNone++A redundant data type, too lazy to expunge.%The output of the debootstrap command0An environment with build dependencies installed,An environment where we have built a packagenThis record supplies enough information to locate and load a debianization or a cabal file from the IO monad.=Run with progress messages at the given level of verboseness.YDon't write any files or create any directories, just explain what would have been done.Carefully upgrade the packagingINormalize a debianization (field order, whitespace) by round-tripping it.RFail if the debianization already present doesn't match the one we are going to generate closely enough that it is safe to debianize during the run of dpkg-buildpackage, when Setup configure is run. Specifically, the version number in the top changelog entry must match, and the sets of package names in the control file must match.Which compiler should we generate library packages for? In theory a single deb could handle multiple compiler flavors, but the support tools are not ready for this as of right now (28 Jan 2015.)Flags to pass to Cabal function finalizePackageDescription, this can be used to control the flags in the cabal file. It can be supplied to the cabal-debian binary using the --flags option. Directory containing the build environment for which the debianization will be generated. This determines which compiler will be available, which in turn determines which basic libraries can be provided by the compiler. By default all the paths in EnvSet are "/".WCommand line options which build a function that modifies a state monad value of type      H                 H None+4N function-type for a function that downloads a file The timestamp is optional. If the local file is as new or newer than the remote copy, the download may be skipped.:A good choice might be a partially parameterized call to gPackage indexes on the server are uncompressed or compressed with gzip or bzip2. We do not know what will exist on the server until we actually look. This type is used to mark the compression status of what was actually found."update - similar to apt-get updateI^download possibly compressed files NOTE: index uri must not include the .bz2 or .gz extensionJexamine a DebSource line, and calculate for each section: - the URI to the uncompressed index file - the basename that apt-get would name the downloaded index FIXME: ExactPath dist will fail with error at runtime :(Kreturn a tuple for the section - the URI to the uncompressed index file - the basename that apt-get uses for the downloaded index FIXME: support for Release and Release.gpg'Parse a possibly compressed index file.'parse an index possibly compressed fileLeA release file contains a list of indexes (Packages/Sources). Each Package or Source index may appear multiple times because it may be compressed several different ways. This function will return an assoc list where the key is the name of the uncompressed package index name and the value is the list of (file, compression) which decompress to the key.MThe release file contains the checksums for the uncompressed package indexes, even if the uncompressed package indexes are not stored on the server. This function returns the list of files that actually exist. =make a FileTuple for a file found on the local disk returns N if the file does not exist.!Cfind the Contents-* files. These are not listed in the Release file*function that will do actually downloading6download indexes to the directory (must already exist)binary architecture sources.list,(basename of index file, compression status)I&function that will do the actual fetch:remote URI of package index, without .bz2 or .gz extension>name to save downloaded file as, without .bz2 or .gz extension6(downloaded file name + extension, compression status)Jwhich binary architectureline from sources.list:(remote uri, local name, deb source for just this section)Kdo we want Packages or Sources+The binary architecture to use for Packages&base URI as it appears in sources.list7the release (e.g., unstable, testing, stable, sid, etc)*the section (main, contrib, non-free, etc)5(uri to index file, basename for the downloaded file)LMOA release file ! !! IJKLMO !!None"Jcreate a map of (package name, extracted field) from a list of index files-NOTE: we could merge all the files into a single control and then run packageMap over that. We currently do it one control file at a time to avoid having all the control files loaded in memory at once. However, I am not sure that property is actually occuring anyway. So, this should be revisited.#Fcreate a map of (package name, max version) from a single control file$3extract the version number from a control paragraph%ycompare two sources.list and find all the packages in the second that trump packages in the first see also: |trumpedMap|&"calculate all the trumped packages'create  trumped/, XML element and children from a trumped Map"#$%(function for downloading package indexes<cache directory to store index files in (must already exist)binary architecturesources.list asources.list b8a map of trumped package names to (version a, version b)& package map a package map b'trumped packages (version a, version b)'"#$%&'"#$%&'"#$%&'"None+NPQRSTUVWXYZ[\](^_`abcdefgh((PQRSTUVWXYZ[\](^_`abcdefgh#None4N16Some target whose build dependencies are all satisfied21The targets that are waiting for the ready target3-The rest of the targets that need to be built4UGiven a source package name and a binary package name, return False if the binary package should be ignored hwen deciding whether to build the source package. This is used to prevent build dependency cycles from triggering unnecessary rebuilds. (This is a replacement for the RelaxInfo type, which we temporarily rename OldRelaxInfo.)i\Specifies build dependencies that should be ignored during the build decision. If the pair is (BINARY, Nothing) it means the binary package BINARY should always be ignored when deciding whether to build. If the pair is (BINARY, Just SOURCE) it means that binary package BINARY should be ignored when deiciding whether to build package SOURCE.5?This type describes the build dependencies of a source package.7source package name8dependency relations9:binary dependency names (is this a function of relations?):>Set containing all binary package names mentioned in relations;Set containing binaryNames<Return the dependency info for a source package with the given dependency relaxation. |According to debian policy, only the first paragraph in debian/control can be a source package Rhttp://www.debian.org/doc/debian-policy/ch-controlfields.html#s-sourcecontrolfiles=source package name>dependency relations?:binary dependency names (is this a function of relations?)@CRemove any dependencies that are designated "relaxed" by relaxInfo.AGiven an ordering function representing the dependencies on a list of packages, return a ReadyTarget triple: One ready package, the packages that depend on the ready package directly or indirectly, and all the other packages.j%Find a cycle in a graph that involvesk!All the paths from root to a leafBIRemove any packages which can't be built given that a package has failed.CGiven a list of packages, sort them according to their apparant build dependencies so that the first element doesn't depend on any of the other packages.l^Build a graph with the list of packages as its nodes and the build dependencies as its edges.DcThis is a nice start. It ignores circular build depends and takes a pretty simplistic approach to mM build depends. However, I think this should work pretty nicely in practice.E7Return the dependency info for a list of control files.FFOne example of how to tie the below functions together. In this case fp is the path to a directory that contains a bunch of checked out source packages. The code will automatically look for debian/control. It returns a list with the packages in the order they should be built.&)*+,-./01234in56789:;<=>?@AjkoBClDpEFq)*+,-./0123456789:;<=>?@ABCDEF56789:;=>?<4@)*-+,./0123ADCEBF)*-+,./01234in56789:;<=>?@AjkoBClDpEFq$None+35H&Package interrelationship information.IThe libghc-foo-dev package.JThe libghc-foo-prof package.KThe libghc-foo-doc package.LTA package related to a particular executable, perhaps but not necessarily a server.McA package that holds the package's data files and any executables not assigned to other packages.N/The source package (not a binary deb actually.)OVThe source package of a haskell library (add prefix haskell- to source package name.)PLThis is used to construct the value for DEB_CABAL_PACKAGE in the rules fileQThis type represents a section of the control file other than the first, which in turn represent one of the binary packages or debs produced by this debianization.HThe different types of binary debs we can produce from a haskell packager Ihttp://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Packages Nhttp://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Architecturet Khttp://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Essentialu Mhttp://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Descriptionv Ehttp://www.debian.org/doc/debian-policy/ch-controlfields.html#s5.6.109Gwxyz{|}~HIJKLMNOPQrstuvRSTUVWXYZ[\]^_`abcdefg!GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg!RSQT\[Y]VXWZ^HIJKLMNOPGUbegc_adf`G wxyz{|}~HIJKLMNOPQ rstuvRSTUVWXYZ[\]^_`abcdefg%None+35i8Field will be copied to the binary packgae control filesj8Field will be copied to the source packgae control filesk:Field will be copied to the upload control (.changes) filelvUser defined fields. Parse the line "XBS-Comment: I stand between the candle and the star." to get XField (fromList BS) Comment, " I stand between the candle and the star."xThis type represents the debian/control file, which is the core of the source package debianization. It includes the information that goes in the first, or source, section, and then a list of the succeeding binary package sections. Hhttp://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Source Lhttp://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Maintainer Lhttp://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Changed-By Khttp://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Uploaders Shttp://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-DM-Upload-Allowed Jhttp://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Priority Ihttp://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Section Shttp://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Standards-Version Jhttp://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Homepage Lhttp://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-VCS-fields Bhttp://www.debian.org/doc/debian-policy/ch-controlfields.html#s5.7MThe binary debs. This should be a map, but we may need to preserve the order7hijklmnopqrstuvwxyz{|}~$hijklmnopqrstuvwxyz{|}~$xyz~|}{nopqrstuvwlmhijkhijklmn opqrstuvwxyz{|}~&NoneIN$Memoized version of newestAvailable'FLook up the newest version of a deb available in the given changeroot.kGeneral function to build a command line option that reads most of the possible values for CompilerFlavor.IO based alternative to newestAvailableCompilerId - install the compiler into the chroot if necessary and ask it for its version number. This has the benefit of working for ghcjs, which doesn't make the base ghc version available in the version number.NAssumes the compiler executable is already installed in the root environment.  'None+ Load a PackageDescription using the information in the Flags record - in particular, using the dependency environment in the EnvSet, find the newest available compiler of the requested compiler flavor and use that information load the configured PackageDescription.'Run the package's configuration script.(None*4NkFind out what version, if any, of a cabal library is built into the newest version of haskell compiler hc in environment root. For GHC this is done by looking at what virtual packages debian package provides. I have modified the ghcjs packaging to generate the required virtual packages in the Provides line. For other compilers it maybe be unimplemented.bOk, lets see if we can infer the built in packages from the Provides field returned by apt-cache.)Safe N*None +35FNUDescription of the machine readable debian/copyright file. A special case is used to represeent the old style free format file - if the value is equal to newCopyrightDescription except for the field _summaryComment, the text in _summaryComment is the copyright file.Read a ( from the text one might obtain from a debian/copyright file.(Try to parse a structured copyright fileInfer a  from a Cabal package description. This will try to read any copyright files listed in the cabal configuration. Inputs include the license field from the cabal file, the contents of the license files mentioned there, and the provided  copyright0 value.$Replace empty lines with single dots6**"  +None+INL.Information about the server we are packaging.!Host on which the server will runtPort on which the server will run. Obviously, this must assign each and every server package to a different port.FA comment that will be inserted to explain how the file was generated"start-stop-daemon --retry argument5Extra flags to pass to the server via the init script)The hint to install the server executable0Information about the web site we are packaging.The domain name assigned to the server. An apache configuration will be generated to redirect requests from this domain to hostname:portApache ServerAdmin parameter"The hint to install the server jobThe name of the executable file!where to find it, default is distbuild execName/where to put it, default is usrbin execName!name to give installed executable,Create a symbolic link in the binary package,Install a build file into the binary packageAInstall a build file into the binary package at an exact location5DHInstallTo somewhere relative to DataDir (see above)3Create a file with the given text at the given path2Install a cabal executable into the binary packageGInstall a cabal executable into the binary package at an exact location(Create a directory in the binary package<Information required to represent a non-cabal debianization.HInformation regarding mode of operation - verbosity, dry-run, usage, etcA warning to be reported later Write debiansourceformatthe  debian/watch fileThe rules file headerThe rules file assignments!The rules file include directives&Additional fragments of the rules fileIOverride the copyright value computed from the cabal package description.'The parsed contents of the control fileCPut this text into a file with the given name in the debianization.6The debhelper compatibility level, from debian/compat.GThe changelog, first entry contains the source package name and version(Add an init.d file to the binary package6Add a stanza of a logrotate file to the binary packageMap of debian/postinst4 scripts - to be run after install, should contain  DEBHELPER line before exit 0Map of  debian/postrm8 scripts - scripts to run after remove, should contain  DEBHELPER line before exit 0Map of debian/preinst5 scripts - to be run before install, should contain  DEBHELPER line before exit 0Map of  debian/prerm4 scripts - to be run before remove, should contain  DEBHELPER line before exit 02set of items describing file installation requests(Do not produce a libghc-foo-doc package.)Do not produce a libghc-foo-prof package.eIf present, Do not put the version dependencies on the prof packages that we put on the dev packages.If present, don't generate the << dependency when we see a cabal equals dependency. (The implementation of this was somehow lost.)The build directory used by cabal, typically dist/build when building manually or dist-ghc/build when building using GHC and haskell-devscripts. This value is used to locate files produced by cabal so we can move them into the deb. Note that the --builddir option of runhaskell Setup appends the "/build" to the value it receives, so, yes, try not to get confused. FIXME: make this FilePath or Maybe FilePathName to give to the debian source package. If not supplied the name is constructed from the cabal package name. Note that DebianNameMap could encode this information if we already knew the cabal package name, but we can't assume that.YIf given, use this name for the base of the debian binary packages - the string between  'libghc-' and '-dev';. Normally this is derived from the hackage package name.PSpecify the revision string to use when converting the cabal version to debian.Specify the exact debian version of the resulting package, including epoch. One use case is to work around the the "buildN" versions that are often uploaded to the debian and ubuntu repositories. Say the latest cabal version of transformers is 0.3.0.0, but the debian repository contains version 0.3.0.0-1build3, we need to specify debVersion="0.3.0.0-1build3" or the version we produce will look older than the one already available upstream.HValue for the maintainer field in the control file. Note that the cabal maintainer field can have multiple addresses, but debian only one. If this is not explicitly set, it is obtained from the cabal file, and if it is not there then from the environment. As a last resort, there is a hard coded string in here somewhere.Name of a package that will get left-over data files and executables. If there are more than one, each package will get those files.BThe text for the X-Description field of the Source package stanza.xEach element is a comment to be added to the changelog, where the element's text elements are the lines of the comment.Lets cabal-debian know that a package it might expect to exist actually does not, so omit all uses in resulting debianization.FMap a cabal Extra-Library name to a debian binary package name, e.g. 6ExtraLibMapping extraLibMap "cryptopp" "libcrypto-dev"8 adds a build dependency *and* a regular dependency on  libcrypto-dev to any package that has cryptopp! in its cabal Extra-Library list.CMap a cabal Build-Tool name to a debian binary package name, e.g. 'ExecMapping "trhsx" "haskell-hsx-utils" adds a build dependency on haskell-hsx-utils to any package that has trhsx in its cabal build-tool list.PHave Apache configure a site using PACKAGE, DOMAIN, LOGDIR, and APACHECONFIGFILE0Set the Architecture field of the source package.Set the Architecture field of a binary package,Set the Priority field of the source package*Set the Priority field of a binary package+Set the Section field of the source package)Set the Section field of a binary package2Create a binary package to hold a cabal executableCLike DHExecutable, but configure the executable as a server process7Like DHServer, but configure the server as a web server2Configure the executable to do incremental backupsLimited version of Depends, put a dependency on the dev library package. The only reason to use this is because we don't yet know the name of the dev library package.=Whether this packaging is created by the Debian Haskell Group1Whether or not to build and/or run the test suiteNormally self dependencies are filtered out of the debian build dependency list because they usually reflect interdependencies between the library and the executable in the Cabal packages. This flag turns off that filtering.#MLens to look up the binary deb description by name and create it if absent. Ihttp://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Package      !"#_      !"#_     # !"E5      !"#,None+*Bits and pieces of information about the mapping from cabal package names and versions to debian package names and versions. In essence, an Atoms value represents a package's debianization. The lenses in this module are used to get and set the values hidden in this Atoms value. Many of the values should be left alone to be set when the debianization is finalized.1The result of reading a cabal configuration file.<Information required to represent a non-cabal debianization.Mapping from cabal package name and version to debian source package name. This allows different ranges of cabal versions to map to different debian source package names.XSpecify epoch numbers for the debian package generated from a cabal package. Example: EpochMapping (PackageName HTTP) 1.'Supply some info about a cabal package.0 Given the . value read the cabalization and build a new * record.$%&'()*+,-./0 $%&'()*+,-./0 *$%&'().+,-/0 $%&'()*+,-./0-None123456789:;<=>?@*123456789:;<=>?@*365429871:;<=>?@123456789:;<=>?@.None *357>ILNA7Build the Debian package name for a given package type.BFunction that applies the mapping from cabal names to debian names based on version numbers. If a version split happens at v, this will return the ltName if < v, and the geName if the relation is >= v.CBuild a debian package name from a cabal package name and a debian package type. Unfortunately, this does not enforce the correspondence between the PackageType value and the name type, so it can return nonsense like (SrcPkgName "libghc-debian-dev").EMap all versions of Cabal package pname to Debian package dname. Not really a debian package name, but the name of a cabal package that maps to the debian package name we want. (Should this be a SrcPkgName?)FJMap versions less than ver of Cabal Package pname to Debian package ltnameG/Replace any existing mapping of the cabal name pname with the debian name dnamea. (Use case: to change the debian package name so it differs from the package provided by ghc.) ABCDEFGABCDEFGABCDEFG ABCDEFG/NoneHUpdate the CabalInfo value in the CabalT state with some details about the debian repository - special cases for how some cabal packages are mapped to debian package names.HHHH0NoneICreate equals dependencies. For each pair (A, B), use dpkg-query to find out B's version number, version B. Then write a rule into P's .substvar that makes P require that that exact version of A, and another that makes P conflict with any older version of A.JTAdd a debian binary package to the debianization containing a cabal executable file.KjAdd a debian binary package to the debianization containing a cabal executable file set up to be a server.LlAdd a debian binary package to the debianization containing a cabal executable file set up to be a web site.MqAdd a debian binary package to the debianization containing a cabal executable file set up to be a backup script.+The Cabal package has one synopsis and one description field for the entire package, while in a Debian package there is a description field (of which the first line is synopsis) in each binary package. So the cabal description forms the base of the debian description, each of which is amended.VA configuration file for the logrotate facility, installed via a line in debianFiles.IJKLMNOPQRSTU IJKLMNOPQRSTU IKLMJNQOPRSTUIJKLMNOPQRSTU1NoneFNNaive conversion of Cabal build dependencies to Debian dependencies will usually result in a self dependency, due to the fact that a Cabal executable often depends on the associated library to build. Due to the fact that Debian build dependencies are global to the package, this results in unwanted self dependencies, which usually need to be filtered out. Unfortunately, some Debian packages actually do depend on an earlier version of themselves to build (e.g. most compilers.) So a command line option is probably necessary.selfDependency :: PackageIdentifier -> Dependency_ -> Bool selfDependency pkgId (BuildDepends (Dependency name _)) = name == pkgName pkgId selfDependency _ _ = FalsefDebian packages don't have per binary package build dependencies, so we just gather them all up here.ETake the intersection of all the dependencies on a given package name The documentation dependencies for a package include the documentation package for any libraries which are build dependencies, so we have use to all the cross references. The Debian build dependencies for a package include the profiling libraries and the documentation packages, used for creating cross references. Also the packages associated with extra libraries. Turn a cabal dependency into debian dependencies. The result needs to correspond to a single debian package to be installed, so we will return just an OrRelation. If a package is bundled with the compiler we make the compiler a substitute for that package. If we were to specify the virtual package (e.g. libghc-base-dev) we would have to make sure not to specify a version number. return and of ors of relVW      !VWVWVW      !2None+35NYTry to input a file and if successful add it to the debianization's list of "intermediate" files, files which will simply be added to the final debianization without any understanding of their contents or purpose."2Look for a field and apply a function to its value#4Construct a file path from the debian directory and a relative path, read its contents and add the result to the debianization. This may mean using a specialized parser from the debian package (e.g. parseChangeLog), and some files (like control) are ignored here, though I don't recall why at the moment.$%Read a line from a debian .links file%'Read a line from a debian .install file&$Read a line from a debian .dirs file[Where to put the installed data files. Computes the destination directory from a Cabal package description. This needs to match the path cabal assigns to datadir in the distbuildkautogen/Paths_packagename.hs module, or perhaps the path in the CABAL_DEBIAN_DATADIR environment variable.\ Where to look for the data-filesXY'()"*+,Z-#$%&[\XYZ[\XYZ[\XY'()"*+,Z-#$%&[\3None345N]debianize customize initializes the CabalT state from the environment and the cabal package description in (and possibly the debian/changelog file) from the current directory, then runs  customize> and finalizes the debianization so it is ready to be output..0Do some light IO and call finalizeDebianization./!Now that we know the build and data directories, we can expand some atoms into sets of simpler atoms which can eventually be turned into the files of the debianization. The original atoms are not removed from the list because they may contribute to the debianization in other ways, so be careful not to do this twice, this function is not idempotent. (Exported for use in unit tests.) FIXME: we should be able to run this without a PackageDescription, change paramter type to Maybe PackageDescription and propagate down thru code0Compute the final values of the BinaryDebDescription record description fields from the cabal descriptions and the values that have already been set.4Construct the final Debian version number. Inputs: --deb-version argument--revision argumentcabal version number"latest version in debian/changelog0The --deb-version argument overrides everything.1lReturn the Debian epoch number assigned to the given cabal package - the 1 in version numbers like 1:3.5-2.2Compute and return the debian source package name, based on the sourcePackageName if it was specified, and constructed from the cabal name otherwise.3+Try to compute a string for the the debian  Maintainer: and  Uploaders:> fields using, in this order 1. the Debian Haskell Group, /pkg-haskell-maintainers@lists.alioth.debian.org, if --official is set 2. the maintainer explicitly specified using "Debian.Debianize.Monad.maintainer" 3. the maintainer field of the cabal package, but only if --official is not set, 4. the value returned by getDebianMaintainer, which looks in several environment variables, 5. the signature from the latest entry in debian/changelog, 6. the Debian Haskell Group, /pkg-haskell-maintainers@lists.alioth.debian.org  Lhttp://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Maintainer Khttp://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Uploaders44If l is the empty list return d, otherwise return l.5Make sure there is a changelog entry with the version number and source package name implied by the debianization. This means either adding an entry or modifying the latest entry (if its version number is the exact one in our debianization.)6Convert the extraLibs field of the cabal build info into debian binary package names and make them dependendencies of the debian devel package (if there is one.)7@Applies a few settings to official packages (unless already set)8CFilter out any relations that mention any of the bad package names.9<Add the library paragraphs for a particular compiler flavor.:^This is the standard value for the Description field of a binary package control file stanza.;TMake sure all data and executable files are assigned to at least one binary package and make sure all binary packages are in the package list in the source deb description. If there are left over files, assign them to the packages returned by the utilsPackageNames lens, and make sure those packages are in the source deb description.<1Add the normal default values to the rules files."=>?@A]./0B1234C567DE8FG9HI:;J<KLMN]]=>?@A]./0B1234C567DE8FG9HI:;J<KLMN4None345FN^?Turn the Debianization into a list of files, making sure the text associated with each path is unique. Assumes that finalizeDebianization has already been called. (Yes, I'm considering building one into the other, but it is handy to look at the Debianization produced by finalizeDebianization in the unit tests.)O:Assemble all the links by package and output one file eachP^QRSTUVWOXYZ[\]^_`abcde^^P^QRSTUVWOXYZ[\]^_`abcde5None 04>ILNU_%This data type represents changes to 3# state, requested at command line.`This data type is an abomination. It represent information, provided on command line. Part of such information provides means to create initial 3 state and is stored in b field. See  newCabalInfo.YOther, much greater part represent changes to already created state. They are stored in c field.3All this can be understood from (simplified) types: type CabalT m a = StateT CabalInfo m a newCabalInfo :: Flags -> IO CabalInfo handleBehaviorAdjustment :: BehaviorAdjustment -> CabalT IO ()_fghijklmnopqrstuvwxyz{|}~`abcdef_`abcdef`abc_fedY_fghijklmnopqrstuvwxyz{|}~`abcdef6None *35FINgRun the script in debian/Debianize.hs2 with the given command line arguments. Returns True if the script exists and succeeds. In this case it may be assumed that a debianization was created (or updated) in the debian subdirectory of the current directory. In this way we can include a script in a package to produce a customized debianization more sophisticated than the one that would be produced by the cabal-debian executable. An example is included in the debian subdirectory of this library.haPerform whole debianization. You provide your customization, this function does everything else.iDepending on the options in atomsC, either validate, describe, or write the generated debianization.j%Write the files of the debianization d to ./debiank|Return a string describing the debianization - a list of file names and their contents in a somewhat human readable format.Do only the usual maintenance changes when upgrading to a new version and avoid changing anything that is usually manually maintained.lWCompare the old and new debianizations, returning a string describing the differences.mBMake sure the new debianization matches the existing debianization in several ways - specifically, version number, and the names of the source and binary packages. Some debian packages come with a skeleton debianization that needs to be filled in, this can be used to make sure the debianization we produce is usable.ghijklmghijklmigjklmhghijklm@None{{     GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:<=EFGHIJKLMNOPQRSTUXYZghijklmABCDE7FGHIJKLMNNOPPQRSTUVWXYZ[\]^_`ab c d e f g h i j k l m n o o p q r s t u v w x y z { | } ~    \                     \      !"#$%&'()*+,,-../0123456789:;<=>?@ABCDEFGHHIJKLMNOPQRSTUVWXXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~L      !"#$%&'()*+,-./0 1 2 3 4 4 5 6 7 8 9 : ; < = > ? @ A B!C!D!E!F!G!H"I#J#J#K#L#M#N#O#O#P#Q#R#S#T#T#U#Z#V#W#X#Y#Z#[#\#]#^#_#`#a#b#c$d$e$f$g$h$i$j$K$k$l$m$n$o$p$q$r$s$t$u$v$w$x$y$Z$z${$\$|$}$~$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&'(((((()******************************************++++++++++++++++++++++++++++++++++++++++++++++++++ + + + + ++++++++++++++++++++ +!+"+#+$+%+&+'+(+)+*+++,+-+.+/+0+1+2+3+4+5,6,6,7,8,9,:,;,<,=,>,?,@,A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q.R.S.T.U.V.W.X/Y0Z0[0\0]0^0_0`0a0b0c0d0e0f112g2h2i2j2k3l4m5n5o5o5p5q5r5s5t6u6v6w6x6y6z6{7|7|7}7~77777F77T          6 7                      ;<ED899:;<=>     <=???;?<?=?>????G !"#$%&'()*+;,-;<=>?@. / 0 1 2 345 6"7"7"8"9":";"<"=">"?"@"A"B"C"D"E"F"G"H"I"J"K"L"M"N#O#P#Q#RST#S#U#V#W$X$Y$Z$[$\$d$]$^$_$`$a$b$c$d$e$m$f$g$h$i$j$k$l$m%n%o%p%q%r%s%t%u%v%w%x%y%%z%{%|%}%~%&&&&&'((44************+p+++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,;,,......00000011111Y111o1111111111111111111122222222222233 3 3 3 3 33333333333333333333333333.3 4!4"4#4$4%4&4'4(4)4*4+4,4-4.44444/404144;5n5o5q5525354555555u565758595:5;5<5=5>5?5@5A5B5C555D5E5E5F5F5G5G5H5H5I5I5J5J5K5K5L5L5M5M5N5N5O5O5P5P5Q5Q5R5R5S5T5U5V5W5X5Y5Z5[5\5]5^5_5`5a5b5c5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5s5t5u5v5w5x5y5z5{5|5}5~555555555555555555555555555555556cabal_Kzm39IED6WC49sqknvZYz3 Debian.Pretty Debian.UTF8Debian.Version.CommonDebian.Extra.Files Debian.Loc Debian.Arch Debian.URIPaths_cabal_debianDebian.Debianize.Interspersed Debian.TimeDebian.Apt.MethodsDebian.ReleaseDistribution.Version.InvertDebian.Control.CommonDebian.Control.ByteStringDebian.Control.TextDebian.Control.String Debian.DebDebian.SourcesDebian.ChangesDebian.Debianize.ChangelogDebian.Relation.CommonDebian.Relation.StringDebian.Debianize.VersionSplitsDebian.Apt.PackageDebian.Apt.DependenciesDebian.Control.PolicyDebian.ControlDebian.Debianize.Prelude Debian.PolicyDebian.Debianize.BasicInfoDebian.Apt.Index Debian.ReportDebian.Util.FakeChangesDebian.GenBuildDeps%Debian.Debianize.BinaryDebDescription%Debian.Debianize.SourceDebDescription Debian.GHCDebian.Debianize.InputCabalDebian.Debianize.BundledData.Maybe.Extended%Debian.Debianize.CopyrightDescriptionDebian.Debianize.DebInfoDebian.Debianize.CabalInfoDebian.Debianize.MonadDebian.Debianize.DebianNameDebian.Debianize.DetailsDebian.Debianize.Goodies"Debian.Debianize.BuildDependenciesDebian.Debianize.InputDebianDebian.Debianize.FinalizeDebian.Debianize.FilesDebian.Debianize.OptparseDebian.Debianize.OutputDebian.Version.InternalDebian.Version.ByteStringDebian.Version.StringDebian.Version.TextDebian.VersionDebian.Relation.ByteStringDebian.Relation.TextDebian.RelationDebian.OrphansDebian.Debianizeprett_7UQTOB05U7lIYPkFOVraeRText.PrettyPrint.HughesPJClass prettyShowdecodereadFile DebianVersionwithTemporaryFile__LOC__mapExnArchSourceAllBinaryArchCPU ArchCPUAnyArchOS ArchOSAny prettyArch parseArchURI'readURI'fromURI'toURI' uriToString' fileFromURIfileFromURIStrict dirFromURIversion getBinDir getLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName Interspersedleftmostpairs foldTriples foldInverted foldArounds foldBetweensrfc822DateFormat'epochTimeToUTCTimeformatTimeRFC822parseTimeRFC822getCurrentLocalRFC822TimeFetchCallbackslogCBstatusCB uriStartCB uriDoneCB uriFailureCBgeneralFailureCBauthorizationRequiredCBmediaFailureCBdebugCB ConfigItemHeaderCommand URIAcquire ConfigurationAuthorizationCredentials MediaChangedStatus CapabilitiessingleInstancepreScanpipeline sendConfig needsCleanup localOnlyLogMsgURIStarturisize lastModified resumePointURIDonefilenamehashesimsHit URIFailuremessageGeneralFailureAuthorizationRequired MediaFailureDriveMediaPasswordUserSiteMessage withMethodURIwithMethodPathwhichMethodPath recvStatus sendCommand openMethod closeMethod simpleFetchfetchemptyFetchCallbackscliFetchCallbacksgetLastModified SubSectionsectionsubSectionNameSection ReleaseNamerelNameparseReleaseName releaseName' sectionName sectionName'sectionNameOfSubSection parseSection parseSection'invertVersionRangeinvertVersionIntervalsPPunPP prettyTextppPrintppShowppTextControlFunctionsparseControlFromFileparseControlFromHandle parseControllookupPstripWSprotectFieldTextasStringField'FieldComment Paragraph' ParagraphControl'Control unControlprotectFieldText' mergeControls fieldValue removeField prependFields appendFields renameField modifyField raiseFieldsparseControlFromCmd md5sumField decodeControldecodeParagraph decodeField ControlParserpControlfields SliceName DebSource sourceType sourceUri sourceDist SourceTypeDebDebSrc quoteWords stripLine sourceLinesparseSourceLineparseSourceLine'parseSourcesList $fPrettyPP$fPrettyDebSource$fPrettySourceTypeParseDebianVersionparseDebianVersionprettyDebianVersionparseDebianVersion'parseDVevrepochrevisionbuildDebianVersion ChangeLogChangeLogEntryEntry logPackage logVersionlogDists logUrgency logCommentslogWhologDate WhiteSpaceChangedFileSpecchangedFileMD5sumchangedFileSHA1sumchangedFileSHA256sumchangedFileSizechangedFileSectionchangedFilePrioritychangedFileName ChangesFileChanges changeDir changePackage changeVersion changeRelease changeArch changeInfo changeEntry changeFileschangesFileNameparseChangeLog parseEntries parseEntry parseChanges filterEntriesdropFutureEntriesfindChangelogEntrymergeChangelogEntries VersionReqSLTLTEEEQGRESGRArchitectureReqArchOnly ArchExceptParseRelationsparseRelationsPkgNamepkgNameFromString BinPkgName unBinPkgName SrcPkgName unSrcPkgNameRelationRel OrRelation AndRelation RelationsprettyRelationsprettyOrRelationprettyRelationprettyArchitectureReqprettyVersionReqcheckVersionReq $fPrettyPP0 $fPrettyPP1 $fPrettyPP2 $fPrettyPP3 $fPrettyPP4 $fPrettyPP5$fOrdVersionReq $fOrdRelation$fPkgNameSrcPkgName$fPkgNameBinPkgName RelParser pRelations VersionSplitsDebBase unDebBase makePackage insertSplitpackageRangesFromVersionSplitsdebianFromCabalcabalFromDebian'cabalFromDebiandoSplitsPackageNameMappackageNameMap addProvides findProvideslookupPackageByRelLabeler ConflictSetCSPpnm relations depFunction conflictspackageVersionState Remaining MissingDepCompletecomplete controlCSPtestCSPdepF sidPackages gutsyPackagestestpackageVersionParagraphconflict conflict'mkTreelabelinitTreemapTreefoldTree zipTreesWithpruneleavesinhTree distrTree mkSearchTreeearliestInconsistency isConflict solutionssearchbtbjunionCScombineControlFileError NoParagraphslocsNoBinaryParagraphs MissingFieldfieldParseRelationsError parseErrorParseControlErrorIOErrorioErrorHasDebianControl debianControl DebianControlunDebianControlvalidateDebianControlunsafeDebianControlparseDebianControlparseDebianControlFromFiledebianPackageParagraphsdebianSourceParagraphdebianBinaryParagraphsdebianPackageNamesdebianSourcePackageNamedebianBinaryPackageNamesdebianBuildDepsIndepdebianBuildDepsdebianRelations packParagraph packField formatControlformatParagraph formatFieldDebMapcurry3buildDebVersionMap!strip stripWith strictReadF replaceFile modifyFilediffFileremoveIfExists dpkgFileMap debOfFilecond readFile' readFileMaybeshowDeps showDeps'withCurrentDirectorygetDirectoryContents' setMapMaybezipMaps foldEmptymaybeLindent maybeReadread'modifyMintToVerbosity' listElemLens maybeLens fromEmpty fromSingleton.?=escapeDebianWildcardsLicense Public_DomainApacheArtistic BSD_2_Clause BSD_3_Clause BSD_4_ClauseISCCC_BYCC_BY_SACC_BY_NDCC_BY_NC CC_BY_NC_SA CC_BY_NC_NDCC0CDDLCPLEFLExpatGPLLGPLGFDLGFDL_NIVLPPLMPLPerlPythonQPLW3CZlibZope OtherLicenseAreaMainContribNonFree MultiArchMANoMASame MAForeign MAAllowed MainSection AreaSectionPackageArchitecturesAnyNamesPackagePriorityRequired ImportantStandardOptionalExtra SourceFormatNative3Quilt3StandardsVersiondatabaseDirectory dataDirectoryapacheLogDirectoryapacheErrorLogapacheAccessLogserverLogDirectory serverAppLogserverAccessLogappLogBaseNameerrorLogBaseNameaccessLogBaseNamedebianPackageVersiongetDebhelperCompatLevelgetDebianStandardsVersionparseStandardsVersionreadSourceFormat readPriorityparsePackageArchitectures readSection readMultiArchgetCurrentDebianUserhaskellMaintainerparseUploadersparseMaintainermaintainerOfLastResortfromCabalLicensetoCabalLicense readLicenseDebTypeDevProfDocEnvSetcleanOSdependOSbuildOSFlags _verbosity_dryRun_upgrade _roundtrip _validate_compilerFlavor_cabalFlagAssignments _buildEnvbuildEnvcabalFlagAssignmentscompilerFlavordryRun roundtripupgradevalidate verbosity flagOptions FileTupleSizeFetcher CheckSumsmd5sumsha1sha256 CompressionBZ2GZ UncompressedupdatecontrolFromIndexcontrolFromIndex' findIndexesindexesInReleasetupleFromFilePathfindContentsFilesmakePackageMap packageMapextractVersiontrumped trumpedMap trumpedXML fakeChanges BuildableInfo readyTargets allBlocked CycleInfodepPairs ReadyTargetreadywaitingother RelaxInfoDepInfo sourceName binaryNamesdepSetbinSetbuildDependencies sourceName' relations' binaryNames' relaxDeps buildable failPackage orderSource compareSourcegenDepsgetSourceOrderPackageRelations PackageType Development Profiling DocumentationExec Utilities HaskellSourceCabalBinaryDebDescription Canonical canonicalnewBinaryDebDescriptionnewPackageRelations architecturebinaryPriority binarySection description essential multiArchpackage packageTypebreaks builtUsingdepends preDependsprovides recommendsreplacessuggests XFieldDestBSCXFieldVersionControlSpec VCSBrowserVCSArchVCSBzrVCSCvsVCSDarcsVCSGitVCSHgVCSMtnVCSSvnSourceDebDescriptionnewSourceDebDescriptionnewSourceDebDescription'binaryPackagesbuildConflictsbuildConflictsIndep buildDependsbuildDependsIndep changedBydmUploadAllowedhomepage maintainerprioritysourcestandardsVersion uploaders vcsFields xDescriptionxFieldswithCompilerVersionnewestAvailablenewestAvailableCompilerIdcompilerIdFromDebianVersioncompilerFlavorOptioncompilerPackageNamegetCompilerInfoinputCabalizationbuiltInaptCacheShowPkgaptCacheProvidesaptCacheDependsaptCacheConflicts aptVersions nothingIfFilesOrLicenseDescriptionFilesDescription _filesPattern_filesCopyright _filesLicense_filesLicenseText _filesCommentLicenseDescription_license _licenseText_commentCopyrightDescription_format _upstreamName_upstreamContact_upstreamSource _disclaimer_summaryComment_summaryLicense_summaryCopyright_filesAndLicensesreadCopyrightDescriptionparseCopyrightDescriptiondefaultCopyrightDescription disclaimerfilesAndLicensesformatsummaryCommentsummaryCopyrightsummaryLicenseupstreamContact upstreamNameupstreamSourcecomment filesCommentfilesCopyright filesLicensefilesLicenseText filesPatternlicense licenseText TestsStatus TestsDisable TestsBuildTestsRunServerhostnameport headerMessageretry serverFlags installFiledomain serverAdminserver InstallFileexecName sourceDirdestDirdestNameAtomLinkInstall InstallTo InstallDataFileInstallCabalExecInstallCabalExecTo InstallDirDebInfo makeDebInfoallowDebianSelfBuildDeps apacheSiteatomSetbackupsbinaryArchitecturesbinaryPrioritiesbinarySectionsbuildDir changelogcommentscompatcontrol copyright debVersionexecMap executable extraDevDeps extraLibMapflags installInitintermediateFileslogrotateStanzamaintainerOptionmissingDependenciesnoDocumentationLibrarynoProfilingLibraryofficial omitLTDepsomitProfVersionDepsoverrideDebianNameBasepostInstpostRmpreInstpreRmrulesFragments rulesHead rulesIncludes rulesSettings serverInfosourceArchitectures sourceFormatsourcePackageNamesourcePriority sourceSection testsStatusuploadersOptionutilsPackageNameBasewarningwatchwebsitexDescriptionTextlinkinstall installTo installDatafileinstallCabalExecinstallCabalExecTo installDirbinaryDebDescription PackageInfo cabalNamedevDebprofDebdocDeb CabalInfodebInfo debianNameMapepochMappackageDescription packageInfo newCabalInfoDebianTCabalMCabalT execCabalT evalCabalT runCabalT execCabalM evalCabalM runCabalM evalDebianT evalDebian execDebianT liftCabalifMwhenMunlessM debianNamedebianNameBase mkPkgName mkPkgName'mapCabal splitCabal remapCabaldebianDefaultstightDependencyFixup doExecutabledoServer doWebsite doBackupsdescribeoldClckwrksSiteFlagsoldClckwrksServerFlags watchAtom siteAtoms serverAtoms backupAtoms execAtomsinputDebianizationinputDebianizationFileinputChangeLogdataDestdataTop debianizedebianizationFileMapBehaviorAdjustmentCommandLineOptions_flags _adjustmenthandleBehaviorAdjustmentparseProgramArguments'parseProgramArgumentsrunDebianizeScriptperformDebianizationfinishDebianizationwriteDebianizationdescribeDebianizationcompareDebianizationvalidateDebianizationFoundunFound SimulatedNumeric NonNumeric $fOrdFound $fEqFoundprettyOSparseOS prettyCPUparseCPUwebServerDirectoryContentsnetwo_LFMzacKIfjmC6gRt5N3aSz Network.URI uriToStringparseURI uriFragmenturiQueryuriPath uriAuthority uriSchemeURIuriPort uriRegName uriUserInfoURIAuthcatchIObindirlibdirdatadir libexecdir sysconfdirSplits_splits_test1_test2$fInterspersedSplitsDouble[]Hashesmd5 MethodHandle capabilitieslogMsgstatusuriStarturiDone uriFailuregeneralFailureauthorizationRequired mediaFailure uriAcquire configurationauthorizationCredentials mediaChanged emptyHashes parseStatus formatCommandparseTrueFalse parseHeader sendMethodrecvbool$fPrettyControl' ppControl ppParagraphppField$fPrettyField'$fPrettyParagraph'ParserunParserResultOkFailEmptypKeypValuepFieldpComment pParagraph safeIndexr2m _pSucceed_pFailsatisfypChar_trypEOF pTakeWhile _pSkipWhilepManynotEmptypMany1 pSkipMany _pSkipMany1parse$fMonadPlusParser $fMonadParser$fAlternativeParser$fApplicativeParser$fFunctorParser$fControlFunctionsByteStringbase System.IO Data.EitherLeftRight$fControlFunctionsTextpBlanksfcharfwsfchar_fws$fControlFunctions[]compareNonNumericordercompareMaybeNonNumeric parseEpochparseNonNumeric parseNumeric $fOrdNumeric $fEqNumeric$fOrdNonNumeric$fEqNonNumeric$fShowDebianVersion$fOrdDebianVersion$fEqDebianVersion$fParseDebianVersionByteString$fReadDebianVersion$fParseDebianVersion[]$fParseDebianVersionText _showHeaderstrip'entryRE changeDetails signatureheaderRE blankLines blankLineoptWhitebol_s1parseArchExcept pOrRelation whiteChar pRelation pMaybeVerReqpVerReq pMaybeArch pArchExcept pArchOnly$fParseRelations[]$fParseRelationsByteString$fParseRelationsText dropPrefix$fOrdPackageDescription$fOrdExecutable oldestPackagesplits)$fInterspersedVersionSplitsDebBaseVersion$fShowVersionSplitsremoveCommentParagraphs fieldValue' mapFieldValue HasControlshowLoc$fEqControlFileError$fExceptionControlFileError$fShowControlFileError$fHasControlDebianControl$fHasControlControl'$fHasDebianControlDebianControl$fShowDebianControlCabal_96aI7pZyaxU3dsgngOxbdKDistribution.VerbosityintToVerbosityremoveFileIfExistsremoveDirectoryIfExistssetCurrentDirectory'invalidLicense$fPrettyLicenseflagList fetchIndex indexURIscalcPath groupIndexes filterExistsGHC.BaseNothinguncompressedNameFilesdscdebstardiffErrorNoDebs TooManyDscs TooManyTars TooManyDiffs UnknownFilesMalformedDebFilenameVersionMismatch getVersion getSource getMaintainer getArches getBinArch mkFileLine unzipEithers debNameSplit loadFiles getUploader singleton OldRelaxInfo allCycles treePaths buildGraph Data.Foldableor pathEdgescompareSource' $fEqDepInfo_package _architecture _essential _description _relations_depends _recommends _suggests _preDepends_breaks _conflicts _provides _replaces _builtUsing _packageType_binarySection_binaryPriority _multiArch $fCanonical[]$fCanonicalPackageRelations$fCanonicalBinaryDebDescription$fCanonical[]0_source _maintainer _changedBy _uploaders_dmUploadAllowed _priority_section_standardsVersion _homepage _vcsFields_xFields_binaryPackages _buildDepends_buildConflicts_buildDependsIndep_buildConflictsIndep _xDescription$fCanonicalSourceDebDescriptionnewestAvailable'$fMemoizableCompilerFlavornewestAvailableCompilergetCompilerInfo'$fMemoizableBinPkgName autoreconfbuiltIn' takeBetweenMaybe Data.Maybe catMaybesmapMaybe listToMaybe maybeToList fromMaybefromJust isNothingisJustmaybeJustdots unPackageNamereadLicenseFieldparseFilesOrLicense toControlFile toParagraphtoLicenseFieldsourceDefaultFilesDescriptiondebianDefaultFilesDescriptiondefaultLicenseDescriptions$fDefaultCopyrightDescription$fPrettyCopyrightDescription_warning _sourceFormat_watch _rulesHead_rulesSettings_rulesIncludes_rulesFragments _copyright_control_intermediateFiles_compat _changelog _installInit_logrotateStanza _postInst_postRm_preInst_preRm_atomSet_noDocumentationLibrary_noProfilingLibrary_omitProfVersionDeps _omitLTDeps _buildDir_sourcePackageName_overrideDebianNameBase _revision _debVersion_uploadersOption_utilsPackageNameBase_xDescriptionText _comments_missingDependencies _extraLibMap_execMap _apacheSite_sourceArchitectures_binaryArchitectures_sourcePriority_binaryPriorities_sourceSection_binarySections _executable _serverInfo_website_backups _extraDevDeps _official _testsStatus_allowDebianSelfBuildDeps_maintainerOption$fCanonicalDebInfo_packageDescription_debInfo_debianNameMap _epochMap _packageInfo makeCabalInfo$fCanonicalCabalInfo Dependency_ BuildDepends BuildToolsPkgConfigDepends ExtraLibsdebianBaseNamedebianDescriptionBaseserverLogrotate' showCommand translate fileAtoms fileAtoms'unboxDependencyallBuildDependsmergeCabalDependenciesdocDependencies dependencies doBundledRelsAndunAndOrunOrRel'unReladaptaptFileanyrelanyrel'debianVersion'debianVersion''convert' filterMissingfindMapinputCabalInforeadLink readInstallreadDirinputSourceDebDescriptionparseSourceDebDescriptionparseBinaryDebDescription stripFieldrelsyesinputCabalInfoFromDirectoryfinalizeDebianizationfinalizeDebianization' debianVersion debianEpochfinalizeSourceNamefinalizeMaintainer whenEmptyfinalizeChangelogaddExtraLibDependenciescheckOfficialSettingsfilterRelations librarySpecsdescmakeUtilsPackage finalizeRuleschangelogVersionfinalizeControlofficialSettings putBuildDepscabalExecBinaryPackagebinaryPackageRelationsdocSpecsParagraph librarySpec expandAtoms flagStringlinksFilesTsourceFormatFiles watchFile intermediatesinstallsdirsinit logrotate postinstFiles postrmFiles preinstFiles prermFilesrules controlFile relFieldsdepField_defaultPackage_missingDependency_debianNameBase_debianVersion _buildDep_buildDepIndep_devDep _extraDepends_extraConflicts_extraProvides_extraReplaces_extraRecommends_extraSuggests_cabalDebMapping_cabalEpochMapping_execDebMapping _profiling_haddock_testsCabalFlagMappingCabalEpochMappingRevisionExecDebMappingCabalDebMapping ExtraSuggestsExtraRecommends ExtraReplaces ExtraProvidesExtraConflicts ExtraDependsDevDep BuildDepIndepBuildDepOfficialStatusOfficial NonOfficialProfilingStatusProfilingEnabledProfilingDisabled HaddockStatusHaddockEnabledHaddockDisabled executableR binPkgNameR nameAddrR relationsRmappingR epochMappingRextraRelationsRcabalDebMappingRcabalEpochMappingRcabalFlagMappingRbehaviorAdjustmentP maintainerP uploadersP executablePdefaultPackagePmissingDependencyPdebianNameBasePdebianVersionPdebianRevisionPsourcePackageNamePsourceSectionPstandardsVersionP buildDepPbuildDepIndepPdevDepPmkExtraP extraDependsPextraConflictsPextraProvidesPextraReplacesPextraRecommendsPextraSuggestsPcabalDebMappingPexecDebMappingPcabalEpochMappingP cabalFlagsP profilingPhaddockP officialP sourceFormatPtestsP disableTestsPbuildOnlyTestsPflagsP verbosityPdryRunPupgradeP roundtripPghcjsP buildEnvDirPcommandLineOptionsPcommandLineOptionsParserInfoaddExtra$fNewtypeCabalFlagMapping$fNewtypeCabalEpochMapping$fNewtypeRevision$fNewtypeExecDebMapping$fNewtypeCabalDebMapping$fNewtypeExtraSuggests$fNewtypeExtraRecommends$fNewtypeExtraReplaces$fNewtypeExtraProvides$fNewtypeExtraConflicts$fNewtypeExtraDepends$fNewtypeDevDep$fNewtypeBuildDepIndep$fNewtypeBuildDepmergeDebianization