#!/bin/sh # GNU Guix --- Functional package management for GNU # Copyright © 2012, 2013, 2014 Ludovic Courtès # # This file is part of GNU Guix. # # GNU Guix is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or (at # your option) any later version. # # GNU Guix is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Guix. If not, see . # # Update the local copy of Nix source code needed to build the daemon. # Assume GNU Coreutils and Git are available. # top_srcdir="${top_srcdir:-..}" log() { echo "sync-with-upstream: $@" >&2 } # checked_in_p FILE checked_in_p() { ( cd "$top_srcdir" ; git ls-tree HEAD -- "nix/$1" | grep "$1" > /dev/null ) } if [ ! -d "$top_srcdir/build-aux" ] then log "\`$top_srcdir' is not the valid top-level source directory" exit 1 fi set -e for upstream_file in `cd "$top_srcdir/nix-upstream/src" ; find . -name \*.c -or -name \*.h -or -name \*.cc -or -name \*.hh \ -or -name \*.cpp -or -name \*.hpp -or -name \*.sql` do if grep "$upstream_file" "$top_srcdir/daemon.am" > /dev/null then if checked_in_p "$upstream_file" then log "skipping \`$upstream_file', which has a checked-in copy" else ( cd "$top_srcdir/nix-upstream/src" && \ cp -v --parents "$upstream_file" ../../nix ) fi else log "skipping \`$upstream_file', which is not used" fi done # This file should be generated by our build system so remove it. rm -fv "$top_srcdir/nix/libstore/schema.sql.hh" cp -v "$top_srcdir/nix-upstream/COPYING" "$top_srcdir/nix" # Generate an 'AUTHORS' file since upstream Nix no longer has one. cat > "$top_srcdir/nix/AUTHORS" <> "$top_srcdir/nix/AUTHORS" # Substitutions. sed -i "$top_srcdir/nix/libstore/gc.cc" \ -e 's|/nix/find-runtime-roots\.pl|/guix/list-runtime-roots|g' # Our 'guix_hash_context' structure has a copy constructor, specifically to # handle the use case in 'HashSink::currentHash()' where the copy of the # context is expected to truly copy the underlying hash context. The copy # constructor cannot be used in 'Ctx' if that's a union, so turn it into a # structure (we can afford to two wasted words.) sed -i "$top_srcdir/nix/libutil/hash.cc" "$top_srcdir/nix/libutil/hash.hh" \ -e 's|union Ctx|struct Ctx|g'