diff options
Diffstat (limited to 'doc/generated/builders.gen')
-rw-r--r-- | doc/generated/builders.gen | 528 |
1 files changed, 304 insertions, 224 deletions
diff --git a/doc/generated/builders.gen b/doc/generated/builders.gen index 3d534b0..02dc04b 100644 --- a/doc/generated/builders.gen +++ b/doc/generated/builders.gen @@ -486,6 +486,14 @@ and source arguments list different numbers of files or directories. </para> + +<example_commands xmlns="http://www.scons.org/dbxsd/v1.0"> +env.InstallAs(target = '/usr/local/bin/foo', + source = 'foo_debug') +env.InstallAs(target = ['../lib/libfoo.a', '../lib/libbar.a'], + source = ['libFOO.a', 'libBAR.a']) +</example_commands> + </listitem> </varlistentry> <varlistentry id="b-InstallVersionedLib"> @@ -500,14 +508,17 @@ arguments list different numbers of files or directories. Installs a versioned shared library. The <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-SHLIBVERSION"><envar>$SHLIBVERSION</envar></link> construction variable should be defined in the environment to confirm the version number in the library name. +If <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-SHLIBVERSION"><envar>$SHLIBVERSION</envar></link> is not defined a warning will be issued +and the name of the library will be parsed to derive the version. The symlinks appropriate to the architecture will be generated. </para> <example_commands xmlns="http://www.scons.org/dbxsd/v1.0"> -env.InstallAs(target = '/usr/local/bin/foo', - source = 'foo_debug') -env.InstallAs(target = ['../lib/libfoo.a', '../lib/libbar.a'], - source = ['libFOO.a', 'libBAR.a']) +env.InstallVersionedLib(target = '/usr/local/bin/foo', + source = 'libxyz.1.5.2.so') +env.InstallVersionedLib(target = '/usr/local/bin/foo', + source = 'libxyz.1.5.2.so', + SHLIBVERSION='1.5.2') </example_commands> </listitem> </varlistentry> @@ -832,161 +843,105 @@ Compile files for languages defined in <filename>LINGUAS</filename> file <term> <function>env.MSVSProject()</function> </term> - <listitem> -<para xmlns="http://www.scons.org/dbxsd/v1.0"> -Builds a Microsoft Visual Studio project file, -and by default builds a solution file as well. -</para> - -<para xmlns="http://www.scons.org/dbxsd/v1.0"> -This builds a Visual Studio project file, based on the version of -Visual Studio that is configured (either the latest installed version, -or the version specified by -<link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-MSVS_VERSION"><envar>$MSVS_VERSION</envar></link> -in the Environment constructor). -For Visual Studio 6, it will generate a -<filename>.dsp</filename> -file. -For Visual Studio 7 (.NET) and later versions, it will generate a -<filename>.vcproj</filename> -file. -</para> - -<para xmlns="http://www.scons.org/dbxsd/v1.0"> -By default, -this also generates a solution file -for the specified project, -a -<filename>.dsw</filename> -file for Visual Studio 6 -or a -<filename>.sln</filename> -file for Visual Studio 7 (.NET). -This behavior may be disabled by specifying -<literal>auto_build_solution=0</literal> -when you call -<function xmlns="http://www.scons.org/dbxsd/v1.0">MSVSProject</function>, -in which case you presumably want to -build the solution file(s) -by calling the -<function xmlns="http://www.scons.org/dbxsd/v1.0">MSVSSolution</function> -Builder (see below). -</para> - -<para xmlns="http://www.scons.org/dbxsd/v1.0"> -The <function xmlns="http://www.scons.org/dbxsd/v1.0">MSVSProject</function> builder -takes several lists of filenames -to be placed into the project file. -These are currently limited to -<literal>srcs</literal>, -<literal>incs</literal>, -<literal>localincs</literal>, -<literal>resources</literal>, -and -<literal>misc</literal>. -These are pretty self-explanatory, but it should be noted that these -lists are added to the <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-SOURCES"><envar>$SOURCES</envar></link> construction variable as strings, -NOT as SCons File Nodes. This is because they represent file -names to be added to the project file, not the source files used to -build the project file. -</para> - -<para xmlns="http://www.scons.org/dbxsd/v1.0"> -The above filename lists are all optional, -although at least one must be specified -for the resulting project file to be non-empty. -</para> - -<para xmlns="http://www.scons.org/dbxsd/v1.0"> -In addition to the above lists of values, -the following values may be specified: -</para> - -<para xmlns="http://www.scons.org/dbxsd/v1.0"> -<literal>target</literal>: -The name of the target -<filename>.dsp</filename> -or -<filename>.vcproj</filename> -file. -The correct -suffix for the version of Visual Studio must be used, -but the -<link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-MSVSPROJECTSUFFIX"><envar>$MSVSPROJECTSUFFIX</envar></link> -construction variable -will be defined to the correct value (see example below). -</para> - -<para xmlns="http://www.scons.org/dbxsd/v1.0"> -<literal>variant</literal>: -The name of this particular variant. -For Visual Studio 7 projects, -this can also be a list of variant names. -These are typically things like "Debug" or "Release", but really -can be anything you want. -For Visual Studio 7 projects, -they may also specify a target platform -separated from the variant name by a -<literal>|</literal> -(vertical pipe) -character: -<literal>Debug|Xbox</literal>. -The default target platform is Win32. -Multiple calls to -<function xmlns="http://www.scons.org/dbxsd/v1.0">MSVSProject</function> -with different variants are allowed; -all variants will be added to the project file with their appropriate -build targets and sources. -</para> - -<para xmlns="http://www.scons.org/dbxsd/v1.0"> -<literal>buildtarget</literal>: -An optional string, node, or list of strings or nodes -(one per build variant), to tell the Visual Studio debugger -what output target to use in what build variant. -The number of -<literal>buildtarget</literal> -entries must match the number of -<literal>variant</literal> -entries. -</para> - -<para xmlns="http://www.scons.org/dbxsd/v1.0"> -<literal>runfile</literal>: -The name of the file that Visual Studio 7 and later -will run and debug. -This appears as the value of the -<literal>Output</literal> -field in the resutling Visual Studio project file. -If this is not specified, -the default is the same as the specified -<literal>buildtarget</literal> -value. -</para> - -<para xmlns="http://www.scons.org/dbxsd/v1.0"> -Note that because <application xmlns="http://www.scons.org/dbxsd/v1.0">SCons</application> always executes its build commands -from the directory in which the <filename xmlns="http://www.scons.org/dbxsd/v1.0">SConstruct</filename> file is located, -if you generate a project file in a different directory -than the <filename xmlns="http://www.scons.org/dbxsd/v1.0">SConstruct</filename> directory, -users will not be able to double-click -on the file name in compilation error messages -displayed in the Visual Studio console output window. -This can be remedied by adding the -Visual C/C++ -<literal>/FC</literal> -compiler option to the <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-CCFLAGS"><envar>$CCFLAGS</envar></link> variable -so that the compiler will print -the full path name of any -files that cause compilation errors. -</para> - -<para xmlns="http://www.scons.org/dbxsd/v1.0"> -Example usage: -</para> - -<example_commands xmlns="http://www.scons.org/dbxsd/v1.0"> -barsrcs = ['bar.cpp'], + <listitem> <para xmlns="http://www.scons.org/dbxsd/v1.0"> Builds a Microsoft Visual Studio project +file, and by default builds a solution file as well. </para> <para xmlns="http://www.scons.org/dbxsd/v1.0"> This +builds a Visual Studio project file, based on the version of Visual Studio +that is configured (either the latest installed version, or the version +specified by <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-MSVS_VERSION"><envar>$MSVS_VERSION</envar></link> in the Environment constructor). For +Visual Studio 6, it will generate a <filename>.dsp</filename> file. For Visual +Studio 7 (.NET) and later versions, it will generate a +<filename>.vcproj</filename> file. </para> <para xmlns="http://www.scons.org/dbxsd/v1.0"> By default, this also +generates a solution file for the specified project, a +<filename>.dsw</filename> file for Visual Studio 6 or a +<filename>.sln</filename> file for Visual Studio 7 (.NET). This behavior may +be disabled by specifying <literal>auto_build_solution=0</literal> when you +call <function xmlns="http://www.scons.org/dbxsd/v1.0">MSVSProject</function>, in which case you presumably want to build the solution +file(s) by calling the <function xmlns="http://www.scons.org/dbxsd/v1.0">MSVSSolution</function> Builder (see below). </para> <para xmlns="http://www.scons.org/dbxsd/v1.0"> +The <function xmlns="http://www.scons.org/dbxsd/v1.0">MSVSProject</function> builder takes several lists of filenames to be placed into +the project file. These are currently limited to <literal>srcs</literal>, +<literal>incs</literal>, <literal>localincs</literal>, +<literal>resources</literal>, and <literal>misc</literal>. These are pretty +self-explanatory, but it should be noted that these lists are added to the +<link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-SOURCES"><envar>$SOURCES</envar></link> construction variable as strings, NOT as SCons File Nodes. +This is because they represent file names to be added to the project file, not +the source files used to build the project file. </para> <para xmlns="http://www.scons.org/dbxsd/v1.0"> The above +filename lists are all optional, although at least one must be specified for +the resulting project file to be non-empty. </para> <para xmlns="http://www.scons.org/dbxsd/v1.0"> In addition to the +above lists of values, the following values may be specified: +</para><variablelist xmlns="http://www.scons.org/dbxsd/v1.0"> + <varlistentry> + <term>target</term> + + <listitem> + <para>The name of the target <filename>.dsp</filename> or + <filename>.vcproj</filename> file. The correct suffix for the version + of Visual Studio must be used, but the <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-MSVSPROJECTSUFFIX"><envar>$MSVSPROJECTSUFFIX</envar></link> + construction variable will be defined to the correct value (see + example below).</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>variant</term> + + <listitem> + <para>The name of this particular variant. For Visual Studio 7 + projects, this can also be a list of variant names. These are + typically things like "Debug" or "Release", but really can be anything + you want. For Visual Studio 7 projects, they may also specify a target + platform separated from the variant name by a <literal>|</literal> + (vertical pipe) character: <literal>Debug|Xbox</literal>. The default + target platform is Win32. Multiple calls to <function xmlns="http://www.scons.org/dbxsd/v1.0">MSVSProject</function> with + different variants are allowed; all variants will be added to the + project file with their appropriate build targets and + sources.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>cmdargs</term> + + <listitem> + <para>Additional command line arguments for the different + variants. The number of <literal>cmdargs</literal> entries must match + the number of <literal>variant</literal> entries, or be empty (not + specified). If you give only one, it will automatically be propagated + to all variants.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>buildtarget</term> + + <listitem> + <para>An optional string, node, or list of strings or nodes (one + per build variant), to tell the Visual Studio debugger what output + target to use in what build variant. The number of + <literal>buildtarget</literal> entries must match the number of + <literal>variant</literal> entries.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>runfile</term> + + <listitem> + <para>The name of the file that Visual Studio 7 and later will + run and debug. This appears as the value of the + <literal>Output</literal> field in the resulting Visual Studio project + file. If this is not specified, the default is the same as the + specified <literal>buildtarget</literal> value.</para> + </listitem> + </varlistentry> + </variablelist><para xmlns="http://www.scons.org/dbxsd/v1.0"> Note that because <application xmlns="http://www.scons.org/dbxsd/v1.0">SCons</application> always executes its build +commands from the directory in which the <filename xmlns="http://www.scons.org/dbxsd/v1.0">SConstruct</filename> file is located, if you +generate a project file in a different directory than the <filename xmlns="http://www.scons.org/dbxsd/v1.0">SConstruct</filename> +directory, users will not be able to double-click on the file name in +compilation error messages displayed in the Visual Studio console output +window. This can be remedied by adding the Visual C/C++ <literal>/FC</literal> +compiler option to the <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-CCFLAGS"><envar>$CCFLAGS</envar></link> variable so that the compiler will +print the full path name of any files that cause compilation errors. </para> +<para xmlns="http://www.scons.org/dbxsd/v1.0"> Example usage: </para> <example_commands xmlns="http://www.scons.org/dbxsd/v1.0">barsrcs = ['bar.cpp'], barincs = ['bar.h'], barlocalincs = ['StdAfx.h'] barresources = ['bar.rc','resource.h'] @@ -1004,7 +959,143 @@ env.MSVSProject(target = 'Bar' + env['MSVSPROJECTSUFFIX'], buildtarget = dll, variant = 'Release') </example_commands> -</listitem> +<para xmlns="http://www.scons.org/dbxsd/v1.0">Starting with version 2.4 of +SCons it's also possible to specify the optional argument +<parameter>DebugSettings</parameter>, which creates files for debugging under +Visual Studio:</para><variablelist xmlns="http://www.scons.org/dbxsd/v1.0"> + <varlistentry> + <term>DebugSettings</term> + + <listitem> + <para>A dictionary of debug settings that get written to the + <filename>.vcproj.user</filename> or the + <filename>.vcxproj.user</filename> file, depending on the version + installed. As it is done for cmdargs (see above), you can specify a + <parameter>DebugSettings</parameter> dictionary per variant. If you + give only one, it will be propagated to all variants.</para> + </listitem> + </varlistentry> + </variablelist><para xmlns="http://www.scons.org/dbxsd/v1.0">Currently, only Visual Studio v9.0 and Visual Studio +version v11 are implemented, for other versions no file is generated. To +generate the user file, you just need to add a +<parameter>DebugSettings</parameter> dictionary to the environment with the +right parameters for your MSVS version. If the dictionary is empty, or does +not contain any good value, no file will be generated.</para><para xmlns="http://www.scons.org/dbxsd/v1.0">Following +is a more contrived example, involving the setup of a project for variants and +DebugSettings:</para><example_commands xmlns="http://www.scons.org/dbxsd/v1.0"># Assuming you store your defaults in a file +vars = Variables('variables.py') +msvcver = vars.args.get('vc', '9') + +# Check command args to force one Microsoft Visual Studio version +if msvcver == '9' or msvcver == '11': + env = Environment(MSVC_VERSION=msvcver+'.0', MSVC_BATCH=False) +else: + env = Environment() + +AddOption('--userfile', action='store_true', dest='userfile', default=False, + help="Create Visual Studio Project user file") + +# +# 1. Configure your Debug Setting dictionary with options you want in the list +# of allowed options, for instance if you want to create a user file to launch +# a specific application for testing your dll with Microsoft Visual Studio 2008 (v9): +# +V9DebugSettings = { + 'Command':'c:\\myapp\\using\\thisdll.exe', + 'WorkingDirectory': 'c:\\myapp\\using\\', + 'CommandArguments': '-p password', +# 'Attach':'false', +# 'DebuggerType':'3', +# 'Remote':'1', +# 'RemoteMachine': None, +# 'RemoteCommand': None, +# 'HttpUrl': None, +# 'PDBPath': None, +# 'SQLDebugging': None, +# 'Environment': '', +# 'EnvironmentMerge':'true', +# 'DebuggerFlavor': None, +# 'MPIRunCommand': None, +# 'MPIRunArguments': None, +# 'MPIRunWorkingDirectory': None, +# 'ApplicationCommand': None, +# 'ApplicationArguments': None, +# 'ShimCommand': None, +# 'MPIAcceptMode': None, +# 'MPIAcceptFilter': None, +} + +# +# 2. Because there are a lot of different options depending on the Microsoft +# Visual Studio version, if you use more than one version you have to +# define a dictionary per version, for instance if you want to create a user +# file to launch a specific application for testing your dll with Microsoft +# Visual Studio 2012 (v11): +# +V10DebugSettings = { + 'LocalDebuggerCommand': 'c:\\myapp\\using\\thisdll.exe', + 'LocalDebuggerWorkingDirectory': 'c:\\myapp\\using\\', + 'LocalDebuggerCommandArguments': '-p password', +# 'LocalDebuggerEnvironment': None, +# 'DebuggerFlavor': 'WindowsLocalDebugger', +# 'LocalDebuggerAttach': None, +# 'LocalDebuggerDebuggerType': None, +# 'LocalDebuggerMergeEnvironment': None, +# 'LocalDebuggerSQLDebugging': None, +# 'RemoteDebuggerCommand': None, +# 'RemoteDebuggerCommandArguments': None, +# 'RemoteDebuggerWorkingDirectory': None, +# 'RemoteDebuggerServerName': None, +# 'RemoteDebuggerConnection': None, +# 'RemoteDebuggerDebuggerType': None, +# 'RemoteDebuggerAttach': None, +# 'RemoteDebuggerSQLDebugging': None, +# 'DeploymentDirectory': None, +# 'AdditionalFiles': None, +# 'RemoteDebuggerDeployDebugCppRuntime': None, +# 'WebBrowserDebuggerHttpUrl': None, +# 'WebBrowserDebuggerDebuggerType': None, +# 'WebServiceDebuggerHttpUrl': None, +# 'WebServiceDebuggerDebuggerType': None, +# 'WebServiceDebuggerSQLDebugging': None, +} + +# +# 3. Select the dictionary you want depending on the version of visual Studio +# Files you want to generate. +# +if not env.GetOption('userfile'): + dbgSettings = None +elif env.get('MSVC_VERSION', None) == '9.0': + dbgSettings = V9DebugSettings +elif env.get('MSVC_VERSION', None) == '11.0': + dbgSettings = V10DebugSettings +else: + dbgSettings = None + +# +# 4. Add the dictionary to the DebugSettings keyword. +# +barsrcs = ['bar.cpp', 'dllmain.cpp', 'stdafx.cpp'] +barincs = ['targetver.h'] +barlocalincs = ['StdAfx.h'] +barresources = ['bar.rc','resource.h'] +barmisc = ['ReadMe.txt'] + +dll = env.SharedLibrary(target = 'bar.dll', + source = barsrcs) + +env.MSVSProject(target = 'Bar' + env['MSVSPROJECTSUFFIX'], + srcs = barsrcs, + incs = barincs, + localincs = barlocalincs, + resources = barresources, + misc = barmisc, + buildtarget = [dll[0]] * 2, + variant = ('Debug|Win32', 'Release|Win32'), + cmdargs = 'vc=%s' % msvcver, + DebugSettings = (dbgSettings, {})) +</example_commands> </listitem> </varlistentry> <varlistentry id="b-MSVSSolution"> <term> @@ -1013,70 +1104,54 @@ env.MSVSProject(target = 'Bar' + env['MSVSPROJECTSUFFIX'], <term> <function>env.MSVSSolution()</function> </term> - <listitem> -<para xmlns="http://www.scons.org/dbxsd/v1.0"> -Builds a Microsoft Visual Studio solution file. -</para> - -<para xmlns="http://www.scons.org/dbxsd/v1.0"> -This builds a Visual Studio solution file, -based on the version of Visual Studio that is configured -(either the latest installed version, -or the version specified by -<link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-MSVS_VERSION"><envar>$MSVS_VERSION</envar></link> -in the construction environment). -For Visual Studio 6, it will generate a -<filename>.dsw</filename> -file. -For Visual Studio 7 (.NET), it will -generate a -<filename>.sln</filename> -file. -</para> - -<para xmlns="http://www.scons.org/dbxsd/v1.0"> -The following values must be specified: -</para> - -<para xmlns="http://www.scons.org/dbxsd/v1.0"> -<literal>target</literal>: -The name of the target .dsw or .sln file. The correct -suffix for the version of Visual Studio must be used, but the value -<link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-MSVSSOLUTIONSUFFIX"><envar>$MSVSSOLUTIONSUFFIX</envar></link> -will be defined to the correct value (see example below). -</para> - -<para xmlns="http://www.scons.org/dbxsd/v1.0"> -<literal>variant</literal>: -The name of this particular variant, or a list of variant -names (the latter is only supported for MSVS 7 solutions). These are -typically things like "Debug" or "Release", but really can be anything -you want. For MSVS 7 they may also specify target platform, like this -"Debug|Xbox". Default platform is Win32. -</para> - -<para xmlns="http://www.scons.org/dbxsd/v1.0"> -<literal>projects</literal>: -A list of project file names, or Project nodes returned by calls to the -<function xmlns="http://www.scons.org/dbxsd/v1.0">MSVSProject</function> -Builder, -to be placed into the solution file. -It should be noted that these file names are NOT added to the $SOURCES -environment variable in form of files, but rather as strings. This -is because they represent file names to be added to the solution file, -not the source files used to build the solution file. -</para> - -<para xmlns="http://www.scons.org/dbxsd/v1.0"> -Example Usage: -</para> - -<example_commands xmlns="http://www.scons.org/dbxsd/v1.0"> -env.MSVSSolution(target = 'Bar' + env['MSVSSOLUTIONSUFFIX'], - projects = ['bar' + env['MSVSPROJECTSUFFIX']], - variant = 'Release') -</example_commands> -</listitem> + <listitem> <para xmlns="http://www.scons.org/dbxsd/v1.0">Builds a Microsoft Visual Studio solution +file. </para> <para xmlns="http://www.scons.org/dbxsd/v1.0">This builds a Visual Studio solution file, based on the +version of Visual Studio that is configured (either the latest installed +version, or the version specified by <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-MSVS_VERSION"><envar>$MSVS_VERSION</envar></link> in the +construction environment). For Visual Studio 6, it will generate a +<filename>.dsw</filename> file. For Visual Studio 7 (.NET), it will generate a +<filename>.sln</filename> file. </para> <para xmlns="http://www.scons.org/dbxsd/v1.0"> The following values must be +specified: </para><variablelist xmlns="http://www.scons.org/dbxsd/v1.0"> + <varlistentry> + <term>target</term> + + <listitem> + <para>The name of the target .dsw or .sln file. The correct + suffix for the version of Visual Studio must be used, but the value + <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-MSVSSOLUTIONSUFFIX"><envar>$MSVSSOLUTIONSUFFIX</envar></link> will be defined to the correct value (see + example below).</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>variant</term> + + <listitem> + <para>The name of this particular variant, or a list of variant + names (the latter is only supported for MSVS 7 solutions). These are + typically things like "Debug" or "Release", but really can be anything + you want. For MSVS 7 they may also specify target platform, like this + "Debug|Xbox". Default platform is Win32.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>projects</term> + + <listitem> + <para>A list of project file names, or Project nodes returned by + calls to the <function xmlns="http://www.scons.org/dbxsd/v1.0">MSVSProject</function> Builder, to be placed into the solution + file. It should be noted that these file names are NOT added to the + $SOURCES environment variable in form of files, but rather as strings. + This is because they represent file names to be added to the solution + file, not the source files used to build the solution + file.</para> + </listitem> + </varlistentry> + </variablelist> <para xmlns="http://www.scons.org/dbxsd/v1.0"> Example Usage: </para> <example_commands xmlns="http://www.scons.org/dbxsd/v1.0"> +env.MSVSSolution(target = 'Bar' + env['MSVSSOLUTIONSUFFIX'], projects = ['bar' ++ env['MSVSPROJECTSUFFIX']], variant = 'Release') +</example_commands></listitem> </varlistentry> <varlistentry id="b-Object"> <term> @@ -1925,6 +2000,11 @@ and Y are numbers, and Z is a number but can also contain letters to designate alpha, beta, or release candidate patch levels. </para> +<example_commands xmlns="http://www.scons.org/dbxsd/v1.0"> +env.SharedLibrary(target = 'bar', source = ['bar.c', 'foo.o'], SHLIBVERSION='1.5.2') +</example_commands> + + <para xmlns="http://www.scons.org/dbxsd/v1.0"> This builder may create multiple links to the library. On a POSIX system, for the shared library libbar.so.2.3.1, the links created would be |