summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Deegan <bill@baddogconsulting.com>2020-08-31 18:51:55 (GMT)
committerWilliam Deegan <bill@baddogconsulting.com>2020-08-31 18:51:55 (GMT)
commite1604ea37594031fa5440bd9ba8d33d712ee63a0 (patch)
tree41bcef1ae22c69a1c043b21a258cb8f0f8edcc3a
parentb366af5f4518839fc03809c1d0ac5a3e470562ca (diff)
downloadSCons-e1604ea37594031fa5440bd9ba8d33d712ee63a0.zip
SCons-e1604ea37594031fa5440bd9ba8d33d712ee63a0.tar.gz
SCons-e1604ea37594031fa5440bd9ba8d33d712ee63a0.tar.bz2
refactor cleanup. circular import issues resolved by moving isolated imports into the few functions they are used in rather than globally in the module
-rw-r--r--SCons/Defaults.py3
-rw-r--r--SCons/Tool/FortranCommon.py6
-rw-r--r--SCons/Tool/aixlink.py9
-rw-r--r--SCons/Tool/applelink.py4
-rw-r--r--SCons/Tool/cxx.py5
-rw-r--r--SCons/Tool/cyglink.py9
-rw-r--r--SCons/Tool/gnulink.py11
-rw-r--r--SCons/Tool/hplink.py5
-rw-r--r--SCons/Tool/ilink.py4
-rw-r--r--SCons/Tool/linkCommon/README.md56
-rw-r--r--SCons/Tool/linkCommon/__init__.py9
-rw-r--r--SCons/Tool/mslink.py3
-rw-r--r--SCons/Tool/sgilink.py3
-rw-r--r--SCons/Tool/sunlink.py6
14 files changed, 76 insertions, 57 deletions
diff --git a/SCons/Defaults.py b/SCons/Defaults.py
index b3f6d1d..c23d564 100644
--- a/SCons/Defaults.py
+++ b/SCons/Defaults.py
@@ -10,8 +10,6 @@ from distutils.msvccompiler.
"""
#
-# __COPYRIGHT__
-#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
@@ -31,7 +29,6 @@ from distutils.msvccompiler.
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
import os
diff --git a/SCons/Tool/FortranCommon.py b/SCons/Tool/FortranCommon.py
index bfa1c1c..f8d9fdc 100644
--- a/SCons/Tool/FortranCommon.py
+++ b/SCons/Tool/FortranCommon.py
@@ -5,8 +5,6 @@ Stuff for processing Fortran, common to all fortran dialects.
"""
#
-# __COPYRIGHT__
-#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
@@ -26,13 +24,11 @@ Stuff for processing Fortran, common to all fortran dialects.
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
import re
import os.path
import SCons.Action
-import SCons.Defaults
import SCons.Scanner.Fortran
import SCons.Tool
import SCons.Util
@@ -78,10 +74,12 @@ def _fortranEmitter(target, source, env):
return (target, source)
def FortranEmitter(target, source, env):
+ import SCons.Defaults
target, source = _fortranEmitter(target, source, env)
return SCons.Defaults.StaticObjectEmitter(target, source, env)
def ShFortranEmitter(target, source, env):
+ import SCons.Defaults
target, source = _fortranEmitter(target, source, env)
return SCons.Defaults.SharedObjectEmitter(target, source, env)
diff --git a/SCons/Tool/aixlink.py b/SCons/Tool/aixlink.py
index fed4342..dc0de2a 100644
--- a/SCons/Tool/aixlink.py
+++ b/SCons/Tool/aixlink.py
@@ -8,8 +8,6 @@ selection method.
"""
#
-# __COPYRIGHT__
-#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
@@ -30,8 +28,6 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
import os
import os.path
@@ -42,7 +38,6 @@ from . import link
import SCons.Tool.cxx
cplusplus = SCons.Tool.cxx
-#cplusplus = __import__('cxx', globals(), locals(), [])
def smart_linkflags(source, target, env, for_signature):
@@ -52,6 +47,7 @@ def smart_linkflags(source, target, env, for_signature):
return '-qtempinc=' + os.path.join(build_dir, 'tempinc')
return ''
+
def generate(env):
"""
Add Builders and construction variables for Visual Age linker to
@@ -64,12 +60,13 @@ def generate(env):
env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS -qmkshrobj -qsuppress=1501-218')
env['SHLIBSUFFIX'] = '.a'
+
def exists(env):
# TODO: sync with link.smart_link() to choose a linker
linkers = { 'CXX': ['aixc++'], 'CC': ['aixcc'] }
alltools = []
for langvar, linktools in linkers.items():
- if langvar in env: # use CC over CXX when user specified CC but not CXX
+ if langvar in env: # use CC over CXX when user specified CC but not CXX
return SCons.Tool.FindTool(linktools, env)
alltools.extend(linktools)
return SCons.Tool.FindTool(alltools, env)
diff --git a/SCons/Tool/applelink.py b/SCons/Tool/applelink.py
index 9463308..f51a6af 100644
--- a/SCons/Tool/applelink.py
+++ b/SCons/Tool/applelink.py
@@ -9,8 +9,6 @@ selection method.
"""
#
-# __COPYRIGHT__
-#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
@@ -31,8 +29,6 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
import SCons.Tool.linkCommon
import SCons.Util
diff --git a/SCons/Tool/cxx.py b/SCons/Tool/cxx.py
index 430851c..128cdc4 100644
--- a/SCons/Tool/cxx.py
+++ b/SCons/Tool/cxx.py
@@ -8,8 +8,6 @@ selection method.
"""
#
-# __COPYRIGHT__
-#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
@@ -30,11 +28,8 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
import os.path
-import SCons.Tool
import SCons.Defaults
import SCons.Util
diff --git a/SCons/Tool/cyglink.py b/SCons/Tool/cyglink.py
index fd8c1fd..e85797b 100644
--- a/SCons/Tool/cyglink.py
+++ b/SCons/Tool/cyglink.py
@@ -12,14 +12,13 @@ import re
import os
import SCons.Action
-import SCons.Tool.linkCommon
+import SCons.Tool.linkCommon as linkCommon
from SCons.Tool.linkCommon import ImpLibSymlinkGenerator, StringizeLibSymlinks, EmitLibSymlinks, ImpLibPrefixGenerator, \
ImpLibSuffixGenerator, ImpLibNameGenerator
import SCons.Util
import SCons.Tool
from . import gnulink
-from . import link
def _lib_generator(target, source, env, for_signature, **kw):
@@ -157,7 +156,7 @@ def _versioned_lib_suffix(env, suffix, version):
def _versioned_implib_name(env, libnode, version, prefix, suffix, **kw):
- return SCons.Tool.linkCommon._versioned_lib_name(env, libnode, version, prefix, suffix,
+ return linkCommon._versioned_lib_name(env, libnode, version, prefix, suffix,
ImpLibPrefixGenerator,
ImpLibSuffixGenerator,
implib_libtype=kw['libtype'])
@@ -231,8 +230,8 @@ def generate(env):
'VersionedShLibSuffix': _versioned_lib_suffix,
'VersionedLdModSuffix': _versioned_lib_suffix,
'VersionedImpLibSuffix': _versioned_lib_suffix,
- 'VersionedShLibName': SCons.Tool.linkCommon._versioned_shlib_name,
- 'VersionedLdModName': SCons.Tool.linkCommon._versioned_ldmod_name,
+ 'VersionedShLibName': linkCommon._versioned_shlib_name,
+ 'VersionedLdModName': linkCommon._versioned_ldmod_name,
'VersionedShLibImpLibName': lambda *args: _versioned_implib_name(*args, libtype='ShLib'),
'VersionedLdModImpLibName': lambda *args: _versioned_implib_name(*args, libtype='LdMod'),
'VersionedShLibImpLibSymlinks': lambda *args: _versioned_implib_symlinks(*args, libtype='ShLib'),
diff --git a/SCons/Tool/gnulink.py b/SCons/Tool/gnulink.py
index 51932da..2b09549 100644
--- a/SCons/Tool/gnulink.py
+++ b/SCons/Tool/gnulink.py
@@ -9,8 +9,6 @@ selection method.
"""
#
-# __COPYRIGHT__
-#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
@@ -31,7 +29,6 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
import SCons.Tool.linkCommon
import SCons.Util
@@ -39,6 +36,7 @@ import SCons.Tool
import sys
from . import link
+import SCons.Tool.linkCommon as linkCommon
def generate(env):
@@ -56,11 +54,8 @@ def generate(env):
# OpenBSD doesn't usually use SONAME for libraries
use_soname = not sys.platform.startswith('openbsd')
- SCons.Tool.linkCommon._setup_versioned_lib_variables(env, tool='gnulink', use_soname=use_soname)
- env['LINKCALLBACKS'] = SCons.Tool.linkCommon._versioned_lib_callbacks()
-
- # # For backward-compatibility with older SCons versions
- # env['SHLIBVERSIONFLAGS'] = SCons.Util.CLVar('')
+ linkCommon._setup_versioned_lib_variables(env, tool='gnulink', use_soname=use_soname)
+ env['LINKCALLBACKS'] = linkCommon._versioned_lib_callbacks()
def exists(env):
diff --git a/SCons/Tool/hplink.py b/SCons/Tool/hplink.py
index 10ef30b..ba182f1 100644
--- a/SCons/Tool/hplink.py
+++ b/SCons/Tool/hplink.py
@@ -8,8 +8,6 @@ selection method.
"""
#
-# __COPYRIGHT__
-#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
@@ -30,9 +28,6 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-import os
import os.path
import SCons.Util
diff --git a/SCons/Tool/ilink.py b/SCons/Tool/ilink.py
index aa6bcaa..4112825 100644
--- a/SCons/Tool/ilink.py
+++ b/SCons/Tool/ilink.py
@@ -9,8 +9,6 @@ selection method.
"""
#
-# __COPYRIGHT__
-#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
@@ -31,8 +29,6 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
import SCons.Defaults
import SCons.Tool
import SCons.Util
diff --git a/SCons/Tool/linkCommon/README.md b/SCons/Tool/linkCommon/README.md
new file mode 100644
index 0000000..26bc9a5
--- /dev/null
+++ b/SCons/Tool/linkCommon/README.md
@@ -0,0 +1,56 @@
+
+
+# Versioned Shared Library and Loadable modules requirements
+
+The following env variables can affect the command line and created files for these
+
+* `SHLIBVERSION`
+* `SONAME`
+* `SOVERSION`
+* `APPLELINK_NO_CURRENT_VERSION` (applelink only)
+* `APPLELINK_CURRENT_VERSION` (applelink only)
+* `APPLELINK_COMPATIBILITY_VERSION` (applelink only)
+
+In most cases the linker will create a file named as
+
+`${SHLIBPREFIX}lib_name${SHLIBVERSION}${SHLIBSUFFIX}`
+
+Which will have a soname baked into it as one of the
+
+* `${SONAME}`
+* `${SHLIBPREFIX}lib_name${SOVERSION}${SHLIBSUFFIX}`
+* (for applelink only)
+ * `${SHLIBPREFIX}lib_name${major version only from SHLIBVERSION}${SHLIBSUFFIX}`
+ * `-Wl,-compatibility_version,%s`
+ * `-Wl,-current_version,%s`
+
+For **applelink** the version has to follow these rules to verify that the version # is valid.
+
+* For version # = X[.Y[.Z]]
+* where X 0-65535
+* where Y either not specified or 0-255
+* where Z either not specified or 0-255
+
+
+
+For most platforms this will lead to a series of symlinks eventually pointing to the actual shared library (or loadable module file).
+1. `${SHLIBPREFIX}lib_name${SHLIBSUFFIX} -> ${SHLIBPREFIX}lib_name${SHLIBVERSION}${SHLIBSUFFIX}`
+1. `${SHLIBPREFIX}lib_name${SOVERSION}${SHLIBSUFFIX} -> ${SHLIBPREFIX}lib_name${SHLIBVERSION}${SHLIBSUFFIX}`
+
+For **openbsd** the following rules for symlinks apply
+
+ * OpenBSD uses x.y shared library versioning numbering convention and doesn't use symlinks to backwards-compatible libraries
+
+
+The current code provides the following hooks a compiler can use to customize:
+
+```
+ 'VersionedShLibSuffix': _versioned_lib_suffix,
+ 'VersionedLdModSuffix': _versioned_lib_suffix,
+ 'VersionedShLibSymlinks': _versioned_shlib_symlinks,
+ 'VersionedLdModSymlinks': _versioned_ldmod_symlinks,
+ 'VersionedShLibName': _versioned_shlib_name,
+ 'VersionedLdModName': _versioned_ldmod_name,
+ 'VersionedShLibSoname': _versioned_shlib_soname,
+ 'VersionedLdModSoname': _versioned_ldmod_soname,
+``` \ No newline at end of file
diff --git a/SCons/Tool/linkCommon/__init__.py b/SCons/Tool/linkCommon/__init__.py
index c3ccd7a..c787e0c 100644
--- a/SCons/Tool/linkCommon/__init__.py
+++ b/SCons/Tool/linkCommon/__init__.py
@@ -30,8 +30,6 @@ from typing import Callable
import SCons.Util
import SCons.Warnings
from SCons.Tool.DCommon import isD
-from SCons.Tool.FortranCommon import isfortran
-from SCons.Tool.cxx import iscplusplus
from SCons.Util import is_List
@@ -512,8 +510,11 @@ def _call_env_subst(env, string, *args, **kw):
def smart_link(source, target, env, for_signature):
- has_cplusplus = iscplusplus(source)
- has_fortran = isfortran(env, source)
+ import SCons.Tool.cxx
+ import SCons.Tool.fortran
+
+ has_cplusplus = SCons.Tool.cxx.iscplusplus(source)
+ has_fortran = SCons.Tool.fortran.isfortran(env, source)
has_d = isD(env, source)
if has_cplusplus and has_fortran and not has_d:
global issued_mixed_link_warning
diff --git a/SCons/Tool/mslink.py b/SCons/Tool/mslink.py
index bab78d8..8fd7922 100644
--- a/SCons/Tool/mslink.py
+++ b/SCons/Tool/mslink.py
@@ -9,8 +9,6 @@ selection method.
"""
#
-# __COPYRIGHT__
-#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
@@ -30,7 +28,6 @@ selection method.
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
import os
import os.path
diff --git a/SCons/Tool/sgilink.py b/SCons/Tool/sgilink.py
index b1e7921..e92c7b9 100644
--- a/SCons/Tool/sgilink.py
+++ b/SCons/Tool/sgilink.py
@@ -9,8 +9,6 @@ selection method.
"""
#
-# __COPYRIGHT__
-#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
@@ -31,7 +29,6 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
import SCons.Util
diff --git a/SCons/Tool/sunlink.py b/SCons/Tool/sunlink.py
index c33ba5a..f668903 100644
--- a/SCons/Tool/sunlink.py
+++ b/SCons/Tool/sunlink.py
@@ -30,7 +30,7 @@ selection method.
import os.path
-import SCons.Tool.linkCommon
+import SCons.Tool.linkCommon as linkCommon
import SCons.Util
from . import link
@@ -63,12 +63,12 @@ def generate(env):
env['_RPATH'] = '${_concat(RPATHPREFIX, RPATH, RPATHSUFFIX, __env__)}'
# Support for versioned libraries
- SCons.Tool.linkCommon._setup_versioned_lib_variables(env, tool ='sunlink', use_soname=True)
+ linkCommon._setup_versioned_lib_variables(env, tool='sunlink', use_soname=True)
env['_SHLIBVERSIONFLAGS'] = '$SHLIBVERSIONFLAGS -h $_SHLIBSONAME'
env['_LDMODULEVERSIONFLAGS'] = '$LDMODULEVERSIONFLAGS -h $_LDMODULESONAME'
- env['LINKCALLBACKS'] = SCons.Tool.linkCommon._versioned_lib_callbacks()
+ env['LINKCALLBACKS'] = linkCommon._versioned_lib_callbacks()
def exists(env):
return ccLinker