Class: Rscons::Builders::SharedLibrary
- Inherits:
-
Rscons::Builder
- Object
- Rscons::Builder
- Rscons::Builders::SharedLibrary
- Defined in:
- lib/rscons/builders/shared_library.rb
Overview
A default Rscons builder that knows how to link object files into a shared library.
Instance Method Summary collapse
-
#create_build_target(options) ⇒ BuildTarget
Create a BuildTarget object for this build target.
-
#default_variables(env) ⇒ Hash
Return default construction variables for the builder.
-
#features ⇒ Array<String>
Return a set of build features that this builder provides.
-
#finalize(options) ⇒ String?
Finalize a build.
-
#run(options) ⇒ String, false
Run the builder to produce a build target.
-
#setup(options) ⇒ Object
Set up a build operation using this builder.
Methods inherited from Rscons::Builder
#name, #produces?, #standard_build, #standard_finalize, #standard_threaded_build
Instance Method Details
#create_build_target(options) ⇒ BuildTarget
Create a BuildTarget object for this build target.
The build target filename is given a platform-dependent suffix if no other suffix is given.
47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/rscons/builders/shared_library.rb', line 47 def create_build_target() env, target, vars = .values_at(:env, :target, :vars) = .dup libprefix = env.("${SHLIBPREFIX}", vars) unless File.basename(target).start_with?(libprefix) [:target].sub!(%r{^(.*/)?([^/]+)$}, "\\1#{libprefix}\\2") end unless File.basename(target)["."] [:target] += env.("${SHLIBSUFFIX}", vars) end super() end |
#default_variables(env) ⇒ Hash
Return default construction variables for the builder.
12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/rscons/builders/shared_library.rb', line 12 def default_variables(env) { 'SHLIBPREFIX' => (RUBY_PLATFORM =~ /mingw/ ? '' : 'lib'), 'SHLIBSUFFIX' => (RUBY_PLATFORM =~ /mingw/ ? '.dll' : '.so'), 'SHLDFLAGS' => ['${LDFLAGS}', '-shared'], 'SHLD' => nil, 'SHLIBDIRPREFIX' => '-L', 'SHLIBLINKPREFIX' => '-l', 'SHLDCMD' => ['${SHLD}', '-o', '${_TARGET}', '${SHLDFLAGS}', '${_SOURCES}', '${SHLIBDIRPREFIX}${LIBPATH}', '${SHLIBLINKPREFIX}${LIBS}'] } end |
#features ⇒ Array<String>
Return a set of build features that this builder provides.
28 29 30 |
# File 'lib/rscons/builders/shared_library.rb', line 28 def features %w[shared] end |
#finalize(options) ⇒ String?
Finalize a build.
110 111 112 |
# File 'lib/rscons/builders/shared_library.rb', line 110 def finalize() standard_finalize() end |
#run(options) ⇒ String, false
Run the builder to produce a build target.
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/rscons/builders/shared_library.rb', line 81 def run() target, sources, cache, env, vars, objects = .values_at(:target, :sources, :cache, :env, :vars, :setup_info) ld = env.("${SHLD}", vars) ld = if ld != "" ld elsif sources.find {|s| s.end_with?(*env.("${DSUFFIX}", vars))} "${SHDC}" elsif sources.find {|s| s.end_with?(*env.("${CXXSUFFIX}", vars))} "${SHCXX}" else "${SHCC}" end vars = vars.merge({ '_TARGET' => target, '_SOURCES' => objects, 'SHLD' => ld, }) [:sources] = objects command = env.build_command("${SHLDCMD}", vars) standard_threaded_build("SHLD #{target}", target, command, objects, env, cache) end |
#setup(options) ⇒ Object
Set up a build operation using this builder.
67 68 69 70 71 72 73 |
# File 'lib/rscons/builders/shared_library.rb', line 67 def setup() target, sources, env, vars = .values_at(:target, :sources, :env, :vars) suffixes = env.(["${OBJSUFFIX}", "${LIBSUFFIX}"], vars) # Register builders to build each source to an object file or library. env.register_builds(target, sources, suffixes, vars, features: %w[shared]) end |