Something went wrong. Try again.
What happens if I push all of nixpkgs
Something went wrong. Try again.
4.9 kB · 132 lines
Shell
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133# Unlinks a directory (given as the first argument), and re-creates that# directory as an actual directory. Then descends into the directory of# the same name in the origin (arg_2/arg_3) and symlinks the contents of# that directory into the passed end-location.unlinkDirReSymlinkContents() { local dirToUnlink="$1" local origin="$2" local contentsLocation="$3"
unlink $dirToUnlink/$contentsLocation mkdir -p $dirToUnlink/$contentsLocation for f in $origin/$contentsLocation/*; do ln -s -t "$dirToUnlink/$contentsLocation" "$f" done}
# Using unlinkDirReSymlinkContents, un-symlinks directories down to# $out/share/octave, and then creates the octave_packages directory.createOctavePackagesPath() { local desiredOut=$1 local origin=$2
if [ -L "$out/share" ]; then unlinkDirReSymlinkContents "$desiredOut" "$origin" "share" fi
if [ -L "$out/share/octave" ]; then unlinkDirReSymlinkContents "$desiredOut" "$origin" "share/octave" fi
# Now that octave_packages has a path rather than symlinks, create the # octave_packages directory for installed packages. mkdir -p "$desiredOut/share/octave/octave_packages"}
# First, descends down to $out/share/octave/site/m/startup/octaverc, and# copies that start-up file. Once done, it performs a `chmod` to allow# writing. Lastly, it `echo`s the location of the locally installed packages# to the startup file, allowing octave to discover installed packages.addPkgLocalList() { local desiredOut=$1 local origin=$2 local octaveSite="share/octave/site" local octaveSiteM="$octaveSite/m" local octaveSiteStartup="$octaveSiteM/startup" local siteOctavercStartup="$octaveSiteStartup/octaverc"
unlinkDirReSymlinkContents "$desiredOut" "$origin" "$octaveSite" unlinkDirReSymlinkContents "$desiredOut" "$origin" "$octaveSiteM" unlinkDirReSymlinkContents "$desiredOut" "$origin" "$octaveSiteStartup"
unlink "$out/$siteOctavercStartup" cp "$origin/$siteOctavercStartup" "$desiredOut/$siteOctavercStartup" chmod u+w "$desiredOut/$siteOctavercStartup" echo "pkg local_list $out/.octave_packages" >> "$desiredOut/$siteOctavercStartup"}
# Wrapper function for wrapOctaveProgramsIn. Takes one argument, a# space-delimited string of packages' paths that will be installed.wrapOctavePrograms() { wrapOctaveProgramsIn "$out/bin" "$out" "$@"}
# Wraps all octave programs in $out/bin with all the propagated inputs that# a particular package requires. $1 is the directory to look for binaries in# to wrap. $2 is the path to the octave ENVIRONMENT. $3 is the space-delimited# string of packages.wrapOctaveProgramsIn() { local dir="$1" local octavePath="$2" local pkgs="$3" local f
buildOctavePath "$octavePath" "$pkgs"
# Find all regular files in the output directory that are executable. if [ -d "$dir" ]; then find "$dir" -type f -perm -0100 -print0 | while read -d "" f; do echo "wrapping \`$f'..." local -a wrap_args=("$f" --prefix PATH ':' "$program_PATH" ) local -a wrapProgramArgs=("${wrap_args[@]}") wrapProgram "${wrapProgramArgs[@]}" done fi}
# Build the PATH environment variable by walking through the closure of# dependencies. Starts by constructing the `program_PATH` variable with the# environment's path, then adding the original octave's location, and marking# them in `octavePathsSeen`.buildOctavePath() { local octavePath="$1" local packages="$2"
local pathsToSearch="$octavePath $packages"
# Create an empty table of Octave paths. declare -A octavePathsSeen=() program_PATH= octavePathsSeen["$out"]=1 octavePathsSeen["@octave@"]=1 addToSearchPath program_PATH "$out/bin" addToSearchPath program_PATH "@octave@/bin" echo "program_PATH to change to is: $program_PATH" for path in $pathsToSearch; do echo "Recurse to propagated-build-input: $path" _addToOctavePath $path done}
# Adds the bin directories to the program_PATH variable.# Recurses on any paths declared in `propagated-build-inputs`, while avoiding# duplicating paths by flagging the directires it has seen in `octavePathsSeen`._addToOctavePath() { local dir="$1" # Stop if we've already visited this path. if [ -n "${octavePathsSeen[$dir]}" ]; then return; fi octavePathsSeen[$dir]=1 # addToSearchPath is defined in stdenv/generic/setup.sh. It has the effect # of calling `export X=$dir/...:$X`. addToSearchPath program_PATH $dir/bin
# Inspect the propagated inputs (if they exist) and recur on them. local prop="$dir/nix-support/propagated-build-inputs" if [ -e $prop ]; then for new_path in $(cat $prop); do _addToOctavePath $new_path done fi}