put all source with tags stuff into its own file, now appends tag files to TAG_FILES env var using nix-support
updated myEnvFun svn path=/nixpkgs/trunk/; revision=12097
This commit is contained in:
parent
74cb80f8fa
commit
51651a4ec0
@ -14,22 +14,31 @@
|
|||||||
PS1='\033]2;\h:\u:\w\007\\nenv ${name} \[\033[1;32m\][\u@\h: \w ]$\[\033[0m\] '
|
PS1='\033]2;\h:\u:\w\007\\nenv ${name} \[\033[1;32m\][\u@\h: \w ]$\[\033[0m\] '
|
||||||
";
|
";
|
||||||
};
|
};
|
||||||
|
Put this into your .bashrc
|
||||||
|
loadEnv(){
|
||||||
|
. "${HOME}/.nix-profile/dev-envs/${1}"
|
||||||
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
args: stdenv.mkDerivation (
|
args: args.stdenv.mkDerivation (
|
||||||
{ userCmds =""; } // {
|
{ extraCmds =""; } // {
|
||||||
phases = "buildPhase";
|
phases = "buildPhase";
|
||||||
buildPhase = "
|
buildPhase = ''
|
||||||
ensureDir \$out/bin
|
|
||||||
name=${args.name}
|
name=${args.name}
|
||||||
o=\$out/bin/$name
|
o=$out/dev-envs/$name
|
||||||
echo -e \"#!/bin/sh --login\\n\" >> \$o
|
ensureDir `dirname $o`
|
||||||
export | grep -v HOME= | grep -v PATH= >> \$o
|
echo "
|
||||||
echo \"export PATH=\$PATH:\\\$PATH entering $name\" >> \$o
|
OLDPATH=\$PATH " >> $o
|
||||||
echo \"echo entering $name\" >> \$o
|
export | grep -v HOME= | grep -v PATH= | grep -v PWD= | grep -v TEMP= | grep -v TMP= >> $o
|
||||||
echo \"$userCmds\" >> \$o
|
echo "
|
||||||
echo \"/bin/sh\" >> $o
|
PATH=$PATH:$OLDPATH
|
||||||
echo \"echo leaving $name\" >> \$o
|
for i in \$buildInputs; do
|
||||||
|
export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\$i/lib
|
||||||
|
done
|
||||||
|
export PATH=\$PATH:\$OLDPATH
|
||||||
|
$extraCmds
|
||||||
|
echo env $name loaded
|
||||||
|
" >> $o
|
||||||
chmod +x $o
|
chmod +x $o
|
||||||
";
|
'';
|
||||||
} //args);
|
} // args // { name = "${args.name}-env"; } )
|
||||||
|
80
pkgs/misc/source-and-tags/default.nix
Normal file
80
pkgs/misc/source-and-tags/default.nix
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
args: with args; {
|
||||||
|
# optional srcDir
|
||||||
|
annotatedWithSourceAndTagInfo = x : (x ? passthru && x.passthru ? sourceWithTags
|
||||||
|
|| x ? meta && x.meta ? sourceWithTags );
|
||||||
|
# hack because passthru doesn't work the way I'd expect. Don't have time to spend on this right now
|
||||||
|
# that's why I'm abusing meta for the same purpose in ghcsAndLibs
|
||||||
|
sourceWithTagsFromDerivation = x : if (x ? passthru && x.passthru ? sourceWithTags ) then x.passthru.sourceWithTags
|
||||||
|
else if (x ? meta && x.meta ? sourceWithTags ) then x.meta.sourceWithTags
|
||||||
|
else null;
|
||||||
|
|
||||||
|
# createTagFiles = [ { name = "my_tag_name_without_suffix", tagCmd = "ctags -R . -o \$TAG_FILE"; } ]
|
||||||
|
# tag command must create file named $TAG_FILE
|
||||||
|
sourceWithTagsDerivation = {name, src, srcDir ? ".", tagSuffix ? "_tags", createTagFiles ? []} :
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
phases = "unpackPhase buildPhase";
|
||||||
|
inherit src srcDir tagSuffix;
|
||||||
|
name = "${name}-source-with-tags";
|
||||||
|
buildInputs = [ unzip ];
|
||||||
|
# using separate tag directory so that you don't have to glob that much files when starting your editor
|
||||||
|
# is this a good choice?
|
||||||
|
buildPhase =
|
||||||
|
lib.defineShList "sh_list_names" (lib.catAttrs "name" createTagFiles)
|
||||||
|
+ lib.defineShList "sh_list_cmds" (lib.catAttrs "tagCmd" createTagFiles)
|
||||||
|
+ "SRC_DEST=\$out/src/\$name
|
||||||
|
ensureDir \$SRC_DEST
|
||||||
|
cp -r \$srcDir \$SRC_DEST
|
||||||
|
cd \$SRC_DEST
|
||||||
|
for a in `seq 0 \${#sh_list}`; do
|
||||||
|
TAG_FILE=\"\$SRC_DEST/\"\${sh_list_names[$a]}$tagSuffix
|
||||||
|
cmd=\"\${sh_list_cmds[$a]}\"
|
||||||
|
echo running tag cmd \"$cmd\" in `pwd`
|
||||||
|
eval \"\$cmd\";
|
||||||
|
TAG_FILES=\"\$TAG_FILES\${TAG_FILES:+:}\$TAG_FILE\"
|
||||||
|
done
|
||||||
|
echo \"TAG_FILES=\\\"\\\$TAG_FILES\\\${TAG_FILES:+:}$TAG_FILES\\\"\" >> $out/nix-support
|
||||||
|
";
|
||||||
|
};
|
||||||
|
# example usage
|
||||||
|
#testSourceWithTags = sourceWithTagsDerivation (ghc68extraLibs ghcsAndLibs.ghc68).happs_server_darcs.passthru.sourceWithTags;
|
||||||
|
|
||||||
|
|
||||||
|
# creates annotated derivation (comments see above)
|
||||||
|
addHasktagsTaggingInfo = deriv : deriv // {
|
||||||
|
passthru = {
|
||||||
|
sourceWithTags = {
|
||||||
|
inherit (deriv) src;
|
||||||
|
srcDir = if deriv ? srcDir then deriv.srcDir else ".";
|
||||||
|
name = deriv.name + "-src-with-tags";
|
||||||
|
createTagFiles = [
|
||||||
|
{ name = "${deriv.name}_haskell";
|
||||||
|
# tagCmd = "${toString ghcsAndLibs.ghc68.ghc}/bin/hasktags --ignore-close-implementation --ctags `find . -type f -name \"*.*hs\"`; sort tags > \$TAG_FILE"; }
|
||||||
|
tagCmd = "${toString hasktags}/bin/hasktags-modified --ignore-close-implementation --ctags `find . -type f -name \"*.*hs\"`; sort tags > \$TAG_FILE"; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
addCTaggingInfo = deriv :
|
||||||
|
deriv // {
|
||||||
|
passthru = {
|
||||||
|
sourceWithTags = {
|
||||||
|
inherit (deriv) src;
|
||||||
|
name = "${deriv.name}-source-ctags";
|
||||||
|
createTagFiles = [
|
||||||
|
{ inherit (deriv) name;
|
||||||
|
tagCmd = "${toString ctags}/bin/ctags --sort=yes -o \$TAG_FILE -R ."; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}; };
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
experimental
|
||||||
|
idea:
|
||||||
|
a) Attach some information to a nexpression telling how to create a tag file which can then be used within your favourite editor
|
||||||
|
Do this in a way not affecting the expression (using passthru or meta which is ignored when calculating the hash)
|
||||||
|
implementations: addCTaggingInfo (C / C++) and addHasktagsTaggingInfo (Haskell)
|
||||||
|
b) use sourceWithTagsDerivation function to create a derivation installing the source along with the generated tag files
|
||||||
|
so that you can use them easily witihn your favourite text editor
|
||||||
|
*/
|
@ -125,56 +125,6 @@ let pkgs = rec {
|
|||||||
|
|
||||||
lib = import ../lib;
|
lib = import ../lib;
|
||||||
|
|
||||||
# optional srcDir
|
|
||||||
annotatedWithSourceAndTagInfo = x : (x ? passthru && x.passthru ? sourceWithTags
|
|
||||||
|| x ? meta && x.meta ? sourceWithTags );
|
|
||||||
# hack because passthru doesn't work the way I'd expect. Don't have time to spend on this right now
|
|
||||||
# passthru2 is not special and will be there in any case (but will force recompilation :(
|
|
||||||
sourceWithTagsFromDerivation = x : if (x ? passthru && x.passthru ? sourceWithTags ) then x.passthru.sourceWithTags
|
|
||||||
else if (x ? meta && x.meta ? sourceWithTags ) then x.meta.sourceWithTags
|
|
||||||
else null;
|
|
||||||
|
|
||||||
# createTagFiles = [ { name = "my_tag_name_without_suffix", tagCmd = "ctags -R . -o \$TAG_FILE"; } ]
|
|
||||||
# tag command must create file named $TAG_FILE
|
|
||||||
sourceWithTagsDerivation = {name, src, srcDir ? ".", tagSuffix ? "_tags", createTagFiles ? []} :
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
phases = "unpackPhase buildPhase";
|
|
||||||
inherit src srcDir tagSuffix;
|
|
||||||
name = "${name}-source-with-tags";
|
|
||||||
buildInputs = [ unzip ];
|
|
||||||
# using separate tag directory so that you don't have to glob that much files when starting your editor
|
|
||||||
# is this a good choice?
|
|
||||||
buildPhase = "
|
|
||||||
SRC_DEST=\$out/src/\$name
|
|
||||||
ensureDir \$SRC_DEST
|
|
||||||
cp -r \$srcDir \$SRC_DEST"
|
|
||||||
+ lib.defineShList "sh_list_names" (lib.catAttrs "name" createTagFiles)
|
|
||||||
+ lib.defineShList "sh_list_cmds" (lib.catAttrs "tagCmd" createTagFiles)
|
|
||||||
+ "cd \$SRC_DEST
|
|
||||||
for a in `seq 0 \${#sh_list}`; do
|
|
||||||
TAG_FILE=\"\$SRC_DEST/\"\${sh_list_names[\$a]}\$tagSuffix
|
|
||||||
cmd=\"\${sh_list_cmds[\$a]}\"
|
|
||||||
echo running tag cmd \"\$cmd\" in `pwd`
|
|
||||||
eval \"\$cmd\";
|
|
||||||
done
|
|
||||||
";
|
|
||||||
};
|
|
||||||
# example usage
|
|
||||||
#testSourceWithTags = sourceWithTagsDerivation (ghc68extraLibs ghcsAndLibs.ghc68).happs_server_darcs.passthru.sourceWithTags;
|
|
||||||
|
|
||||||
addCTaggingInfo = deriv :
|
|
||||||
deriv // {
|
|
||||||
passthru = {
|
|
||||||
sourceWithTags = {
|
|
||||||
inherit (deriv) src;
|
|
||||||
name = "${deriv.name}-source-ctags";
|
|
||||||
createTagFiles = [
|
|
||||||
{ inherit (deriv) name;
|
|
||||||
tagCmd = "${toString ctags}/bin/ctags --sort=yes -o \$TAG_FILE -R ."; }
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}; };
|
|
||||||
|
|
||||||
# Return an attribute from the Nixpkgs configuration file, or
|
# Return an attribute from the Nixpkgs configuration file, or
|
||||||
# a default value if the attribute doesn't exist.
|
# a default value if the attribute doesn't exist.
|
||||||
getConfig = attrPath: default: lib.getAttr attrPath default config;
|
getConfig = attrPath: default: lib.getAttr attrPath default config;
|
||||||
@ -1388,9 +1338,9 @@ let pkgs = rec {
|
|||||||
ghcWrapper = { ghcPackagedLibs ? false, ghc, libraries, name, suffix ? "ghc_wrapper_${ghc.name}" } :
|
ghcWrapper = { ghcPackagedLibs ? false, ghc, libraries, name, suffix ? "ghc_wrapper_${ghc.name}" } :
|
||||||
import ../development/compilers/ghc/ghc-wrapper {
|
import ../development/compilers/ghc/ghc-wrapper {
|
||||||
inherit ghcPackagedLibs ghc name suffix libraries ghcPkgUtil
|
inherit ghcPackagedLibs ghc name suffix libraries ghcPkgUtil
|
||||||
lib sourceWithTagsDerivation annotatedWithSourceAndTagInfo
|
lib
|
||||||
readline ncurses stdenv;
|
readline ncurses stdenv;
|
||||||
inherit sourceWithTagsFromDerivation;
|
inherit (sourceAndTags) sourceWithTagsDerivation annotatedWithSourceAndTagInfo sourceWithTagsFromDerivation;
|
||||||
#inherit stdenv ghcPackagedLibs ghc name suffix libraries ghcPkgUtil
|
#inherit stdenv ghcPackagedLibs ghc name suffix libraries ghcPkgUtil
|
||||||
# annotatedDerivations lib sourceWithTagsDerivation annotatedWithSourceAndTagInfo;
|
# annotatedDerivations lib sourceWithTagsDerivation annotatedWithSourceAndTagInfo;
|
||||||
installSourceAndTags = getConfig ["haskell" "ghcWrapper" "installSourceAndTags"] false;
|
installSourceAndTags = getConfig ["haskell" "ghcWrapper" "installSourceAndTags"] false;
|
||||||
@ -1452,26 +1402,11 @@ let pkgs = rec {
|
|||||||
inherit perl;
|
inherit perl;
|
||||||
};
|
};
|
||||||
|
|
||||||
# creates annotated derivation (comments see above)
|
|
||||||
addHasktagsTaggingInfo = deriv : deriv // {
|
|
||||||
passthru = {
|
|
||||||
sourceWithTags = {
|
|
||||||
inherit (deriv) src;
|
|
||||||
srcDir = if deriv ? srcDir then deriv.srcDir else ".";
|
|
||||||
name = deriv.name + "-src-with-tags";
|
|
||||||
createTagFiles = [
|
|
||||||
{ name = "${deriv.name}_haskell";
|
|
||||||
# tagCmd = "${toString ghcsAndLibs.ghc68.ghc}/bin/hasktags --ignore-close-implementation --ctags `find . -type f -name \"*.*hs\"`; sort tags > \$TAG_FILE"; }
|
|
||||||
tagCmd = "${toString hasktags}/bin/hasktags-modified --ignore-close-implementation --ctags `find . -type f -name \"*.*hs\"`; sort tags > \$TAG_FILE"; }
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# this may change in the future
|
# this may change in the future
|
||||||
ghc68extraLibs = (import ../misc/ghc68extraLibs ) {
|
ghc68extraLibs = (import ../misc/ghc68extraLibs ) {
|
||||||
# lib like stuff
|
# lib like stuff
|
||||||
inherit bleedingEdgeRepos fetchurl lib addHasktagsTaggingInfo ghcCabalDerivation pkgconfig unzip zlib;
|
inherit (sourceAndTags) addHasktagsTaggingInfo;
|
||||||
|
inherit bleedingEdgeRepos fetchurl lib ghcCabalDerivation pkgconfig unzip zlib;
|
||||||
# used (non haskell) libraries (ffi etc)
|
# used (non haskell) libraries (ffi etc)
|
||||||
inherit postgresql mysql sqlite gtkLibs gnome xlibs freetype getConfig libpng bzip2 pcre;
|
inherit postgresql mysql sqlite gtkLibs gnome xlibs freetype getConfig libpng bzip2 pcre;
|
||||||
|
|
||||||
@ -7096,6 +7031,10 @@ let pkgs = rec {
|
|||||||
inherit (xlibs) libX11;
|
inherit (xlibs) libX11;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
sourceAndTags = import ../misc/source-and-tags {
|
||||||
|
inherit pkgs stdenv unzip lib ctags hasktags;
|
||||||
|
};
|
||||||
|
|
||||||
synaptics = import ../misc/synaptics {
|
synaptics = import ../misc/synaptics {
|
||||||
inherit fetchurl stdenv pkgconfig;
|
inherit fetchurl stdenv pkgconfig;
|
||||||
inherit (xlibs) libX11 libXi libXext pixman xf86inputevdev;
|
inherit (xlibs) libX11 libXi libXext pixman xf86inputevdev;
|
||||||
@ -7216,6 +7155,8 @@ let pkgs = rec {
|
|||||||
inherit (xlibs) libX11;
|
inherit (xlibs) libX11;
|
||||||
};
|
};
|
||||||
|
|
||||||
#my_env = import ../misc/my_env;
|
myEnvFun = import ../misc/my_env;
|
||||||
|
|
||||||
|
devEnvs = recurseIntoAttrs ( ( getConfig ["devEnvs"] (x : {}) ) pkgs );
|
||||||
|
|
||||||
}; in pkgs
|
}; in pkgs
|
||||||
|
Loading…
x
Reference in New Issue
Block a user