diff --git a/doc/ref/gappkg.xml b/doc/ref/gappkg.xml
index eae41ac071..46eb45bb0e 100644
--- a/doc/ref/gappkg.xml
+++ b/doc/ref/gappkg.xml
@@ -1177,5 +1177,1082 @@ details.
+
+
+Standalone Programs in a ⪆ Package
+
+⪆ packages that involve stand-alone programs are fundamentally
+different from ⪆ packages that consist entirely of ⪆ code.
+
+This difference is threefold: A user who installs the ⪆ package
+must also compile (or install) the package's binaries, the
+package must check whether the binaries are indeed available,
+and finally the ⪆ code of the package has to start the external
+binary and to communicate with it.
+We will cover these three points in the following sections.
+
+If the package does not solely consist of an interface to an external
+binary and if the external program called is not just special-purpose
+code, but a generally available program, chances are high that sooner
+or later other ⪆ packages might also require this program.
+We therefore strongly recommend the provision of a documented ⪆
+function that will call the external binary. We also suggest to create
+actually two ⪆ packages; the first providing only the binary and the
+interface and the second (requiring the first,
+see ) being the actual ⪆ package.
+
+
+
+
+
+Installation of ⪆ Package Binaries
+
+sysinfo.gap
+external binaries
+The scheme for the installation of package binaries which is described
+further on is intended to permit the installation on different
+architectures which share a common file system (and share the
+architecture independent file).
+
+A ⪆ package which includes external binaries contains a bin
+subdirectory. This subdirectory in turn contains subdirectories for
+the different architectures on which the ⪆ package binaries are
+installed. The names of these directories must be the same as the
+names of the architecture dependent subdirectories of the main bin
+directory. Unless you use a tool like autoconf yourself, you must
+obtain the correct name of the binary directory from the main ⪆
+branch. To help with this, the main ⪆ directory contains a file
+sysinfo.gap which assigns the shell variable GAParch to the
+proper name as determined by ⪆'s configure process.
+For example on a Linux system, the file sysinfo.gap may look like
+this:
+
+
+
+We suggest that your ⪆ package contains a file configure which
+is called with the path of the ⪆ root directory as
+parameter. This file then will read sysinfo.gap and set up
+everything for compiling under the given architecture (for example
+creating a Makefile from Makefile.in). As initial templates,
+you may use installation scripts of the Example package.
+
+
+
+
+
+
+Test for the Existence of GAP Package Binaries
+
+If an external binary is essential for the workings of a ⪆ package,
+the function stored in the component AvailabilityTest of the
+PackageInfo.g file of the package should test whether the program
+has been compiled on the architecture (and inhibit package loading
+if this is not the case).
+This is especially important if the package is loaded automatically.
+
+The easiest way to accomplish this is to use
+
+for checking for the actual binaries in the path given by
+
+for the respective package.
+For example the example ⪆ package could use the
+following function to test whether the binary hello has been compiled;
+it will issue a warning if not, and will only load the package if the binary
+is indeed available:
+
+ fail;
+ end,
+...
+]]>
+
+However, if you look at the actual PackageInfo.g file of the
+example package, you will see that its
+AvailabilityTest function always returns true,
+and just logs the warning if the binary is not available
+(which may be later viewed with
+).
+This means that the binary is not regarded as essential for this
+package.
+
+You might also have to cope with the situation that external binaries will
+only run under UNIX (and not, say, under Windows), or may not compile with
+some compilers or default compiler options.
+See
+for information on how to test for the architecture.
+
+LogPackageLoadingMessage
+Last but not least: do not print anything in the AvailabilityTest
+function of the package via Print or Info. Instead one should
+call to store
+a message which may be viewed later with
+
+(the latter two functions are introduced in ⪆ 4.5)
+
+
+
+
+
+
+Calling of and Communication with External Binaries
+
+There are two reasons for this: the input data has to be passed on to
+the stand-alone program and the stand-alone program has to be started
+from within ⪆.
+
+There are two principal ways of doing this.
+
+The first possibility is to write all the data for the stand-alone to
+one or several files, then start the stand-alone with
+ or
+
+which then writes the output data to file, and finally read in
+the standalone's output file.
+
+The second way is interfacing via input-output streams,
+see Section .
+
+Some ⪆ packages use kernel modules
+(see )
+instead of external binaries.
+A kernel module is implemented in C and follows certain conventions to
+comply with the ⪆ kernel interface, which we plan to document later.
+In the meantime, we advise you to look at existing examples of such packages
+and get in touch with ⪆ developers if you plan to develop such a package.
+
+
+
+
+
+
+
+
+
+Having an InfoClass
+
+
+
+InfoClass
+It is a good idea to declare an InfoClass for your package. This gives
+the package user the opportunity to control the verbosity of output
+and/or the possibility of receiving debugging information
+(see ). Below, we give a quick
+overview of its utility.
+
+An InfoClass is defined with a DeclareInfoClass( InfoPkgname );
+statement and may be set to have an initial InfoLevel other than the
+zero default (which means no Info statement is to output information)
+via a SetInfoLevel( InfoPkgname, level ); statement. An initial
+InfoLevel of 1 is typical.
+
+Info statements have the form:
+Info( InfoPkgname, level, expr1, expr2, ...);
+where the expression list expr1, expr2, ...
+appears just like it would in a Print statement. The only difference is
+that the expression list is only printed (or even executed) if the
+InfoLevel of InfoPkgname is at least level.
+
+
+
+
+
+
+
+The Banner
+
+banner
+Since ⪆ 4.4, the package banner, if one is desired, should be
+provided by assigning a string to the BannerString field of the record
+argument of SetPackageInfo in the PackageInfo.g file.
+
+It is a good idea to have a hook into your package documentation from
+your banner. The banner of the &Example; package suggests to the ⪆ user:
+
+
+
+In order for this to display the introduction of the &Example; package
+the index-entry
+&tlt;Index&tgt;Example package&tlt;/Index&tgt;
+was added just before the first paragraph of the introductory section in
+the file example.xml. The &Example; package uses
+GAPDoc
+(see Section )
+for documentation
+(you will need some different scheme to achieve this using
+the gapmacro.tex system).
+
+
+
+
+
+
+Version Numbers
+
+version number
+Version numbers are strings containing nonnegative integers separated
+by non-numeric characters. They are compared by
+
+which first splits them at non-digit characters and then lexicographically
+compares the resulting integer lists.
+Thus version "2-3" is larger than version "2-2-5"
+but smaller than "4r2p3" or "11.0".
+
+It is possible for code to require ⪆ packages in certain
+versions. In this case, all versions, whose number is equal or larger
+than the requested number are acceptable. It is the task of the
+package author to provide upwards compatibility.
+
+Loading a specific version of a package (that is, not one with a
+larger version number) can be achieved by prepending = to the desired
+version number.
+For example, LoadPackage( "example", "=1.0" ) will load version
+"1.0" of the package "example",
+even if version "1.1" is available.
+As a consequence, version numbers must not start with =,
+so "=1.0" is not a valid version number.
+
+Package authors should choose a version numbering scheme that admits a
+new version number even after tiny changes to the package, and
+ensure that version numbers of successive package versions increase.
+The automatic update of package archives in the ⪆ distribution will
+only work if a package has a new version number.
+
+It is a well-established custom to name package archives like
+name-version.tar.gz, name-version.tar.bz2 etc.,
+where name is the lower case name, and version is
+the version (another custom is that the archive then should extract
+to a directory that has exactly the name name-version).
+
+It is very important that there should not ever be, for a given ⪆
+package, two different archives with the same package version number.
+If you make changes to your package and place a new archive of the
+package onto the public server, please ensure that a new archive has
+a new version number. This should be done even for very minor changes.
+
+For most of the packages it will be inappropriate to re-use the date
+of the release as a version number. It's much more obvious how big are
+the changes between versions "4.4.12", "4.5.1" and "4.5.2" than between
+versions "2008.12.17", "2011.04.15" and "2011.09.14".
+
+Since version information is duplicated in several places throughout the
+package documentation, for &GAPDoc;-based manuals you may define the
+version and the release manual in the comments in PackageInfo.g
+file close to the place where you specified its Version and
+Date components, for example
+
+##
+##
+## <#/GAPDoc>
+]]>
+notify that a part of the
+document is stored in PackageInfo.g (see example/makedocrel.g),
+read this data into the header of the main document via
+<#Include Label="PKGVERSIONDATA"> directive and then use them via
+&VERSION; and &RELEASEDATE; entities almost everywhere where you
+need to refer to them (most commonly, in the title page and installation
+instructions).
+
+
+
+
+
+
+Testing a &GAP; package
+
+
+Tests files for a GAP package
+
+The (optional) tst directory of your package may contain as
+many tests of the package functionality as appears appropriate. These tests
+should be organised into test files similarly to those in the tst
+directory of the &GAP; distribution as documented in
+.
+
+For a deposited package, a test file with a basic test of the package
+(for example, to check that it works as expected and/or that the manual
+examples are correct) may be specified in the component TestFile
+in the PackageInfo.g to be included in the GAP standard test suite.
+This file can either consist of
+calls (in this case, it is common to call it testall.g) or be
+itself a test file having an extension .tst and supposed to be
+read via . It is assumed that the
+latter case occurs if and only if the file contains the substring
+ "gap> START_TEST("
+
+\noindent
+(with exactly one space after the &GAP; prompt).
+
+For deposited packages, these tests are run by the &GAP; Group regularly,
+as a part of the standard &GAP; test suite. For the efficient testing it
+is important that the test specified in the PackageInfo.g file
+does not display any output (e.g. no test progress indicators) except
+reporting discrepancies if such occur and the completion report as
+in the example below:
+ Test("tst/testall.tst");
+Example package: testall.tst
+GAP4stones: 3333
+true
+]]>
+Tests which produce extended output and/or requires substantial runtime
+are not supposed to be a part of the &GAP; standard test suite but may
+be placed in the tst directory of the packages with further
+instructions on how to run them elsewhere.
+
+
+
+
+
+Testing &GAP; package loading
+
+To test that your package may be loaded into &GAP; without any problems
+and conflicts with other packages, test that it may be loaded in various
+configurations:
+
+-
+starting &GAP; with no packages (except needed for &GAP;) using -r -A options
+and calling LoadPackage("your-package-name");
+
+-
+starting &GAP; with no packages (except needed for &GAP;) using -r -A options
+and calling LoadPackage("your-package-name" : OnlyNeeded );
+
+-
+starting &GAP; in the default configuration (with no options)
+and calling LoadPackage("your-package-name");
+
+-
+starting &GAP; in the default configuration (with no options)
+and calling LoadPackage("your-package-name" : OnlyNeeded );
+
+-
+finally, together with all other packages using
+
(see below) in four possible combinations
+of starting &GAP; with/without -r -A options and calling
+ with/without Reversed option.
+
+
+The test of loading all packages is the most subtle one. Quite often
+it reveals problems which do not occur in the default configuration
+but may cause difficulties to the users of specialised packages.
+
+For your convenience, make testpackagesload called in the &GAP;
+root directory will run all package loading tests listed in this subsection
+and write their output in its dev/log directory.
+
+It will produce four files with test logs, corresponding to the
+four cases above (the letter N in the filename stands for
+needed
, A stands for autoloaded
):
+
+-
+dev/log/testpackagesload1_...
+
+-
+dev/log/testpackagesloadN1_...
+
+-
+dev/log/testpackagesloadA_...
+
+-
+dev/log/testpackagesloadNA_...
+
+
+Each file contains small sections for loading individual packages: among those,
+you need to find the section related to your package and may ignore all other
+sections. For example, the section for the &Example; package looks like
+
+so it has clearly passed the test. If there are any error messages displayed
+between Loading ... and Loaded ... lines, they will signal on
+errors during loading of your package.
+
+Additionally, this test collects information about variables created since
+the library was read (obtained using )
+with either short names (no more than three characters) or names breaking a
+recommended naming convention that the &GAP; core system and &GAP; packages
+should not use global variables starting in the lowercase
+(see Section ).
+Their list will be displayed in the test log (in the example above, &Example;
+packages does not create any such variables, so an empty list is displayed).
+It may be hard to attribute a particular identifier to a package, since it
+may be created by another package loaded because of dependencies, so when
+a more detailed and precise report on package variables is needed, it may
+be obtained using
+(also, make testpackagesvars called in the &GAP; root directory
+produces such reports for each package and writes them to a file
+dev/log/testpackagesvars_...).
+
+Finally, each log file finishes with two large sections for loading all
+packages in the alphabetical and reverse aplhabetical order (to check more
+combinations of loading one package after another). We are aiming at
+releasing only collections of package which do not break
+ in any of the four configurations, so if
+it is broken when you plug in the development version of your package into
+the released version of &GAP;, it is likely that your package triggers
+this error. If you observe that is broken
+and suspect that this is not the fault of your package, please contact
+the &GAP; Support.
+
+
+
+
+
+loads all &GAP; packages from their list sorted in alphabetical order
+(needed and suggested packages will be loaded when required). This is a
+technical function to check packages compatibility, so it should NOT be
+used to run anything except tests; it is known that &GAP; performance is
+slower if all packages are loaded. To introduce some variations of the
+order in which packages will be loaded for testing purposes,
+ accepts version Reversed to load
+packages from their list sorted in the reverse alphabetical order.
+
+
+
+
+
+Testing a &GAP; package with the &GAP; standard test suite
+
+The tst directory of the &GAP; installation contains a selection of
+test files and two scripts, testinstall.g and testall.g
+which are a part of the &GAP; standard test suite.
+
+It is important to check that your package does not break &GAP; standard
+tests. To perform a clean test and avoid interfering with other packages,
+first you must start a new &GAP; session with the following command
+(assuming that gap starts &GAP; in your system):
+
+After that load your package and run either testinstall.g or
+testall.g as demonstrated below.
+
+
+The quicker test, testinstall.g, requires about 512MB of memory and
+runs for about one minute on an Intel Core 2 Duo / 2.53 GHz machine. It may
+be started with the command
+ Read( Filename( DirectoriesLibrary( "tst" ), "testinstall.g" ) );
+]]>
+You will get a large number of lines with output about the progress of
+the tests.
+
+
+
+The more thorough test is testall.g which exercises more of &GAP;'s
+capabilities, containing all test files from testinstall.g as
+a subset. It requires about 512MB of memory, runs for about one hour
+on an Intel Core 2 Duo / 2.53 GHz machine, and produces an output
+similar to the testinstall.g test.
+To run it, also start a new &GAP; session with
+gap -N -A -x 80 -r -m 100m -o 512m and then call
+ Read( Filename( DirectoriesLibrary( "tst" ), "testall.g" ) );
+]]>
+You may repeat the same check loading your package with OnlyNeeded
+option. Remember to perform each subsequent test in a new &GAP; session.
+
+Also you may perform individual tests from the tst directory of the
+&GAP; installation loading them with ,
+for example, the file bugfix.tst.
+
+
+
+
+
+
+
+
+
+
+Access to the &GAP; Development Version
+
+We are aiming at providing a stable platform for package development and
+testing with official &GAP; releases. However, when it may be of benefit to
+obtain access to the &GAP; development version, please contact the &GAP;
+team by mailing to support@gap-system.org.
+
+
+
+
+
+
+Selecting a license for a &GAP; Package
+
+It is advised to make clear in the documentation of the package the basis
+on which it is being distributed to users. GAP itself is distributed under
+the GNU Public License version 2 (version 2 or later). We would encourage
+you to consider the GPL for your packages, but you might wish to be more
+restrictive (for instance forbidding redistribution for profit) or less
+restrictive (allowing your software to be incorporated into commercial
+software). See Choosing a License for the Distribution of Your Package
+from http://www.gap-system.org/Packages/Authors/authors.html
+for further details.
+
+
+In the past many &GAP; packages used the text
+We adopt the copyright regulations of GAP as detailed in the copyright
+notice in the &GAP; manual
or a similar statement. We now advise to be
+more explicit and make the exact reference to the GPL license, for example:
+
+
+package-name is free software; you can redistribute it
+and/or modify it under the terms of the
+http://www.fsf.org/licenses/gpl.html
+as published by the Free Software Foundation; either version 2 of the License,
+or (at your option) any later version.
+
+
+
+
+
+
+Wrapping up a &GAP; Package
+
+
+
+Currently, the &GAP; distribution provides archives in four different
+formats.
+
+
+.tar.gz
+-
+ a standard UNIX tar archive, compressed with gzip
+
+.tar.bz2
+-
+ a standard UNIX tar archive, compressed with bzip2
+
+.zip
+-
+ an archive in zip format, where text files should have
+ UNIX style line breaks
+
+-win.zip
+-
+ an archive in zip format, where text files should have
+ DOS/Windows style line breaks
+
+
+
+For convenience of possible users it is sensible that you provide an
+archive of your package in at least one of these formats.
+
+For example, if you wish to supply a .tar.gz archive,
+you may create it with the command
+
+ tar -cvzf package-name-version.tar.gz package-name
+
+\noindent
+The etc directory obtained from tools.tar.gz
+(described above in
+Section )
+contains a file packpack which provides a more versatile
+packing-up script.
+
+In the past, it was recommended that your &GAP; package should be packed
+with the zoo archiver. We do not redistribute .zoo archives
+since &GAP; 4.5, but we still accept package archives in .zoo
+format for backwards compatibility, if no other formats are available.
+
+Because the release of the &GAP; package is independent of the version
+of &GAP;, a &GAP; package should be wrapped up in separate file that
+can be installed onto any version of &GAP;. In this way, a package can
+be upgraded any time without the need to wait for new &GAP; releases.
+To ensure this, the package should be archived from the &GAP; pkg
+directory, that is all files are archived with the path starting at the
+package's name.
+
+GAPDocManualLab
+The archive of a &GAP; package should contain all files necessary for the
+package to work. In particular there should be a compiled documentation,
+which includes the manual.six, manual.toc and manual.lab
+file in the
+documentation subdirectory which are created by &TeX;ing the documentation,
+if you use &GAPDoc; or the gapmacro.tex document formats.
+(The first two files are needed by the &GAP; help system,
+and the manual.lab file is needed if the main manuals or another
+package is referring to your package.
+Use the command GAPDocManualLab( packagename ); to create this file
+for your help books if you use &GAPDoc;.)
+
+
+For packages which are redistributed via the &GAP; Web site,
+we offer an automatic conversion of any of the formats listed
+above to all the others (note that this, as well as wrapping
+the &GAP; distribution as a single archive containing the
+core system and all currently redistributed packages, will
+change file timestamps, so one should not rely on them anywhere
+in the package).
+
+
+To use the conversion and repackaging service, you can provide any of
+the four archive formats or even more than one, however you should
+adhere to the following rule: text files in .tar.gz
+and .tar.bz2 archives must have UNIX style line breaks,
+while text files in -win.zip archives must have
+DOS/Windows line breaks.
+
+
+The package wrapping tools for the &GAP; distribution and web pages
+then will use a sensible list of file extensions to decide if a file
+is a text file (being conservative, it may miss a few text files).
+These rules may be prepended by the application of rules from the
+PackageInfo.g file:
+
+-
+if it has a .TextFiles component, then consider the given files
+as text files before &GAP; defaults will be applied;
+
+-
+if it has a .BinaryFiles component, then consider given files
+as binary files before &GAP; defaults will be applied;
+
+-
+if it has a .TextBinaryFilesPatterns component, then apply it
+before &GAP; defaults will be applied;
+
+
+
+
+The etc directory obtained from tools.tar.gz
+(described above in
+Section )
+contains a file classifyfiles.py and two files patternscolor.txt
+and patternstextbinary.txt implementing &GAP; default rules used
+to classify files in packages.
+For most of the packages these default rules perfecty detect binary and
+text files, so there is no need for them to use any of the three optional
+components. However, .TextBinaryFilesPatterns, or .TextFiles,
+or .BinaryFiles will become useful if the package has e.g. data
+files which are recognised as binary files by the default rules, or if the
+package uses standard extensions in a non-standard way (this is not
+recommended, of course). If things will go wrong, it is possible that one
+(or indeed all) created archives have wrong line breaks.
+
+
+Utility functions available in gap4r7/lib/lbutil.g, namely
+DosUnixLinebreaks, UnixDosLinebreaks, MacUnixLinebreaks
+may be helpful. They are described in the comments to their source code.
+
+
+
+
+
+
+The WWW Homepage of a Package
+
+If you want to distribute your package
+you should create a WWW homepage containing
+some basic information,
+archives for download,
+the README file with installation instructions,
+and a copy of the package's PackageInfo.g file.
+
+The responsibility for this WWW homepage is with the package
+authors/maintainers.
+
+If you tell us about your package
+(say, by mail to support@gap-system.org)
+we may consider either
+
+-
+adding a link to your package homepage from the &GAP; website
+(thus, the package will be an undeposited contribution);
+
+-
+or redistributing the current version of your package as a part of
+the &GAP; distribution (this, the package will be deposited),
+also ;
+
+
+In the latter case we can also provide some services for producing several
+archive formats from the archive you provide (e.g., you produce a
+.tar.gz version of your archive and we produce also a .tar.bz2
+and a -win.zip version from it).
+
+Please also consider submitting your package to the &GAP; package refereeing
+process (see http://www.gap-system.org/Contacts/submit.html for
+further information).
+
+
+
+
+
+Upgrading the package to work with &GAP; 4.5
+
+
+Changes in &GAP; 4.5 from the packages perspective
+
+Here we list only those changes which may have some implications for the
+packages.
+
+
+
+-
+Changing the distribution format providing one archive with the core system
+and all currently redistributed packages.
+
+
+-
+The &GAP; kernel is now compiled by default to use the GMP large integer
+arithmetic library, speeding up arithmetic by a factor of 4 or more in many cases.
+This slightly changes the build process, affecting mainly packages with
+dynamically loaded modules (see http://www.gap-system.org/Download/
+for &GAP; installation instructions).
+
+
+-
+The &GAP; documentation has been converted to the &GAPDoc; format and extensively
+reviewed. Now it has only two books: the Tutorial and the Reference Manual.
+The two other books,
Extending &GAP;
and Programming Tutorial
became
+parts of the Reference Manual. Packages that refer to parts of the &GAP; documentation
+may need to rebuild their manuals to update references.
+
+Some packages still use the
+old gapmacro
format for their manuals, for which support may be discontinued
+in the future. There is no urgent need to convert such manuals into the &GAPDoc;
+format before &GAP; 4.5 release, but we encourage you very much to consider
+doing this at some later point.
+
+
+-
+The old concept of an autoloaded package has been integrated with the needed
+and suggested mechanism that already exists between packages. &GAP; itself
+now
needs
certain packages (for instance &GAPDoc;) and suggests
others
+(typically the packages that were autoloaded). The decisions
+which packages &GAP; should need or suggest are made by developers based on
+technical criteria. They can be easily overridden by a user
+using the new gap.ini
+(see ).
+The default file ensures that all previously autoloaded packages are
+still loaded if present.
+
+
+-
+Optional ~/.gap directory for user's customisations which may contain e.g.
+locally installed packages (see
).
+If package installation instructions explain how to install the package in a
+non-standard location, they may need an update. This is intended to replace
+.gaprc files, but those are still supported for backwards
+compatibility (see ).
+
+
+-
+Various improvements in the packages loading mechanism make it more
+informative, while avoiding confusing the user with warning and error
+messages for packages they didn't
+know they were loading. For example, many messages are stored but not
+displayed using the function
+and there is a function
+to show log messages that occur during package loading.
+Packages are encouraged to use these mechanisms to report
+problems in loading (e.g. binaries not compiled), rather than printing messages directly.
+
+
+-
+Since &GAP; 4.5 a package may place global variables into a local
+namespace as explained in
+in order to avoid name clashes and preserve compatibility.
+
+
+-
+In &GAP; 4.5 the internal representation of a record has changed,
+as well as some of the basic functions to manipulate records. This speeds
+up considerably the creation of and access to records with many components.
+Record components are now internally stored in the order in which they were used
+first, and this means that the internal ordering of components (returned by
+
and so the ordering of records, depends
+on the GAP session.
+
+Therefore, within each session everything is consistent, so one can
+efficiently remove duplicates with ,
+sort lists of records, find records with binary search, etc., but a
+care should be taken not to rely on
+always returning names of components in the same order.
+
+
+
+
+
+
+
+
+
+
+
+Checklists
+
+checklists
+
+Package release checklist
+
+The following checklist may be used by package authors, members of the
+&GAP; team responsible for package updates, package editors and referees.
+
+
+
+-
+ Test that the package:
+
+ -
+ does not break testinstall.g and testall.g
+ and does not slow them down noticeably
+ (see
);
+
+ -
+ may be loaded in various configurations (see
);
+
+ -
+ follows the guidelines of Section
+
+ about names of functions and variables;
+
+
+
+
+-
+ Package documentation:
+
+ -
+ is built and included in the package archive together with
+ its source files;
+
+ -
+ states the version, release date and package authors;
+
+ -
+ has the same version, release date and package authors
+ details as stated in the PackageInfo.g file;
+
+ -
+ is searchable using the &GAP; help system;
+
+ -
+ is clear about the license under which the package is distributed;
+
+
+
+
+-
+ PackageInfo.g file:
+
+ -
+ has the same version, release date and package authors
+ details as stated in the package manual;
+
+ -
+ has all mandatory components and also optional components where appropriate;
+
+ -
+ in particular, contains hints to distinguish binary and text files in
+ case of non-standard file names and extensions;
+
+ -
+ is validated using
;
+
+
+
+
+-
+ Package archive(s):
+
+ -
+ have correct permisisons for all files and directories after their
+ unpacking (755 for directories and executables, if any; 644 for other
+ files);
+
+ -
+ contain files with correct line breaks for the given format
+ (see
);
+
+ -
+ contain no hidden system files and directories that are not supposed
+ to be included in the package, e.g. .cvsignore,
+ .git etc.;
+
+
+
+
+-
+ Package availability:
+
+ -
+ not only the package archive(s), but also the
+ PackageInfo.g and README files
+ are available online;
+
+ -
+ the URL of the PackageInfo.g file is validated using
+ the online tool available from
+ http://www.gap-system.org/Packages/Authors/authors.html;
+
+
+
+
+
+
+
+
+
+
+Checklist for package upgrade to work with &GAP; 4.5
+
+The following checklist will help you to check how well your package is
+ready to work with &GAP; 4.5.
+
+
+
+
+-
+Mandatory changes needed for package upgrade to work with &GAP; 4.5:
+
+
+
+
+Check that the package works as expected:
+
+-
+
+-
+verify that the package functionality works as required, that examples
+in the manual are correct and that test files show no discrepancies;
+
+-
+if necessary, update manual examples and test files because the order
+in which record components are printed has changed
+(but now it will be more consistent and less dependent on how the record
+was created);
+
+-
+check the usage of names of record components in the code:
+take care not to rely on
+always returning names of components in the same order
+(see )
+
+
+
+
+
+Revise package dependencies:
+
+-
+Check the the PackageInfo.g has the correct list of
+needed and suggested packages (see
).
+
+
+
+Revise licensing information:
+
+-
+Check that the package states clearly under which conditions it is distributed
+(see
).
+
+
+
+Rebuild the package documentation:
+
+-
+whenever your package documentation is &GAPDoc; or gapmacro.tex-based,
+&GAP; 4.5 contains new versions of both tools. This will ensure that
+cross-references from the package manual to the main &GAP; manuals are
+correct and that the &GAP; help system will be able to navigate to the more
+precise location in the package manual. This will also improve the layout of
+the package documentation. In particular, &GAPDoc; has a better
+.css file and is capable of producing the HTML version with
+MathJax support to display nicely mathematical formulae.
+ Note that it's not possible for a package to have an HTML manual which
+contains correct links to both &GAP; 4.4 and &GAP; 4.5 main manuals.
+
+
+
+
+
+
+-
+Optional changes recommended for package upgrade to work with &GAP; 4.5:
+
+
+
+-
+When the AvailabilityTest component in PackageInfo.g
+differs from
, use
+ to store
+a message which may be viewed later with
+
+instead of calling Print or Info directly
+(see ).
+
+
+-
+It is recommended not to call
+from a package file while this file is read: instead one should list the
+package in question in the lists of needed or suggested packages.
+To verify whether such calls occur in the package first load it and
+then call DisplayPackageLoadingLog( PACKAGE_WARNING );. If there is
+a genuine need to decide whether some package will be available at runtime,
+use the function
+introduced in &GAP; 4.5.
+
+
+-
+Check if the package still relies on some obsolete variables
+(see
)
+and try to get rid of their usage.
+
+
+
+
+
+
+
+
+