waf-tools/relocation.py
author Tom Henderson <tomh@tomh.org>
Thu, 30 Aug 2018 13:39:08 -0700
changeset 13764 ee1b8a17f63a
parent 11634 99173c0ad09b
permissions -rw-r--r--
tcp: Update status of NSC TCP in manual
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7544
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     1
#! /usr/bin/env python
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     2
# encoding: utf-8
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     3
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     4
"""
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     5
Waf 1.6
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     6
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     7
Try to detect if the project directory was relocated, and if it was,
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     8
change the node representing the project directory. Just call:
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     9
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    10
 waf configure build
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    11
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    12
Note that if the project directory name changes, the signatures for the tasks using
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    13
files in that directory will change, causing a partial build.
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    14
"""
11634
99173c0ad09b port wscripts, test.py, and waf-tools to Python3
Siddharth Santurkar <siddharth.santurkar@ieee.org>
parents: 9277
diff changeset
    15
from __future__ import print_function
7544
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    16
import os
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    17
from waflib import Build, ConfigSet, Task, Utils, Errors
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    18
from waflib.TaskGen import feature, before_method, after_method
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    19
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    20
EXTRA_LOCK = '.old_srcdir'
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    21
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    22
old1 = Build.BuildContext.store
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    23
def store(self):
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    24
	old1(self)
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    25
	db = os.path.join(self.variant_dir, EXTRA_LOCK)
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    26
	env = ConfigSet.ConfigSet()
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    27
	env.SRCDIR = self.srcnode.abspath()
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    28
	env.store(db)
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    29
Build.BuildContext.store = store
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    30
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    31
old2 = Build.BuildContext.init_dirs
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    32
def init_dirs(self):
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    33
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    34
	if not (os.path.isabs(self.top_dir) and os.path.isabs(self.out_dir)):
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    35
		raise Errors.WafError('The project was not configured: run "waf configure" first!')
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    36
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    37
	srcdir = None
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    38
	db = os.path.join(self.variant_dir, EXTRA_LOCK)
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    39
	env = ConfigSet.ConfigSet()
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    40
	try:
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    41
		env.load(db)
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    42
		srcdir = env.SRCDIR
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    43
	except:
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    44
		pass
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    45
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    46
	if srcdir:
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    47
		d = self.root.find_node(srcdir)
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    48
		if d and srcdir != self.top_dir and getattr(d, 'children', ''):
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    49
			srcnode = self.root.make_node(self.top_dir)
11634
99173c0ad09b port wscripts, test.py, and waf-tools to Python3
Siddharth Santurkar <siddharth.santurkar@ieee.org>
parents: 9277
diff changeset
    50
			print(("relocating the source directory %r -> %r" % (srcdir, self.top_dir)))
7544
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    51
			srcnode.children = {}
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    52
11634
99173c0ad09b port wscripts, test.py, and waf-tools to Python3
Siddharth Santurkar <siddharth.santurkar@ieee.org>
parents: 9277
diff changeset
    53
			for (k, v) in list(d.children.items()):
7544
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    54
				srcnode.children[k] = v
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    55
				v.parent = srcnode
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    56
			d.children = {}
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    57
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    58
	old2(self)
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    59
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    60
Build.BuildContext.init_dirs = init_dirs
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    61
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    62
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    63
def uid(self):
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    64
	try:
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    65
		return self.uid_
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    66
	except AttributeError:
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 7544
diff changeset
    67
		# this is not a real hot zone, but we want to avoid surprises here
7544
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    68
		m = Utils.md5()
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    69
		up = m.update
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    70
		up(self.__class__.__name__.encode())
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    71
		for x in self.inputs + self.outputs:
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    72
			up(x.path_from(x.ctx.srcnode).encode())
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    73
		self.uid_ = m.digest()
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    74
		return self.uid_
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    75
Task.Task.uid = uid
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    76
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    77
@feature('c', 'cxx', 'd', 'go', 'asm', 'fc', 'includes')
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    78
@after_method('propagate_uselib_vars', 'process_source')
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    79
def apply_incpaths(self):
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    80
	lst = self.to_incnodes(self.to_list(getattr(self, 'includes', [])) + self.env['INCLUDES'])
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    81
	self.includes_nodes = lst
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    82
	bld = self.bld
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 7544
diff changeset
    83
	self.env['INCPATHS'] = [x.is_child_of(bld.srcnode) and x.path_from(bld.bldnode) or x.abspath() for x in lst]
7544
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    84
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    85