summaryrefslogtreecommitdiff
path: root/jam-files/boost-build/tools/symlink.py
diff options
context:
space:
mode:
authorKenneth Heafield <github@kheafield.com>2012-10-22 12:07:20 +0100
committerKenneth Heafield <github@kheafield.com>2012-10-22 12:07:20 +0100
commit5f98fe5c4f2a2090eeb9d30c030305a70a8347d1 (patch)
tree9b6002f850e6dea1e3400c6b19bb31a9cdf3067f /jam-files/boost-build/tools/symlink.py
parentcf9994131993b40be62e90e213b1e11e6b550143 (diff)
parent21825a09d97c2e0afd20512f306fb25fed55e529 (diff)
Merge remote branch 'upstream/master'
Conflicts: Jamroot bjam decoder/Jamfile decoder/cdec.cc dpmert/Jamfile jam-files/sanity.jam klm/lm/Jamfile klm/util/Jamfile mira/Jamfile
Diffstat (limited to 'jam-files/boost-build/tools/symlink.py')
-rw-r--r--jam-files/boost-build/tools/symlink.py112
1 files changed, 0 insertions, 112 deletions
diff --git a/jam-files/boost-build/tools/symlink.py b/jam-files/boost-build/tools/symlink.py
deleted file mode 100644
index 6345ded6..00000000
--- a/jam-files/boost-build/tools/symlink.py
+++ /dev/null
@@ -1,112 +0,0 @@
-# Status: ported.
-# Base revision: 64488.
-
-# Copyright 2003 Dave Abrahams
-# Copyright 2002, 2003 Rene Rivera
-# Copyright 2002, 2003, 2004, 2005 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-# Defines the "symlink" special target. 'symlink' targets make symbolic links
-# to the sources.
-
-import b2.build.feature as feature
-import b2.build.targets as targets
-import b2.build.property_set as property_set
-import b2.build.virtual_target as virtual_target
-import b2.build.targets
-
-from b2.manager import get_manager
-
-import bjam
-
-import os
-
-
-feature.feature("symlink-location", ["project-relative", "build-relative"], ["incidental"])
-
-class SymlinkTarget(targets.BasicTarget):
-
- _count = 0
-
- def __init__(self, project, targets, sources):
-
- # Generate a fake name for now. Need unnamed targets eventually.
- fake_name = "symlink#%s" % SymlinkTarget._count
- SymlinkTarget._count = SymlinkTarget._count + 1
-
- b2.build.targets.BasicTarget.__init__(self, fake_name, project, sources)
-
- # Remember the targets to map the sources onto. Pad or truncate
- # to fit the sources given.
- assert len(targets) <= len(sources)
- self.targets = targets[:] + sources[len(targets):]
-
- # The virtual targets corresponding to the given targets.
- self.virtual_targets = []
-
- def construct(self, name, source_targets, ps):
- i = 0
- for t in source_targets:
- s = self.targets[i]
- a = virtual_target.Action(self.manager(), [t], "symlink.ln", ps)
- vt = virtual_target.FileTarget(os.path.basename(s), t.type(), self.project(), a)
-
- # Place the symlink in the directory relative to the project
- # location, instead of placing it in the build directory.
- if not ps.get('symlink-location') == "project-relative":
- vt.set_path(os.path.join(self.project().get('location'), os.path.dirname(s)))
-
- vt = get_manager().virtual_targets().register(vt)
- self.virtual_targets.append(vt)
- i = i + 1
-
- return (property_set.empty(), self.virtual_targets)
-
-# Creates a symbolic link from a set of targets to a set of sources.
-# The targets and sources map one to one. The symlinks generated are
-# limited to be the ones given as the sources. That is, the targets
-# are either padded or trimmed to equate to the sources. The padding
-# is done with the name of the corresponding source. For example::
-#
-# symlink : one two ;
-#
-# Is equal to::
-#
-# symlink one two : one two ;
-#
-# Names for symlink are relative to the project location. They cannot
-# include ".." path components.
-def symlink(targets, sources):
-
- from b2.manager import get_manager
- t = get_manager().targets()
- p = get_manager().projects().current()
-
- return t.main_target_alternative(
- SymlinkTarget(p, targets,
- # Note: inline targets are not supported for symlink, intentionally,
- # since it's used to linking existing non-local targets.
- sources))
-
-
-def setup_ln(targets, sources, ps):
-
- source_path = bjam.call("get-target-variable", sources[0], "LOCATE")[0]
- target_path = bjam.call("get-target-variable", targets[0], "LOCATE")[0]
- rel = os.path.relpath(source_path, target_path)
- if rel == ".":
- bjam.call("set-target-variable", targets, "PATH_TO_SOURCE", "")
- else:
- bjam.call("set-target-variable", targets, "PATH_TO_SOURCE", rel)
-
-if os.name == 'nt':
- ln_action = """echo "NT symlinks not supported yet, making copy"
-del /f /q "$(<)" 2>nul >nul
-copy "$(>)" "$(<)" $(NULL_OUT)"""
-else:
- ln_action = "ln -f -s '$(>:D=:R=$(PATH_TO_SOURCE))' '$(<)'"
-
-get_manager().engine().register_action("symlink.ln", ln_action, function=setup_ln)
-
-get_manager().projects().add_rule("symlink", symlink)