Science Score: 41.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
○.zenodo.json file
-
○DOI references
-
○Academic publication links
-
✓Committers with academic emails
21 of 41 committers (51.2%) from academic institutions -
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (15.2%) to scientific vocabulary
Keywords from Contributors
Repository
Temporary workplace for libgap development
Basic Info
- Host: GitHub
- Owner: markuspf
- License: gpl-2.0
- Language: GAP
- Default Branch: master
- Size: 368 MB
Statistics
- Stars: 0
- Watchers: 2
- Forks: 1
- Open Issues: 0
- Releases: 0
Metadata Files
README.buildsys.md
The GAP build system
This file is meant to give an overview of how the GAP build system works. It is targeted at people who need to work on the build system itself (to extend it, fixes bugs in it, etc.). It should not be necessary to read this if all you want to do is compile GAP and work on the GAP library and kernel.
Note that this really is just an overview; for details, please refer to the comments inside the various parts of the build system.
Prerequisites
In order to work on the build system, you need at least the following:
- GNU autoconf (we recommend 2.69 or later)
- GNU make
Note that we extensively use features provided by GNU make, so in general another version of make, such as BSD make, is not suitable.
Quick start: building GAP with no frills
If you are working with a fresh clone of the GAP repository, you need to
run the autogen.sh script first, which will generate the configure
script. Afterwards, or if you are using a release version of GAP, you
can follow the standard procedure:
./configure
make
== Overview of the files constituting the GAP build system
autogen.sh: sets up the build system; typically the first thing to run in a fresh clone of the GAP repository. It runsautoreconfwhich in turn runs several tools includeaclocal,autoheader,autoconf,libtoolizeconfigure: generated byautogen.shfromconfigure.ac.configure.ac: the GNU autoconf source of our configure script.GNUmakefile,GNUmakefile.in: The former file is generated from the latter byconfigure. It is the primary Makefile (GNU make prefers it overMakefile). It only contains variables and vpath settings, and includesMakefile.rulesfor the actual build rules.Makefile: This is a placeholder file, and serves two purposes:- If the user runs
makebeforeconfigure, it prints a warning. - If
configuredid run, butmakeis not GNU make, it produces a corresponding error message.
- If the user runs
Makefile.rules: This is the core of the build system. If you want to add or remove a kernel C source file, you need to add or remove its name here and only here.bin/: This directory is created for compatibility mode (see below).cnf/: All files in this directory are part of the build system.extern/: External libraries we bundle with GAP (such as GMP) are put in here.gen/: Generated code (such asconfig.handgap_version.c) is put into this directory.obj/: All*.ofiles are placed into this directory..deps/directories contain*.dfiles generated by the build system, and which are used to track dependencies, e.g. of C source files on header files..libs/directories are created by libtool. Please refer to the libtool documentation for details.
Out-of-tree builds
The old GAP build system had a concept of "configs" and "CONFIGNAME", which allowed you to build GAP in different configurations from a single set of sources. This is gone in the current build system. However, a similar goal can be achieved by using so-called "out-of-tree builds".
In the following and also in the files that make up the build system, "srcdir" refers to the directory containing the GAP files, i.e. it contains this README, the src and lib directories and more.
To create a new out-of-tree build, create a new directory anywhere in your filesystem. A typical setup places the out-of-tree dirs into subdirectories of a "build" directory inside the srcdir. So you might have directories
srcdir/build/default
srcdir/build/default32
srcdir/build/hpcgap
srcdir/build/hpcgap32
...
We will refer to this directory from now on as the "builddir".
To initialize the out-of-tree build, change into the builddir and execute the configure script from the srcdir, like this:
cd $builddir
$srcdir/configure
You can pass any additional options you like to configure, e.g. ABI=32
or --enable-hpcgap.
Once the configure script has completed, you can run make as usual,
and all the object files and the gap executable will be placed inside
builddir. Your srcdir will remain untouched.
Compatibility mode
Compatibility mode emulates the build environment of the old GAP build system in order to allow packages with kernel extensions to be used with the new build system unmodified. As such, it mainly exists to ease the transition between new and old build system, and the plan is to remove it once all packages have been adapted to the new build system. However, that is still far off.
Compatibility mode does the following things:
- create
sysinfo.gapfile in the build dir - create a symlink
sysinfo.gap-default$ABIpointing atsysinfo.gap - create a
bin/$GAPARCH/config.hsymlink pointing atgen/config.h - create a
bin/$GAPARCH/gacsymlink pointing atgac - create a
bin/$GAPARCH/srcsymlink pointing at either$srcdir/srcor (for HPC-GAP build) at$srcdir/hpcgap/src - for out-of-tree builds, it creates a
${builddir}/src/compiled.hfile - ...
For now, using compatibility mode is required if one wants to build the
kernel extension for most packages which have one. In the future, we will
provide an alternative way to do this, and also will extend gac to
cleanly supported building kernel extensions.
Dependency tracking
The build system tracks depdencies between files, such as between C source and
header files, via *.d files in .deps directories below obj/ and gen/.
These files are mostly generated by the compiler; for this, the compiler needs
to support the relevant flags (gcc, clang, icc all do so).
For a detailed explanation of a very similar scheme, see here: http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/
HPC-GAP integration
One of the main features of the new build system is that it optionally allows to build HPC-GAP instead of plain GAP. HPC-GAP is an experimental fork of GAP which implements concurrent programming, multi-threading, etc..
The HPC-GAP kernel and library were forked from the GAP kernel and library and
developed semi-independently for several years, with occasional merges between
the two. In order to recombine the two, we developed the following plan: We
merged the HPC-GAP fork into a subdirectory hpcgap of the GAP repository.
Then, all files inside hpcgap which were identical to their counterparts in
the GAP repository were deleted (e.g. hpcgap/src/ariths.c was deleted as it
was identical to src/ariths.c).
The new build system was then modified to optionally allow building HPC-GAP
(when the --enable-hpcgap flag is passed to the configure script). For
this work, and the resulting HPC-GAP binary to work, several techniques are
employed:
For the kernel C source files, whenever both
src/FOO.candhpcgap/src/FOO.cexist, the latter is compiled, the former ignored.The include paths for C headers are ordered so that files in
hpcgap/srcare found before those insrcHowever, the C preprocessor directive
#include "FOO.h"always searches first in the current directory. This would lead to incorrect compilation, assrc/FOO.hmight get picked up even if there is ahpcgap/src/FOO.hheader. To prevent this, all include directives were changed to the form#include <src/FOO.h>, which does not search in the current directory first. Thesrc/prefix was added so that internal headers can be quickly distinguished from external headers (e.g. of the standard C library). We expect that this change will be undone again in the future, once the GAP and HPC-GAP kernels have been merged.In order to get the library to work right, HPC-GAP mode employs multiple GAP root paths. Specifically, the GAP kernel function
SySetGapRootPathwas modified so that for every root directoryFOOthat gets added, we first addFOO/hpcgapto the list of root directories.Ward (a tool for scanning our C sources and inserting guard statements into it) is integrated as follows: Normally,
src/FOO.cgets compiled toobj/FOO.o. With ward in the mix,src/FOO.cor (if it exists)hpcgap/src/FOO.cis first turned intogen/FOO.cby ward, and then the compiler turns the latter intoobj/FOO.o. For each conversion, dependencies are tracked via.../.deps/FOO.dfiles. In particular, ifhpcgap/src/FOO.cexists and is deleted, then the dependency rules ingen/.deps/FOO.dwill ensure thatgen/FOO.cis regenerated fromsrc/FOO.c.
Open tasks
There are many things that still need to be done in the new build system. For
a (possibly incomplete) list, please refer to the GAP issue tracker under the
label build system. For now also refer to
https://github.com/fingolfin/gap/issues
Owner
- Name: Markus Pfeiffer
- Login: markuspf
- Kind: user
- Location: United Kingdom
- Repositories: 184
- Profile: https://github.com/markuspf
Citation (CITATION)
Please use one of the following samples to cite GAP version from this installation
Text:
[GAP] GAP – Groups, Algorithms, and Programming, Version 4.dev,
The GAP Group (this year), https://www.gap-system.org.
HTML:
<p class='BibEntry'>
[<span class='BibKey'>GAP</span>]
<i class='BibTitle'>GAP – Groups, Algorithms, and Programming, Version 4.dev</i>,
<span class='BibOrganization'>The GAP Group</span> (<span class='BibYear'>this year</span>),
<span class='BibHowpublished'><a href="https://www.gap-system.org">https://www.gap-system.org</a></span>.
</p>
BibXML:
<entry id="GAP4.dev"><misc>
<title><C>GAP</C> – <C>G</C>roups, <C>A</C>lgorithms,
and <C>P</C>rogramming, <C>V</C>ersion 4.dev</title>
<howpublished><URL>https://www.gap-system.org</URL></howpublished>
<year>this year</year>
<key>GAP</key>
<keywords>groups; *; gap; manual</keywords>
<other type="organization">The GAP <C>G</C>roup</other>
</misc></entry>
BibTeX:
@misc{ GAP4.dev,
title = {{GAP} {\textendash} {G}roups, {A}lgorithms, and {P}rogramming, {V}ersion 4.dev},
organization = {The GAP {G}roup},
year = {this year},
howpublished = {\href{https://www.gap-system.org}{\texttt{https://www.gap-system.org}}},
key = {GAP},
keywords = {groups; *; gap; manual}
}
If you are not using BibTeX, here is the bibliography entry produced
by BibTeX (in bibliography style `alpha'):
\bibitem[GAP]{GAP4}
\emph{GAP -- Groups, Algorithms, and Programming}, Version 4.dev,
The GAP~Group (this year), \verb+https://www.gap-system.org+.
If you have (predominantly) used one or more particular GAP packages,
please cite these packages in addition to GAP itself (either check the
the package documentation for the suggestions, or use a scheme like:
[PKG]
<Author name(s)>, <package name>, <package long title>,
Version <package version> (<package date>), (GAP package),
<package URL>.
You may also produce citation samples for a GAP package by entering
Cite("packagename");
in a GAP installation with the working version of this package available.
GitHub Events
Total
Last Year
Committers
Last synced: 12 months ago
Top Committers
| Name | Commits | |
|---|---|---|
| Max Horn | m****x@q****e | 1,960 |
| Reimer Behrends | b****s@g****m | 821 |
| Alexander Konovalov | a****v@s****k | 501 |
| Chris Jefferson | c****1@s****k | 492 |
| Markus Pfeiffer | m****r@s****k | 480 |
| Alexander Hulpke | h****e@m****u | 312 |
| Steve Linton | s****n@s****k | 239 |
| James Mitchell | j****3@s****k | 203 |
| Gábor Horváth | g****h@s****u | 112 |
| gap | d****l@g****g | 57 |
| Frank Lübeck | f****k@m****e | 43 |
| Max Neunhöffer | n****f@m****k | 33 |
| Vladimir Janjic | jv@c****k | 27 |
| Wilf Wilson | w****f@w****t | 26 |
| Burkhard Höfling | b****d@h****e | 21 |
| Michael Torpey | m****5@s****k | 14 |
| Sergio Siccha | s****a@g****m | 13 |
| Sandeep Murthy | s****p@s****s | 12 |
| ThomasBreuer | s****m@m****e | 9 |
| James Williams | f****x@h****m | 7 |
| Jerry James | l****y@g****m | 5 |
| Glen Whitney | g****y@p****u | 5 |
| Christopher Russell | c****6@s****k | 4 |
| Blair Archibald | m****d@g****m | 4 |
| Laurent Bartholdi | l****i@g****m | 4 |
| Volker Braun | v****e@g****m | 4 |
| Chris Wensley | c****s@b****m | 3 |
| Claus Fieker | f****r@m****e | 3 |
| Bernhard Reinke | b****e@j****e | 3 |
| Jan de Muijnck-Hughes | j****m@s****k | 3 |
| and 11 more... | ||
Committer Domains (Top 20 + Academic)
Issues and Pull Requests
Last synced: 12 months ago
All Time
- Total issues: 0
- Total pull requests: 0
- Average time to close issues: N/A
- Average time to close pull requests: N/A
- Total issue authors: 0
- Total pull request authors: 0
- Average comments per issue: 0
- Average comments per pull request: 0
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 0
- Pull requests: 0
- Average time to close issues: N/A
- Average time to close pull requests: N/A
- Issue authors: 0
- Pull request authors: 0
- Average comments per issue: 0
- Average comments per pull request: 0
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0