| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- DEPENDENCIES_LIBRARIES.each do |deplib|
- # Look up the name of this dependency library
- deplib_name = @ceedling[DEPENDENCIES_SYM].get_name(deplib)
- # Make sure the required working directories exists
- # (don't worry about the subdirectories. That's the job of the dep's build tool)
- paths = @ceedling[DEPENDENCIES_SYM].get_working_paths(deplib)
- paths.each {|path| directory(path) }
- task :directories => paths
- all_deps = @ceedling[DEPENDENCIES_SYM].get_static_libraries_for_dependency(deplib) +
- @ceedling[DEPENDENCIES_SYM].get_dynamic_libraries_for_dependency(deplib) +
- @ceedling[DEPENDENCIES_SYM].get_include_directories_for_dependency(deplib) +
- @ceedling[DEPENDENCIES_SYM].get_source_files_for_dependency(deplib)
- # Add a rule for building the actual libraries from dependency list
- (@ceedling[DEPENDENCIES_SYM].get_static_libraries_for_dependency(deplib) +
- @ceedling[DEPENDENCIES_SYM].get_dynamic_libraries_for_dependency(deplib)
- ).each do |libpath|
- file libpath do |filetask|
- path = filetask.name
- # We double-check that it doesn't already exist, because this process sometimes
- # produces multiple files, but they may have already been flagged as invoked
- unless (File.exists?(path))
- # Set Environment Variables, Fetch, and Build
- @ceedling[DEPENDENCIES_SYM].set_env_if_required(path)
- @ceedling[DEPENDENCIES_SYM].fetch_if_required(path)
- @ceedling[DEPENDENCIES_SYM].build_if_required(path)
- end
- end
- end
- # Add a rule for building the source and includes from dependency list
- (@ceedling[DEPENDENCIES_SYM].get_include_directories_for_dependency(deplib) +
- @ceedling[DEPENDENCIES_SYM].get_source_files_for_dependency(deplib)
- ).each do |libpath|
- task libpath do |filetask|
- path = filetask.name
- unless (File.file?(path) || File.directory?(path))
- # Set Environment Variables, Fetch, and Build
- @ceedling[DEPENDENCIES_SYM].set_env_if_required(path)
- @ceedling[DEPENDENCIES_SYM].fetch_if_required(path)
- @ceedling[DEPENDENCIES_SYM].build_if_required(path)
- end
- end
- end
- # Give ourselves a way to trigger individual dependencies
- namespace DEPENDENCIES_SYM do
- namespace :deploy do
- # Add task to directly just build this dependency
- task(deplib_name => @ceedling[DEPENDENCIES_SYM].get_dynamic_libraries_for_dependency(deplib)) do |t,args|
- @ceedling[DEPENDENCIES_SYM].deploy_if_required(deplib_name)
- end
- end
- namespace :make do
- # Add task to directly just build this dependency
- task(deplib_name => all_deps)
- end
- namespace :clean do
- # Add task to directly clobber this dependency
- task(deplib_name) do
- @ceedling[DEPENDENCIES_SYM].clean_if_required(deplib_name)
- end
- end
- namespace :fetch do
- # Add task to directly clobber this dependency
- task(deplib_name) do
- @ceedling[DEPENDENCIES_SYM].fetch_if_required(deplib_name)
- end
- end
- end
- # Add source files to our list of things to build during release
- source_files = @ceedling[DEPENDENCIES_SYM].get_source_files_for_dependency(deplib)
- task PROJECT_RELEASE_BUILD_TARGET => source_files
- # Finally, add the static libraries to our RELEASE build dependency list
- static_libs = @ceedling[DEPENDENCIES_SYM].get_static_libraries_for_dependency(deplib)
- task RELEASE_SYM => static_libs
- # Add the dynamic libraries to our RELEASE task dependency list so that they will be copied automatically
- dynamic_libs = @ceedling[DEPENDENCIES_SYM].get_dynamic_libraries_for_dependency(deplib)
- task RELEASE_SYM => dynamic_libs
- # Add the include dirs / files to our list of dependencies for release
- headers = @ceedling[DEPENDENCIES_SYM].get_include_directories_for_dependency(deplib)
- task RELEASE_SYM => headers
- # Paths to Libraries need to be Added to the Lib Path List
- all_libs = static_libs + dynamic_libs
- PATHS_LIBRARIES ||= []
- all_libs.each {|lib| PATHS_LIBRARIES << File.dirname(lib) }
- PATHS_LIBRARIES.uniq!
- PATHS_LIBRARIES.reject!{|s| s.empty?}
- # Libraries Need to be Added to the Library List
- LIBRARIES_SYSTEM ||= []
- all_libs.each {|lib| LIBRARIES_SYSTEM << File.basename(lib,'.*').sub(/^lib/,'') }
- LIBRARIES_SYSTEM.uniq!
- LIBRARIES_SYSTEM.reject!{|s| s.empty?}
- end
- # Add any artifact:include or :source folders to our release & test includes paths so linking and mocking work.
- @ceedling[DEPENDENCIES_SYM].add_headers_and_sources()
- # Add tasks for building or cleaning ALL depencies
- namespace DEPENDENCIES_SYM do
- desc "Deploy missing dependencies."
- task :deploy => DEPENDENCIES_LIBRARIES.map{|deplib| "#{DEPENDENCIES_SYM}:deploy:#{@ceedling[DEPENDENCIES_SYM].get_name(deplib)}"}
- desc "Build any missing dependencies."
- task :make => DEPENDENCIES_LIBRARIES.map{|deplib| "#{DEPENDENCIES_SYM}:make:#{@ceedling[DEPENDENCIES_SYM].get_name(deplib)}"}
- desc "Clean all dependencies."
- task :clean => DEPENDENCIES_LIBRARIES.map{|deplib| "#{DEPENDENCIES_SYM}:clean:#{@ceedling[DEPENDENCIES_SYM].get_name(deplib)}"}
- desc "Fetch all dependencies."
- task :fetch => DEPENDENCIES_LIBRARIES.map{|deplib| "#{DEPENDENCIES_SYM}:fetch:#{@ceedling[DEPENDENCIES_SYM].get_name(deplib)}"}
- end
- namespace :files do
- desc "List all collected dependency libraries."
- task :dependencies do
- puts "dependency files:"
- deps = []
- DEPENDENCIES_LIBRARIES.each do |deplib|
- deps << @ceedling[DEPENDENCIES_SYM].get_static_libraries_for_dependency(deplib)
- deps << @ceedling[DEPENDENCIES_SYM].get_dynamic_libraries_for_dependency(deplib)
- end
- deps.flatten!
- deps.sort.each {|dep| puts " - #{dep}"}
- puts "file count: #{deps.size}"
- end
- end
- # Make sure that we build dependencies before attempting to tackle any of the unit tests
- Rake::Task[:test_deps].enhance ['dependencies:make']
|