Module Name:    src
Committed By:   dholland
Date:           Mon Sep 30 07:23:37 UTC 2013

Added Files:
        src/sys/fs/nfs: nfs2netbsd.sh

Log Message:
The script for preparing an import of this nfs code.


To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1 src/sys/fs/nfs/nfs2netbsd.sh

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Added files:

Index: src/sys/fs/nfs/nfs2netbsd.sh
diff -u /dev/null src/sys/fs/nfs/nfs2netbsd.sh:1.1
--- /dev/null	Mon Sep 30 07:23:37 2013
+++ src/sys/fs/nfs/nfs2netbsd.sh	Mon Sep 30 07:23:37 2013
@@ -0,0 +1,267 @@
+#!/bin/sh
+# nfs2netbsd - arrange bits of (FreeBSD's) newnfs code for importing
+# usage: nfs2netbsd FREEBSDSYSDIR
+#
+# Caution: unlike most of the *2netbsd scripts in the tree, this copies
+# from another dir (which should be the sys/ dir from a FreeBSD checkout)
+# rather than operating on a tree already in the current directory.
+#
+# The current directory should be empty.
+#
+# $NetBSD: nfs2netbsd.sh,v 1.1 2013/09/30 07:23:37 dholland Exp $
+
+FTOP="$1"
+
+if [ $# != 1 ]; then
+    echo "$0: usage: $0 freebsdsysdir" 1>&2
+    exit 1
+fi
+
+if [ ! -d "$FTOP" ]; then
+    echo "$0: $FTOP: not found" 1>&2
+    exit 1
+fi
+
+############################################################
+# 1. Get the list of files.
+
+# Note that we don't (for now anyway) take rpc/* and xdr/*.
+
+FILES=$(egrep -w 'nfscl|nfsd' "$FTOP"/conf/files | awk '{ print $1 }' |\
+	sed '/^rpc\//d;/^xdr\//d')
+
+DIRS=$(echo "$FILES" | sed 's,/[^/*]*$,,' | sort -u)
+
+MOREFILES=$(cd "$FTOP" && find $DIRS -name '*.h' -print)
+
+FILES="$FILES $MOREFILES"
+
+############################################################
+# 2. Create the directories to copy into.
+
+ALLDIRS=$(echo "$DIRS" | awk -F/ '
+    {
+	path = sep = "";
+	for (i=1;i<=NF;i++) {
+	    path = path sep $i;
+	    sep = "/";
+	    print path;
+	}
+    }
+' | sort -u)
+
+for D in $ALLDIRS; do
+    echo "MKDIR   $D"
+    mkdir "$D" || exit 1
+done
+
+############################################################
+# 3. Copy the files.
+
+# In the course of copying, strip the dollar-signs from FreeBSD RCS
+# tags and add a NetBSD tag.
+
+for F in $FILES; do
+    echo "COPY    $F"
+    awk < "$FTOP"/"$F" '
+	function detag() {
+	    gsub("\\$", "", $0);
+	}
+	function commentout() {
+	    $0 = "/* " $0 " */";
+	}
+	BEGIN {
+	    first = 1;
+	}
+
+	# there are a handful of netbsd __RCSID()s in the input
+	/__RCSID(.*NetBSD:.*)/ {
+	    detag();
+	    commentout();
+	    print;
+	    first = 0;
+	    next;
+	}
+	/__FBSDID(.*FreeBSD:.*)/ {
+	    detag();
+	    commentout();
+	    print;
+	    printf "__RCSID(\"%sNetBSD%s\");\n", "$", "$";
+	    first = 0;
+	    next;
+	}
+	/\$NetBSD.*\$/ {
+	    detag();
+	    print;
+	    first = 0;
+	    next;
+	}
+	/\$FreeBSD.*\$/ {
+	    orig = $0;
+	    detag();
+	    print;
+	    sub("FreeBSD:.*\\$", "NetBSD$", orig);
+	    print orig;
+	    first = 0;
+	    next;
+	}
+	first {
+	    printf "/*\t%sNetBSD%s\t*/\n", "$", "$";
+	    print;
+	    first = 0;
+	    next;
+	}
+	{ print; }
+    ' "name=$F" > "$F"
+done
+
+# If you need to diff the files against the freebsd tree for some
+# reason, e.g. because you needed to debug the awk script above,
+# uncomment this for testing.
+#exit 3
+
+############################################################
+# 4. Move the files around the way we want them.
+
+# Be sure to reflect changes in this section into section 5.
+
+
+# If these fail, it means the script needs to be updated...
+mv nfs/nfsproto.h nfs/oldnfsproto.h || exit 1
+mv nfs/xdr_subs.h nfs/old_xdr_subs.h || exit 1
+
+# Make sure nothing in nfs/ and fs/nfs/ overlaps as we're going
+# to merge those dirs.
+
+BAD=$( (
+	(cd nfs && ls)
+	(cd fs/nfs && ls)
+    ) | sort | uniq -d)
+if [ x"$BAD" != x ]; then
+    echo "$0: The following files exist in both nfs/ and fs/nfs/:" 1>&2
+    echo "$BAD" 1>&2
+    echo "$0: Please add logic to fix this before continuing." 1>&2
+    exit 1
+fi
+
+# Now rearrange the dirs.
+
+mkdir fs/nfs/common || exit 1
+mv nfs/*.[ch] fs/nfs/common/ || exit 1
+mv fs/nfs/*.[ch] fs/nfs/common/ || exit 1
+mv fs/nfsserver fs/nfs/server || exit 1
+mv fs/nfsclient fs/nfs/client || exit 1
+mv nlm fs/nfs/nlm || exit 1
+
+rmdir nfs || exit 1
+
+############################################################
+# 5. Prepare a skeleton files.newnfs.
+
+# This helps make sure that freebsd changes in the file list
+# propagate.
+
+echo 'GEN     fs/nfs/files.newnfs'
+
+egrep -w 'nfscl|nfsd' "$FTOP"/conf/files |\
+	sed '/^rpc\//d;/^xdr\//d' | sed '
+    s,^fs/nfs/,fs/nfs/common/,
+    s,^fs/nfsclient/,fs/nfs/client/,
+    s,^fs/nfsserver/,fs/nfs/server/,
+    s,^nfs/,fs/nfs/common/,
+    s,^nlm/,fs/nfs/nlm/,
+' | sort | awk '
+    BEGIN {
+	# fbsd -> nbsd translation table for files.* tokens
+
+	# old nfs implementation
+	transtoken["nfsserver"] = "false";
+	transtoken["nfsclient"] = "false";
+
+	# new nfs implementation
+	transtoken["nfscl"] = "new_nfsclient";
+	transtoken["nfsd"] = "new_nfsserver";
+	transtoken["nfslockd"] = "new_nfslockd";
+	transtoken["nfs_root"] = "new_nfs_boot";
+	transtoken["bootp"] = "new_nfs_boot_bootp";
+
+	# other stuff
+	transtoken["inet"] = "true";
+    }
+    {
+	file = $1;
+	expr = "";
+	havetoken = 0;
+	for (i=2;i<=NF;i++) {
+	    if ($i == "optional") {
+		continue;
+	    }
+	    if ($i == "|") {
+		havetoken = 0;
+	    }
+	    else if (havetoken) {
+		expr = expr " &";
+		havetoken = 0;
+	    }
+	    else {
+		havetoken = 1;
+	    }
+	    t = $i;
+	    if (transtoken[t]) {
+		t = transtoken[t];
+	    }
+	    expr = expr " " t;
+	    seentokens[t] = 1;
+	}
+	gsub("false \\& [a-zA-Z0-9_]+ \\| ", "", expr);
+	gsub("false \\| ", "", expr);
+	gsub(" \\& true", "", expr);
+	files[++nfiles] = file;
+	exprs[file] = expr;
+    }
+
+    END {
+	# This output is not meant to be perfect; it is meant as a
+	# starting point.
+
+	printf "#\t%sNetBSD%s\n", "$", "$";
+	printf "\n";
+
+	printf "deffs NEW_NFSCLIENT\n";
+
+	sep = "defflag opt_newnfs.h\t\t\t";
+	for (t in seentokens) {
+	    if (t == "true" || t == "false" || t == "|" || t == "&") {
+		continue;
+	    }
+	    if (t == "new_nfsclient") {
+		continue;
+	    }
+	    printf "%s%s\n", sep, toupper(t);
+	    sep = "\t\t\t\t\t";
+	}
+	printf "\n";
+
+	for (i=1;i<=nfiles;i++) {
+	    printf "file\t%s", files[i];
+	    ntabs = 4 - int(length(files[i])/8);
+	    if (ntabs < 1) {
+		ntabs = 1;
+	    }
+	    for (j=0; j<ntabs; j++) {
+		printf "\t";
+	    }
+	    printf "%s\n", exprs[files[i]];
+	}
+    }
+' > fs/nfs/files.newnfs
+
+############################################################
+# 6. done
+
+mv fs/nfs/* . || exit 1
+rmdir fs/nfs fs || exit 1
+
+echo "Now do:"
+echo "   cvs -d cvs.netbsd.org:/cvsroot import src/sys/fs/nfs FREEBSD FREEBSD-NNNNNN"
+echo "where NNNNNN is the subversion version number."

Reply via email to