ridl 2.5.6 → 2.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/LICENSE +21 -49
- data/README.rdoc +30 -25
- data/lib/ridl/backend.rb +6 -10
- data/lib/ridl/delegate.rb +1 -2
- data/lib/ridl/expression.rb +0 -1
- data/lib/ridl/genfile.rb +0 -1
- data/lib/ridl/node.rb +29 -9
- data/lib/ridl/options.rb +176 -0
- data/lib/ridl/optparse_ext.rb +0 -1
- data/lib/ridl/parser.rb +4 -4
- data/lib/ridl/parser.ry +40 -41
- data/lib/ridl/require.rb +0 -1
- data/lib/ridl/ridl.rb +0 -1
- data/lib/ridl/runner.rb +184 -52
- data/lib/ridl/scanner.rb +87 -87
- data/lib/ridl/type.rb +22 -2
- data/lib/ridl/version.rb +2 -3
- metadata +13 -19
- data/lib/idl/BiDirPolicy.pidl +0 -28
- data/lib/idl/CosNaming.idl +0 -260
- data/lib/idl/IOP.pidl +0 -98
- data/lib/idl/Messaging.pidl +0 -152
- data/lib/idl/PortableServer.pidl +0 -371
- data/lib/idl/TimeBase.pidl +0 -40
- data/lib/idl/orb.idl +0 -200
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 18e62df6c0bae092d3d8f3da6ab5cf8fad2fadfe5e839c72d59660868c187f1a
|
4
|
+
data.tar.gz: 5a51e665b994e566b6579e7f76dab959947b1294ddacc7bd566febef1dbe1766
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d6cce4394f7a366135dd636f935ea90348cba4c2bd20aa95d9f712a88c45cfaacdc82381039e329c1be1bb3d34f9fe70269a1891296ea63179ad8cea0c39ee77
|
7
|
+
data.tar.gz: b2eda0b126d08ed4cdb66bfbd7795b8f7660b45e24776fb655267885f07a444cd47e8fea42fc3893f464ec63fa3ef5e08b722549f9f90425d9708b702382699c
|
data/LICENSE
CHANGED
@@ -1,49 +1,21 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
Warranty
|
24
|
-
|
25
|
-
LICENSED PRODUCT IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
|
26
|
-
THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
27
|
-
PURPOSE, NON-INFRINGEMENT, OR ARISING FROM A COURSE OF DEALING, USAGE OR
|
28
|
-
TRADE PRACTICE.
|
29
|
-
|
30
|
-
Support
|
31
|
-
|
32
|
-
LICENSED PRODUCT IS PROVIDED WITH NO SUPPORT AND WITHOUT ANY OBLIGATION ON
|
33
|
-
THE PART OF REMEDY IT OR ANY OF ITS SUBSIDIARIES OR AFFILIATES TO ASSIST IN
|
34
|
-
ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
|
35
|
-
|
36
|
-
Remedy IT provides support to users who have agreed on the terms of a support
|
37
|
-
contract.
|
38
|
-
|
39
|
-
Liability
|
40
|
-
|
41
|
-
REMEDY IT OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY
|
42
|
-
WITH RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS
|
43
|
-
BY LICENSED PRODUCT OR ANY PART THEREOF.
|
44
|
-
|
45
|
-
IN NO EVENT WILL REMEDY IT OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE
|
46
|
-
FOR ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
|
47
|
-
DAMAGES, EVEN IF REMEDY IT HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
48
|
-
|
49
|
-
RIDL is Copyright Remedy IT. Nijkerk, The Netherlands, 2006-2015.
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2019 Remedy IT Expertise BV
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.rdoc
CHANGED
@@ -1,42 +1,47 @@
|
|
1
|
-
=
|
1
|
+
{<img src="https://badge.fury.io/rb/ridl.svg" alt="Gem Version" />}[https://badge.fury.io/rb/ridl]
|
2
|
+
{<img src="https://dev.azure.com/remedyit/axcioma/_apis/build/status/ridl?branchName=master" alt="Azure pipeline" />}[https://dev.azure.com/remedyit/axcioma/_build?definitionId=7&_a=summary]
|
2
3
|
|
3
|
-
|
4
|
+
= RIDL Compiler
|
4
5
|
|
5
6
|
== Description
|
6
|
-
|
7
|
-
RIDL is a Ruby library implementing an OMG \IDL parser/compiler
|
8
|
-
frontend with support for pluggable (and stackable) backends.
|
9
7
|
|
10
|
-
|
8
|
+
{RIDL}[https://www.remedy.nl/opensource/ridl.html] is a Ruby library implementing an Object Management Group (OMG) {IDL}[https://www.omg.org/spec/IDL] parser/compiler frontend with support for pluggable (and stackable) backends created by {Remedy IT}[https://www.remedy.nl].
|
11
9
|
|
12
|
-
|
13
|
-
OMG standard \IDL interface definitions.
|
14
|
-
The framework includes:
|
10
|
+
== Synopsis
|
15
11
|
|
16
|
-
|
17
|
-
* a
|
12
|
+
RIDL provides a framework for implementing compiler/generators for OMG standard IDL definitions. The framework includes:
|
13
|
+
* a {RACC}[https://github.com/ruby/racc] based parser supplemented with a custom scanner/tokenizer
|
14
|
+
* a complete AST class hierarchy for representing parsed IDL specifications
|
18
15
|
* a complete Type class hierarchy
|
19
|
-
*
|
20
|
-
* a builtin
|
16
|
+
* IDL constants expression support
|
17
|
+
* a builtin IDL preprocessor expression parser/evaluator
|
21
18
|
* a flexible framework for pluggable (and stackable) backends
|
22
|
-
* basic support for backend code
|
19
|
+
* basic support for backend code re-generation
|
20
|
+
* compliant with the {OMG IDL 3.5}[https://www.omg.org/spec/IDL/3.5] standard.
|
21
|
+
|
22
|
+
Remedy IT has developed multiple backends for RIDL. These include:
|
23
|
+
* {R2CORBA}[https://www.remedy.nl/opensource/r2corba.html] generating Ruby code
|
24
|
+
* {TAOX11}[https://www.taox11.org] generating C++11 code
|
25
|
+
* {AXCIOMA}[https://www.axcioma.org] generating C++11 code
|
23
26
|
|
24
|
-
|
27
|
+
When you want to know more about how Remedy IT can assist you with developing your own backend for RIDL contact {sales@remedy.nl}[mailto:sales@remedy.nl].
|
25
28
|
|
26
29
|
== Bugs
|
27
30
|
|
28
|
-
If you find a bug, please report it
|
29
|
-
{issues tracker}[https://osportal.remedy.nl/projects/ridl/issues].
|
31
|
+
If you find a bug, please report it as {RIDL issue}[https://github.com/RemedyIT/ridl/issues].
|
30
32
|
|
31
|
-
==
|
33
|
+
== Warranty
|
32
34
|
|
33
|
-
|
35
|
+
This software is provided "as is" and without any express or implied warranties, including, without limitation, the implied warranties of merchantibility and fitness for a particular purpose.
|
34
36
|
|
35
|
-
|
36
|
-
the LICENSE file.
|
37
|
+
== Installing RIDL
|
37
38
|
|
38
|
-
|
39
|
+
RIDL is distributed as a Ruby Gem. You can download and install RIDL as a Ruby Gem from the common {Rubygems.org}[https://www.rubygems.org/gems/ridl] repository by executing the following command:
|
40
|
+
|
41
|
+
$ gem install ridl
|
42
|
+
|
43
|
+
The RIDL Gem is a Ruby-only Gem without any dependencies.
|
44
|
+
|
45
|
+
== Releasing new RIDL Ruby Gem
|
39
46
|
|
40
|
-
|
41
|
-
warranties, including, without limitation, the implied warranties of
|
42
|
-
merchantibility and fitness for a particular purpose.
|
47
|
+
A new RIDL ruby gem release can be made by incrementing the RIDL version in link:lib/ridl/version.rb and create a new release on {github}[https://github.com/RemedyIT/ridl/releases] matching the new version (for example v2.7.0). The github {Ruby Gem Release}:https://github.com/RemedyIT/ridl/actions?query=workflow%3A%22Ruby+Gem+Release%22 action will automatically create a new gem and push it to {Rubygems.org}[https://www.rubygems.org/gems/ridl].
|
data/lib/ridl/backend.rb
CHANGED
@@ -8,7 +8,6 @@
|
|
8
8
|
# included with this program.
|
9
9
|
#
|
10
10
|
# Copyright (c) Remedy IT Expertise BV
|
11
|
-
# Chamber of commerce Rotterdam nr.276339, The Netherlands
|
12
11
|
#--------------------------------------------------------------------
|
13
12
|
|
14
13
|
module IDL
|
@@ -97,28 +96,25 @@ module IDL
|
|
97
96
|
# base settings
|
98
97
|
@base_backends.reverse.each {|be| be.setup_be(optlist, idl_options) }
|
99
98
|
# initialize this backend
|
100
|
-
_setup_be(optlist, idl_options)
|
99
|
+
_setup_be(optlist, idl_options) if self.respond_to?(:_setup_be, true)
|
101
100
|
end
|
102
101
|
|
103
102
|
def process_input(parser, params)
|
104
|
-
# process input
|
105
|
-
|
106
|
-
|
103
|
+
# process input bottom-up
|
104
|
+
@base_backends.reverse.each {|be| be.process_input(parser, params) }
|
105
|
+
_process_input(parser, params) if self.respond_to?(:_process_input, true)
|
107
106
|
end
|
108
107
|
|
109
108
|
@@null_be = nil
|
110
109
|
|
111
110
|
def self.null_be
|
112
|
-
@@null_be ||= self.configure('null', '.', 'RIDL Null backend',
|
111
|
+
@@null_be ||= self.configure('null', '.', 'RIDL Null backend', "Copyright (c) 2013-#{Time.now.year} Remedy IT Expertise BV, The Netherlands", 1) do |becfg|
|
113
112
|
becfg.on_setup do |optlist, params|
|
114
113
|
# noop
|
115
114
|
IDL.log(0, "Setup called for #{becfg.backend.title}")
|
116
115
|
end
|
117
|
-
becfg.on_process_input do |parser, params|
|
118
|
-
# noop
|
119
|
-
end
|
120
116
|
end
|
121
117
|
end
|
122
118
|
|
123
119
|
end
|
124
|
-
end
|
120
|
+
end
|
data/lib/ridl/delegate.rb
CHANGED
@@ -8,14 +8,13 @@
|
|
8
8
|
# included with this program.
|
9
9
|
#
|
10
10
|
# Copyright (c) Remedy IT Expertise BV
|
11
|
-
# Chamber of commerce Rotterdam nr.276339, The Netherlands
|
12
11
|
#--------------------------------------------------------------------
|
13
12
|
require 'ridl/node'
|
14
13
|
require 'ridl/expression'
|
15
14
|
|
16
15
|
module IDL
|
17
16
|
|
18
|
-
ORB_PIDL = 'orb.pidlc'
|
17
|
+
ORB_PIDL = 'orb.pidlc'.freeze
|
19
18
|
|
20
19
|
class Delegator
|
21
20
|
|
data/lib/ridl/expression.rb
CHANGED
data/lib/ridl/genfile.rb
CHANGED
data/lib/ridl/node.rb
CHANGED
@@ -8,7 +8,6 @@
|
|
8
8
|
# included with this program.
|
9
9
|
#
|
10
10
|
# Copyright (c) Remedy IT Expertise BV
|
11
|
-
# Chamber of commerce Rotterdam nr.276339, The Netherlands
|
12
11
|
#--------------------------------------------------------------------
|
13
12
|
module IDL::AST
|
14
13
|
|
@@ -488,8 +487,12 @@ module IDL::AST
|
|
488
487
|
return _next
|
489
488
|
when IDL::AST::Interface
|
490
489
|
node.annotations.concat(params[:annotations])
|
491
|
-
|
492
|
-
if
|
490
|
+
# in case of a forward declaration in the same module ignore it since a previous declaration already exists
|
491
|
+
if params[:forward]
|
492
|
+
return node if node.enclosure == self
|
493
|
+
# forward declaration in different scope (other module section in same file or other file)
|
494
|
+
elsif node.is_defined?
|
495
|
+
# multiple full declarations are illegal
|
493
496
|
raise RuntimeError, "#{node.typename} \"#{node.name}\" is already defined."
|
494
497
|
end
|
495
498
|
if (node.is_abstract? != params[:abstract]) || (node.is_local? != params[:local]) || (node.is_pseudo? != params[:pseudo])
|
@@ -503,9 +506,15 @@ module IDL::AST
|
|
503
506
|
_intf.instance_variable_set(:@repo_id, node.instance_variable_get(:@repo_id))
|
504
507
|
|
505
508
|
@children << _intf
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
+
|
510
|
+
# in case of a full declaration undo the preceding forward introduction and
|
511
|
+
# replace by full node
|
512
|
+
# (no need to introduce forward declaration since there is a preceding introduction)
|
513
|
+
unless params[:forward]
|
514
|
+
# replace forward node registration
|
515
|
+
node.enclosure.undo_introduction(node)
|
516
|
+
introduce(_intf)
|
517
|
+
end
|
509
518
|
|
510
519
|
return _intf
|
511
520
|
when IDL::AST::Valuetype
|
@@ -671,6 +680,14 @@ module IDL::AST
|
|
671
680
|
@concrete = _param
|
672
681
|
end
|
673
682
|
|
683
|
+
def concrete_matches?(idl_type)
|
684
|
+
if @concrete
|
685
|
+
concrete_type = (@concrete.is_a?(IDL::Type) ? @concrete : @concrete.idltype).resolved_type
|
686
|
+
return concrete_type.matches?(idl_type.resolved_type)
|
687
|
+
end
|
688
|
+
false
|
689
|
+
end
|
690
|
+
|
674
691
|
def self.concrete_param(_context, _node)
|
675
692
|
if _node.is_template?
|
676
693
|
_cnode = if _node.is_a?(IDL::AST::TemplateParam)
|
@@ -746,8 +763,7 @@ module IDL::AST
|
|
746
763
|
# check basetype
|
747
764
|
unless _tptype.basetype.is_a?(IDL::Type::ScopedName) &&
|
748
765
|
_tptype.basetype.is_node?(IDL::AST::TemplateParam) &&
|
749
|
-
_tptype.basetype.node.
|
750
|
-
_tptype.basetype.node.concrete.idltype.resolved_type == _cp.resolved_type.basetype.resolved_type
|
766
|
+
_tptype.basetype.node.concrete_matches?(_cp.resolved_type.basetype)
|
751
767
|
raise RuntimeError, "invalid sequence type as instantiation parameter for #{typename} #{scoped_lm_name}: expected #{_tp.idltype.typename} for #{_tp.name}"
|
752
768
|
end
|
753
769
|
end
|
@@ -2792,6 +2808,7 @@ module IDL::AST
|
|
2792
2808
|
def instantiate(_context, _enclosure)
|
2793
2809
|
super(_context, _enclosure, {})
|
2794
2810
|
end
|
2811
|
+
|
2795
2812
|
end # Enum
|
2796
2813
|
|
2797
2814
|
class Enumerator < Leaf
|
@@ -2817,7 +2834,10 @@ module IDL::AST
|
|
2817
2834
|
end
|
2818
2835
|
|
2819
2836
|
def instantiate(_context, _enclosure)
|
2820
|
-
|
2837
|
+
# find already instantiated Enum parent
|
2838
|
+
_enum = _enclosure.resolve(@enum.name)
|
2839
|
+
raise RuntimeError, "Unable to resolve instantiated Enum scope for enumerator #{@enum.name}::#{name} instantiation" unless _enum
|
2840
|
+
super(_context, _enclosure, { :enum => _enum, :value => @value })
|
2821
2841
|
end
|
2822
2842
|
end # Enumerator
|
2823
2843
|
|
data/lib/ridl/options.rb
ADDED
@@ -0,0 +1,176 @@
|
|
1
|
+
#--------------------------------------------------------------------
|
2
|
+
# options.rb - Ruby IDL compiler options class
|
3
|
+
#
|
4
|
+
# Author: Martin Corino
|
5
|
+
#
|
6
|
+
# This program is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the RIDL LICENSE which is
|
8
|
+
# included with this program.
|
9
|
+
#
|
10
|
+
# Copyright (c) Remedy IT Expertise BV
|
11
|
+
#--------------------------------------------------------------------
|
12
|
+
|
13
|
+
require 'ostruct'
|
14
|
+
require 'json'
|
15
|
+
|
16
|
+
module IDL
|
17
|
+
|
18
|
+
RIDLRC = '.ridlrc'
|
19
|
+
RIDLRC_GLOBAL = File.expand_path(File.join(ENV['HOME'] || ENV['HOMEPATH'] || '~', RIDLRC))
|
20
|
+
|
21
|
+
class Options < OpenStruct
|
22
|
+
|
23
|
+
def initialize(hash=nil, marked=nil)
|
24
|
+
super(hash)
|
25
|
+
@marked = marked
|
26
|
+
end
|
27
|
+
|
28
|
+
def merge!(from, *keys)
|
29
|
+
_merge(@table, from, *keys)
|
30
|
+
self
|
31
|
+
end
|
32
|
+
|
33
|
+
def merge(from, *keys)
|
34
|
+
self.dup.merge!(from, *keys)
|
35
|
+
end
|
36
|
+
|
37
|
+
def copy!(from, *keys)
|
38
|
+
keys.flatten.each {|k| self[k] = from[k] }
|
39
|
+
self
|
40
|
+
end
|
41
|
+
|
42
|
+
def copy(from, *keys)
|
43
|
+
self.dup.copy!(from, *keys)
|
44
|
+
end
|
45
|
+
|
46
|
+
def delete(k)
|
47
|
+
modifiable.delete(k)
|
48
|
+
end
|
49
|
+
|
50
|
+
def has_key?(k)
|
51
|
+
@table.has_key?(k)
|
52
|
+
end
|
53
|
+
|
54
|
+
def keys
|
55
|
+
@table.keys
|
56
|
+
end
|
57
|
+
|
58
|
+
def dup
|
59
|
+
self.class.new(_dup_elem(@table), @marked)
|
60
|
+
end
|
61
|
+
|
62
|
+
def mark
|
63
|
+
@marked = _dup_elem(@table)
|
64
|
+
end
|
65
|
+
|
66
|
+
def restore
|
67
|
+
self.class.new(_dup_elem(@marked || @table), @marked)
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
def load(rcpath)
|
72
|
+
IDL.log(3, "Loading #{RIDLRC} from #{rcpath}")
|
73
|
+
_cfg = JSON.parse(IO.read(rcpath))
|
74
|
+
IDL.log(4, "Read from #{rcpath}: [#{_cfg}]")
|
75
|
+
_rcdir = File.dirname(rcpath)
|
76
|
+
# handle automatic env var expansion in ridl be_paths
|
77
|
+
_cfg['be_path'] = (_cfg['be_path'] || []).collect do |p|
|
78
|
+
IDL.log(5, "Examining RIDL be path [#{p}]")
|
79
|
+
# for paths coming from rc files environment vars are immediately expanded and
|
80
|
+
p.gsub!(/\$([^\s\/]+)/) { |m| ENV[$1] }
|
81
|
+
IDL.log(6, "Expanded RIDL be path [#{p}]")
|
82
|
+
# resulting relative paths converted to absolute paths
|
83
|
+
_fp = File.expand_path(p, _rcdir)
|
84
|
+
if File.directory?(_fp) # relative to rc location?
|
85
|
+
p = _fp
|
86
|
+
end # or relative to working dir
|
87
|
+
IDL.fatal("Cannot access RIDL backend search path #{p} configured in #{rcpath}") unless File.directory?(p)
|
88
|
+
IDL.log(4, "Adding RIDL backend search path : #{p}")
|
89
|
+
p
|
90
|
+
end
|
91
|
+
merge!(_cfg)
|
92
|
+
end
|
93
|
+
|
94
|
+
protected
|
95
|
+
|
96
|
+
def _merge(to, from, *keys)
|
97
|
+
keys = keys.flatten.collect {|k| k.to_sym}
|
98
|
+
keys = from.keys if keys.empty?
|
99
|
+
keys.each do |k|
|
100
|
+
if from.has_key?(k)
|
101
|
+
v = from[k]
|
102
|
+
k = k.to_sym
|
103
|
+
if to.has_key?(k)
|
104
|
+
case to[k]
|
105
|
+
when Array
|
106
|
+
to[k].concat v
|
107
|
+
when Hash
|
108
|
+
to[k].merge!(Hash === v ? v : v.to_h)
|
109
|
+
when OpenStruct
|
110
|
+
_merge(to[k].__send__(:table), v)
|
111
|
+
else
|
112
|
+
to[k] = v
|
113
|
+
end
|
114
|
+
else
|
115
|
+
to[k] = v
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
to
|
120
|
+
end
|
121
|
+
|
122
|
+
def _dup_elem(v)
|
123
|
+
case v
|
124
|
+
when Array
|
125
|
+
v.collect {|e| _dup_elem(e) }
|
126
|
+
when Hash
|
127
|
+
v.inject({}) {|h, (k,e)| h[k] = _dup_elem(e); h }
|
128
|
+
when OpenStruct
|
129
|
+
v.class.new(_dup_elem(v.__send__(:table)))
|
130
|
+
else
|
131
|
+
v
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
public
|
136
|
+
|
137
|
+
def self.load_config(opt)
|
138
|
+
# first collect config from known (standard and configured) locations
|
139
|
+
_rc_paths = [ RIDLRC_GLOBAL ]
|
140
|
+
_loaded_rc_paths = []
|
141
|
+
(ENV['RIDLRC'] || '').split(/:|;/).each do |p|
|
142
|
+
_rc_paths << p unless _rc_paths.include?(p)
|
143
|
+
end
|
144
|
+
_rc_paths.collect {|path| File.expand_path(path) }.each do |rcp|
|
145
|
+
IDL.log(3, "Testing rc path #{rcp}")
|
146
|
+
if File.readable?(rcp) && !_loaded_rc_paths.include?(rcp)
|
147
|
+
opt.load(rcp)
|
148
|
+
_loaded_rc_paths << rcp
|
149
|
+
else
|
150
|
+
IDL.log(3, "Ignoring #{File.readable?(rcp) ? 'already loaded' : 'inaccessible'} rc path #{rcp}")
|
151
|
+
end
|
152
|
+
end
|
153
|
+
# now scan working path for any rc files
|
154
|
+
_cwd = File.expand_path(Dir.getwd)
|
155
|
+
IDL.log(3, "scanning working path #{_cwd} for rc files")
|
156
|
+
# first collect any rc files found
|
157
|
+
_rc_paths = []
|
158
|
+
begin
|
159
|
+
_rcp = File.join(_cwd, RIDLRC)
|
160
|
+
if File.readable?(_rcp) && !_loaded_rc_paths.include?(_rcp)
|
161
|
+
_rc_paths << _rcp unless _rc_paths.include?(_rcp)
|
162
|
+
else
|
163
|
+
IDL.log(3, "Ignoring #{File.readable?(_rcp) ? 'already loaded' : 'inaccessible'} rc path #{_rcp}")
|
164
|
+
end
|
165
|
+
break if /\A(.:(\\|\/)|\.|\/)\Z/ =~ _cwd
|
166
|
+
_cwd = File.dirname(_cwd)
|
167
|
+
end while true
|
168
|
+
# now load them in reverse order
|
169
|
+
_rc_paths.reverse.each do |_rcp|
|
170
|
+
opt.load(_rcp)
|
171
|
+
_loaded_rc_paths << _rcp
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
end
|