Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • ghc/ghc
  • bgamari/ghc
  • syd/ghc
  • ggreif/ghc
  • watashi/ghc
  • RolandSenn/ghc
  • mpickering/ghc
  • DavidEichmann/ghc
  • carter/ghc
  • harpocrates/ghc
  • ethercrow/ghc
  • mijicd/ghc
  • adamse/ghc
  • alexbiehl/ghc
  • gridaphobe/ghc
  • trofi/ghc
  • supersven/ghc
  • ppk/ghc
  • ulysses4ever/ghc
  • AndreasK/ghc
  • ghuntley/ghc
  • shayne-fletcher-da/ghc
  • fgaz/ghc
  • yav/ghc
  • osa1/ghc
  • mbbx6spp/ghc
  • JulianLeviston/ghc
  • reactormonk/ghc
  • rae/ghc
  • takenobu-hs/ghc
  • michalt/ghc
  • andrewthad/ghc
  • hsyl20/ghc
  • scottgw/ghc
  • sjakobi/ghc
  • angerman/ghc
  • RyanGlScott/ghc
  • hvr/ghc
  • howtonotwin/ghc
  • chessai/ghc
  • m-renaud/ghc
  • brprice/ghc
  • stevehartdata/ghc
  • sighingnow/ghc
  • kgardas/ghc
  • ckoparkar/ghc
  • alp/ghc
  • smaeul/ghc
  • kakkun61/ghc
  • sykloid/ghc
  • newhoggy/ghc
  • toonn/ghc
  • nineonine/ghc
  • Phyx/ghc
  • ezyang/ghc
  • tweag/ghc
  • langston/ghc
  • ndmitchell/ghc
  • rockbmb/ghc
  • artempyanykh/ghc
  • mniip/ghc
  • mynguyenbmc/ghc
  • alexfmpe/ghc
  • crockeea/ghc
  • nh2/ghc
  • vaibhavsagar/ghc
  • phadej/ghc
  • Haskell-mouse/ghc
  • lolotp/ghc
  • spacekitteh/ghc
  • michaelpj/ghc
  • mgsloan/ghc
  • HPCohen/ghc
  • tmobile/ghc
  • radrow/ghc
  • simonmar/ghc
  • _deepfire/ghc
  • Ericson2314/ghc
  • leitao/ghc
  • fumieval/ghc
  • trac-isovector/ghc
  • cblp/ghc
  • xich/ghc
  • ciil/ghc
  • erthalion/ghc
  • xldenis/ghc
  • autotaker/ghc
  • haskell-wasm/ghc
  • kcsongor/ghc
  • agander/ghc
  • Baranowski/ghc
  • trac-dredozubov/ghc
  • 23Skidoo/ghc
  • iustin/ghc
  • ningning/ghc
  • josefs/ghc
  • kabuhr/ghc
  • gallais/ghc
  • dten/ghc
  • expipiplus1/ghc
  • Pluralia/ghc
  • rohanjr/ghc
  • intricate/ghc
  • kirelagin/ghc
  • Javran/ghc
  • DanielG/ghc
  • trac-mizunashi_mana/ghc
  • pparkkin/ghc
  • bollu/ghc
  • ntc2/ghc
  • jaspervdj/ghc
  • JoshMeredith/ghc
  • wz1000/ghc
  • zkourouma/ghc
  • code5hot/ghc
  • jdprice/ghc
  • tdammers/ghc
  • J-mie6/ghc
  • trac-lantti/ghc
  • ch1bo/ghc
  • cgohla/ghc
  • lucamolteni/ghc
  • acairncross/ghc
  • amerocu/ghc
  • chreekat/ghc
  • txsmith/ghc
  • trupill/ghc
  • typetetris/ghc
  • sergv/ghc
  • fryguybob/ghc
  • erikd/ghc
  • trac-roland/ghc
  • setupminimal/ghc
  • Friede80/ghc
  • SkyWriter/ghc
  • xplorld/ghc
  • abrar/ghc
  • obsidiansystems/ghc
  • Icelandjack/ghc
  • adinapoli/ghc
  • trac-matthewbauer/ghc
  • heatsink/ghc
  • dwijnand/ghc
  • Cmdv/ghc
  • alinab/ghc
  • pepeiborra/ghc
  • fommil/ghc
  • luochen1990/ghc
  • rlupton20/ghc
  • applePrincess/ghc
  • lehins/ghc
  • ronmrdechai/ghc
  • leeadam/ghc
  • harendra/ghc
  • mightymosquito1991/ghc
  • trac-gershomb/ghc
  • lucajulian/ghc
  • Rizary/ghc
  • VictorCMiraldo/ghc
  • jamesbrock/ghc
  • andrewdmeier/ghc
  • luke/ghc
  • pranaysashank/ghc
  • cocreature/ghc
  • hithroc/ghc
  • obreitwi/ghc
  • slrtbtfs/ghc
  • kaol/ghc
  • yairchu/ghc
  • Mathemagician98/ghc
  • trac-taylorfausak/ghc
  • leungbk/ghc
  • MichaWiedenmann/ghc
  • chris-martin/ghc
  • TDecki/ghc
  • adithyaov/ghc
  • trac-gelisam/ghc
  • Lysxia/ghc
  • complyue/ghc
  • bwignall/ghc
  • sternmull/ghc
  • sonika/ghc
  • leif/ghc
  • broadwaylamb/ghc
  • myszon/ghc
  • danbroooks/ghc
  • Mechachleopteryx/ghc
  • zardyh/ghc
  • trac-vdukhovni/ghc
  • OmarKhaledAbdo/ghc
  • arrowd/ghc
  • Bodigrim/ghc
  • matheus23/ghc
  • cardenaso11/ghc
  • trac-Athas/ghc
  • mb720/ghc
  • DylanZA/ghc
  • liff/ghc
  • typedrat/ghc
  • trac-claude/ghc
  • jbm/ghc
  • Gertjan423/ghc
  • PHO/ghc
  • JKTKops/ghc
  • kockahonza/ghc
  • msakai/ghc
  • Sir4ur0n/ghc
  • barambani/ghc
  • vishnu.c/ghc
  • dcoutts/ghc
  • trac-runeks/ghc
  • trac-MaxGabriel/ghc
  • lexi.lambda/ghc
  • strake/ghc
  • spavikevik/ghc
  • JakobBruenker/ghc
  • rmanne/ghc
  • gdziadkiewicz/ghc
  • ani/ghc
  • iliastsi/ghc
  • smunix/ghc
  • judah/ghc
  • blackgnezdo/ghc
  • emilypi/ghc
  • trac-bpfoley/ghc
  • muesli4/ghc
  • trac-gkaracha/ghc
  • Kleidukos/ghc
  • nek0/ghc
  • TristanCacqueray/ghc
  • dwulive/ghc
  • mbakke/ghc
  • arybczak/ghc
  • Yang123321/ghc
  • maksbotan/ghc
  • QuietMisdreavus/ghc
  • trac-olshanskydr/ghc
  • emekoi/ghc
  • samuela/ghc
  • josephcsible/ghc
  • dramforever/ghc
  • lpsmith/ghc
  • DenisFrezzato/ghc
  • michivi/ghc
  • jneira/ghc
  • jeffhappily/ghc
  • Ivan-Yudin/ghc
  • nakaji-dayo/ghc
  • gdevanla/ghc
  • galen/ghc
  • fendor/ghc
  • yaitskov/ghc
  • rcythr/ghc
  • awpr/ghc
  • jeremyschlatter/ghc
  • Aver1y/ghc
  • mitchellvitez/ghc
  • merijn/ghc
  • tomjaguarpaw1/ghc
  • trac-NoidedSuper/ghc
  • erewok/ghc
  • trac-junji.hashimoto/ghc
  • adamwespiser/ghc
  • bjaress/ghc
  • jhrcek/ghc
  • leonschoorl/ghc
  • lukasz-golebiewski/ghc
  • sheaf/ghc
  • last-g/ghc
  • carassius1014/ghc
  • eschwartz/ghc
  • dwincort/ghc
  • felixwiemuth/ghc
  • TimWSpence/ghc
  • marcusmonteirodesouza/ghc
  • WJWH/ghc
  • vtols/ghc
  • theobat/ghc
  • BinderDavid/ghc
  • ckoparkar0/ghc
  • alexander-kjeldaas/ghc
  • dme2/ghc
  • philderbeast/ghc
  • aaronallen8455/ghc
  • rayshih/ghc
  • benkard/ghc
  • mpardalos/ghc
  • saidelman/ghc
  • leiftw/ghc
  • ca333/ghc
  • bwroga/ghc
  • nmichael44/ghc
  • trac-crobbins/ghc
  • felixonmars/ghc
  • adityagupta1089/ghc
  • hgsipiere/ghc
  • treeowl/ghc
  • alexpeits/ghc
  • CraigFe/ghc
  • dnlkrgr/ghc
  • kerckhove_ts/ghc
  • cptwunderlich/ghc
  • eiais/ghc
  • hahohihu/ghc
  • sanchayan/ghc
  • lemmih/ghc
  • sehqlr/ghc
  • trac-dbeacham/ghc
  • luite/ghc
  • trac-f-a/ghc
  • vados/ghc
  • luntain/ghc
  • fatho/ghc
  • alexbiehl-gc/ghc
  • dcbdan/ghc
  • tvh/ghc
  • liam-ly/ghc
  • timbobbarnes/ghc
  • GovanifY/ghc
  • shanth2600/ghc
  • gliboc/ghc
  • duog/ghc
  • moxonsghost/ghc
  • zander/ghc
  • masaeedu/ghc
  • georgefst/ghc
  • guibou/ghc
  • nicuveo/ghc
  • mdebruijne/ghc
  • stjordanis/ghc
  • emiflake/ghc
  • wygulmage/ghc
  • frasertweedale/ghc
  • coot/ghc
  • aratamizuki/ghc
  • tsandstr/ghc
  • mrBliss/ghc
  • Anton-Latukha/ghc
  • tadfisher/ghc
  • vapourismo/ghc
  • Sorokin-Anton/ghc
  • basile-henry/ghc
  • trac-mightybyte/ghc
  • AbsoluteNikola/ghc
  • cobrien99/ghc
  • songzh/ghc
  • blamario/ghc
  • aj4ayushjain/ghc
  • trac-utdemir/ghc
  • tangcl/ghc
  • hdgarrood/ghc
  • maerwald/ghc
  • arjun/ghc
  • ratherforky/ghc
  • haskieLambda/ghc
  • EmilGedda/ghc
  • Bogicevic/ghc
  • eddiejessup/ghc
  • kozross/ghc
  • AlistairB/ghc
  • 3Rafal/ghc
  • christiaanb/ghc
  • trac-bit/ghc
  • matsumonkie/ghc
  • trac-parsonsmatt/ghc
  • chisui/ghc
  • jaro/ghc
  • trac-kmiyazato/ghc
  • davidsd/ghc
  • Tritlo/ghc
  • I-B-3/ghc
  • lykahb/ghc
  • AriFordsham/ghc
  • turion1/ghc
  • berberman/ghc
  • christiantakle/ghc
  • zyklotomic/ghc
  • trac-ocramz/ghc
  • CSEdd/ghc
  • doyougnu/ghc
  • mmhat/ghc
  • why-not-try-calmer/ghc
  • plutotulp/ghc
  • kjekac/ghc
  • Manvi07/ghc
  • teo/ghc
  • cactus/ghc
  • CarrieMY/ghc
  • abel/ghc
  • yihming/ghc
  • tsakki/ghc
  • jessicah/ghc
  • oliverbunting/ghc
  • meld/ghc
  • friedbrice/ghc
  • Joald/ghc
  • abarbu/ghc
  • DigitalBrains1/ghc
  • sterni/ghc
  • alexDarcy/ghc
  • hexchain/ghc
  • minimario/ghc
  • zliu41/ghc
  • tommd/ghc
  • jazcarate/ghc
  • peterbecich/ghc
  • alirezaghey/ghc
  • solomon/ghc
  • mikael.urankar/ghc
  • davjam/ghc
  • int-index/ghc
  • MorrowM/ghc
  • nrnrnr/ghc
  • Sonfamm/ghc-test-only
  • afzt1/ghc
  • nguyenhaibinh-tpc/ghc
  • trac-lierdakil/ghc
  • MichaWiedenmann1/ghc
  • jmorag/ghc
  • Ziharrk/ghc
  • trac-MitchellSalad/ghc
  • juampe/ghc
  • jwaldmann/ghc
  • snowleopard/ghc
  • juhp/ghc
  • normalcoder/ghc
  • ksqsf/ghc
  • trac-jberryman/ghc
  • roberth/ghc
  • 1ntEgr8/ghc
  • epworth/ghc
  • MrAdityaAlok/ghc
  • JunmingZhao42/ghc
  • jappeace/ghc
  • trac-Gabriel439/ghc
  • alt-romes/ghc
  • HugoPeters1024/ghc
  • 10ne1/ghc-fork
  • agentultra/ghc
  • Garfield1002/ghc
  • ChickenProp/ghc
  • clyring/ghc
  • MaxHearnden/ghc
  • jumper149/ghc
  • vem/ghc
  • ketzacoatl/ghc
  • Rosuavio/ghc
  • jackohughes/ghc
  • p4l1ly/ghc
  • konsumlamm/ghc
  • shlevy/ghc
  • torsten.schmits/ghc
  • andremarianiello/ghc
  • amesgen/ghc
  • googleson78/ghc
  • InfiniteVerma/ghc
  • uhbif19/ghc
  • yiyunliu/ghc
  • raehik/ghc
  • mrkun/ghc
  • telser/ghc
  • 1Jajen1/ghc
  • slotThe/ghc
  • WinstonHartnett/ghc
  • mpilgrem/ghc
  • dreamsmasher/ghc
  • schuelermine/ghc
  • trac-Viwor/ghc
  • undergroundquizscene/ghc
  • evertedsphere/ghc
  • coltenwebb/ghc
  • oberblastmeister/ghc
  • agrue/ghc
  • lf-/ghc
  • zacwood9/ghc
  • steshaw/ghc
  • high-cloud/ghc
  • SkamDart/ghc
  • PiDelport/ghc
  • maoif/ghc
  • RossPaterson/ghc
  • CharlesTaylor7/ghc
  • ribosomerocker/ghc
  • trac-ramirez7/ghc
  • daig/ghc
  • NicolasT/ghc
  • FinleyMcIlwaine/ghc
  • lawtonnichols/ghc
  • jmtd/ghc
  • ozkutuk/ghc
  • wildsebastian/ghc
  • nikshalark/ghc
  • lrzlin/ghc
  • tobias/ghc
  • fw/ghc
  • hawkinsw/ghc
  • type-dance/ghc
  • rui314/ghc
  • ocharles/ghc
  • wavewave/ghc
  • TheKK/ghc
  • nomeata/ghc
  • trac-csabahruska/ghc
  • jonathanjameswatson/ghc
  • L-as/ghc
  • Axman6/ghc
  • barracuda156/ghc
  • trac-jship/ghc
  • jake-87/ghc
  • meooow/ghc
  • rebeccat/ghc
  • hamana55/ghc
  • Enigmage/ghc
  • kokobd/ghc
  • agevelt/ghc
  • gshen42/ghc
  • chrismwendt/ghc
  • MangoIV/ghc
  • teto/ghc
  • Sookr1/ghc
  • trac-thomasjm/ghc
  • barci2/ghc-dev
  • trac-m4dc4p/ghc
  • dixonary/ghc
  • breakerzirconia/ghc
  • alexsio27444/ghc
  • glocq/ghc
  • sourabhxyz/ghc
  • ryantrinkle/ghc
  • Jade/ghc
  • scedfaliako/ghc
  • martijnbastiaan/ghc
  • trac-george.colpitts/ghc
  • ammarbinfaisal/ghc
  • mimi.vx/ghc
  • lortabac/ghc
  • trac-zyla/ghc
  • benbellick/ghc
  • aadaa-fgtaa/ghc
  • jvanbruegge/ghc
  • archbung/ghc
  • gilmi/ghc
  • mfonism/ghc
  • alex-mckenna/ghc
  • Ei30metry/ghc
  • DiegoDiverio/ghc
  • jorgecunhamendes/ghc
  • liesnikov/ghc
  • akrmn/ghc
  • trac-simplifierticks/ghc
  • jacco/ghc
  • rhendric/ghc
  • damhiya/ghc
  • ryndubei/ghc
  • DaveBarton/ghc
  • trac-Profpatsch/ghc
  • GZGavinZhao/ghc
  • ncfavier/ghc
  • jameshaydon/ghc
  • ajccosta/ghc
  • dschrempf/ghc
  • cydparser/ghc
  • LinuxUserGD/ghc
  • elodielander/ghc
  • facundominguez/ghc
  • psilospore/ghc
  • lachrimae/ghc
  • dylan-thinnes/ghc-type-errors-plugin
  • hamishmack/ghc
  • Leary/ghc
  • lzszt/ghc
  • lyokha/ghc
  • trac-glaubitz/ghc
  • Rewbert/ghc
  • andreabedini/ghc
  • Jasagredo/ghc
  • sol/ghc
  • OlegAlexander/ghc
  • trac-sthibaul/ghc
  • avdv/ghc
  • Wendaolee/ghc
  • ur4t/ghc
  • daylily/ghc
  • boltzmannrain/ghc
  • mmzk1526/ghc
  • trac-fizzixnerd/ghc
  • soulomoon/ghc
  • rwmjones/ghc
  • j14i/ghc
  • tracsis/ghc
  • gesh/ghc
  • flip101/ghc
  • eldritch-cookie/ghc
  • LemonjamesD/ghc
  • pgujjula/ghc
  • skeuchel/ghc
  • noteed/ghc
  • gulin.serge/ghc
  • Torrekie/ghc
  • jlwoodwa/ghc
  • ayanamists/ghc
  • husong998/ghc
  • trac-edmundnoble/ghc
  • josephf/ghc
  • contrun/ghc
  • baulig/ghc
  • edsko/ghc
  • mzschr/ghc-issue-24732
  • ulidtko/ghc
  • Arsen/ghc
  • trac-sjoerd_visscher/ghc
  • crumbtoo/ghc
  • L0neGamer/ghc
  • DrewFenwick/ghc
  • benz0li/ghc
  • MaciejWas/ghc
  • jordanrule/ghc
  • trac-qqwy/ghc
  • LiamGoodacre/ghc
  • isomorpheme/ghc
  • trac-danidiaz/ghc
  • Kariim/ghc
  • MTaimoorZaeem/ghc
  • hololeap/ghc
  • ticat-fp/ghc
  • meritamen/ghc
  • criskell/ghc
  • trac-kraai/ghc
  • aergus/ghc
  • jdral/ghc
  • SamB/ghc
  • Tristian/ghc
  • ywgrit/ghc
  • KatsuPatrick/ghc
  • OsePedro/ghc
  • mpscholten/ghc
  • fp/ghc
  • zaquest/ghc
  • fangyi-zhou/ghc
  • augyg/ghc
