3
0
Fork 0
forked from mirrors/nixpkgs
nixpkgs/pkgs/build-support
sternenseemann c3c4ef859a gprbuild, xmlada: init at 21.0.0
GPRbuild is a multi language build system developed by AdaCore which
is mostly used for build Ada-related projects using GNAT.

Since GPRbuild is used to build itself and its dependency library
XML/Ada we first build a bootstrap version of it using the provided
bash build script bootstrap.sh as the gprbuild-boot derivation.
gprbuild-boot is then used to build xmlada and the proper gprbuild
derivation.

GPRbuild has its own search path mechanism via GPR_PROJECT_PATH which
we address via a setupHook. It currently works quite similar to the
pkg-config one: It accumulates all inputs into GPR_PROJECT_PATH,
GPR_PROJECT_PATH_FOR_BUILD etc. However this is quite limited at the
moment as we don't have a gprbuild wrapper yet which understands the
_FOR_BUILD suffix. However, we'll need to address this in the future
as it is currently basically impossible to test since the distinction
only affects cross-compilation, but it is not possible to build a GNAT
cross-compiler in nixpkgs at the moment (I'm working on changing that,
however).

Another issue we had to solve was GPRbuild not finding the right GNAT
via its gprconfig tool: GPRbuild has a knowledge base with compiler
definitions which run some checks and collect info about binaries
which are in PATH. In the end the first compiler in PATH that supports
the desired language is selected.

We want GPRbuild to discover our wrapped GNAT since the unwrapped one
is incapable of producing working binaries since it won't find the
crt*.o objects distributed with libc. GPRbuild however needs to find
the Ada runtime distributed with GNAT which is not part of the wrapper
derivation, so it will skip the wrapper and select the unwrapped GNAT.
Symlinking the unwrapped's lib directory into the wrapper fixes this
problem, but breaks linking in some cases (e. g. when linking against
OMP from gcc, the runtime variant will shadow the problem dynamic lib
from buildInputs). Additionally it uses gnatls as an indicator it has
found GNAT which is not part of the wrapper.

The solution we opted to adopt here is to install a custom compiler
description into gprbuild's knowledge base which properly detects the
nixpkgs GNAT wrapper: It uses gnatmake to detect GNAT instead of
gnatls and discovers the runtime via a symlink we add to
`$out/nix-support`. This additional definition is enough to properly
detect GNAT, since the plain wrapped gcc detection works out of the
box. It may, however, be necessary to add special definitions for
other languages in the future where gprbuild also needs to discover
the runtime.

