Welcome to mirror list, hosted at ThFree Co, Russian Federation.

Rakefile « osrm-backend « osrm « 3party - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 1c848bb07dca5ec23e6a79c07962458ece9cfdcd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
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
require 'OSM/StreamParser'
require 'socket'
require 'digest/sha1'
require 'cucumber/rake/task'
require 'sys/proctable'

BUILD_FOLDER = 'build'
DATA_FOLDER = 'sandbox'
PROFILE = 'bicycle'
OSRM_PORT = 5000
PROFILES_FOLDER = '../profiles'

Cucumber::Rake::Task.new do |t|
  t.cucumber_opts = %w{--format pretty}
end

areas = {
  :kbh => { :country => 'denmark', :bbox => 'top=55.6972 left=12.5222 right=12.624 bottom=55.6376' },
  :frd => { :country => 'denmark', :bbox => 'top=55.7007 left=12.4765 bottom=55.6576 right=12.5698' },
  :regh => { :country => 'denmark', :bbox => 'top=56.164 left=11.792 bottom=55.403 right=12.731' },
  :denmark => { :country => 'denmark', :bbox => nil },
  :skaane => { :country => 'sweden', :bbox => 'top=56.55 left=12.4 bottom=55.3 right=14.6' }
}



osm_data_area_name = ARGV[1] ? ARGV[1].to_s.to_sym : :kbh
raise "Unknown data area." unless areas[osm_data_area_name]
osm_data_country = areas[osm_data_area_name][:country]
osm_data_area_bbox = areas[osm_data_area_name][:bbox]


task osm_data_area_name.to_sym {}   #define empty task to prevent rake from whining. will break if area has same name as a task


def each_process name, &block
  Sys::ProcTable.ps do |process|
    if process.comm.strip == name.strip && process.state != 'zombie'
      yield process.pid.to_i, process.state.strip
    end
  end
end

def up?
  find_pid('osrm-routed') != nil
end

def find_pid name
  each_process(name) { |pid,state| return pid.to_i }
  return nil
end

def wait_for_shutdown name
  timeout = 10
  (timeout*10).times do
    return if find_pid(name) == nil
    sleep 0.1
  end
  raise "*** Could not terminate #{name}."
end


desc "Rebuild and run tests."
task :default => [:build]

desc "Build using CMake."
task :build do
  if Dir.exists? BUILD_FOLDER
    Dir.chdir BUILD_FOLDER do
      system "make"
    end
  else
    system "mkdir build; cd build; cmake ..; make"
  end
end

desc "Setup config files."
task :setup do
end

desc "Download OSM data."
task :download do
  Dir.mkdir "#{DATA_FOLDER}" unless File.exist? "#{DATA_FOLDER}"
  puts "Downloading..."
  puts "curl http://download.geofabrik.de/europe/#{osm_data_country}-latest.osm.pbf -o #{DATA_FOLDER}/#{osm_data_country}.osm.pbf"
  raise "Error while downloading data." unless system "curl http://download.geofabrik.de/europe/#{osm_data_country}-latest.osm.pbf -o #{DATA_FOLDER}/#{osm_data_country}.osm.pbf"
  if osm_data_area_bbox
    puts "Cropping and converting to protobuffer..."
    raise "Error while cropping data." unless system "osmosis --read-pbf file=#{DATA_FOLDER}/#{osm_data_country}.osm.pbf --bounding-box #{osm_data_area_bbox} --write-pbf file=#{DATA_FOLDER}/#{osm_data_area_name}.osm.pbf omitmetadata=true"
  end
end

desc "Crop OSM data"
task :crop do
  if osm_data_area_bbox
    raise "Error while cropping data." unless system "osmosis --read-pbf file=#{DATA_FOLDER}/#{osm_data_country}.osm.pbf --bounding-box #{osm_data_area_bbox} --write-pbf file=#{DATA_FOLDER}/#{osm_data_area_name}.osm.pbf omitmetadata=true"
  end
end

desc "Reprocess OSM data."
task :process => [:extract,:prepare] do
end

desc "Extract OSM data."
task :extract do
  Dir.chdir DATA_FOLDER do
    raise "Error while extracting data." unless system "../#{BUILD_FOLDER}/osrm-extract #{osm_data_area_name}.osm.pbf --profile ../profiles/#{PROFILE}.lua"
  end
end

desc "Prepare OSM data."
task :prepare do
  Dir.chdir DATA_FOLDER do
    raise "Error while preparing data." unless system "../#{BUILD_FOLDER}/osrm-prepare #{osm_data_area_name}.osrm --profile ../profiles/#{PROFILE}.lua"
  end
end

desc "Delete preprocessing files."
task :clean do
  File.delete *Dir.glob("#{DATA_FOLDER}/*.osrm")
  File.delete *Dir.glob("#{DATA_FOLDER}/*.osrm.*")
end

desc "Run all cucumber test"
task :test do
  system "cucumber"
  puts
end

desc "Run the routing server in the terminal. Press Ctrl-C to stop."
task :run do
  Dir.chdir DATA_FOLDER do
    system "../#{BUILD_FOLDER}/osrm-routed #{osm_data_area_name}.osrm --port #{OSRM_PORT}"
  end
end

desc "Launch the routing server in the background. Use rake:down to stop it."
task :up do
  Dir.chdir DATA_FOLDER do
    abort("Already up.") if up?
    pipe = IO.popen("../#{BUILD_FOLDER}/osrm-routed #{osm_data_area_name}.osrm --port #{OSRM_PORT} 1>>osrm-routed.log 2>>osrm-routed.log")
    timeout = 5
    (timeout*10).times do
      begin
        socket = TCPSocket.new('localhost', OSRM_PORT)
        socket.puts 'ping'
      rescue Errno::ECONNREFUSED
        sleep 0.1
      end
    end
  end
end

desc "Stop the routing server."
task :down do
  pid = find_pid 'osrm-routed'
  if pid
    Process.kill 'TERM', pid
  else
    puts "Already down."
  end 
end

desc "Kill all osrm-extract, osrm-prepare and osrm-routed processes."
task :kill do
  each_process('osrm-routed') { |pid,state| Process.kill 'KILL', pid }
  each_process('osrm-prepare') { |pid,state| Process.kill 'KILL', pid }
  each_process('osrm-extract') { |pid,state| Process.kill 'KILL', pid }
  wait_for_shutdown 'osrm-routed'
  wait_for_shutdown 'osrm-prepare'
  wait_for_shutdown 'osrm-extract'  
end

desc "Get PIDs of all osrm-extract, osrm-prepare and osrm-routed processes."
task :pid do
  each_process 'osrm-routed' do |pid,state|
    puts "#{pid}\t#{state}"
  end
end

desc "Stop, reprocess and restart."
task :update => [:down,:process,:up] do
end


desc "Remove test cache files."
task :sweep do
  system "rm test/cache/*"
end