640 results
Show changes
Showing with 1792 additions and 749 deletions
#!/usr/bin/env python
from distutils.core import setup
setup(name='ghcup-metadata',
author='Matthew Pickering',
author_email='matthew@well-typed.com',
py_modules=['mk_ghcup_metadata'],
entry_points={
'console_scripts': [
'ghcup-metadata=mk_ghcup_metadata:main',
]
}
)
{
"binutils-gdb": {
"branch": "master",
"repo": "https://sourceware.org/git/binutils-gdb.git",
"rev": "49c843e6d2d0577200e7c1d2d02855f21a3a9dde",
"type": "git"
},
"gdb-walkers": {
"branch": "master",
"description": "Bring mdb walkers to gdb, also add other helpful commands.",
"homepage": "",
"owner": "hardenedapple",
"repo": "gdb-walkers",
"rev": "c0701c4c87852bd09e21ca313c48dd4a649cfd0d",
"sha256": "1sd61a90lg8bkddl8lp15qady1wvbjmhjgm0d3lb813nwimlka9y",
"type": "tarball",
"url": "https://github.com/hardenedapple/gdb-walkers/archive/c0701c4c87852bd09e21ca313c48dd4a649cfd0d.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"niv": {
"branch": "master",
"description": "Easy dependency management for Nix projects",
"homepage": "https://github.com/nmattia/niv",
"owner": "nmattia",
"repo": "niv",
"rev": "82e5cd1ad3c387863f0545d7591512e76ab0fc41",
"sha256": "090l219mzc0gi33i3psgph6s2pwsc8qy4lyrqjdj4qzkvmaj65a7",
"type": "tarball",
"url": "https://github.com/nmattia/niv/archive/82e5cd1ad3c387863f0545d7591512e76ab0fc41.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"nixpkgs": {
"branch": "nixos-22.11",
"description": "Nix Packages collection",
"homepage": "",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "2d10e73416ec1449ef74aeac7faf2cf8c556ff5a",
"sha256": "00s89np0sqr3jxxp5h9nrpqy30fy4vsrmis6mmryrrmjqh09lpfv",
"type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/2d10e73416ec1449ef74aeac7faf2cf8c556ff5a.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"processor-trace": {
"branch": "master",
"description": "libipt - an Intel(R) Processor Trace decoder library",
"homepage": "",
"owner": "01org",
"repo": "processor-trace",
"rev": "c848a85c3104e2f5780741f85de5c9e65476ece2",
"sha256": "1ml8g6pm2brlcqp90yvgc780xf64d6k2km7fiqs88wvhlwsl7vzf",
"type": "tarball",
"url": "https://github.com/01org/processor-trace/archive/c848a85c3104e2f5780741f85de5c9e65476ece2.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"rr": {
"branch": "master",
"description": "Record and Replay Framework",
"homepage": "http://rr-project.org/",
"owner": "rr-debugger",
"repo": "rr",
"rev": "e77b5f8ca4b360daffd31cf72cb6b093fa9e0b62",
"sha256": "sha256:1gxphqcv1yw2ffmjp0d2cv0mpccr00pf9jhf44rq57jqdsvlfn2c",
"type": "tarball",
"url": "https://github.com/rr-debugger/rr/archive/3f87444659d1f063397fabc7791ed3b13b15c798.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
}
}
# This file has been generated by Niv.
let
#
# The fetchers. fetch_<type> fetches specs of type <type>.
#
fetch_file = pkgs: name: spec:
let
name' = sanitizeName name + "-src";
in
if spec.builtin or true then
builtins_fetchurl { inherit (spec) url sha256; name = name'; }
else
pkgs.fetchurl { inherit (spec) url sha256; name = name'; };
fetch_tarball = pkgs: name: spec:
let
name' = sanitizeName name + "-src";
in
if spec.builtin or true then
builtins_fetchTarball { name = name'; inherit (spec) url sha256; }
else
pkgs.fetchzip { name = name'; inherit (spec) url sha256; };
fetch_git = name: spec:
let
ref =
if spec ? ref then spec.ref else
if spec ? branch then "refs/heads/${spec.branch}" else
if spec ? tag then "refs/tags/${spec.tag}" else
abort "In git source '${name}': Please specify `ref`, `tag` or `branch`!";
submodules = if spec ? submodules then spec.submodules else false;
submoduleArg =
let
nixSupportsSubmodules = builtins.compareVersions builtins.nixVersion "2.4" >= 0;
emptyArgWithWarning =
if submodules == true
then
builtins.trace
(
"The niv input \"${name}\" uses submodules "
+ "but your nix's (${builtins.nixVersion}) builtins.fetchGit "
+ "does not support them"
)
{}
else {};
in
if nixSupportsSubmodules
then { inherit submodules; }
else emptyArgWithWarning;
in
builtins.fetchGit
({ url = spec.repo; inherit (spec) rev; inherit ref; } // submoduleArg);
fetch_local = spec: spec.path;
fetch_builtin-tarball = name: throw
''[${name}] The niv type "builtin-tarball" is deprecated. You should instead use `builtin = true`.
$ niv modify ${name} -a type=tarball -a builtin=true'';
fetch_builtin-url = name: throw
''[${name}] The niv type "builtin-url" will soon be deprecated. You should instead use `builtin = true`.
$ niv modify ${name} -a type=file -a builtin=true'';
#
# Various helpers
#
# https://github.com/NixOS/nixpkgs/pull/83241/files#diff-c6f540a4f3bfa4b0e8b6bafd4cd54e8bR695
sanitizeName = name:
(
concatMapStrings (s: if builtins.isList s then "-" else s)
(
builtins.split "[^[:alnum:]+._?=-]+"
((x: builtins.elemAt (builtins.match "\\.*(.*)" x) 0) name)
)
);
# The set of packages used when specs are fetched using non-builtins.
mkPkgs = sources: system:
let
sourcesNixpkgs =
import (builtins_fetchTarball { inherit (sources.nixpkgs) url sha256; }) { inherit system; };
hasNixpkgsPath = builtins.any (x: x.prefix == "nixpkgs") builtins.nixPath;
hasThisAsNixpkgsPath = <nixpkgs> == ./.;
in
if builtins.hasAttr "nixpkgs" sources
then sourcesNixpkgs
else if hasNixpkgsPath && ! hasThisAsNixpkgsPath then
import <nixpkgs> {}
else
abort
''
Please specify either <nixpkgs> (through -I or NIX_PATH=nixpkgs=...) or
add a package called "nixpkgs" to your sources.json.
'';
# The actual fetching function.
fetch = pkgs: name: spec:
if ! builtins.hasAttr "type" spec then
abort "ERROR: niv spec ${name} does not have a 'type' attribute"
else if spec.type == "file" then fetch_file pkgs name spec
else if spec.type == "tarball" then fetch_tarball pkgs name spec
else if spec.type == "git" then fetch_git name spec
else if spec.type == "local" then fetch_local spec
else if spec.type == "builtin-tarball" then fetch_builtin-tarball name
else if spec.type == "builtin-url" then fetch_builtin-url name
else
abort "ERROR: niv spec ${name} has unknown type ${builtins.toJSON spec.type}";
# If the environment variable NIV_OVERRIDE_${name} is set, then use
# the path directly as opposed to the fetched source.
replace = name: drv:
let
saneName = stringAsChars (c: if isNull (builtins.match "[a-zA-Z0-9]" c) then "_" else c) name;
ersatz = builtins.getEnv "NIV_OVERRIDE_${saneName}";
in
if ersatz == "" then drv else
# this turns the string into an actual Nix path (for both absolute and
# relative paths)
if builtins.substring 0 1 ersatz == "/" then /. + ersatz else /. + builtins.getEnv "PWD" + "/${ersatz}";
# Ports of functions for older nix versions
# a Nix version of mapAttrs if the built-in doesn't exist
mapAttrs = builtins.mapAttrs or (
f: set: with builtins;
listToAttrs (map (attr: { name = attr; value = f attr set.${attr}; }) (attrNames set))
);
# https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/lists.nix#L295
range = first: last: if first > last then [] else builtins.genList (n: first + n) (last - first + 1);
# https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L257
stringToCharacters = s: map (p: builtins.substring p 1 s) (range 0 (builtins.stringLength s - 1));
# https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L269
stringAsChars = f: s: concatStrings (map f (stringToCharacters s));
concatMapStrings = f: list: concatStrings (map f list);
concatStrings = builtins.concatStringsSep "";
# https://github.com/NixOS/nixpkgs/blob/8a9f58a375c401b96da862d969f66429def1d118/lib/attrsets.nix#L331
optionalAttrs = cond: as: if cond then as else {};
# fetchTarball version that is compatible between all the versions of Nix
builtins_fetchTarball = { url, name ? null, sha256 }@attrs:
let
inherit (builtins) lessThan nixVersion fetchTarball;
in
if lessThan nixVersion "1.12" then
fetchTarball ({ inherit url; } // (optionalAttrs (!isNull name) { inherit name; }))
else
fetchTarball attrs;
# fetchurl version that is compatible between all the versions of Nix
builtins_fetchurl = { url, name ? null, sha256 }@attrs:
let
inherit (builtins) lessThan nixVersion fetchurl;
in
if lessThan nixVersion "1.12" then
fetchurl ({ inherit url; } // (optionalAttrs (!isNull name) { inherit name; }))
else
fetchurl attrs;
# Create the final "sources" from the config
mkSources = config:
mapAttrs (
name: spec:
if builtins.hasAttr "outPath" spec
then abort
"The values in sources.json should not have an 'outPath' attribute"
else
spec // { outPath = replace name (fetch config.pkgs name spec); }
) config.sources;
# The "config" used by the fetchers
mkConfig =
{ sourcesFile ? if builtins.pathExists ./sources.json then ./sources.json else null
, sources ? if isNull sourcesFile then {} else builtins.fromJSON (builtins.readFile sourcesFile)
, system ? builtins.currentSystem
, pkgs ? mkPkgs sources system
}: rec {
# The sources, i.e. the attribute set of spec name to spec
inherit sources;
# The "pkgs" (evaluated nixpkgs) to use for e.g. non-builtin fetchers
inherit pkgs;
};
in
mkSources (mkConfig {}) // { __functor = _: settings: mkSources (mkConfig settings); }
#!/usr/bin/env -S make -f
MAKEFLAGS += --no-builtin-rules
MAKEFLAGS += --no-builtin-variables
usage :
echo "recompress [dest files]"
exit 1
%.gz : %.xz
echo "[xz->gz] $< to $@..."
xz -cd $< | gzip -c > $@
%.bz2 : %.xz
echo "[xz->bz2] $< to $@..."
xz -cd $< | bzip2 -c > $@
%.lz : %.xz
echo "[xz->lz] $< to $@..."
xz -cd $< | lzip -c > $@
%.zip : %.tar.xz
echo "[tarxz->zip] $< to $@..."
tmp="$$(mktemp -d tmp.XXX)" && \
tar -C "$$tmp" -xf $< && \
cd "$$tmp" && \
zip -9 -r ../$@ * && \
cd .. && \
rm -R "$$tmp"
#!/usr/bin/env nix-shell
#! nix-shell -i bash -p moreutils lzip zip lftp gnupg
set -Eeuo pipefail
# This is a script for preparing and uploading a release of GHC.
#
# Usage,
# 1. Update $ver
# 2. Set $SIGNING_KEY to your key id (prefixed with '=')
# 3. Create a directory and place the source and binary tarballs there
# 4. Run this script from that directory
#
# You can also invoke the script with an argument to perform only
# a subset of the usual release,
#
# upload.sh recompress produce lzip tarballs from xz tarballs
#
# upload.sh gen_hashes generate signed hashes of the release
# tarballs
#
# upload.sh prepare_docs (deprecated) prepare the documentation directory
# (this should be unnecessary as the script which
# fetches artifacts should create this folder from
# the doc-tarball job)
#
# upload.sh upload_docs upload documentation to hackage from the hackage_docs folder
#
# upload.sh upload upload the tarballs and documentation
# to downloads.haskell.org
#
# Prerequisites: moreutils
: ${SIGNING_KEY:="=Benjamin Gamari <ben@well-typed.com>"}
# Infer release name from directory name
: ${rel_name:=$(basename $(pwd))}
# Infer version from tarball names
: ${ver:=$(ls ghc-*.tar.* | sed -ne 's/ghc-\([0-9]\+\.[0-9]\+\.[0-9]\+\(\.[0-9]\+\)\?\).\+/\1/p' | head -n1)}
if [ -z "$ver" ]; then echo "Failed to infer \$ver"; exit 1; fi
host="gitlab-storage.haskell.org"
usage() {
echo "Usage: [rel_name=<name>] ver=7.10.3-rc2 $0 <action>"
echo
echo "where,"
echo " ver gives the version number (e.g. the name of the tarballs, in the case of"
echo " a release candidate something like 7.10.3.20150820, otherwise just 7.10.3)"
echo " rel_name gives the release name (e.g. in the case of a release candidate 7.10.3-rc2"
echo " otherwise just 7.10.3)"
echo "and <action> is one of,"
echo " [nothing] do everything below"
echo " recompress produce lzip and gzip tarballs from xz tarballs"
echo " gen_hashes generated hashes of the release tarballs"
echo " sign sign hashes of the release tarballs"
echo " prepare_docs prepare the documentation directory"
echo " upload_docs upload documentation downloads.haskell.org"
echo " upload upload the tarballs and documentation to downloads.haskell.org"
echo " set_symlink <symlink>"
echo " set the given symlink (e.g. latest) to the current version"
echo " purge_all purge entire release from the CDN"
echo " purge_file <file> purge a given file from the CDN"
echo " verify verify the signatures in this directory"
echo
}
if [ -z "$ver" ]; then
usage
exit 1
fi
if [ -z "$rel_name" ]; then
rel_name="$ver"
fi
# returns the set of files that must have hashes generated.
function hash_files() {
echo $(find -maxdepth 1 \
-iname '*.xz' \
-o -iname '*.lz' \
-o -iname '*.gz' \
-o -iname '*.bz2' \
-o -iname '*.zip' \
)
echo $(find -maxdepth 1 -iname '*.patch')
}
function gen_hashes() {
echo -n "Hashing..."
sha1sum $(hash_files) >| SHA1SUMS &
sha256sum $(hash_files) >| SHA256SUMS &
wait
echo "done"
}
function sign() {
# Kill DISPLAY lest pinentry won't work
DISPLAY=
eval "$(gpg-agent --daemon --sh --pinentry-program $(which pinentry))"
for i in $(hash_files) SHA1SUMS SHA256SUMS; do
if [ -e $i -a -e $i.sig -a $i.sig -nt $i ]; then
echo "Skipping signing of $i"
continue
elif [ -e $i.sig ] && gpg2 --verify $i.sig; then
# Don't resign if current signature is valid
touch $i.sig
continue
fi
echo "Signing $i"
rm -f $i.sig
gpg2 --use-agent --detach-sign --local-user="$SIGNING_KEY" $i
done
}
function verify() {
if [ $(find -iname '*.sig' | wc -l) -eq 0 ]; then
echo "No signatures to verify"
return
fi
for i in *.sig; do
echo
echo Verifying $i
gpg2 --verify $i $(basename $i .sig)
done
}
function upload() {
verify
chmod ugo+r,o-w -R .
dir=$(echo $rel_name | sed s/-release//)
lftp -c " \
open -u ghc: sftp://$host && \
mirror -P20 -c --reverse --exclude=fetch-gitlab --exclude=out . ghc/$dir && \
wait all;"
chmod ugo-w $(ls *.xz *.bz2 *.zip)
}
function purge_all() {
local dir="$(echo $rel_name | sed s/-release//)"
# Purge CDN cache
curl -X PURGE http://downloads.haskell.org/ghc/
curl -X PURGE http://downloads.haskell.org/~ghc/
curl -X PURGE http://downloads.haskell.org/ghc/$dir
curl -X PURGE http://downloads.haskell.org/ghc/$dir/
curl -X PURGE http://downloads.haskell.org/~ghc/$dir
curl -X PURGE http://downloads.haskell.org/~ghc/$dir/
for i in *; do
purge_file "$i"
done
}
function purge_file() {
dirs=(
"~ghc/$rel_name"
"ghc/$rel_name"
"~ghc/$ver"
"ghc/$ver"
)
for dir in ${dirs[@]}; do
curl -X PURGE http://downloads.haskell.org/$dir/$1
curl -X PURGE http://downloads.haskell.org/$dir/$1/
curl -X PURGE http://downloads.haskell.org/$dir/$1/docs/
done
}
function prepare_docs() {
echo "THIS COMMAND IS DEPRECATED, THE DOCS FOLDER SHOULD BE PREPARED BY THE FETCH SCRIPT"
}
function recompress() {
set -Eeuo pipefail
needed=()
for i in ghc-*.tar.xz; do
needed+=( "$(basename $i .xz).gz" )
done
for i in ghc-*-darwin.tar.xz; do
needed+=( "$(basename $i .xz).bz2" )
done
for i in ghc-*-mingw32.tar.xz; do
needed+=( "$(basename $i .tar.xz).zip" )
done
recompress-all -j10 ${needed[@]}
}
function upload_docs() {
local tmp="$(mktemp -d)"
tar -xf ghc-$ver-src.tar.xz -C "$tmp"
GHC_TREE="$tmp/ghc-$ver"
local args=$@
if [[ -n "$PUBLISH" ]]; then
echo "Publishing to Hackage..."
args+=( "--publish" )
fi
"$GHC_TREE/.gitlab/rel_eng/upload_ghc_libs.py" upload --docs=hackage_docs ${args[@]}
}
function set_symlink() {
local SYMLINK="$1"
# Check to make sure that the indicated version actually exists.
curl "https://downloads.haskell.org/ghc/$ver" > /dev/null || (echo "$ver doesn't exist"; exit 1)
echo -e "rm ghc/$SYMLINK\nln -s $ver ghc/$SYMLINK" | sftp ghc@downloads-origin.haskell.org
curl -X PURGE "http://downloads.haskell.org/~ghc/$SYMLINK"
}
if [ "x$1" == "x" ]; then
recompress
gen_hashes
sign
if [ ! -d docs ]; then
prepare_docs || ( rm -R docs; exit 1 )
fi
if [ -d hackage_docs ]; then
upload_docs
fi
upload
purge_all
else
$@
fi
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
A tool for uploading GHC's core libraries to Hackage.
This is a utility for preparing and uploading source distributions and
documentation of GHC's core libraries to Hackage. This should be run in
a GHC tree of the release commit after having run ./configure.
There are two modes, preparation and upload.
* The `prepare` mode takes a link to a bindist and creates a folder containing the
source and doc tarballs ready to upload to hackage.
* The `upload` mode takes the folder created by prepare and performs the upload to
hackage.
"""
from subprocess import run, check_call
from getpass import getpass
import shutil
from pathlib import Path
from typing import NamedTuple, Callable, List, Dict, Optional
import tempfile
import re
import pickle
import os
import glob
WORK_DIR = Path('.upload-libs')
WORK_DIR.mkdir(exist_ok=True)
OUT_DIR = WORK_DIR / 'docs'
OUT_DIR.mkdir(exist_ok=True)
class Package(NamedTuple):
name: str
path: Path
prepare_sdist: Callable[[], None]
class Credentials(NamedTuple):
username: str
password: str
def no_prep():
pass
def prep_base():
shutil.copy('config.guess', 'libraries/base')
shutil.copy('config.sub', 'libraries/base')
def prep_ghc_internal():
shutil.copy('config.guess', 'libraries/ghc-internal')
shutil.copy('config.sub', 'libraries/ghc-internal')
def build_copy_file(pkg: Package, f: Path):
target = Path('_build') / 'stage1' / pkg.path / 'build' / f
dest = pkg.path / f
build_file_hadrian(target)
print(f'Copying {target} to {dest}...')
dest.parent.mkdir(exist_ok=True, parents=True)
shutil.copyfile(target, dest)
def build_file_hadrian(target: Path):
build_cabal = Path('hadrian') / 'build-cabal'
if not build_cabal.is_file():
build_cabal = Path('hadrian') / 'build.cabal.sh'
print(f'Building {target}...')
run([build_cabal, target], check=True)
def modify_file(pkg: Package, fname: Path, f: Callable[[str], str]):
target = pkg.path / fname
s = target.read_text()
target.write_text(f(s))
def prep_ghc_prim():
build_copy_file(PACKAGES['ghc-prim'], Path('GHC/PrimopWrappers.hs'))
def prep_ghc_bignum():
shutil.copy('config.guess', 'libraries/base')
shutil.copy('config.sub', 'libraries/base')
def prep_ghc_boot():
build_copy_file(PACKAGES['ghc-boot'], Path('GHC/Platform/Host.hs'))
build_copy_file(PACKAGES['ghc-boot'], Path('GHC/Version.hs'))
def prep_ghc():
# Drop RTS includes from `include-dirs` as Hackage rejects this
modify_file(PACKAGES['ghc'], 'ghc.cabal',
lambda s: s.replace('../rts/dist/build', ''))
build_copy_file(PACKAGES['ghc'], 'GHC/Platform/Constants.hs')
build_copy_file(PACKAGES['ghc'], 'GHC/Settings/Config.hs')
def prep_ghc_boot_th():
# Drop references to `ghc-internal` from `hs-source-dirs` as Hackage rejects
# out-of-sdist references and this packages is only uploaded for documentation
# purposes.
modify_file(PACKAGES['ghc-boot-th'], 'ghc-boot-th.cabal',
lambda s: s.replace('../ghc-internal/src', '')
.replace('GHC.Internal.TH.Lib', '')
.replace('GHC.Internal.TH.Syntax', '')
.replace('GHC.Internal.ForeignSrcLang', '')
.replace('GHC.Internal.LanguageExtensions', '')
.replace('GHC.Internal.Lexeme', '')
)
PACKAGES = {
pkg.name: pkg
for pkg in [
Package('base', Path("libraries/base"), prep_base),
Package('ghc-internal', Path("libraries/ghc-internal"), prep_ghc_internal),
Package('ghc-experimental', Path("libraries/ghc-experimental"), no_prep),
Package('ghc-prim', Path("libraries/ghc-prim"), prep_ghc_prim),
Package('integer-gmp', Path("libraries/integer-gmp"), no_prep),
Package('ghc-bignum', Path("libraries/ghc-bignum"), prep_ghc_bignum),
Package('template-haskell', Path("libraries/template-haskell"), no_prep),
Package('ghc-heap', Path("libraries/ghc-heap"), no_prep),
Package('ghc-boot', Path("libraries/ghc-boot"), prep_ghc_boot),
Package('ghc-boot-th', Path("libraries/ghc-boot-th"), prep_ghc_boot_th),
Package('ghc-compact', Path("libraries/ghc-compact"), no_prep),
Package('ghc', Path("compiler"), prep_ghc),
Package('ghci', Path("libraries/ghci"), no_prep),
]
}
# Dict[str, Package]
def cabal_upload(tarball: Path, creds: Credentials, publish: bool=False, extra_args=[]):
if publish:
extra_args += ['--publish']
creds_args = [
f'--username={creds.username}',
f'--password={creds.password}'
]
run(['cabal', 'upload'] + extra_args + [tarball] + creds_args, check=True)
def prepare_sdist(pkg: Package):
print(f'Preparing package {pkg.name}...')
shutil.rmtree(pkg.path / 'dist-newstyle', ignore_errors=True)
build_file_hadrian(pkg.path / '{}.cabal'.format(pkg.name))
pkg.prepare_sdist()
# Upload source tarball
run(['cabal', 'sdist'], cwd=pkg.path, check=True)
sdist = list((pkg.path / 'dist-newstyle' / 'sdist').glob('*.tar.gz'))[0]
res_path = shutil.copy(sdist, OUT_DIR)
return os.path.relpath(res_path, OUT_DIR)
def upload_pkg_sdist(sdist : Path, pkg: Package, publish: bool, creds: Credentials):
publish_tag = '-publish' if publish else ''
stamp = WORK_DIR / f'{pkg.name}-sdist{publish_tag}'
if stamp.is_file():
return
print(f'Uploading package {pkg.name}...')
cabal_upload(sdist, publish=publish, creds=creds)
stamp.write_text('')
def get_version(cabal_file: Path) -> Optional[str]:
m = re.search(r'^version:\s*(\d+(\.\d+)*)', cabal_file.read_text(), re.I | re.M)
return None if m is None else m.group(1)
def prepare_docs(bindist: Path, pkg: Package):
"""
Prepare Haddock documentation for a package. bindist
is the path to an extract binary distribution produced by
hadrian.
"""
cabal_file = pkg.path / f'{pkg.name}.cabal'
version = get_version(cabal_file)
assert version is not None
docdir_prefix = bindist / 'doc' / 'html' / 'libraries' / (pkg.name + "-" + version)
docdir = glob.glob(str(docdir_prefix) + "*")[0]
print(docdir)
# Build the documentation tarball from the bindist documentation
stem = f'{pkg.name}-{version}-docs'
tmp = tempfile.TemporaryDirectory(stem)
shutil.copytree(docdir, Path(tmp.name) / stem)
tarball = Path(f'{stem}.tar.gz')
run(['tar', '-czf', OUT_DIR / tarball, '-H', 'ustar', '-C', tmp.name, stem])
return tarball
def upload_docs(tarball : Path, pkg : Package, publish : bool, creds: Credentials):
publish_tag = '-publish' if publish else ''
stamp = WORK_DIR / f'{pkg.name}-docs{publish_tag}'
if stamp.is_file():
return
# Upload the documentation tarball
print(f'Uploading documentation for {pkg.name}...')
cabal_upload(tarball, publish=publish, extra_args=['--documentation'], creds=creds)
stamp.write_text('')
def upload_pkg(pkg: Package, d : Path, meta, publish : bool, creds: Credentials):
print(f'Uploading {pkg.name}...')
upload_pkg_sdist(d / meta['sdist'], pkg, publish=publish, creds=creds)
upload_docs(d / meta['docs'], pkg, publish=publish, creds=creds)
def prepare_pkg(bindist : Path, pkg : Package):
if pkg.path.exists():
print(f'Processing {pkg.name}...')
p1 = prepare_sdist(pkg)
p2 = prepare_docs(bindist, pkg)
return { 'sdist' : p1, 'docs': p2 }
else:
print(f"Package {pkg.name} doesn't exist... skipping")
def main() -> None:
import argparse
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('pkg', type=str, nargs='*', help='package to upload')
subparsers = parser.add_subparsers(dest="command")
parser_prepare = subparsers.add_parser('prepare')
parser_prepare.add_argument('--bindist', required=True, type=Path, help='extracted binary distribution')
parser_upload = subparsers.add_parser('upload')
parser_upload.add_argument('--skip', default=[], action='append', type=str, help='skip uploading of the given package')
parser_upload.add_argument('--docs', required = True, type=Path, help='folder created by --prepare')
parser_upload.add_argument('--publish', action='store_true', help='Publish Hackage packages instead of just uploading candidates')
args = parser.parse_args()
pkgs = set(args.pkg)
for pkg_name in pkgs:
assert pkg_name in PACKAGES
if not pkgs:
pkgs = set(PACKAGES.keys())
if args.command == "upload":
for pkg_name in args.skip:
assert pkg_name in PACKAGES
pkgs = pkgs - set(args.skip)
if args.command == "prepare":
manifest = {}
for pkg_name in pkgs:
print(pkg_name)
pkg = PACKAGES[pkg_name]
pkg_meta = prepare_pkg(args.bindist, pkg)
manifest[pkg] = pkg_meta
manifest_path = WORK_DIR / 'docs' / 'manifest.pickle'
with open(WORK_DIR / 'docs' / 'manifest.pickle', 'wb') as fout:
pickle.dump(manifest, fout)
elif args.command == "upload":
username = input('Hackage username: ')
password = getpass('Hackage password: ')
creds = Credentials(username, password)
manifest_path = args.docs
with open(manifest_path / 'manifest.pickle', 'rb') as fin:
manifest = pickle.load(fin)
for pkg, item in manifest.items():
if pkg.name in pkgs:
print(pkg, item)
upload_pkg(pkg, manifest_path, item, publish=args.publish, creds=creds)
if __name__ == '__main__':
main()
#!/usr/bin/env bash
# vim: sw=2 et
set -euo pipefail
NOTES_ORIGIN="https://gitlab.haskell.org/ghc/ghc-performance-notes.git"
REF="perf"
run() {
echo "$@"
$@
}
fail() {
echo "ERROR: $*" >&2
exit 1
}
function pull() {
local ref="refs/notes/$REF"
# 2023-10-04: `git fetch` started failing, first on Darwin in CI and then on
# Linux locally, both using git version 2.40.1. See #24055. One workaround is
# to set a larger http.postBuffer, although this is definitely a workaround.
# The default should work just fine. The error could be in git, GitLab, or
# perhaps the networking tube (including all proxies etc) between the two.
run git -c http.postBuffer=2097152 fetch -f "$NOTES_ORIGIN" "$ref:$ref"
echo "perf notes ref $ref is $(git rev-parse $ref)"
}
# Reset the git notes and append the metrics file to the notes, then push and return the result.
# This is favoured over a git notes merge as it avoids potential data loss/duplication from the merge strategy.
function reset_append_note_push {
pull || true
run git notes --ref="$REF" append -F "$METRICS_FILE" HEAD
run git push "$PERF_NOTES_PUSH_REPO" "refs/notes/$REF"
}
function push() {
# PERF_NOTES_PUSH_CREDENTIALS is a CI variable set on all GitLab protected branches.
if [ -z "${PERF_NOTES_PUSH_REPO:-}" ]; then
if [ -n "${PERF_NOTES_PUSH_CREDENTIALS:-}" ]; then
PERF_NOTES_PUSH_REPO="https://$PERF_NOTES_PUSH_CREDENTIALS@gitlab.haskell.org/ghc/ghc-performance-notes.git"
else
echo "Not pushing performance git notes: PERF_NOTES_PUSH_REPO or PERF_NOTES_PUSH_CREDENTIALS not set."
exit 0
fi
fi
# TEST_ENV must be set.
if [ -z "${TEST_ENV:-}" ]
then
fail "Not pushing performance git notes: TEST_ENV must be set."
fi
# Assert that the METRICS_FILE exists and can be read.
if [ -z "${METRICS_FILE:-}" ]
then
fail "\$METRICS_FILE not set."
fi
if ! [ -r "$METRICS_FILE" ]
then
fail "Metrics file not found: $METRICS_FILE"
fi
# Push the metrics file as a git note. This may fail if another task pushes a note first. In that case
# the latest note is fetched and appended.
MAX_RETRY=20
until reset_append_note_push || [ $MAX_RETRY -le 0 ]
do
((MAX_RETRY--))
echo ""
echo "Failed to push git notes. Fetching, appending, and retrying... $MAX_RETRY retries left."
done
if [ "$MAX_RETRY" -le 0 ]; then
fail "Failed to push git notes, and no more retries remain."
fi
}
case $1 in
push) push ;;
pull) pull ;;
*) fail "Invalid mode $1" ;;
esac
[submodule "libraries/binary"]
path = libraries/binary
url = https://gitlab.haskell.org/ghc/packages/binary.git
ignore = untracked
[submodule "libraries/bytestring"]
path = libraries/bytestring
url = https://gitlab.haskell.org/ghc/packages/bytestring.git
ignore = untracked
[submodule "libraries/Cabal"]
path = libraries/Cabal
url = https://gitlab.haskell.org/ghc/packages/Cabal.git
ignore = untracked
[submodule "libraries/containers"]
path = libraries/containers
url = https://gitlab.haskell.org/ghc/packages/containers.git
ignore = untracked
[submodule "libraries/haskeline"]
path = libraries/haskeline
url = https://gitlab.haskell.org/ghc/packages/haskeline.git
ignore = untracked
[submodule "libraries/pretty"]
path = libraries/pretty
url = https://gitlab.haskell.org/ghc/packages/pretty.git
ignore = untracked
[submodule "libraries/terminfo"]
path = libraries/terminfo
url = https://gitlab.haskell.org/ghc/packages/terminfo.git
ignore = untracked
[submodule "libraries/transformers"]
path = libraries/transformers
url = https://gitlab.haskell.org/ghc/packages/transformers.git
ignore = untracked
[submodule "libraries/xhtml"]
path = libraries/xhtml
url = https://gitlab.haskell.org/ghc/packages/xhtml.git
ignore = untracked
[submodule "libraries/Win32"]
path = libraries/Win32
url = https://gitlab.haskell.org/ghc/packages/Win32.git
ignore = untracked
[submodule "libraries/time"]
path = libraries/time
url = https://gitlab.haskell.org/ghc/packages/time.git
ignore = untracked
[submodule "libraries/array"]
path = libraries/array
url = https://gitlab.haskell.org/ghc/packages/array.git
ignore = untracked
[submodule "libraries/deepseq"]
path = libraries/deepseq
url = https://gitlab.haskell.org/ghc/packages/deepseq.git
ignore = untracked
[submodule "libraries/directory"]
path = libraries/directory
url = https://gitlab.haskell.org/ghc/packages/directory.git
ignore = untracked
[submodule "libraries/filepath"]
path = libraries/filepath
url = https://gitlab.haskell.org/ghc/packages/filepath.git
ignore = untracked
[submodule "libraries/hpc"]
path = libraries/hpc
url = https://gitlab.haskell.org/ghc/packages/hpc.git
ignore = untracked
[submodule "libraries/parsec"]
path = libraries/parsec
url = https://gitlab.haskell.org/ghc/packages/parsec.git
ignore = untracked
[submodule "libraries/text"]
path = libraries/text
url = https://gitlab.haskell.org/ghc/packages/text.git
ignore = untracked
[submodule "libraries/mtl"]
path = libraries/mtl
url = https://gitlab.haskell.org/ghc/packages/mtl.git
ignore = untracked
[submodule "libraries/process"]
path = libraries/process
url = https://gitlab.haskell.org/ghc/packages/process.git
ignore = untracked
[submodule "libraries/unix"]
path = libraries/unix
url = https://gitlab.haskell.org/ghc/packages/unix.git
ignore = untracked
branch = 2.7
[submodule "libraries/semaphore-compat"]
path = libraries/semaphore-compat
url = https://gitlab.haskell.org/ghc/semaphore-compat.git
ignore = untracked
[submodule "libraries/stm"]
path = libraries/stm
url = https://gitlab.haskell.org/ghc/packages/stm.git
ignore = untracked
[submodule "nofib"]
path = nofib
url = https://gitlab.haskell.org/ghc/nofib.git
ignore = untracked
[submodule "utils/hsc2hs"]
path = utils/hsc2hs
url = https://gitlab.haskell.org/ghc/hsc2hs.git
ignore = untracked
[submodule "libffi-tarballs"]
path = libffi-tarballs
url = https://gitlab.haskell.org/ghc/libffi-tarballs.git
ignore = untracked
[submodule "gmp-tarballs"]
path = libraries/ghc-internal/gmp/gmp-tarballs
url = https://gitlab.haskell.org/ghc/gmp-tarballs.git
[submodule "libraries/exceptions"]
path = libraries/exceptions
url = https://gitlab.haskell.org/ghc/packages/exceptions.git
[submodule "utils/hpc"]
path = utils/hpc
url = https://gitlab.haskell.org/hpc/hpc-bin.git
[submodule "libraries/os-string"]
path = libraries/os-string
url = https://gitlab.haskell.org/ghc/packages/os-string
[submodule "libraries/file-io"]
path = libraries/file-io
url = https://gitlab.haskell.org/ghc/packages/file-io.git
# see 'man git-shortlog' for more details
# formats: Proper Name [<proper@email.xx> [Commit Name]] <commit@email.xx>
#
# Show result: git shortlog -sne
# Should be empty list: git shortlog -se | cut -f2 | cut -d'<' -f1 | uniq -d
Aaron Tomb <atomb@galois.com> <atomb@soe.ucsc.edu>
Aditya Divekar <adityadivekar03@gmail.com>
Alan Mock <ghc@alanmock.com> <alan@alanmock.com>
Alastair Reid <alastair@reid-consulting-uk.ltd.uk> areid <unknown>
Alastair Reid <alastair@reid-consulting-uk.ltd.uk> reid <unknown>
Alex Biehl <alex.biehl@gmail.com>
Alex Biehl <alex.biehl@gmail.com> <alexbiehl@gmail.com>
Alexander Lukyanov <alex.dontexist@gmail.com> # Ticket #9360.
Alexander Vershilov <alexander.vershilov@gmail.com> <alexander.vershilov@tweag.io>
Alexander Vieth <aovieth@gmail.com> <alexander.vieth@mail.mcgill.ca>
Alexandre Baldé <alexandrer_b@outlook.com> <alexandrer_b@outlook.com>
Alexey Rodriguez <mrchebas@gmail.com>
Alexey Rodriguez <mrchebas@gmail.com> mrchebas@gmail.com <unknown>
Alp Mestanogullari <alp@well-typed.com> <alpmestan@gmail.com>
Andreas Klebinger <klebinger.andreas@gmx.at>
Andreas Klebinger <klebinger.andreas@gmx.at> <C:\Users\andi\AppData\Roaming\The Bat!>
Andrew Farmer <anfarmer@fb.com> <afarmer@ittc.ku.edu>
Andrew Farmer <anfarmer@fb.com> <anfarmer@ku.edu>
Andrew Lelechenko <andrew.lelechenko@gmail.com>
Andrew Martin <andrew.thaddeus@gmail.com> <amartin@layer3com.com>
Andrew Pimlott <andrew.pimlott.ctr@metnet.navy.mil> andrew.pimlott.ctr@metnet.navy.mil <unknown>
Andrew Tolmach <apt@cs.pdx.edu> apt <unknown>
André Santos <alms@di.ufpe.br> andre <unknown>
Andy Adams-Moran <andy.adamsmoran@gmail.com> moran <unknown>
Andy Gill <andygill@ku.edu> <andy@galois.com>
Andy Gill <andygill@ku.edu> andy <unknown>
Andy Gill <andygill@ku.edu> andy@galois.com <unknown>
Andy Gill <andygill@ku.edu> andy@unsafeperformio.com <unknown>
Andy Gill <andygill@ku.edu> andygill@ku.edu <unknown>
Anthony Clayden <anthony_clayden@clear.net.nz>
Anton Nikishaev <anton.nik@gmail.com> a <unknown> # Ticket #1344.
Arnaud Spiwack <arnaud@spiwack.net> <arnaud.spiwack@tweag.io>
Arthur Fayzrakhmanov <heraldhoi@gmail.com>
Artem Pyanykh <artempyanykh@gmail.com> <artem.pyanykh@gmail.com>
Artyom Kazak <yom@artyom.me>
Audrey Tang <audreyt@audreyt.org> audreyt@audreyt.org <unknown>
Austin Seipp <austin@well-typed.com> <as@hacks.yi.org>
Austin Seipp <austin@well-typed.com> <as@nijoruj.org>
Austin Seipp <austin@well-typed.com> <aseipp@pobox.com>
Austin Seipp <austin@well-typed.com> <mad.one@gmail.com>
Bartosz Nitka <niteria@gmail.com> <bnitka@fb.com>
Bas van Dijk <v.dijk.bas@gmail.com> basvandijk@home.nl <unknown>
Bas van Dijk <v.dijk.bas@gmail.com> v.dijk.bas@gmail.com <unknown>
Ben Chan <usrbincc@yahoo.com> # See Note [usrbincc].
Ben Gamari <bgamari.foss@gmail.com> <ben@panda.(none)>
Ben Gamari <bgamari.foss@gmail.com> <ben@panda1.milkyway>
Ben Gamari <bgamari.foss@gmail.com> <ben@smart-cactus.org>
Ben Gamari <bgamari.foss@gmail.com> <ben@well-typed.com>
Ben Gamari <bgamari.foss@gmail.com> <bgamari@smart-cactus.org>
Ben Lippmeier <benl@ouroborus.net>
Ben Lippmeier <benl@ouroborus.net> <Ben.Lippmeier@anu.edu.au>
Ben Lippmeier <benl@ouroborus.net> Ben.Lippmeier.anu.edu.au <unknown>
Ben Lippmeier <benl@ouroborus.net> Ben.Lippmeier@anu.edu.au <unknown>
Ben Lippmeier <benl@ouroborus.net> benl@cse.unsw.edu.au <unknown>
Ben Lippmeier <benl@ouroborus.net> benl@ouroborus.net <unknown>
Benjamin Kovach <bkovach13@gmail.com>
Bernie Pope <bjpop@csse.unimelb.edu.au> bjpop@csse.unimelb.edu.au <unknown>
Björn Bringert <bjorn@bringert.net>
Björn Bringert <bjorn@bringert.net> bjorn@bringert.net <unknown>
Björn Bringert <bjorn@bringert.net> bringert@cs.chalmers.se <unknown>
Boris Lykah <lykahb@gmail.com> lykahb@gmail.com <unknown>
Brent Yorgey <byorgey@gmail.com> <byorgey@LVN513-12.cis.upenn.edu>
Brian Smith <brianlsmith@gmail.com>
Brian Smith <brianlsmith@gmail.com> brianlsmith@gmail.com <unknown>
Cain Norris <ghc@cainnorris.net> ghc@cainnorris.net <unknown>
Chris Catalfo <foxnorth@gmail.com> # https://github.com/ccatalfo
Chris Rodrigues <red5_2@hotmail.com> red5_2@hotmail.com <unknown>
Chris Smith <cdsmith@twu.net> cdsmith@twu.net <unknown>
Christiaan Baaij <christiaan.baaij@gmail.com>
Christoph Bauer <ich@christoph-bauer.net> ich@christoph-bauer.net <unknown>
Claus Reinke <claus.reinke@talk21.com>
Claus Reinke <claus.reinke@talk21.com> claus.reinke@talk21.com <unknown>
Colin McQuillan <m.niloc@gmail.com>
Colin McQuillan <m.niloc@gmail.com> m.niloc@gmail.com <unknown>
Colin Watson <cjwatson@debian.org> <cjwatson@canonical.com>
Csernik Flaviu Andrei <fcsernik@gmail.com> # https://github.com/archblob
Daan Leijen <daan@microsoft.com> daan <unknown>
Dan Licata <drl@cs.cmu.edu> # Commit 6a05ec.
Dana N. Xu <na.xu@inria.fr> <nx200@cam.a.cuk[3~d> # Weird characters.
Dana N. Xu <na.xu@inria.fr> <nx200@cam.ac.uk> # "Static Contract Checking for Haskell".
Dana N. Xu <na.xu@inria.fr> nx <unknown>
Daniel Cartwright <chessai1996@gmail.com>
Daniel Fischer <daniel.is.fischer@googlemail.com> <daniel.is.fischer@web.de>
Daniel Franke <df@dfranke.us> df@dfranke.us <unknown>
Daniel Rogers <daniel@phasevelocity.org> daniel@phasevelocity.org <unknown>
Darshan Kapashi <darshan@fb.com> <darshankapashi@gmail.com>
David C. Turner <dave.c.turner@gmail.com>
David Eichmann <davide@well-typed.com> <EichmannD@gmail.com>
David Eichmann <davide@well-typed.com> <davide@Well-Typed.com>
David Feuer <david.feuer@gmail.com> <David.Feuer@gmail.com>
David Himmelstrup <lemmih@gmail.com> # http://www.haskellers.com/user/Lemmih
David M Peixotto <dmp@rice.edu> dmp@rice.edu <unknown>
David N. Turner <dnt@dcs.gla.ac.uk> dnt <unknown> # Same domain as Will Partain, who mentions "(from dnt)"
David Terei <code@davidterei.com> <davidt@davidt-vm-32.scs.stanford.edu> # Ticket #5785.
David Terei <code@davidterei.com> <davidterei@gmail.com>
David Waern <davve@dtek.chalmers.se>
David Waern <davve@dtek.chalmers.se> <david.waern@gmail.com>
David Waern <davve@dtek.chalmers.se> <waern@ubuntu.(none)>
David Waern <davve@dtek.chalmers.se> davve@dtek.chalmers.se <unknown>
Denis Mirzoev <nolane16@gmail.com> <Nolane16@gmail.com>
Dimitrios Vytiniotis <dimitris@microsoft.com>
Dimitrios Vytiniotis <dimitris@microsoft.com> <dimitris@MSRC-1361792.europe.corp.microsoft.com>
Dimitrios Vytiniotis <dimitris@microsoft.com> dimitris@microsoft.com <unknown>
Divam Narula <dfordivam@gmail.com> # https://www.linkedin.com/in/dfordivam
Don Stewart <dons@galois.com> <dons@cse.unsw.edu.au>
Don Stewart <dons@galois.com> dons <unknown>
Don Stewart <dons@galois.com> dons@cse.unsw.edu.au <unknown>
Don Syme <dsyme@microsoft.com> dsyme <unknown>
Donnie Jones <donnie@darthik.com> donnie@darthik.com <unknown>
Douglas Wilson <douglas.wilson@gmail.com> doug <douglas.wilson@gmail.com>
Duncan Coutts <duncan@well-typed.com> <duncan.coutts@worc.ox.ac.uk>
Duncan Coutts <duncan@well-typed.com> <duncan@community.haskell.org>
Duncan Coutts <duncan@well-typed.com> <duncan@haskell.org>
Edward Z. Yang <ezyang@fb.com> <ezyang@cs.stanford.edu>
Edward Z. Yang <ezyang@fb.com> <ezyang@mit.edu>
Eric Seidel <eric@seidel.io> <gridaphobe@gmail.com>
Erik de Castro Lopo <erikd@mega-nerd.com> <erik.decastrolopo@ambiata.com>
Evan Hauck <khyperia@live.com>
Fangyi Zhou <fangyi.zhou@yuriko.moe> <fangyi.zhou15@imperial.ac.uk>
Fumiaki Kinoshita <fumiexcel@gmail.com>
Gabor Greif <ggreif@gmail.com>
Gabor Pali <pali.gabor@gmail.com> <pgj@FreeBSD.org>
Gabriele Keller <keller@cse.unsw.edu.au> keller <unknown>
Gabriele Keller <keller@cse.unsw.edu.au> keller@.cse.unsw.edu.au <unknown>
Gabriele Keller <keller@cse.unsw.edu.au> keller@cse.unsw.edu.au <unknown>
Geoffrey Mainland <mainland@cs.drexel.edu> <gmainlan@microsoft.com>
Geoffrey Mainland <mainland@cs.drexel.edu> <mainland@apeiron.net>
Geoffrey Mainland <mainland@cs.drexel.edu> mainland@eecs.harvard.edu <unknown>
Geoffrey Washburn <geoffw@cis.upenn.edu> geoffw <unknown> # See Note [geoffw]
Gergő Érdi <gergo@erdi.hu>
Gregory Popovitch <greg7mdp@gmail.com>
Gregory Wright <gwright@antiope.com>
Gregory Wright <gwright@antiope.com> gwright@antiope.com <unknown>
Guillaume Gardet <guillaume.gardet@opensuse.org>
Gábor Lehel <illissius@gmail.com> illissius@gmail.com <unknown>
Hans-Wolfgang Loidl <hwloidl@macs.hw.ac.uk> hwloidl <unknown>
Heinrich Hördegen <hoerdegen@energiefluss.info>
Howard B. Golden <howard_b_golden@yahoo.com>
Howard B. Golden <howard_b_golden@yahoo.com> howard_b_golden@yahoo.com <unknown>
Ian Lynagh <igloo@earth.li> <ian@.(none)>
Ian Lynagh <igloo@earth.li> <ian@well-typed.com>
Ian Lynagh <igloo@earth.li> igloo <unknown>
Iavor Diatchki <iavor.diatchki@gmail.com>
Iavor Diatchki <iavor.diatchki@gmail.com> <diatchki@Perun.(none)>
Iavor Diatchki <iavor.diatchki@gmail.com> <diatchki@galois.com>
Iavor Diatchki <iavor.diatchki@gmail.com> diatchki <unknown>
Iavor Diatchki <iavor.diatchki@gmail.com> iavor.diatchki@gmail.com <unknown>
Isaac Potoczny-Jones <ijones@syntaxpolice.org> ijones <unknown>
Isaac Potoczny-Jones <ijones@syntaxpolice.org> ijones@syntaxpolice.org <unknown>
Ismail Suleman <ismail-s@users.noreply.github.com>
James Bowen <jhbowen047@gmail.com>
James Foster <jf16688@my.bristol.ac.uk> <ratherforky@gmail.com>
Jean-Philippe Bernardy <jeanphilippe.bernardy@gmail.com> jeanphilippe.bernardy@gmail.com <unknown>
Jean-Philippe Bernardy <jeanphilippe.bernardy@gmail.com> jpbernardy <unknown>
Jeff Lewis <jeff@galconn.com> lewie <unknown>
Jim Apple <jbapple@gmail.com> unknown <unknown> # Tickets #2533 and #4193.
Joachim Breitner <mail@joachim-breitner.de> <breitner@kit.edu>
Joachim Breitner <mail@joachim-breitner.de> <nomeata@debian.org>
Jochem Berndsen <jochemberndsen@dse.nl> jochemberndsen@dse.nl <unknown>
John Dias <dias@cs.tufts.edu> dias@cs.tufts.edu <unknown>
John Dias <dias@cs.tufts.edu> dias@eecs.harvard.edu <unknown>
John Dias <dias@cs.tufts.edu> dias@eecs.tufts.edu <unknown>
John McCall <rjmccall@gmail.com> rjmccall@gmail.com <unknown>
Jon Fairbairn <jon.fairbairn@cl.cam.ac.uk> jon.fairbairn@cl.cam.ac.uk <unknown>
Jose Pedro Magalhaes <jpm@cs.ox.ac.uk> <dreixel@gmail.com>
Jose Pedro Magalhaes <jpm@cs.ox.ac.uk> <jpm@cs.uu.nl>
Jose Pedro Magalhaes <jpm@cs.ox.ac.uk> jpm@cs.uu.nl <unknown>
Josef Svenningsson <josef.svenningsson@gmail.com> josefs <unknown>
Josh Filstrup <superfunc@protonmail.ch>
Josh Price <joshprice247+git@gmail.com> <2855417+WhistlePayer@users.noreply.github.com>
Josh Price <joshprice247+git@gmail.com> <thepig247@gmail.com>
Josh Price <joshprice247+git@gmail.com> <joshprice247@gmail.com>
Jost Berthold <jb.diku@gmail.com> <berthold@mathematik.uni-marburg.de>
Jost Berthold <jb.diku@gmail.com> berthold@mathematik.uni-marburg.de <unknown>
Juan J. Quintela <quintela@fi.udc.es> quintela <unknown>
Judah Jacobson <judah.jacobson@gmail.com> judah.jacobson@gmail.com <unknown>
Julian Seward <jseward@acm.org> sewardj <unknown>
Julie Moronuki <jdog74@gmail.com>
Karel Gardas <karel.gardas@centrum.cz> <karel.gardas@centrumcz>
Karel Gardas <karel.gardas@centrum.cz> <kgardas@objectsecurity.com>
Keith Wansbrough <keith.wansbrough@cl.cam.ac.uk> keithw <unknown>
Keith Wansbrough <keith.wansbrough@cl.cam.ac.uk> kw <unknown>
Keith Wansbrough <keith.wansbrough@cl.cam.ac.uk> kw217 <unknown>
Ken Shan <ken@digitas.harvard.edu> ken <unknown>
Kevin G Donnelly <kevind@bu.edu> <kevind@bu.edu>
Kevin G Donnelly <kevind@bu.edu> kevind@bu.edu <unknown>
Kevin Glynn <glynn@info.ucl.ac.be> kglynn <unknown>
Krasimir Angelov <kr.angelov@gmail.com> kr.angelov@gmail.com <unknown>
Krasimir Angelov <kr.angelov@gmail.com> krasimir <unknown>
Krzysztof Gogolewski <krzysztof.gogolewski@tweag.io> <krz.gogolewski@gmail.com>
Lennart Augustsson <lennart@augustsson.net>
Lennart Augustsson <lennart@augustsson.net> lennart.augustsson@credit-suisse.com <unknown>
Lennart Augustsson <lennart@augustsson.net> lennart@augustsson.net <unknown>
Lennart Kolmodin <kolmodin@gmail.com> <kolmodin@dtek.chalmers.se>
Lennart Kolmodin <kolmodin@gmail.com> <kolmodin@google.com>
Levent Erkök <erkokl@gmail.com> erkok <unknown>
Li-yao Xia <lysxia@gmail.com>
Louis Zhuang <y.zhuang5@lse.ac.uk> y.zhuang5@lse.ac.uk <unknown> # See Note [zhuang]
Loïc Arjanen <arjanen.loic@gmail.com>
Luke Iannini <lukexipd@gmail.com> <lukexi@me.com>
Malcolm Wallace <Malcolm.Wallace@cs.york.ac.uk> Malcolm.Wallace@cs.york.ac.uk <unknown>
Malcolm Wallace <Malcolm.Wallace@cs.york.ac.uk> Malcolm.Wallace@me.com <unknown>
Malcolm Wallace <Malcolm.Wallace@cs.york.ac.uk> malcolm <unknown>
Manuel M T Chakravarty <chak@cse.unsw.edu.au> chak <unknown>
Marc Weber <marco-oweber@gmx.de> marco-oweber@gmx.de <unknown>
Marcin 'Qrczak' Kowalczyk <qrczak@knm.org.pl> qrczak <unknown>
Marco Túlio Gontijo e Silva <marcot@marcot.eti.br>
Marco Túlio Gontijo e Silva <marcot@marcot.eti.br> <marcot@debian.org>
Marios Titas <redneb@gmx.com> <geopoul@gmail.com>
Mark Karpov <markkarpov92@gmail.com>
Mark Karpov <markkarpov92@gmail.com> <mark.karpov@tweag.io>
Markus Großer <markus.grosser@tum.de>
Matt Chapman <matthewc@cse.unsw.edu.au> matthewc <unknown>
Matthew Farkas-Dyck <strake888@gmail.com>
Matthew Farkas-Dyck <strake888@gmail.com> <mfdyck@google.com>
Matthew Hyatt <matthewnhyatt@gmail.com>
Matthew Pickering <matthewtpickering@gmail.com> <matthew.pickering@tweag.io>
Matthias Kilian <kili@outback.escape.de> kili@outback.escape.de <unknown>
Michael D. Adams <t-madams@microsoft.com> <adamsmd@cs.indiana.edu>
Michael Weber <michaelw@debian.org> michaelw <unknown>
Mike Thomas <mthomas@gil.com.au> mthomas <unknown>
Mikolaj Konarski <mikolaj@well-typed.com> <mikolaj.konarski@gmail.com>
Moritz Angermann <moritz.angermann@gmail.com> <moritz@lichtzwerge.de>
Nathan Collins <conathan@galois.com> <nathan.collins@gmail.com>
Nathan Huesken <nathan.huesken@posteo.de>
Neil Mitchell <ndmitchell@gmail.com> <http://www.cs.york.ac.uk/~ndm/>
Neil Mitchell <ndmitchell@gmail.com> Neil Mitchell <unknown>
Nicholas Nethercote <njn25@cam.ac.uk> njn <unknown>
Nikita Sazanovich <nikitasazanovich@gmail.com>
Niklas Larsson <niklas@mm.st> # Commit 664063.
nineonine <mail4chemik@gmail.com>
Ningning Xie <xnningxie@gmail.com>
Norman Ramsey <nr@eecs.harvard.edu> nr@eecs.harvard.edu <unknown>
Orphi <MathematicalOrchid@hotmail.com> # Uses this name online.
PHO <pho@cielonegro.org> pho@cielonegro.org <unknown> # Uses this name online.
Paul Horsfall <null-a@users.noreply.github.com>
Pepe Iborra <mnislaih@gmail.com>
Pepe Iborra <mnislaih@gmail.com> <pepeiborra@gmail.com>
Pepe Iborra <mnislaih@gmail.com> mnislaih@gmail.com <unknown>
Pepe Iborra <mnislaih@gmail.com> pepe <unknown>
Pepe Iborra <mnislaih@gmail.com> pepeiborra@gmail.com <unknown>
Peter Jonsson <t-peterj@microsoft.com> t-peterj@microsoft.com <unknown>
Peter Trommler <ptrommler@acm.org> <ptrommler@scm.org>
Peter Wortmann <Peter.Wortmann@googlemail.com> <peter@grayson-heights-pc028-118.student-halls.leeds.ac.uk>
Peter Wortmann <Peter.Wortmann@googlemail.com> <scpmw@leeds.ac.uk>
Peter Wortmann <Peter.Wortmann@googlemail.com> scpmw@leeds.ac.uk <unknown>
Piyush P. Kurur <ppk@cse.iitk.ac.in>
Phuong Trinh <lolotp@fb.com> <lolo_vn@yahoo.co.uk>
Ralf Laemmel <softlang@uni-koblenz.de> ralf <unknown> # https://gitlab.haskell.org/ghc/ghc/wikis/team-ghc
Ravi Nanavati <ravi@bluespec.com> # Commit 70c044.
Reiner Pope <reiner.pope@gmail.com> <reinerp@google.com>
Reuben Thomas <rrt@sc3d.org> rrt <unknown>
Richard Eisenberg <rae@cs.brynmawr.edu> <eir@cis.upenn.edu>
Richard Eisenberg <rae@cs.brynmawr.edu> <eir@seas.upenn.edu>
Richard Eisenberg <rae@cs.brynmawr.edu> <rae@richarde.dev>
Rob Ennals <rob@ennals.org> rje <unknown> # SPJ's student (rje33@cam.ac.uk)
Roland Senn <rsx@bluewin.ch>
Roman Leshchinskiy <rl@cse.unsw.edu.au> rl@cse.unsw.edu.au <unknown>
Ross Paterson <ross@soi.city.ac.uk> ross <unknown>
Ryan Lortie <desrt@desrt.ca> desrt <unknown>
Ryan Scott <ryan.gl.scott@gmail.com>
Ryan Scott <ryan.gl.scott@gmail.com> <ryan.gl.scott@ku.edu>
Sam Anklesaria <amsay@amsay.net>
Sam Anklesaria <amsay@amsay.net> amsay@amsay.net <unknown>
Santiago Munín <santimunin@gmail.com>
Sean D. Gillespie <sean@mistersg.net>
Sean Innes <sean.r.innes@googlemail.com>
Sean Seefried <sean.seefried@gmail.com> sseefried <unknown>
Sergei Trofimovich <slyfox@gentoo.org> <siarheit@google.com>
Sergei Trofimovich <slyfox@gentoo.org> <slyfox at gentoo.org>
Sergei Trofimovich <slyfox@gentoo.org> <slyfox@community.haskell.org>
Sergei Trofimovich <slyfox@gentoo.org> <slyfox@inbox.ru>
Shae Matijs Erisson <shae@ScannedInAvian.com> shae@ScannedInAvian.com <unknown>
Shane O'Brien <shane@duairc.com>
Siddhanathan Shanmugam <siddhanathan@gmail.com> <siddhanathan+social@gmail.com>
Siddharth Bhat <siddu.druid@gmail.com> <siddharth.bath@tweag.io>
Sigbjorn Finne <sof@galois.com> sof <unknown>
Sigbjorn Finne <sof@galois.com> sof@galois.com <unknown>
Simon Hengel <sol@typeful.net> <simon.hengel@wiktory.org>
Simon Marlow <marlowsd@gmail.com> <simonmar-work@simonmar-laptop.(none)>
Simon Marlow <marlowsd@gmail.com> <simonmar@microsoft.com>
Simon Marlow <marlowsd@gmail.com> <simonmarhaskell@gmail.com>
Simon Marlow <marlowsd@gmail.com> <smarlow@SIMONMARLOW-PC.TheFacebook.com>
Simon Marlow <marlowsd@gmail.com> <smarlow@fb.com>
Simon Marlow <marlowsd@gmail.com> simonm <unknown>
Simon Marlow <marlowsd@gmail.com> simonmar <unknown>
Simon Marlow <marlowsd@gmail.com> simonmar@microsoft.com <unknown>
Simon Marlow <marlowsd@gmail.com> uid245 <unknown> # See Note [uid245]
Simon Peyton Jones <simonpj@microsoft.com>
Simon Peyton Jones <simonpj@microsoft.com> <simonpj@.europe.corp.microsoft.com>
Simon Peyton Jones <simonpj@microsoft.com> <simonpj@MSRC-4971295.europe.corp.microsoft.com>
Simon Peyton Jones <simonpj@microsoft.com> <simonpj@cam-04-unx.europe.corp.microsoft.com>
Simon Peyton Jones <simonpj@microsoft.com> <simonpj@microsof.com>
Simon Peyton Jones <simonpj@microsoft.com> <simonpj@static.144-76-175-55.clients.your-server.de>
Simon Peyton Jones <simonpj@microsoft.com> simonpj <unknown>
Simon Peyton Jones <simonpj@microsoft.com> simonpj@microsoft <unknown>
Simon Peyton Jones <simonpj@microsoft.com> simonpj@microsoft.com <unknown>
Spencer Janssen <spencer@well-typed.com> <sjanssen@cse.unl.edu>
Stephen Blackheath <stephen@blacksapphire.com> <docks.cattlemen.stephen@blacksapphire.com>
Stephen Blackheath <stephen@blacksapphire.com> <effusively.proffer.stephen@blacksapphire.com>
Stephen Blackheath <stephen@blacksapphire.com> <oversensitive.pastors.stephen@blacksapphire.com>
Sungwoo Park <gla@postech.ac.kr> gla <unknown> # https://gitlab.haskell.org/ghc/ghc/wikis/team-ghc
Sven Panne <sven.panne@aedion.de> panne <unknown>
Sven Panne <sven.panne@aedion.de> sven.panne@aedion.de <unknown>
Sylvain Henry <hsyl20@gmail.com>
Sylvain Henry <hsyl20@gmail.com> <sylvain@haskus.fr>
Sébastien Carlier <sebc@posse42.net> sebc <unknown>
Takano Akio <tak@anoak.io> <aljee@hyper.cx>
Tao He <sighingnow@gmail.com>
Thijs Alkemade <me@thijsalkema.de> <thijsalkemade@gmail.com>
Thorkil Naur <naur@post11.tele.dk> naur@post11.tele.dk <unknown>
Tibor Erdesz <erdeszt@gmail.com>
Tim Chevalier <chevalier@alum.wellesley.edu>
Tim Chevalier <chevalier@alum.wellesley.edu> <t-kirstc@microsoft.com>
Tim Chevalier <chevalier@alum.wellesley.edu> krc <unknown> # Ticket #670.
Tim Harris <tharris@microsoft.com>
Tim Harris <tharris@microsoft.com> tharris <unknown>
Tim Harris <tharris@microsoft.com> tharris@microsoft.com <unknown>
Tobias Gedell <d99getob@dtek.chalmers.se> tgedell <unknown>
Tom Murphy <vivid.haskell@gmail.com>
Tom Schrijvers <tom.schrijvers@cs.kuleuven.be> tom.schrijvers@cs.kuleuven.be <unknown>
Tom Sydney Kerckhove <syd.kerckhove@gmail.com> <syd@fpcomplete.com>
Tom Sydney Kerckhove <syd.kerckhove@gmail.com> <syd@cs-syd.eu>
Umut Acar <umut@cs.cmu.edu> umuta <unknown> # POPL 2002 paper Adaptive Functional Programming
Varun Gandhi <theindigamer15@gmail.com>
Veronika Romashkina <vrom911@gmail.com>
Vitaly Bragilevsky <bravit111@gmail.com>
Volker Stolz <stolz@i2.informatik.rwth-aachen.de>
Volker Stolz <stolz@i2.informatik.rwth-aachen.de> stolz <unknown>
Will Partain <partain@dcs.gla.ac.uk> partain <unknown>
Wolfgang Thaller <wolfgang.thaller@gmx.net> wolfgang <unknown>
Wolfgang Thaller <wolfgang.thaller@gmx.net> wolfgang.thaller@gmx.net <unknown>
Yorick Laupa <yo.eight@gmail.com> # https://github.com/yoeight
Yuri de Wit <admin@rodlogic.net> # Commit 37d64a.
Yusuke Matsushita <y.skm24t@gmail.com> # https://github.com/Kinokkory
Zejun Wu <watashi@watashi.ws> <zejun.wu@gmail.com>
Zubin Duggal <zubin@cmi.ac.in> <zubin.duggal@gmail.com>
gwern <gwern0@gmail.com> gwern0@gmail.com <unknown> # Uses this name online.
mniip <mniip@mniip.com> # Uses this name online.
shelarcy <shelarcy@gmail.com> # Uses this name online.
Ömer Sinan Ağacan <omeragacan@gmail.com> # https://github.com/osa1
Ömer Sinan Ağacan <omeragacan@gmail.com> <omer@well-typed.com>
# Note [geoffw]
# ~~~~~~~~~~~~~
# From GHC wiki: "Geoff Washburn made the first implementation of GADTs in GHC"
# Other possibilities (but not such a direct connection with GHC):
# * Geoff W. Hamilton
# FP Researcher
# * Geoff Wozniak <wozniak@csd.uwo.ca>
# PhD student, OCaml, "Dynamic ADTs"
#
# Note [uid245]
# ~~~~~~~~~~~~~
# Circumstantial evidence only:
# * Commit fafe43, "Avoid divide by zero", by simonm.
# * Subsequent commit fd40a1, "avoid another divide by zero", by uid245.
# * Three commits later 15e6ea, "urk, extra parenthesis crept in", by simonm. Same file section.
#
# Note [usrbincc]
# ~~~~~~~~~~~~~~~
# https://github.com/thlorenz/node-traceur/commit/59f97feae23763c456b70bb129dbe04004e9fe04
#
# Note [zhuang]
# ~~~~~~~~~~~~~
# http://comments.gmane.org/gmane.comp.lang.haskell.cvs.ghc/33473
The Glasgow Haskell Compiler -- version 2.03
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
We are pleased to announce the Glasgow Haskell Compiler version 2.03.
GHC 2.03 is a minor upgrade of GHC 2.02. It differs in the following
ways:
* A slew of small bugs are fixed. You can find the complete list
at http://www.cse.ogi.edu/~simonpj/ghc-bugs.html
* Last-minute language changes have been implemented (minor changes
to the libraries, and to module export/hiding scope rules)
* It is only available as a source distribution. If you want to
use it you'll have to build it from source. Nowadays this is
a well-documented process (see the build & installation guide).
None of the bugs in GHC 2.02 are show-stoppers, so you'll only want
to upgrade if you are a build-from-source junkie and the bugs are
irritating you.
Simon Peyton Jones
Sigbjorn Finne
======================================================================
How to get GHC 2.03:
The easy way is to go to the WWW GHC distribution page, which is
self-explanatory:
ftp://ftp.dcs.gla.ac.uk/pub/haskell/glasgow/README.html
# Confused about what this is? See
# https://docs.gitlab.com/ee/user/project/codeowners/
# Catch-all
* @bgamari
[Build system]
/hadrian/ @snowleopard @alp @DavidEichmann @angerman
/configure.ac @angerman @hvr
/aclocal.m4 @angerman @hvr
/config.sub @angerman @hvr
[RTS-like things]
/rts/ @bgamari @simonmar @osa1 @Phyx @angerman
/rts/linker/ @angerman @Phyx @simonmar
/rts/include/ @bgamari @simonmar @osa1
/rts/wasm/ @TerrorJack
[RTS heap profiling]
/docs/users_guide/profiling.rst @DanielG
/rts/include/rts/ProfHeap.h @DanielG
/rts/include/rts/TraverseHeap.h @DanielG
/rts/include/rts/storage/ClosureMacros.h @DanielG
/rts/LdvProfile* @DanielG
/rts/ProfHeap* @DanielG
/rts/Retainer* @DanielG
/rts/TraverseHeap* @DanielG
/rts/sm/GC.c @DanielG
/rts/sm/Storage* @DanielG
/testsuite/tests/profiling/should_run/TraverseHeap* @DanielG
[The compiler]
/compiler/parser/ @int-index
/compiler/GHC/Hs/ @simonpj @rae
/compiler/GHC/Tc/ @simonpj @rae
/compiler/GHC/Rename/ @simonpj @rae
/compiler/GHC/Types/ @simonpj @rae
/compiler/GHC/HsToCore/ @simonpj @rae
/compiler/GHC/HsToCore/Pmc* @sgraf
/compiler/GHC/HsToCore/Foreign/Wasm.hs @TerrorJack
/compiler/GHC/Tc/Deriv/ @RyanGlScott
/compiler/GHC/CmmToAsm/ @simonmar @bgamari @AndreasK
/compiler/GHC/CmmToAsm/RV64/ @supersven @angerman
/compiler/GHC/CmmToAsm/Wasm/ @TerrorJack
/compiler/GHC/CmmToLlvm/ @angerman
/compiler/GHC/StgToCmm/ @simonmar @osa1
/compiler/GHC/Cmm/ @simonmar @osa1
/compiler/ghci/ @simonmar
/compiler/GHC/Core/Opt/CallArity.hs @nomeata
/compiler/GHC/Core/Opt/Exitify.hs @nomeata
/compiler/GHC/Stg/CSE.hs @nomeata
/compiler/GHC/Stg/Lift* @sgraf
/compiler/GHC/Cmm/Switch.hs @nomeata
/compiler/GHC/Core/Opt/ @simonpj @sgraf
/compiler/GHC/ThToHs.hs @rae
/compiler/GHC/Wasm/ @nrnrnr
/compiler/GHC/JS/ @luite @doyougnu @hsyl20 @JoshMeredith
/compiler/GHC/StgToJS/ @luite @doyougnu @hsyl20 @JoshMeredith
/compiler/GHC/Runtime/Interpreter/Wasm.hs @TerrorJack
[Core libraries]
/libraries/base/ @hvr
/libraries/ghci/ @simonmar
/libraries/template-haskell/ @rae
/testsuite/tests/interface-stability/ @core-libraries
[Internal utilities and libraries]
/utils/iserv-proxy/ @angerman @simonmar
/utils/iserv/ @angerman @simonmar
/utils/fs/ @Phyx
/utils/jsffi @TerrorJack
/utils/haddock @Kleidukos
[WinIO related code]
/libraries/base/GHC/Event/Windows/ @Phyx
/libraries/base/GHC/IO/Windows/ @Phyx
/rts/win32/ @Phyx
/libraries/base/GHC/IO/Handle/Lock/Windows.hsc @Phyx
/libraries/base/GHC/Event/Windows.hsc @Phyx
/libraries/base/GHC/Conc/WinIO.hs @Phyx
/libraries/base/GHC/Conc/Windows.hs @Phyx
/libraries/base/GHC/IO/Handle/Windows.hs @Phyx
/libraries/base/GHC/IO/StdHandles.hs @Phyx
/libraries/base/GHC/Windows.hs @Phyx
/libraries/base/cbits/IOutils.c @Phyx
/libraries/base/cbits/Win32Utils.c @Phyx
/libraries/base/cbits/consUtils.c @Phyx
/libraries/base/include/winio_structs.h @Phyx
[CI]
/.gitlab/ @chreekat @bgamari @mpickering
/.gitlab-ci.yml @chreekat @bgamari @mpickering
CVS Cheat Sheet for fptools hackers.
------------------------------------
At Glasgow, we use CVS (Concurrent Version System) to keep track of
our sources for various software projects. CVS lets several people
work on the same software at the same time, allowing changes to be
checked in incrementally.
The full documentation for CVS is online, in info format (use 'info
cvs' or run emacs and type C-h i). A good source of tips is the CVS
FAQ, in /local/doc/gnu/CVS.FAQ. Bradley C. Kuszmaul provides a "to
the point" introduction to CVS at
http://arch.cs.yale.edu:8080/~bradley/cvs-instructions
This note is supposed to be a set of guidelines for how to use CVS at
Glasgow, and will probably evolve in time. The main thing to remember
is that most mistakes can be undone, but if there's anything you're
not sure about feel free to bug the local CVS meister (namely Me
<simonm@dcs.gla.ac.uk>).
The following guidelines should mean we don't step on each other's
toes too much. Ok, here's what you do:
Using Remote CVS
----------------
* (only if using CVS remotely, i.e. not at Glasgow):
To use remote CVS, you need to supply me with a username and
encrypted password. Once you've done that and the account has been
set up, you need to do:
cvs -d <username>@solander.dcs.gla.ac.uk:/local/fp/src/cvsroot login
CVS will ask for a password. You only need to enter the password once,
it will be recorded in .cvspass in your home directory.
setenv CVSROOT :pserver:<username>@solander.dcs.gla.ac.uk:/local/fp/src/cvsroot
The CVSROOT environment variable will be recorded in the checked-out
tree, so you don't need to set this every time either. Ignore the
instructions for setting CVSROOT below.
Using CVS for the First Time
----------------------------
* (ok, everybody now...) Firstly, identify which areas of the source
tree you'll be working on. The directory structure looks like this:
fptools/ghc GHC
fptools/hslibs Haskell Libraries
fptools/happy Happy
fptools/haggis Haggis
fptools/green-card Green Card
fptools/nofib Nofib test suite
fptools/common-rts GHC/Hugs combined run-time system
For each directory, there's a mailing list: fp-cvs-ghc,
fp-cvs-hslibs etc. Everyone on the mailing list is sent a message
automatically by CVS whenever someone checks in a change, this helps
to keep track of what's going on when several people are working on
related stuff. Ask the CVS meister to put you on the relevant
mailing lists.
* Create a .cvsrc file. Mine looks like this:
checkout -P
release -d
update -P
diff -c
It just gives default flags for some of the CVS commands. For instance,
the -P flag to 'checkout' says prune empty directories, which is
normally what you want.
Checking Out a Source Tree
--------------------------
* Check out your sources. The Approved Way (at least by me) to do
this is as follows:
$ CVSROOT=/local/fp/src/cvsroot
$ export CVSROOT
or, if you're using csh or tcsh:
$ setenv CVSROOT=/local/fp/src/cvsroot
$ cvs checkout fpconfig
At this point you have a new directory called 'fptools' which contains
the basic stuff for the fptools suite - including the configuration
files and literate programming tools.
$ mv fptools <directory>
You can call the fptools directory whatever you like, CVS won't mind.
$ cd <directory>
$ cvs checkout ghc hslibs happy
The second command here checks out the relevant modules you want to
work on. For a GHC build, for instance, you need at least ghc and
hslibs.
Committing Your Changes
-----------------------
* Build the software, if necessary. Unless you're just working on
documentation, you'll probably want to build the software in order
to test any changes you make. For GHC, instructions can be found
in the GHC installation guide, online in info format.
* Make changes. Preferably small ones first.
* Test them. You can see exactly what changes you've made by using
the 'cvs diff' command. For example,
$ cvs diff
lists all the changes (using the 'diff' command) in and below the
current directory. In emacs, C-c C-v C-= runs 'cvs diff' on the current
buffer and shows you the results.
* Before checking in a change, you need to update your source tree:
$ cd fptools
$ cvs update
This pulls in any changes that other people have made, and merges them
with yours. If there are any conflicts, CVS will tell you, and you'll
have to resolve them before you can check your changes in. The
documentation describes what to do in the event of a conflict.
It's not always necessary to do a full cvs update before checking in
a change, since CVS will always tell you if you try to check in a file
that someone else has changed. However, you should still update
at regular intervals to avoid making changes that don't work in
conjuction with changes that someone else made. Keeping an eye on
what goes by on the mailing list can help here.
* When you're happy that your change isn't going to break anything,
check it in. For a one-file change:
$ cvs commit <filename>
CVS will then pop up an editor for you to enter a "commit message",
this is just a short description of what your change does, and will
be kept in the history of the file.
If you're using emacs, simply load up the file into a buffer and type
C-x C-q, and emacs will prompt for a commit message and then check in
the file for you.
For a multiple-file change, things are a bit trickier. There are
several ways to do this, but this is the way I find easiest.
First type the commit message into a temporary file. Then either
$ cvs commit -F <commit-message> <file_1> .... <file_n>
or, if nothing else has changed in this part of the source tree,
$ cvs commit -F <commit-message> <directory>
where <directory> is a common parent directory for all your changes,
and <commit-message> is the name of the file containing the commit
message.
Shortly afterwards, you'll get some mail from the relevant mailing
list saying which files changed, and giving the commit message.
For a multiple-file change, you should still get only *one* message.
General Hints
-------------
* As a general rule: commit changes in small units, preferably
addressing one issue or implementing a single feature. Provide a
descriptive log message so that the repository records exactly which
changes were required to implement a given feature/fix a bug. I've
found this *very* useful in the past for finding out when a particular
bug was introduced: you can just wind back the CVS tree until
the bug disappears.
* Keep the sources at least *buildable* at any given time. No
doubt bugs will creep in, but it's quite easy to ensure that any
change made at least leaves the tree in a buildable state. We do
nightly builds of GHC to keep an eye on what things work/don't work
each day and how we're doing in relation to previous verions. This
idea is truely wrecked if the compiler won't build in the first place!
* To check out extra bits into an already-checked-out tree, use the
following procedure. Suppose you have a checked-out fptools tree containing
just ghc and hslibs, and you want to add nofib to it:
cd fptools
cvs checkout nofib
or:
cd fptools
cvs update -d nofib
(the -d flag tells update to create a new directory). If you just want
part of the nofib suite, you can do
cd fptools
cvs checkout nofib/spectral
This works because 'nofib' is a module in its own right, and spectral
is a subdirectory of the nofib module. The path argument to checkout
must always start with a module name. There's no equivalent form of
this command using update.
Ok, that'll do for now. If there's anything else you'd like to see in
this file, just let me know.
Simon Marlow <simonm@dcs.gla.ac.uk>
Contributing to the Glasgow Haskell Compiler
============================================
So you've decided to hack on GHC, congratulations! We hope you have a
rewarding experience. This file will point you in the direction of
information to help you get started right away.
The GHC Developer's Wiki
========================
The home for GHC hackers is our GitLab instance, located here:
<https://gitlab.haskell.org/ghc/ghc>
From here, you can file bugs (or look them up), use the wiki, view the
`git` history, among other things. Of particular note is the building
page, which has the high level overview of the build process and how
to get the source:
<https://gitlab.haskell.org/ghc/ghc/wikis/building>
Contributing patches to GHC in a hurry
======================================
Make sure your system has the necessary tools to compile GHC. You can
find an overview of how to prepare your system for compiling GHC here:
<https://gitlab.haskell.org/ghc/ghc/wikis/building/preparation>
After you have prepared your system, you can build GHC following the instructions described here:
<https://gitlab.haskell.org/ghc/ghc/-/wikis/building/hadrian>
Then start by making your commits however you want. When you're done, you can submit a merge request to [GitLab](https://gitlab.haskell.org/ghc/ghc/merge_requests) for code review.
Changes to the `base` library require a proposal to the [core libraries committee](https://github.com/haskell/core-libraries-committee/issues).
The GHC Wiki has a good summary for the [overall process](https://gitlab.haskell.org/ghc/ghc/wikis/working-conventions/fixing-bugs). One or several reviewers will review your PR, and when they are ok with your changes, they will assign the PR to [Marge Bot](https://gitlab.haskell.org/marge-bot) which will automatically rebase, batch and then merge your PR (assuming the build passes).
Useful links:
=============
An overview of things like using Git, the release process, filing bugs
and more can be located here:
<https://gitlab.haskell.org/ghc/ghc/wikis/contributing>
You can find our coding conventions for the compiler and RTS here:
<https://gitlab.haskell.org/ghc/ghc/wikis/commentary/coding-style>
<https://gitlab.haskell.org/ghc/ghc/wikis/commentary/rts/conventions>
If you're going to contribute regularly, **learning how to use the
build system is important** and will save you lots of time. You should
read over this page carefully:
<https://gitlab.haskell.org/ghc/ghc/wikis/building/using>
A web based code explorer for the GHC source code with semantic analysis
and type information of the GHC sources is available at:
<https://haskell-code-explorer.mfix.io/>
Look for `GHC` in `Package-name`. For example, here is the link to
[GHC-8.6.5](https://haskell-code-explorer.mfix.io/package/ghc-8.6.5).
If you want to watch issues and code review activities, the following page is a good start:
<https://gitlab.haskell.org/ghc/ghc/activity>
How to communicate with us
==========================
GHC is a big project, so you'll surely need help. Luckily, we can
provide plenty through a variety of means!
## IRC
If you're an IRC user, be sure to drop by the official `#ghc` channel
on [Libera.Chat](https://libera.chat). Many (but not all) of the
developers and committers are actively there during a variety of
hours.
## Mailing lists
In the event IRC does not work or if you'd like a bigger audience, GHC
has several mailing lists for this purpose. The most important one is
[ghc-devs](http://www.haskell.org/pipermail/ghc-devs/), which is where
the developers actively hang out and discuss incoming changes and
problems.
There is no strict standard about where you post patches - either in
`ghc-devs` or in the bug tracker. Ideally, please put it in the bug
tracker with test cases or relevant information in a ticket, and set
the ticket status to `patch`. By doing this, we'll see the patch
quickly and be able to review. This will also ensure it doesn't get
lost. But if the change is small and self contained, feel free to
attach it to your email, and send it to `ghc-devs`.
Furthermore, if you're a developer (or want to become one!) you're
undoubtedly also interested in the other mailing lists:
* [glasgow-haskell-users](http://www.haskell.org/mailman/listinfo/glasgow-haskell-users)
is where developers/users meet.
* [ghc-commits](http://www.haskell.org/mailman/listinfo/ghc-commits)
for commit messages when someone pushes to the repository.
El fin
======
Happy Hacking! -- The GHC Team
Building & Installing
=====================
For full information on building GHC, see the GHC Building Guide [1].
Here follows a summary - if you get into trouble, the Building Guide
has all the answers.
Before building GHC you may need to install some other tools and
libraries. See "Setting up your system for building GHC" [2].
N.B. in particular you need GHC installed in order to build GHC,
because the compiler is itself written in Haskell. For instructions
on how to port GHC to a new platform, see the Building Guide [1].
For building library documentation, you'll need Haddock [3]. To build
the compiler documentation, you need [Sphinx](http://www.sphinx-doc.org/) and
XeLaTex (only for PDF output).
Quick start: the following gives you a default build:
$ ./boot
$ ./configure
$ ./hadrian/build
On Windows, you need an extra repository containing some build tools.
These can be downloaded for you by configure. This only needs to be done once by running:
$ ./configure --enable-tarballs-autodownload
You can use `-jN` option to parallelize the build. It's generally best
to set `N` somewhere around the core count of the build machine.
The `./boot` step is only necessary if this is a tree checked out from
git. For source distributions downloaded from GHC's web site, this step has
already been performed.
These steps give you the default build, which includes everything
optimised and built in various ways (eg. profiling libs are built).
It can take a long time. To customise the build, see the file
`HACKING.md`.
References
==========
- [1] http://www.haskell.org/ghc/
- [2] https://gitlab.haskell.org/ghc/ghc/wikis/building/preparation
- [3] http://www.haskell.org/haddock/
The Glasgow Haskell Compiler License
Copyright 2002, The University Court of the University of Glasgow.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
- Neither name of the University nor the names of its contributors may be
used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF
GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
#################################################################################
#
# fptools/Makefile
#
# This is the main Makefile for fptools.
#
#################################################################################
TOP=.
include $(TOP)/mk/boilerplate.mk
SRC_DIST_DIR=$(shell pwd)/$(SRC_DIST_NAME)
#
# Totally evil hack to make the setting of SUBDIRS be dependent
# on whether we do `make install' or not. Having a $(ifeq ... ) would
# be preferable..
CURRENT_TARGET = $@
SUBDIRS = $(shell if (test x$(CURRENT_TARGET) = xinstall) ; then echo $(ProjectsToInstall); else echo $(ProjectsToBuild); fi)
#
# Files to include in fptools source distribution
#
SRC_DIST_DIRS += mk docs CONTRIB distrib $(ProjectsToBuild)
SRC_DIST_FILES += configure.in config.guess config.sub configure aclocal.m4 README INSTALL Makefile install-sh
#
# Making a binary distribution
#
# To make a particular binary distribution:
# set $(Project) to the name of the project (currently Ghc or Happy).
BIN_DIST_TMPDIR=$(shell pwd)
BIN_DIST_NAME=fptools
#
# list of toplevel directories to include in binary distrib.
#
BIN_DIST_MAIN_DIR=$($(Project)MainDir)
BIN_DIST_DIRS=$($(Project)BinDistDirs)
binary-dist:: binary-dist-pre
BIN_DIST_TOP= distrib/Makefile-bin.in \
distrib/configure-bin.in \
README \
distrib/INSTALL \
$(BIN_DIST_MAIN_DIR)/ANNOUNCE \
$(BIN_DIST_MAIN_DIR)/PATCHLEVEL \
$(BIN_DIST_MAIN_DIR)/RELEASE \
glafp-utils/mkdirhier/mkdirhier \
install-sh \
config.guess \
config.sub \
aclocal.m4
binary-dist::
@for i in $(BIN_DIST_TOP); do \
if test -f "$$i"; then \
echo cp $$i $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME); \
cp $$i $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME); \
fi; \
done;
@echo "Configuring the Makefile for this project..."
touch $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/Makefile.in
echo "package = $(ProjectNameShort)" >> $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/Makefile.in
echo "version = $(ProjectVersion)" >> $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/Makefile.in
echo "PACKAGE_SH_SCRIPTS = $($(Project)BinDistShScripts)" >> $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/Makefile.in
echo "PACKAGE_PRL_SCRIPTS = $($(Project)BinDistPrlScripts)" >> $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/Makefile.in
echo "PACKAGE_LIB_PRL_SCRIPTS = $($(Project)BinDistLibPrlScripts)" >> $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/Makefile.in
echo "PACKAGE_BINS = $($(Project)BinDistBins)" >> $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/Makefile.in
cat $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/Makefile-bin.in >> $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/Makefile.in
@echo "Generating a shippable configure script.."
$(MV) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/configure-bin.in $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/configure.in
( cd $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME); autoconf )
#
# binary dist'ing the documentation.
# Which documentation to build/install is hardcoded below.
#
BINDIST_DOCS = $($(Project)BinDistDocs)
BINDIST_DOCS_WAYS = html info dvi
binary-dist ::
@for way in $(BINDIST_DOCS_WAYS); do \
$(MKDIRHIER) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/$$way/$(ProjectNameShort)-$(ProjectVersion); \
for dir in $(BINDIST_DOCS); do \
echo Making $$way documentation in $$dir && \
$(MAKE) -C $$dir --no-print-directory $(MFLAGS) $$way && \
echo cp -f $$dir/*.$$way $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/$$way/$(ProjectNameShort)-$(ProjectVersion) && \
cp -f $$dir/*.$$way $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/$$way/$(ProjectNameShort)-$(ProjectVersion) && \
echo "Done."; \
done; \
done
# Rename scripts to $i.prl and $i.sh where necessary.
# ToDo: do this in a cleaner way...
ifneq "$($(Project)BinDistPrlScripts)" ""
binary-dist::
@for i in $($(Project)BinDistPrlScripts); do \
echo "Renaming $$i to $$i.prl"; \
$(MV) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/bin/$(TARGETPLATFORM)/$(ProjectNameShort)-$(ProjectVersion)/$$i $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/bin/$(TARGETPLATFORM)/$(ProjectNameShort)-$(ProjectVersion)/$$i.prl; \
done
endif
ifneq "$($(Project)BinDistLibPrlScripts)" ""
binary-dist::
@for i in $($(Project)BinDistLibPrlScripts); do \
echo "Renaming $$i to $$i.prl"; \
$(MV) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/lib/$(TARGETPLATFORM)/$(ProjectNameShort)-$(ProjectVersion)/$$i $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/lib/$(TARGETPLATFORM)/$(ProjectNameShort)-$(ProjectVersion)/$$i.prl; \
done
endif
ifneq "$($(Project)BinDistShScripts)" ""
binary-dist::
@for i in $($(Project)BinDistShScripts); do \
echo "Renaming $$i to $$i.sh"; \
$(MV) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/bin/$(TARGETPLATFORM)/$(ProjectNameShort)-$(ProjectVersion)/$$i $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/bin/$(TARGETPLATFORM)/$(ProjectNameShort)-$(ProjectVersion)/$$i.sh; \
done
endif
dist :: dist-pre
include $(TOP)/mk/target.mk
dist :: dist-post
binary-dist::
@echo "Mechanical and super-natty! Inspect the result and *if* happy; freeze, sell and get some sleep!"
# partain: probably not the right thing yet
all: configure
configure: configure.in
rm -f configure.new
autoconf configure.in > configure.new \
|| ( rm -f configure.new; exit 1 )
rm -f configure
mv configure.new configure
chmod +x configure
chmod -w configure
rm -f configure.new
CONFIG_H_IN = ghc/includes/config.h.in
config.h.in: configure.in
rm -f $(CONFIG_H_IN)
autoheader configure.in > $(CONFIG_H_IN) \
|| ( rm -f $(CONFIG_H_IN); exit 1 )
# do something about autoheader
# do something about ghc-vs-nofib configure scripts
This is the root directory for functional-programming tools
distributed by the Computing Science Department at Glasgow University.
Simon Peyton Jones <simonpj@dcs.gla.ac.uk> is the ringleader of this
effort. The tools are:
ghc the Glasgow Haskell compilation system
hslibs collection of Haskell libraries
haggis the Haggis GUI toolkit
happy the Happy Haskell parser generator
green-card a foreign function interface pre-processor for Haskell.
nofib the NoFib Haskell benchmarking suite
literate the Glasgow "literate programming" system
glafp-utils shared utility programs
mk GNU make setup used by all of fptools
docs documentation on the installing and using
the fptools suite.
The "literate" stuff is usually distributed *with* other systems, but
not necessarily. Components which are always part of a distribution
(never stand-alone) are "glafp-utils" and "mk" (a configuration
system).
There is usually an ANNOUNCE* file with any distribution. Please
consult that, or the <piece>/README file, to find out how to proceed.
The Glasgow Haskell Compiler
============================
[![pipeline status](https://gitlab.haskell.org/ghc/ghc/badges/master/pipeline.svg?style=flat)](https://gitlab.haskell.org/ghc/ghc/commits/master)
This is the source tree for [GHC][1], a compiler and interactive
environment for the Haskell functional programming language.
For more information, visit [GHC's web site][1].
Information for developers of GHC can be found on the [GHC issue tracker][2], and you can also view [proposals for new GHC features][13].
Getting the Source
==================
There are two ways to get a source tree:
1. *Download source tarballs*
Download the GHC source distribution:
ghc-<version>-src.tar.xz
which contains GHC itself and the "boot" libraries.
2. *Check out the source code from git*
$ git clone --recurse-submodules git@gitlab.haskell.org:ghc/ghc.git
Note: cloning GHC from Github requires a special setup. See [Getting a GHC
repository from Github][7].
*See the GHC team's working conventions regarding [how to contribute a patch to GHC](https://gitlab.haskell.org/ghc/ghc/wikis/working-conventions/fixing-bugs).* First time contributors are encouraged to get started by just sending a Merge Request.
Building & Installing
=====================
For full information on building GHC, see the [GHC Building Guide][3].
Here follows a summary - if you get into trouble, the Building Guide
has all the answers.
Before building GHC you may need to install some other tools and
libraries. See, [Setting up your system for building GHC][8].
*NB.* In particular, you need [GHC][1] installed in order to build GHC,
because the compiler is itself written in Haskell. You also need
[Happy][4], [Alex][5], and [Cabal][9]. For instructions on how
to port GHC to a new platform, see the [GHC Building Guide][3].
For building library documentation, you'll need [Haddock][6]. To build
the compiler documentation, you need [Sphinx](http://www.sphinx-doc.org/)
and Xelatex (only for PDF output).
**Quick start**: GHC is built using the [Hadrian build system](hadrian/README.md).
The following gives you a default build:
$ ./boot
$ ./configure
$ hadrian/build # can also say '-jX' for X number of jobs
On Windows, you need an extra repository containing some build tools.
These can be downloaded for you by configure. This only needs to be done once by running:
$ ./configure --enable-tarballs-autodownload
Additionally, on Windows, to run Hadrian you should run `hadrian/build.bat`
instead of `hadrian/build`.
(NB: **Do you have multiple cores? Be sure to tell that to `hadrian`!** This can
save you hours of build time depending on your system configuration, and is
almost always a win regardless of how many cores you have. As a simple rule,
you should have about N+1 jobs, where `N` is the amount of cores you have.)
The `./boot` step is only necessary if this is a tree checked out
from git. For source distributions downloaded from [GHC's web site][1],
this step has already been performed.
These steps give you the default build, which includes everything
optimised and built in various ways (eg. profiling libs are built).
It can take a long time. To customise the build, see the file `HACKING.md`.
Filing bugs and feature requests
================================
If you've encountered what you believe is a bug in GHC, or you'd like
to propose a feature request, please let us know! Submit an [issue][10] and we'll be sure to look into it. Remember:
**Filing a bug is the best way to make sure your issue isn't lost over
time**, so please feel free.
If you're an active user of GHC, you may also be interested in joining
the [glasgow-haskell-users][11] mailing list, where developers and
GHC users discuss various topics and hang out.
Hacking & Developing GHC
========================
Once you've filed a bug, maybe you'd like to fix it yourself? That
would be great, and we'd surely love your company! If you're looking
to hack on GHC, check out the guidelines in the `HACKING.md` file in
this directory - they'll get you up to speed quickly.
Governance and Acknowledgements
===============================
GHC is a community project developed by a team of highly-talented
researchers, individual contributors, and full-time developers. We are indebted to the
[many people](https://gitlab.haskell.org/ghc/ghc-hq/-/blob/main/team.mkd?plain=0#user-content-the-ghc-team)
whose work has brought GHC to its current state.
Some larger decisions are made by a smaller group of core contributors,
as described in our [governance documentation](https://gitlab.haskell.org/ghc/ghc-hq#ghc-governance).
[1]: http://www.haskell.org/ghc/ "www.haskell.org/ghc/"
[2]: https://gitlab.haskell.org/ghc/ghc/issues
"gitlab.haskell.org/ghc/ghc/issues"
[3]: https://gitlab.haskell.org/ghc/ghc/wikis/building
"https://gitlab.haskell.org/ghc/ghc/wikis/building"
[4]: http://www.haskell.org/happy/ "www.haskell.org/happy/"
[5]: http://www.haskell.org/alex/ "www.haskell.org/alex/"
[6]: http://www.haskell.org/haddock/ "www.haskell.org/haddock/"
[7]: https://gitlab.haskell.org/ghc/ghc/wikis/building/getting-the-sources#cloning-from-github
"https://gitlab.haskell.org/ghc/ghc/wikis/building/getting-the-sources#cloning-from-github"
[8]: https://gitlab.haskell.org/ghc/ghc/wikis/building/preparation
"https://gitlab.haskell.org/ghc/ghc/wikis/building/preparation"
[9]: http://www.haskell.org/cabal/ "http://www.haskell.org/cabal/"
[10]: https://gitlab.haskell.org/ghc/ghc/issues
"https://gitlab.haskell.org/ghc/ghc/issues"
[11]: http://www.haskell.org/pipermail/glasgow-haskell-users/
"http://www.haskell.org/pipermail/glasgow-haskell-users/"
[12]: https://gitlab.haskell.org/ghc/ghc/wikis/team-ghc
"https://gitlab.haskell.org/ghc/ghc/wikis/team-ghc"
[13]: https://github.com/ghc-proposals/ghc-proposals
"https://github.com/ghc-proposals/ghc-proposals"
#
# Extra autoconf macros for the Glasgow fptools
#
#
# Has timezone the type time_t or long (HP-UX 10.20 apparently
# has `long'..)
#
AC_DEFUN(AC_TYPE_TIMEZONE,
[AC_CACHE_CHECK([type of timezone], ac_cv_type_timezone,
[AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# if HAVE_SYS_TIME_H
# include <sys/time.h>
# else
# include <time.h>
# endif
#endif
extern time_t timezone;
],
[int i;], ac_cv_type_timezone=time_t, ac_cv_type_timezone=long)])
AC_DEFINE_UNQUOTED(TYPE_TIMEZONE, $ac_cv_type_timezone)
])
#
# Is altzone available?
#
AC_DEFUN(AC_ALTZONE,
[AC_CACHE_CHECK([altzone], ac_cv_altzone,
[AC_TRY_LINK([#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# if HAVE_SYS_TIME_H
# include <sys/time.h>
# else
# include <time.h>
# endif
#endif
], [return altzone;],
ac_cv_altzone=yes, ac_cv_altzone=no)])
if test "$ac_cv_altzone" = yes; then
AC_DEFINE(HAVE_ALTZONE)
fi
])
#
dnl ** check for leading underscores in symbol names
#
# Test for determining whether symbol names have a leading
# underscore.
#
# We assume that they _haven't_ if anything goes wrong.
#
AC_DEFUN(AC_UNDERSCORE,
[AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl
AC_CACHE_CHECK([leading underscore in symbol names], ac_cv_lead_uscore,
#
# Hack!: nlist() under Digital UNIX insist on there being an _,
# but symbol table listings show none. What is going on here?!?
#
if test $HostPlatform = "alpha-dec-osf1"; then
ac_cv_lead_uscore='no'
else
AC_TRY_RUN([#ifdef HAVE_NLIST_H
#include <nlist.h>
changequote(<<, >>)dnl
<<
struct nlist xYzzY[] = {{"_xYzzY", 0},{0}};
#endif
main(argc, argv)
int argc;
char **argv;
{
#ifdef HAVE_NLIST_H
if(nlist(argv[0], xYzzY) == 0 && xYzzY[0].n_value != 0)
exit(0);>>
changequote([, ])dnl
#endif
exit(1);
}], ac_cv_lead_uscore=yes, ac_cv_lead_uscore=no, ac_cv_lead_uscore=NO)
fi);
LeadingUnderscore=`echo $ac_cv_lead_uscore | sed 'y/yesno/YESNO/'`
AC_SUBST(LeadingUnderscore)
])
#
# Check for Happy and version.
#
AC_DEFUN(AC_HAPPY,
[AC_PATH_PROG(HappyCmd,happy)
AC_CACHE_CHECK([for version of happy], ac_cv_happy_version,
[if test x"$HappyCmd" != x; then
ac_cv_happy_version="`$HappyCmd -v |
changequote(, )dnl
grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
changequote([, ])dnl
else
ac_cv_happy_version="";
fi;
if expr "$ac_cv_happy_version" "<" 1.4 > /dev/null 2>&1; then
echo
echo "Happy version 1.4 or later is required to compile GHC."
exit 1;
fi;
])
HappyVersion=$ac_cv_happy_version;
AC_SUBST(HappyVersion)
])
#
# What's the best way of doing context diffs?
#
# (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
#
AC_DEFUN(AC_PROG_DIFF,
[AC_CACHE_CHECK([for ok way to do context diffs], ac_cv_context_diffs,
[echo foo > conftest1
echo foo > conftest2
if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
ac_cv_context_diffs='diff -C 1'
else
if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
ac_cv_context_diffs='diff -c1'
else
echo "Can't figure out how to do context diffs."
echo "Neither \`diff -C 1' nor \`diff -c1' works."
exit 1
fi
fi
rm -f conftest1 conftest2
])
ContextDiffCmd=$ac_cv_context_diffs
AC_SUBST(ContextDiffCmd)
])
#
# Finding the Right Yacc
#
AC_DEFUN(AC_PROG_YACCY,
[AC_PROG_YACC
if test "$YACC" = "yacc"; then
AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
[AC_CHECK_PROG(WhatCmd, what, what, :)
$WhatCmd $YACC > conftest.out
if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
if test -f /usr/lang/yacc; then
echo "I'm going to use /usr/lang/yacc instead"
ac_cv_prog_yacc=/usr/lang/yacc
else
echo "I'm assuming the worst...no parser generator at all"
ac_cv_prog_yacc=:
fi
elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
echo "I'm assuming the worst...no parser generator at all"
ac_cv_prog_yacc=:
else
ac_cv_prog_yacc=$YACC
fi
rm -fr conftest*
])
else
ac_cv_prog_yacc=$YACC
fi
YaccCmd=$ac_cv_prog_yacc
AC_SUBST(YaccCmd)
])
dnl Checking for ar and its arguments + whether we need ranlib.
#
# ArCmd and RANLIB are AC_SUBST'ed
#
AC_DEFUN(AC_PROG_AR_AND_RANLIB,
[AC_PATH_PROG(ArCmd,ar)
if test -z "$ArCmd"; then
echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
exit 1;
fi
if $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
ArCmd="$ArCmd clqs"
NeedRanLib=''
elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
ArCmd="$ArCmd cqs"
NeedRanLib=''
elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
ArCmd="$ArCmd clq"
NeedRanLib='YES'
elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
ArCmd="$ArCmd cq"
NeedRanLib='YES'
elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
ArCmd="$ArCmd cq"
NeedRanLib='YES'
else
echo "I can't figure out how to use your $ArCmd"
exit 1
fi
rm -rf conftest*
test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
AC_SUBST(ArCmd)
if test -z "$NeedRanLib"; then
RANLIB=':'
test -n "$verbose" && echo " setting RANLIB to $RANLIB"
AC_SUBST(RANLIB)
else
AC_PROG_RANLIB
fi
])
#
dnl AC_SHEBANG_PERL - can we she-bang perl?
#
AC_DEFUN(AC_SHEBANG_PERL,
[AC_CACHE_CHECK([if your perl works in shell scripts], ac_cv_shebang_perl,
[echo "#!$PerlCmd"'
exit $1;
' > conftest
chmod u+x conftest
(SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
if test $? -ne 69; then
ac_cv_shebang_perl=yes
else
ac_cv_shebang_perl=no
fi
rm -f conftest
])])
#
# Extra testing of the result AC_PROG_CC, testing the gcc version no.
# *Must* be called after AC_PROG_CC
#
AC_DEFUN(AC_HAVE_GCC,
[AC_CACHE_CHECK([whether you have an ok gcc], ac_cv_have_gcc,
[if test -z "$GCC"; then
echo ''
echo "You would be better off with gcc"
echo "Perhaps it is already installed, but not in your PATH?"
ac_cv_have_gcc='no'
else
changequote(, )dnl
cmd_string="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/expr 20 \\\< \1 \\\* 10 + \2/g' `"
changequote([, ])dnl
if test `eval $cmd_string 2>/dev/null` != "1"; then
echo ''
echo "I'm not sure if your version of gcc will work,"
echo "but it's worth a shot, eh?"
fi
ac_cv_have_gcc='yes'
fi
])
HaveGcc=`echo $ac_cv_have_gcc | sed 'y/yesno/YESNO/'`
AC_SUBST(HaveGcc)
])
#
# AC_PROG_GNUCPP gathers the path to the cpp that the
# gcc driver calls upon.
#
# Substitutes: GNUCPP and RAWCPP (latter is 'GNUCPP -traditional')
#
AC_DEFUN(AC_PROG_GNUCPP,
[AC_CACHE_CHECK([how to invoke GNU cpp directly], ac_cv_gnu_cpp,
[if test "$HaveGcc" = "YES"; then
echo > conftest.c
gcc -v -E conftest.c >/dev/null 2>conftest.out
echo '/(\S+(\/|\\\\)cpp)/ && print "[$]1";' > conftest.pl
ac_cv_gnu_cpp="`eval $PerlCmd -n conftest.pl conftest.out`"
rm -fr conftest*
else
# We need to be able to invoke CPP directly, preferably
# with input from stdin (mkdependHS and hscpp depend on
# this at the moment).
# Take a guess at what to use, this probably won't work.
echo Warning: GNU cpp not found, using $CPP
ac_cv_gnu_cpp = $CPP
fi
])
GNUCPP=$ac_cv_gnu_cpp
RAWCPP="$GNUCPP -traditional"
AC_SUBST(GNUCPP)
AC_SUBST(RAWCPP)
])
#
# Small feature test for perl version. Assumes PerlCmd
# contains path to perl binary
#
AC_DEFUN(AC_CHECK_PERL_VERSION,
[$PerlCmd -v >conftest.out 2>&1
if grep "version 4" conftest.out >/dev/null 2>&1; then
if grep "Patch level: 35" conftest.out >/dev/null 2>&1; then
echo "
************************************************************************
Uh-oh...looks like you have Perl 4.035.
Perl version 4.035 has a bug to do with recursion that will bite if
you run the lit2texi script, when making Info files from
literate files of various sorts. Either use perl5, the last version of perl4
(4.036), or an older version (e.g., perl 4.019). Failing that, don't create
any Info files :-)
************************************************************************
"
fi
else
if grep "version 5" conftest.out >/dev/null 2>&1; then
:
else
echo "I'm not sure if your version of perl will work,"
echo "but it's worth a shot, eh?"
fi
fi
rm -fr conftest*
])