One future improvement would be to install libgpr into a separate
output or split it into a separate derivation (which would require to
link gprbuild statically always since otherwise we end up with a
cyclical dependency).
2021-08-03 14:58:49 +02:00
..
add-opengl-runpath
agda agdaPackages: Don't build broken packages on hydra 2021-07-22 17:29:09 +02:00
alternatives
appimage appimageTools.wrapAppImage: Fix passing arguments to wrapped executable 2021-07-01 17:16:10 -07:00
bintools-wrapper Merge master into staging-next 2021-07-25 06:01:27 +00:00
build-bazel-package buildBazelPackage: set fetchConfigured default to true 2021-06-07 02:04:01 +00:00
build-dotnet-package
build-fhs-userenv build-fhs-userenv: fix defaults on aarch64 2021-07-30 11:23:37 +02:00
build-fhs-userenv-bubblewrap build-fhs-user-env-bubblewrap: add compatibility for pipewire alsa emulation 2021-07-10 12:50:52 +02:00
build-setupcfg
buildenv trivial-builders: merge passAsFile with env in runCommand' 2021-03-18 19:56:40 +01:00
cc-wrapper gprbuild, xmlada: init at 21.0.0 2021-08-03 14:58:49 +02:00
coq mkCoqDerivation: fix useDune2 2021-06-10 21:52:03 +02:00
docker dockerTools.tarsum: use current go 2021-07-08 16:31:33 +10:00
dotnetbuildhelpers
dotnetenv
emacs Merge pull request #128786 from pjones/pjones-fix-elpa-src 2021-07-21 09:58:26 -05:00
expand-response-params
fetchbitbucket
fetchbower
fetchbzr
fetchcvs
fetchdarcs
fetchdocker fix: fetchdocker call signature 2021-05-08 23:57:32 +02:00
fetchfirefoxaddon
fetchfossil
fetchgit nix-prefetch-git: don't fetch everything when given a hash 2021-07-12 20:50:52 +02:00
fetchgitea fetchFromGitea: init 2021-05-27 09:35:56 +02:00
fetchgithub
fetchgitiles
fetchgitlab fetchgitlab: add deepClone, fetchSubmodules, leaveDotGit arguments 2021-07-22 13:09:14 +02:00
fetchgitlocal
fetchgx
fetchhg
fetchipfs
fetchmavenartifact
fetchmtn
fetchnuget treewide: unzip buildInputs to nativeBuildInputs (#112302) 2021-02-20 16:01:53 -05:00
fetchpatch
fetchrepoorcz
fetchrepoproject
fetchs3 treewide: remove stdenv where not needed 2021-03-04 19:54:50 +07:00
fetchsavannah
fetchsourcehut fetchFromSourcehut: init 2021-03-08 15:51:24 +01:00
fetchsvn
fetchsvnrevision
fetchsvnssh
fetchurl fetchurl: replace dead sourceforge mirrors (#130834) 2021-07-20 22:32:28 +02:00
fetchzip fetchzip: accept urls 2021-04-07 02:41:25 +02:00
go garble: fix aarch64 build 2021-02-20 21:13:46 +10:00
icon-conv-tools application/development: /s/name/pname&version/ 2021-06-30 09:55:22 +02:00
install-shell-files
kernel
libredirect application/development: /s/name/pname&version/ 2021-06-30 09:55:22 +02:00
make-desktopitem build-support/make-desktopitem: add some missing fields 2021-06-04 17:48:46 +02:00
make-startupitem
make-symlinks
mkshell mkShell: introduce packages argument (#122180) 2021-05-13 19:17:29 +02:00
mono-dll-fixer
nix-gitignore nix-gitignore: fix evaluation when .gitignore contains \# or \! (#130643) 2021-07-22 12:18:10 -04:00
nuke-references nukeReferences: fix code signatures on aarch64-darwin 2021-05-17 00:27:03 +09:00
ocaml build-support.ocaml.dune: handle minimalOCamlVersion typo 2021-06-11 11:08:12 +02:00
oci-tools
pkg-config-wrapper pkg-config-wrapper: mangle PKG_CONFIG_PATH{,_FOR_BUILD} correctly 2021-05-18 00:13:27 +02:00
prefer-remote-fetch
references-by-popularity
release releaseTools: fix nixBuild function 2021-03-29 21:24:00 +02:00
remove-references-to removeReferencesTo: fix code signatures on aarch64-darwin 2021-05-17 00:27:03 +09:00
replace-secret replace-secret: Init 2021-05-19 09:32:00 +02:00
rust rustPlatform.importCargoLock: add an assert for old Cargo.locks 2021-07-18 18:19:50 +03:00
setup-hooks stdenv: add link to clarify 2021-07-19 14:50:01 +09:00
singularity-tools
skaware skawarePackages.buildPackage: add me as maintainer 2021-06-16 07:59:51 +00:00
snap
src-only
substitute
substitute-files
templaterpm treewide: makeWrapper buildInputs to nativeBuildInputs 2021-02-19 20:09:16 +07:00
trivial-builders trivial-builders: refactor writeTextFile to be overridable 2021-06-18 01:39:59 +02:00
upstream-updater
vm vmTools: update current maintained debian versions 2021-05-27 07:33:11 +02:00
wrapper-common Merge pull request #123989 from Mic92/static-pie 2021-05-25 06:32:25 +01:00
writers tests.writers: also expose path via passthru 2021-07-13 15:22:34 +02:00
build-maven.nix
build-pecl.nix php: Run nixpkgs-fmt on all php related files 2021-06-26 20:07:56 +02:00
closure-info.nix
dhall-to-nix.nix
plugins.nix
replace-dependency.nix
setup-systemd-units.nix setupSystemdUnits: use /nix/var/nix/profiles/default/lib/systemd/system as fallback 2021-02-12 12:53:20 +01:00
source-from-head-fun.nix
trivial-builders.nix trivial-builders: refactor writeTextFile to be overridable 2021-06-18 01:39:59 +02:00