Class: Orchid::Project

Inherits:
Rake::TaskLib
  • Object
show all
Defined in:
lib/orchid/project.rb

Direct Known Subclasses

App, Library

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Project

Returns a new instance of Project.



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/orchid/project.rb', line 86

def initialize(name)
  @name = name.to_s
  @version = "0.0.1"
  @compiler = Orchid::Compiler.new()
  
  @src = Pathname.new("./#{@name}/src").expand_path
  @res = Pathname.new("./#{@name}/res").expand_path
  @build = Pathname.new("./build/#{@name}").expand_path
  
  @bindir = Pathname.new(Orchid::DIRS[:bindir]).expand_path
  @libdir = Pathname.new(Orchid::DIRS[:libdir]).expand_path
  @datadir = Pathname.new(Orchid::DIRS[:datadir]).expand_path
  
  @packages = [{:name => "glib-2.0", :version => Orchid::Version.new(nil)}]
  @dependencies = []
  
  @procedures = {}
end

Instance Attribute Details

#bindirObject

Returns the value of attribute bindir.



33
34
35
# File 'lib/orchid/project.rb', line 33

def bindir
  @bindir
end

#buildObject

Returns the value of attribute build.



32
33
34
# File 'lib/orchid/project.rb', line 32

def build
  @build
end

#compilerObject

Returns the value of attribute compiler.



35
36
37
# File 'lib/orchid/project.rb', line 35

def compiler
  @compiler
end

#datadirObject

Returns the value of attribute datadir.



33
34
35
# File 'lib/orchid/project.rb', line 33

def datadir
  @datadir
end

#dependenciesObject

Returns the value of attribute dependencies.



34
35
36
# File 'lib/orchid/project.rb', line 34

def dependencies
  @dependencies
end

#libdirObject

Returns the value of attribute libdir.



33
34
35
# File 'lib/orchid/project.rb', line 33

def libdir
  @libdir
end

#nameObject

Returns the value of attribute name.



31
32
33
# File 'lib/orchid/project.rb', line 31

def name
  @name
end

#packagesObject

Returns the value of attribute packages.



34
35
36
# File 'lib/orchid/project.rb', line 34

def packages
  @packages
end

#proceduresObject

Returns the value of attribute procedures.



35
36
37
# File 'lib/orchid/project.rb', line 35

def procedures
  @procedures
end

#resObject

Returns the value of attribute res.



32
33
34
# File 'lib/orchid/project.rb', line 32

def res
  @res
end

#resourcesObject (readonly)

Returns the value of attribute resources.



37
38
39
# File 'lib/orchid/project.rb', line 37

def resources
  @resources
end

#sourcesObject (readonly)

Returns the value of attribute sources.



37
38
39
# File 'lib/orchid/project.rb', line 37

def sources
  @sources
end

#srcObject

Returns the value of attribute src.



32
33
34
# File 'lib/orchid/project.rb', line 32

def src
  @src
end

#versionObject

Returns the value of attribute version.



31
32
33
# File 'lib/orchid/project.rb', line 31

def version
  @version
end

Instance Method Details

#check_dependenciesObject



128
129
130
131
132
133
134
135
136
# File 'lib/orchid/project.rb', line 128

def check_dependencies
  @dependencies.each do |dependency|
    project = Orchid::PROJECTS[dependency]
    
    if project
      project.dependability @compiler
    end
  end
end

#check_packagesObject



118
119
120
121
122
123
124
125
126
# File 'lib/orchid/project.rb', line 118

def check_packages    
  @packages.to_a.each do |package|
    package = Orchid::Package.lookup(package[:name], :version => package[:version].to_a, :vapidirs => @compiler.vapidirs)
    
    if package
      @compiler.pkgs << package.name
    end
  end
end

#define_tasksObject



138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
# File 'lib/orchid/project.rb', line 138

def define_tasks
  directory @build.to_s
  
  debug = "debug:#{@name}"
  release = "release:#{@name}"
  
  file debug => [@build.to_s] do
    check_packages
    check_dependencies
    
    @compiler.run()
  end
  
  file release => [@build.to_s] do
    check_packages
    check_dependencies
    
    @compiler.run()
  end
  
  namespace :build do
    desc "Builds #{@name}; target is 'debug' or 'release'."
    task @name.downcase, :target do |task, arguments|
      arguments.with_defaults(:target => :debug)
      
      run_dependencies(arguments.target.to_sym)
      
      if arguments.target.to_sym == :debug
        @compiler.debug = true
        @compiler.defines << ["DEBUG", "ORCHID"] 
        
        Rake::Task[debug].reenable
        Rake::Task[debug].invoke
      else
        @compiler.defines << "ORCHID"
        
        Rake::Task[release].reenable
        Rake::Task[release].invoke
      end
      
      cp_r File.join(@res.to_s, "."), @build.to_s if @res.directory?
      
      @procedures[:build].call(self) if @procedures[:build]
    end
  end
  
  namespace :install do
    desc "Installs #{@name}; target is 'debug' or 'release'."
    task @name.downcase, :target do |task, arguments|
      arguments.with_defaults(:target => :debug)
      
      Rake::Task["build:#{@name.downcase}"].invoke(arguments.target)
      
      @procedures[:install].call(self) if @procedures[:install]
    end
  end
end

#dependability(compiler) ⇒ Object

abstract method that expresses dependability of a project towards another project’s compiler; see check_dependencies



198
199
200
# File 'lib/orchid/project.rb', line 198

def dependability(compiler)
  return nil
end

#registerObject



105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/orchid/project.rb', line 105

def register
  Orchid.register_project self
  
  @sources = FileList[@src + "**", "*.vala"].resolve    
  @compiler.output ||= "#{@name}"
  @compiler.basedir = @src.to_s
  @compiler.directory = @build.to_s
  @compiler.sources << @sources
  @compiler.sources.flatten!
  
  define_tasks
end