2
0
mirror of https://github.com/boostorg/build.git synced 2026-02-16 01:12:13 +00:00

Implement symlinks support for installing shared libraries.

Also fix top-level Boost Jamfile. Seems like V2 can now install Boost.


[SVN r26835]
This commit is contained in:
Vladimir Prus
2005-01-24 14:11:27 +00:00
parent c40b9809ee
commit 9d1b318b43
2 changed files with 77 additions and 19 deletions

View File

@@ -219,6 +219,7 @@ class abstract-file-target : virtual-target
self.type = $(type) ;
self.action = $(action) ;
self.exact-name = $(exact) ;
if $(action)
{
$(action).add-targets $(__name__) ;
@@ -234,7 +235,10 @@ class abstract-file-target : virtual-target
rule set-type ( type )
{
self.type = $(type) ;
_adjust-name [ utility.basename $(self.name) ] ;
if ! $(self.exact-name)
{
_adjust-name [ utility.basename $(self.name) ] ;
}
}
# Sets the path. When generating target name, it will override any path
@@ -411,8 +415,17 @@ class abstract-file-target : virtual-target
}
rule _adjust-name ( specified-name )
{
local ps = [ $(self.action).properties ] ;
{
local ps ;
if $(self.action)
{
ps = [ $(self.action).properties ] ;
}
else
{
ps = [ property-set.empty ] ;
}
local tag = [ $(ps).get <tag> ] ;
if $(tag)
@@ -443,8 +456,7 @@ class abstract-file-target : virtual-target
if ! $(tag) || ! $(self.name)
{
self.name = [ virtual-target.add-suffix
$(specified-name) : $(self.type)
: [ $(self.action).properties ] ] ;
$(specified-name) : $(self.type) : $(ps) ] ;
}
}

View File

@@ -111,10 +111,10 @@ class install-target-class : basic-target
# See if something special should be done when staging this
# type. It is indicated by presense of special "staged" type
local t = [ $(i).type ] ;
if $(t) && [ type.registered STAGED_$(t) ]
if $(t) && [ type.registered INSTALLED_$(t) ]
{
local targets = [ generators.construct $(self.project) $(name) :
STAGED_$(t) : $(new-properties) : $(i) : * ] ;
INSTALLED_$(t) : $(new-properties) : $(i) : * ] ;
staged-targets += $(targets[2-]) ;
}
else
@@ -239,7 +239,7 @@ class install-target-class : basic-target
rule copy-file ( project : source : properties )
{
local name = [ $(source).name ] ;
new-a = [ new action $(source) : common.copy : $(properties) ] ;
targets = [ new file-target $(name:D=) exact : [ $(source).type ]
: $(project) : $(new-a) ] ;
@@ -247,16 +247,15 @@ rule copy-file ( project : source : properties )
return $(targets) ;
}
#rule symlink-lib ( suffix : project : source : extra-properties )
#{
# local n = [ $(source).name ] ;
# local targets = [
# new file-target $(n:D=) : [ $(source).type ] : $(project) ] ;
# local a = [ new action $(targets) : $(source) : symlink.ln :
# $(extra-properties) ] ;
# $(targets).action $(a) ;
# return $(targets) ;
#}
rule symlink ( name : project : source : properties )
{
local a = [ new action $(source) : symlink.ln :
$(properties) ] ;
local targets = [
new file-target $(name) exact : [ $(source).type ] : $(project) : $(a) ] ;
return $(targets) ;
}
rule relink-file ( project : source : property-set )
{
@@ -300,6 +299,53 @@ class installed-exe-generator : generator
generators.register [ new installed-exe-generator ] ;
# Installing shared link on Unix might cause a creation of
# versioned symbolic links.
type.register INSTALLED_SHARED_LIB : : SHARED_LIB ;
class installed-shared-lib-generator : generator
{
import type property-set modules stage ;
rule __init__ ( )
{
generator.__init__ install-shared-lib : SHARED_LIB
: INSTALLED_SHARED_LIB ;
}
rule run ( project name ? : property-set : source : multiple ? )
{
local copied = [ stage.copy-file $(project)
: $(source) : $(property-set) ] ;
if [ $(property-set).get <os> ] = NT
{
return $(copied) ;
}
else
{
local result = $(copied) ;
# If the name is in the form NNN.XXX.YYY.ZZZ, where all
# 'X', 'Y' and 'Z' are numbers, we need to create
# NNN.XXX and NNN.XXX.YYY symbolic links.
local m = [ MATCH (.*)\\.([0123456789]+)\\.([0123456789]+)\\.([0123456789]+)$
: [ $(copied).name ] ] ;
if $(m)
{
result += [ stage.symlink $(m[1]).$(m[2]) : $(project)
: $(copied) : $(property-set) ] ;
result += [ stage.symlink $(m[1]).$(m[2]).$(m[3]) : $(project)
: $(copied) : $(property-set) ] ;
}
return $(result) ;
}
}
}
generators.register [ new installed-shared-lib-generator ] ;
# Main target rule for 'install'
rule install ( name : sources * : requirements * : default-build * )
{
@@ -335,7 +381,7 @@ rule install ( name : sources * : requirements * : default-build * )
IMPORT $(__name__) : install : : install ;
IMPORT $(__name__) : install : : stage ;
rule add-variant-and-compiler ( name : property-set )
rule add-variant-and-compiler ( name : type ? : property-set )
{
return [ rename $(name) : $(type) : $(property-set) ] ;
}