diff --git a/gcc-tools.jam b/gcc-tools.jam
index 549e87642..6a4c17273 100644
--- a/gcc-tools.jam
+++ b/gcc-tools.jam
@@ -9,7 +9,6 @@
#//GNU
GCC
# compute directories for invoking GCC
-SPACE ?= " " ;
GCC_BIN_DIRECTORY ?= $(GCC_ROOT_DIRECTORY)$(SLASH)bin$(SLASH) ;
GCC_BIN_DIRECTORY ?= "" ; # Don't clobber tool names if GCC_ROOT_DIRECTORY not set
GCC_INCLUDE_DIRECTORY ?= $(GCC_ROOT_DIRECTORY)$(SLASH)include ;
@@ -172,19 +171,38 @@ flags gcc NEEDLIBS ;
flags gcc FINDLIBS ;
flags gcc DLLVERSION ;
-if $(DLLVERSION)
-{
- DLLVERSION = $(DLLVERSION[1]) ;
-}
-else
-{
- DLLVERSION = $(BOOST_VERSION) ;
-}
+DLLVERSION = $(DLLVERSION[1]) ;
+DLLVERSION ?= $(BOOST_VERSION) ;
+
+flags gcc TARGET_TYPE ;
#### Link ####
rule Link-action
{
+ SPACE on $(<) = " " ;
+ # if we don't have a GNU linker then we can't pass any GNU-ld specific flags:
+ if $(NO_GNU_LN)
+ {
+ LNOPT on $(<) = ;
+ }
+ else
+ {
+ LNOPT on $(<) = "" ;
+ }
+ # do we use sonames or not?
+ if $(DLLVERSION) && $(TARGET_TYPE) in $(SHARED_TYPES) && $(OS) = LINUX && ! $(NO_GNU_LN)
+ {
+ OUTTAG on $(<) = ".$(DLLVERSION)" ;
+ SOTAG on $(<) = ".$(DLLVERSION)" ;
+ ACTION_1 on $(<) = "" ;
+ }
+ else
+ {
+ OUTTAG on $(<) = "" ;
+ SOTAG on $(<) = ;
+ ACTION_1 on $(<) = ;
+ }
# This will appear before the import library name when building a DLL, but
# will be "multiplied away" otherwise. The --exclude-symbols directive
# proved to be neccessary with some versions of Cygwin.
@@ -202,35 +220,12 @@ rule Link-action
}
# for gcc, we repeat all libraries so that dependencies are always resolved
-if $(NO_GNU_LN)
+actions gcc-Link-action bind NEEDLIBS
{
- # if we don't have a GNU linker then we can't pass any GNU-ld specific flags:
- actions gcc-Link-action bind NEEDLIBS
- {
- $(GCC_BIN_DIRECTORY)$(GXX) $(IMPLIB_COMMAND)$(<[2]) $(LINKFLAGS) -o "$(<[1])" -L$(LIBPATH:T) -L$(STDLIBPATH:T) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS)
- }
-}
-else
-{
- if $(DLLVERSION) && $(UNIX)
- {
- actions gcc-Link-action bind NEEDLIBS
- {
$(SHELL_SET)LD_LIBRARY_PATH=$(RUN_LD_LIBRARY_PATH)
$(SHELL_EXPORT)LD_LIBRARY_PATH
- $(GCC_BIN_DIRECTORY)$(GXX) $(IMPLIB_COMMAND)$(<[2]) $(LINKFLAGS) -o "$(<[1]).$(DLLVERSION)" -L$(LIBPATH:T) -L$(STDLIBPATH:T) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) -Wl,-rpath-link,. -Wl,-soname,$(<[1]:D=).$(DLLVERSION)
- $(LN) -fs $(<[1]:D=).$(DLLVERSION) $(<[1])
- }
- }
- else
- {
- actions gcc-Link-action bind NEEDLIBS
- {
- $(SHELL_SET)LD_LIBRARY_PATH=$(RUN_LD_LIBRARY_PATH)
- $(SHELL_EXPORT)LD_LIBRARY_PATH
- $(GCC_BIN_DIRECTORY)$(GXX) $(IMPLIB_COMMAND)$(<[2]) $(LINKFLAGS) -o "$(<[1])" -L$(LIBPATH:T) -L$(STDLIBPATH:T) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) -Wl,-rpath-link,.
- }
- }
+ $(GCC_BIN_DIRECTORY)$(GXX) $(IMPLIB_COMMAND)$(<[2]) $(LINKFLAGS) -o "$(<[1])$(OUTTAG)" -L$(LIBPATH:T) -L$(STDLIBPATH:T) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) $(LNOPT)-Wl,-rpath-link,.$(SPACE)"-Wl,-soname,$(<[1]:D=)$(SOTAG)"
+ $(ACTION_1)$(LN)$(SPACE)-fs$(SPACE)"$(<[1]:D=)$(OUTTAG)"$(SPACE)"$(<[1])"
}
actions gcc-dllwrap bind NEEDLIBS
@@ -242,6 +237,7 @@ actions gcc-dllwrap bind NEEDLIBS
rule Cc-action
{
+ SPACE on $(<) = " " ;
gcc-Cc-action $(<) : $(>) ;
}
@@ -253,6 +249,7 @@ actions gcc-Cc-action
#### C++ ####
rule C++-action
{
+ SPACE on $(<) = " " ;
gcc-C++-action $(<) : $(>) ;
}
@@ -272,10 +269,3 @@ actions updated together piecemeal gcc-Archive-action
{
ar ru$(ARFLAGS) "$(<:T)" "$(>:T)"
}
-
-
-
-
-
-
-
diff --git a/v1/gcc-tools.jam b/v1/gcc-tools.jam
index 549e87642..6a4c17273 100644
--- a/v1/gcc-tools.jam
+++ b/v1/gcc-tools.jam
@@ -9,7 +9,6 @@
#//GNU
GCC
# compute directories for invoking GCC
-SPACE ?= " " ;
GCC_BIN_DIRECTORY ?= $(GCC_ROOT_DIRECTORY)$(SLASH)bin$(SLASH) ;
GCC_BIN_DIRECTORY ?= "" ; # Don't clobber tool names if GCC_ROOT_DIRECTORY not set
GCC_INCLUDE_DIRECTORY ?= $(GCC_ROOT_DIRECTORY)$(SLASH)include ;
@@ -172,19 +171,38 @@ flags gcc NEEDLIBS ;
flags gcc FINDLIBS ;
flags gcc DLLVERSION ;
-if $(DLLVERSION)
-{
- DLLVERSION = $(DLLVERSION[1]) ;
-}
-else
-{
- DLLVERSION = $(BOOST_VERSION) ;
-}
+DLLVERSION = $(DLLVERSION[1]) ;
+DLLVERSION ?= $(BOOST_VERSION) ;
+
+flags gcc TARGET_TYPE ;
#### Link ####
rule Link-action
{
+ SPACE on $(<) = " " ;
+ # if we don't have a GNU linker then we can't pass any GNU-ld specific flags:
+ if $(NO_GNU_LN)
+ {
+ LNOPT on $(<) = ;
+ }
+ else
+ {
+ LNOPT on $(<) = "" ;
+ }
+ # do we use sonames or not?
+ if $(DLLVERSION) && $(TARGET_TYPE) in $(SHARED_TYPES) && $(OS) = LINUX && ! $(NO_GNU_LN)
+ {
+ OUTTAG on $(<) = ".$(DLLVERSION)" ;
+ SOTAG on $(<) = ".$(DLLVERSION)" ;
+ ACTION_1 on $(<) = "" ;
+ }
+ else
+ {
+ OUTTAG on $(<) = "" ;
+ SOTAG on $(<) = ;
+ ACTION_1 on $(<) = ;
+ }
# This will appear before the import library name when building a DLL, but
# will be "multiplied away" otherwise. The --exclude-symbols directive
# proved to be neccessary with some versions of Cygwin.
@@ -202,35 +220,12 @@ rule Link-action
}
# for gcc, we repeat all libraries so that dependencies are always resolved
-if $(NO_GNU_LN)
+actions gcc-Link-action bind NEEDLIBS
{
- # if we don't have a GNU linker then we can't pass any GNU-ld specific flags:
- actions gcc-Link-action bind NEEDLIBS
- {
- $(GCC_BIN_DIRECTORY)$(GXX) $(IMPLIB_COMMAND)$(<[2]) $(LINKFLAGS) -o "$(<[1])" -L$(LIBPATH:T) -L$(STDLIBPATH:T) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS)
- }
-}
-else
-{
- if $(DLLVERSION) && $(UNIX)
- {
- actions gcc-Link-action bind NEEDLIBS
- {
$(SHELL_SET)LD_LIBRARY_PATH=$(RUN_LD_LIBRARY_PATH)
$(SHELL_EXPORT)LD_LIBRARY_PATH
- $(GCC_BIN_DIRECTORY)$(GXX) $(IMPLIB_COMMAND)$(<[2]) $(LINKFLAGS) -o "$(<[1]).$(DLLVERSION)" -L$(LIBPATH:T) -L$(STDLIBPATH:T) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) -Wl,-rpath-link,. -Wl,-soname,$(<[1]:D=).$(DLLVERSION)
- $(LN) -fs $(<[1]:D=).$(DLLVERSION) $(<[1])
- }
- }
- else
- {
- actions gcc-Link-action bind NEEDLIBS
- {
- $(SHELL_SET)LD_LIBRARY_PATH=$(RUN_LD_LIBRARY_PATH)
- $(SHELL_EXPORT)LD_LIBRARY_PATH
- $(GCC_BIN_DIRECTORY)$(GXX) $(IMPLIB_COMMAND)$(<[2]) $(LINKFLAGS) -o "$(<[1])" -L$(LIBPATH:T) -L$(STDLIBPATH:T) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) -Wl,-rpath-link,.
- }
- }
+ $(GCC_BIN_DIRECTORY)$(GXX) $(IMPLIB_COMMAND)$(<[2]) $(LINKFLAGS) -o "$(<[1])$(OUTTAG)" -L$(LIBPATH:T) -L$(STDLIBPATH:T) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) $(LNOPT)-Wl,-rpath-link,.$(SPACE)"-Wl,-soname,$(<[1]:D=)$(SOTAG)"
+ $(ACTION_1)$(LN)$(SPACE)-fs$(SPACE)"$(<[1]:D=)$(OUTTAG)"$(SPACE)"$(<[1])"
}
actions gcc-dllwrap bind NEEDLIBS
@@ -242,6 +237,7 @@ actions gcc-dllwrap bind NEEDLIBS
rule Cc-action
{
+ SPACE on $(<) = " " ;
gcc-Cc-action $(<) : $(>) ;
}
@@ -253,6 +249,7 @@ actions gcc-Cc-action
#### C++ ####
rule C++-action
{
+ SPACE on $(<) = " " ;
gcc-C++-action $(<) : $(>) ;
}
@@ -272,10 +269,3 @@ actions updated together piecemeal gcc-Archive-action
{
ar ru$(ARFLAGS) "$(<:T)" "$(>:T)"
}
-
-
-
-
-
-
-