adding cdtEnv symlinking deps into one $out/cdt-env/{lib,include} directory
and collection which let's you install and update a set of derivations at once svn path=/nixpkgs/trunk/; revision=16224
This commit is contained in:
parent
df4a8eafde
commit
5ef46894e0
107
pkgs/misc/misc.nix
Normal file
107
pkgs/misc/misc.nix
Normal file
@ -0,0 +1,107 @@
|
||||
{ pkgs, stdenv } :
|
||||
|
||||
let inherit (pkgs) stdenv runCommand perl;
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
|
||||
/*
|
||||
|
||||
usage example creating a derivation installing ruby, sup and a lib:
|
||||
|
||||
packageOverrides = {
|
||||
rubyCollection = collection {
|
||||
name = "ruby";
|
||||
list = let l = rubyLibs; in
|
||||
[ pkgs.ruby l.chronic l.sup ];
|
||||
};
|
||||
}
|
||||
|
||||
*/
|
||||
collection = {list, name} : runCommand "collection-${name}" {} ''
|
||||
mkdir -p $out/nix-support
|
||||
echo ${builtins.toString list} > $out/nix-support/propagated-user-env-packages
|
||||
'';
|
||||
|
||||
/* creates a derivation symlinking references C/C++ libs into one include and lib directory called $out/cdt-envs/${name}
|
||||
then you can
|
||||
ln -s ~/.nix-profile/cdt-envs/name ./nix-deps
|
||||
and add .nix-deps/{libs,includes} to IDE's such as Eclipse/ Netbeans etc.
|
||||
To update replace library versions just replace the symlink
|
||||
*/
|
||||
cdtEnv = { name, buildInputs }:
|
||||
stdenv.mkDerivation {
|
||||
name = "cdt-env-${name}";
|
||||
inherit buildInputs;
|
||||
phases = "installPhase";
|
||||
installPhase = ''
|
||||
set -x
|
||||
# requires bash4
|
||||
PATH=$PATH:${pkgs.pkgconfig}/bin
|
||||
|
||||
perlScript=$(dirname $(dirname ${builtins.getEnv "NIXPKGS_ALL"}))/build-support/buildenv/builder.pl
|
||||
# now collect includes and lib paths
|
||||
|
||||
# probably the nix hooks work best, so reuse them by reading NIX_CFLAGS_COMPILE and NIX_LDFLAGS
|
||||
|
||||
PKG_CONFIG_KNOWN_PACKAGES=$(pkg-config --list-all | sed 's/ .*//')
|
||||
|
||||
declare -A INCLUDE_PATHS
|
||||
declare -A LIB_PATHS
|
||||
declare -A LIBS
|
||||
declare -A CFLAGS_OTHER
|
||||
|
||||
PKG_CONFIG_LIBS="$(pkg-config --libs $PKG_CONFIG_KNOWN_PACKAGES)"
|
||||
PKG_CONFIG_CFLAGS="$(pkg-config --cflags $PKG_CONFIG_KNOWN_PACKAGES)"
|
||||
|
||||
for i in $NIX_CFLAGS_COMPILE $PKG_CONFIG_CFLAGS; do
|
||||
echo i is $i
|
||||
case $i in
|
||||
-I*) INCLUDE_PATHS["''${i/-I/}"]= ;;
|
||||
*) CFLAGS_OTHER["''${i}"]= ;;
|
||||
esac
|
||||
echo list is now ''${!INCLUDE_PATHS[@]}
|
||||
done
|
||||
|
||||
for i in $NIX_LDFLAGS $PKG_CONFIG_LIBS; do
|
||||
case $i in
|
||||
-L*)
|
||||
LIB_PATHS["''${i/-L/}"]= ;;
|
||||
esac
|
||||
done
|
||||
|
||||
for i in $NIX_LDFLAGS $PKG_CONFIG_LIBS; do
|
||||
echo chekcing $i
|
||||
case $i in
|
||||
-l*) LIBS["''${i}"]= ;;
|
||||
esac;
|
||||
done
|
||||
|
||||
# build output env
|
||||
|
||||
target="$out/cdt-envs/${name}"
|
||||
|
||||
link(){
|
||||
echo "link !!!!"
|
||||
echo $1
|
||||
echo $2
|
||||
(
|
||||
export out="$1"
|
||||
export paths="$2"
|
||||
|
||||
export ignoreCollisions=1
|
||||
export manifest=
|
||||
export pathsToLink=/
|
||||
${perl}/bin/perl $perlScript
|
||||
)
|
||||
}
|
||||
|
||||
ensureDir $target/{include,lib}
|
||||
link $target/lib "$(echo "''${!LIB_PATHS[@]}")"
|
||||
link $target/include "$(echo "''${!INCLUDE_PATHS[@]}")"
|
||||
echo "''${!LIBS[@]}" > $target/libs
|
||||
echo "''${!CFLAGS_OTHER[@]}" > $target/cflags-other
|
||||
'';
|
||||
};
|
||||
}
|
@ -8009,5 +8009,6 @@ let
|
||||
inherit (stdenv) mkDerivation;
|
||||
};
|
||||
|
||||
misc = import ../misc/misc.nix { inherit pkgs stdenv; };
|
||||
|
||||
}; in pkgs
|
||||
|
Loading…
Reference in New Issue
Block a user