<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><style type="text/css"><!--
#msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; }
#msg ul, pre { overflow: auto; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<title>[756] trunk/alexandria: Made changes to allow Alexandria to be built as a native Debian source</title>
</head>
<body>
<div id="msg">
<dl>
<dt>Revision</dt> <dd>756</dd>
<dt>Author</dt> <dd>cathalmagus</dd>
<dt>Date</dt> <dd>2007-10-09 19:36:13 -0400 (Tue, 09 Oct 2007)</dd>
</dl>
<h3>Log Message</h3>
<pre>Made changes to allow Alexandria to be built as a native Debian source
package, with dpkg-buildpackage. Also cleaned up install.rb files
(pre-*.rb and post-*.rb their job is now done in the Rakefile) and an
old postinst script.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkalexandriaRakefile">trunk/alexandria/Rakefile</a></li>
<li><a href="#trunkalexandriadebianrules">trunk/alexandria/debian/rules</a></li>
<li><a href="#trunkalexandriatasksrb">trunk/alexandria/tasks.rb</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkalexandriadebiancontrol">trunk/alexandria/debian/control</a></li>
</ul>
<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkalexandriadataomfalexandriapostinstallrb">trunk/alexandria/data/omf/alexandria/post-install.rb</a></li>
<li><a href="#trunkalexandriadataomfalexandriapresetuprb">trunk/alexandria/data/omf/alexandria/pre-setup.rb</a></li>
<li><a href="#trunkalexandriadebiancontroltmpl">trunk/alexandria/debian/control.tmpl</a></li>
<li><a href="#trunkalexandriamakeconfigrb">trunk/alexandria/make-config.rb</a></li>
<li><a href="#trunkalexandriapostinst">trunk/alexandria/postinst</a></li>
<li><a href="#trunkalexandriapresetuprb">trunk/alexandria/pre-setup.rb</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkalexandriaRakefile"></a>
<div class="modfile"><h4>Modified: trunk/alexandria/Rakefile (755 => 756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/alexandria/Rakefile        2007-10-09 17:29:57 UTC (rev 755)
+++ trunk/alexandria/Rakefile        2007-10-09 23:36:13 UTC (rev 756)
</span><span class="lines">@@ -18,7 +18,7 @@
</span><span class="cx"> b.author = 'Joseph Method' # Maintainer
</span><span class="cx"> b.email = 'tristil@gmail.com' # Maintainer e-mail
</span><span class="cx"> b.summary = 'A book library manager for Gnome'
</span><del>-
</del><ins>+
</ins><span class="cx"> # ... this next bit is from Hoe and may yet be implemented ....
</span><span class="cx"> # b.description = b.paragraphs_of('doc/README', 2..5).join("\n\n")
</span><span class="cx"> # b.url = b.paragraphs_of('README.txt', 0).first.split(/\n/)[1..-1]
</span><span class="lines">@@ -39,7 +39,7 @@
</span><span class="cx"> 'TODO']
</span><span class="cx"> b.rdoc.main = 'doc/README'
</span><span class="cx">
</span><del>- b.debinstall.staging_dir = 'pkg/tmp-alexandria-deb'
</del><ins>+ b.debinstall.staging_dir = 'debian/tmp'
</ins><span class="cx"> end
</span><span class="cx">
</span><span class="cx"> ##
</span><span class="lines">@@ -52,13 +52,13 @@
</span><span class="cx"> puts "Website built."
</span><span class="cx"> end
</span><span class="cx">
</span><del>-# stolen from newgem
</del><ins>+# rsync upload technique is from newgem (tasks/website.rake)
</ins><span class="cx"> desc 'Upload website files to rubyforge'
</span><span class="cx"> task :website_upload => [:docs, 'spec:rcov'] do
</span><span class="cx"> sh 'cp -rf coverage/* website/site/rcov'
</span><span class="cx"> sh 'cp -rf doc/* website/site/rdoc'
</span><span class="cx"> sh 'rake spec:html > website/site/spec_report.html'
</span><del>- host = ENV["ADMIN_USER"] ? "#{ENV['ADMIN_USER']}@rubyforge.org" : "method@rubyforge.org"
</del><ins>+ host = ENV["ADMIN_USER"] ? "#{ENV['ADMIN_USER']}@rubyforge.org" : "method@rubyforge.org"
</ins><span class="cx"> remote_dir = "/var/www/gforge-projects/alexandria/"
</span><span class="cx"> local_dir = 'website/site'
</span><span class="cx"> sh %{rsync -aCv #{local_dir}/ #{host}:#{remote_dir}}
</span></span></pre></div>
<a id="trunkalexandriadataomfalexandriapostinstallrb"></a>
<div class="delfile"><h4>Deleted: trunk/alexandria/data/omf/alexandria/post-install.rb (755 => 756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/alexandria/data/omf/alexandria/post-install.rb        2007-10-09 17:29:57 UTC (rev 755)
+++ trunk/alexandria/data/omf/alexandria/post-install.rb        2007-10-09 23:36:13 UTC (rev 756)
</span><span class="lines">@@ -1,9 +0,0 @@
</span><del>-# Copyright (C) 2005-1006 Laurent Sansonetti
-
-unless system("which scrollkeeper-update")
- $stderr.puts "scrollkeeper-update cannot be found, is Scrollkeeper correctly " +
- "installed?"
- exit 1
-end
-
-system('scrollkeeper-update -q alexandria-C.omf') or exit 1
</del></span></pre></div>
<a id="trunkalexandriadataomfalexandriapresetuprb"></a>
<div class="delfile"><h4>Deleted: trunk/alexandria/data/omf/alexandria/pre-setup.rb (755 => 756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/alexandria/data/omf/alexandria/pre-setup.rb        2007-10-09 17:29:57 UTC (rev 755)
+++ trunk/alexandria/data/omf/alexandria/pre-setup.rb        2007-10-09 23:36:13 UTC (rev 756)
</span><span class="lines">@@ -1,8 +0,0 @@
</span><del>-# Copyright (C) 2005-2006 Laurent Sansonetti
-
-path = File.join(config('data-dir'), 'gnome', 'help', 'alexandria', 'C', 'alexandria.xml')
-data = IO.read('alexandria-C.omf.in')
-data.sub!(/PATH_TO_DOC_FILE/, path)
-File.open('alexandria-C.omf', 'w') { |io| io.puts data }
-
-
</del></span></pre></div>
<a id="trunkalexandriadebiancontrol"></a>
<div class="addfile"><h4>Added: trunk/alexandria/debian/control (0 => 756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/alexandria/debian/control         (rev 0)
+++ trunk/alexandria/debian/control        2007-10-09 23:36:13 UTC (rev 756)
</span><span class="lines">@@ -0,0 +1,25 @@
</span><ins>+Source: alexandria
+Section: gnome
+Priority: extra
+Maintainer: Joseph Method <tristil@gmail.com>
+Build-Depends: ruby1.8, rake, xsltproc, docbook-xsl, gettext, intltool
+Standards-Version: 3.6.2
+
+Package: alexandria
+Section: gnome
+Priority: extra
+Architecture: all
+Depends: ruby1.8, libamazon-ruby (>= 0.8.3), libgnome2-ruby (>= 0.12.0), libglade2-ruby (>= 0.12.0), libgconf2-ruby (>= 0.12.0), libyaml-ruby1.8, libgettext-ruby1.8, gconf2 (>= 2.12.1-4ubuntu1)
+Description: a GNOME application for managing book collections
+ Alexandria is a program for organising collections of books. It
+ .
+ * retrieves and displays book information (including cover pictures) from
+ several online libraries, such as Amazon, Proxis and Barnes and Noble
+ * allows books to be added and updated by hand
+ * enables searches either by EAN/ISBN, title, authors or keyword
+ * can import and export data into ONIX, Tellico and ISBN-list formats
+ * features a HIG-compliant user interface
+ * handles book rating and notes
+ * supports CueCat (R) barcode readers
+ .
+ Website: http://alexandria.rubyforge.org/
</ins></span></pre></div>
<a id="trunkalexandriadebiancontroltmpl"></a>
<div class="delfile"><h4>Deleted: trunk/alexandria/debian/control.tmpl (755 => 756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/alexandria/debian/control.tmpl        2007-10-09 17:29:57 UTC (rev 755)
+++ trunk/alexandria/debian/control.tmpl        2007-10-09 23:36:13 UTC (rev 756)
</span><span class="lines">@@ -1,21 +0,0 @@
</span><del>-Package: #name#
-Version: #version#
-Section: gnome
-Priority: extra
-Architecture: all
-Depends: ruby1.8, libamazon-ruby (>= 0.8.3), libgnome2-ruby (>= 0.12.0), libglade2-ruby (>= 0.12.0), libgconf2-ruby (>= 0.12.0), libyaml-ruby1.8, libgettext-ruby1.8, gconf2 (>= 2.12.1-4ubuntu1)
-Installed-Size: #inst#
-Maintainer: #author# <#email#>
-Description: a GNOME application for managing book collections
- Alexandria is a program for organising collections of books. It
- .
- * retrieves and displays book information (including cover pictures) from
- several online libraries, such as Amazon, Proxis and Barnes and Noble
- * allows books to be added and updated by hand
- * enables searches either by EAN/ISBN, title, authors or keyword
- * can import and export data into ONIX, Tellico and ISBN-list formats
- * features a HIG-compliant user interface
- * handles book rating and notes
- * supports CueCat (R) barcode readers
- .
- Website: http://alexandria.rubyforge.org/
</del></span></pre></div>
<a id="trunkalexandriadebianrules"></a>
<div class="modfile"><h4>Modified: trunk/alexandria/debian/rules (755 => 756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/alexandria/debian/rules        2007-10-09 17:29:57 UTC (rev 755)
+++ trunk/alexandria/debian/rules        2007-10-09 23:36:13 UTC (rev 756)
</span><span class="lines">@@ -0,0 +1,31 @@
</span><ins>+#!/usr/bin/make -f
+
+PACKAGE := alexandria
+TMPDIR := debian/tmp
+
+build: build-stamp
+build-stamp:
+        test -e debian/control
+        touch build-stamp
+
+clean:
+        test -e debian/control
+        test 0 = "`id -u`" || (echo need root privileges; exit 1)
+        rm -f build-stamp install-stamp
+        rake clobber
+
+# Build architecture-independent files here.
+binary-indep: build debian/control
+        test -e debian/control
+        test 0 = "`id -u`" || (echo need root privileges; exit 1)
+        rake debian:deb_files
+        dpkg --build $(TMPDIR) ..
+
+# Build architecture-dependent files here.
+binary-arch: build
+
+source diff:
+        @echo >&2 'source and diff are obsolete - use dpkg-source -b'; false
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary
</ins></span></pre></div>
<a id="trunkalexandriamakeconfigrb"></a>
<div class="delfile"><h4>Deleted: trunk/alexandria/make-config.rb (755 => 756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/alexandria/make-config.rb        2007-10-09 17:29:57 UTC (rev 755)
+++ trunk/alexandria/make-config.rb        2007-10-09 23:36:13 UTC (rev 756)
</span><span class="lines">@@ -1,102 +0,0 @@
</span><del>-# Copyright (C) 2004-2006 Masao Mutoh, Laurent Sansonetti, Joseph Method
-
-config = {'data-dir' => '/usr/share/alexandria', 'rb-dir' => '/usr/bin/ruby/1.8'}
-
-# Generates config.rb.
-File.open('lib/alexandria/config.rb', 'w') do |file|
- file.print <<EOS
-# This file is automatically generated by the installer.
-# Do not edit by hands.
-
-module Alexandria
- module Config
- MAIN_DATA_DIR = '#{config['data-dir']}'
- DATA_DIR = '#{config['data-dir']}/alexandria'
- LIB_DIR = '#{config['rb-dir']}'
- end
-end
-EOS
-end
-
-# Generates version.rb.
-File.open('lib/alexandria/version.rb', 'w') do |file|
- begin
- version = IO.readlines('VERSION').join
- rescue Errno::ENOENT
- version = "CVS"
- end
- file.print <<EOS
-# This file is automatically generated by the installer.
-# Do not edit by hands.
-
-module Alexandria
- VERSION = "#{version}"
-end
-EOS
-end
-
-# Generates default_preferences.rb.
-require 'rexml/document'
-
-SCHEMA_PATH = 'schemas/alexandria.schemas'
-
-def convert_with_type(value, type)
- case type
- when 'int'
- value.to_i
- when 'float'
- value.to_f
- when 'bool'
- value == 'true'
- else
- value.strip
- end
-end
-
-generated_lines = []
-
-doc = REXML::Document.new(IO.read(SCHEMA_PATH))
-doc.elements.each('gconfschemafile/schemalist/schema') do |element|
- default = element.elements['default'].text
- next unless default
- varname = File.basename(element.elements['key'].text)
- type = element.elements['type'].text
-
- if type == 'list' or type == 'pair'
- ary = default[1..-2].split(',')
- next if ary.empty?
- if type == 'list'
- list_type = element.elements['list_type'].text
- ary.map! { |x| convert_with_type(x, list_type) }
- elsif type == 'pair'
- next if ary.length != 2
- ary[0] = convert_with_type(ary[0],
- element.elements['car_type'].text)
- ary[1] = convert_with_type(ary[1],
- element.elements['cdr_type'].text)
- end
- default = ary.inspect
- else
- default = convert_with_type(default, type).inspect.to_s
- end
-
- generated_lines << varname.inspect + '=>' + default
-end
-
-default_preferences = <<EOS
-# This file is automatically generated by the installer.
-# Do not edit by hands.
-EOS
-
-File.open('lib/alexandria/default_preferences.rb', 'w') do |file|
- file.print <<EOS
-# This file is automatically generated by the installer.
-# Do not edit by hands.
-
-module Alexandria
- class Preferences
- DEFAULT_VALUES = {#{generated_lines.join(',')}}
- end
-end
-EOS
-end
</del></span></pre></div>
<a id="trunkalexandriapostinst"></a>
<div class="delfile"><h4>Deleted: trunk/alexandria/postinst (755 => 756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/alexandria/postinst        2007-10-09 17:29:57 UTC (rev 755)
+++ trunk/alexandria/postinst        2007-10-09 23:36:13 UTC (rev 756)
</span><span class="lines">@@ -1,20 +0,0 @@
</span><del>-#!/usr/bin/env ruby
-# Copyright (C) 2004-2006 Laurent Sansonetti
-
-# Install GConf2 .schemas files
-
-exit 0 if ENV['GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL']
-
-unless system("which gconftool-2")
- $stderr.puts "gconftool-2 cannot be found, is GConf2 correctly installed?"
- exit 1
-end
-
-ENV['GCONF_CONFIG_SOURCE'] = `gconftool-2 --get-default-source`.chomp
-Dir["schemas/*.schemas"].each do |schema|
- system("gconftool-2 --makefile-install-rule '#{schema}'")
-end
-
-require 'fileutils'
-
-FileUtils.chmod(0755, '/usr/bin/alexandria')
</del></span></pre></div>
<a id="trunkalexandriapresetuprb"></a>
<div class="delfile"><h4>Deleted: trunk/alexandria/pre-setup.rb (755 => 756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/alexandria/pre-setup.rb        2007-10-09 17:29:57 UTC (rev 755)
+++ trunk/alexandria/pre-setup.rb        2007-10-09 23:36:13 UTC (rev 756)
</span><span class="lines">@@ -1,29 +0,0 @@
</span><del>-# Copyright (C) 2004-2006 Dafydd Harries
-#
-# Loosely based on pre-setup.rb from rbbr by Masao Mutoh.
-
-basename = "alexandria"
-config = Config::CONFIG
-podir = srcdir_root + "/po/"
-
-# Extract translations from PO files into other files.
-
-system("intltool-merge -d po alexandria.desktop.in alexandria.desktop")
-
-# Create MO files.
-
-Dir.glob("po/*.po") do |file|
- lang = /po\/(.*)\.po/.match(file).to_a[1]
- mo_path_bits = ['data', 'locale', lang, 'LC_MESSAGES']
- mo_path = File.join(mo_path_bits)
-
- (0 ... mo_path_bits.length).each do |i|
- path = File.join(mo_path_bits[0 .. i])
- puts path
- Dir.mkdir(path) unless FileTest.exists?(path)
- end
-
- system("msgfmt po/#{lang}.po -o #{mo_path}/#{basename}.mo")
-
- raise "msgfmt failed on po/#{lang}.po" if $? != 0
-end
</del></span></pre></div>
<a id="trunkalexandriatasksrb"></a>
<div class="modfile"><h4>Modified: trunk/alexandria/tasks.rb (755 => 756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/alexandria/tasks.rb        2007-10-09 17:29:57 UTC (rev 755)
+++ trunk/alexandria/tasks.rb        2007-10-09 23:36:13 UTC (rev 756)
</span><span class="lines">@@ -212,7 +212,7 @@
</span><span class="cx"> t.rcov_opts = ["--exclude", "spec"]
</span><span class="cx"> end
</span><span class="cx"> end
</span><del>-
</del><ins>+
</ins><span class="cx"> rescue LoadError => err
</span><span class="cx"> # @@log.warn('rspec not found') # FIX add logging
</span><span class="cx"> task :spec do
</span><span class="lines">@@ -363,32 +363,11 @@
</span><span class="cx"> end
</span><span class="cx"> end
</span><span class="cx">
</span><del>- task :stage_install => [:pre_install, :stage_install_files]
</del><ins>+ task :stage_install => [:pre_install, :stage_install_files] do
+ # some files are not copied over straight away, because
+ # of how FileList globs work (they are generated after the
+ # globs are evaluated)
</ins><span class="cx">
</span><del>- task :deb_control do
- inst = `du -sk #{@debinstall.staging_dir}`.split()[0]
- tmpl_data = { :name => @name,
- :version => @version,
- :inst => inst,
- :author => @author,
- :email => @email}
-
- debian_dir = File.join(@debinstall.staging_dir, "DEBIAN")
-
- template_copy("debian/control.tmpl",
- File.join(debian_dir, "control"), tmpl_data)
- end
-
- task :deb_files do
- debian_dir = File.join(@debinstall.staging_dir, "DEBIAN")
- files = %w{postinst postrm prerm}
- files.each do |file|
- FileUtils.cp("debian/#{file}", File.join(debian_dir, file))
- end
- end
-
- ## obviously this task needs 'fakeroot' and 'dpkg' to be installed
- task :build_deb => [:build, :stage_install, :deb_control, :deb_files] do
</del><span class="cx"> # HACK gconf
</span><span class="cx"> gconf_dir = File.join(@debinstall.staging_dir, "/usr/share/gconf/schemas")
</span><span class="cx"> FileUtils.mkdir_p(gconf_dir)
</span><span class="lines">@@ -407,7 +386,26 @@
</span><span class="cx"> stage_install_file('lib', file, @debinstall.rubylib, 0644)
</span><span class="cx"> puts "HACK:: installing -> 'lib', #{file}, #{@debinstall.rubylib}"
</span><span class="cx"> end
</span><ins>+ end
</ins><span class="cx">
</span><ins>+ task :deb_files => [:stage_install] do
+ # create dir
+ debian_dir = File.join(@debinstall.staging_dir, "DEBIAN")
+ FileUtils.mkdir_p(debian_dir)
+
+ # copy files from debian/*
+ files = %w{postinst postrm prerm}
+ files.each do |file|
+ FileUtils.cp("debian/#{file}", File.join(debian_dir, file))
+ end
+
+ # create DEBIAN/control and debian/files
+ `dpkg-gencontrol -isp`
+ end
+
+ ## obviously this task needs 'fakeroot' and 'dpkg' to be installed
+ task :build_deb => [:deb_files] do
+
</ins><span class="cx"> puts "Creating deb file #{@debinstall.deb}"
</span><span class="cx"> debfile = File.join(File.dirname(@debinstall.staging_dir), @debinstall.deb)
</span><span class="cx"> msg = `fakeroot dpkg-deb --build #{@debinstall.staging_dir} #{debfile}`
</span><span class="lines">@@ -416,10 +414,13 @@
</span><span class="cx">
</span><span class="cx"> task :deb_clean do |t|
</span><span class="cx"> FileUtils.rm_rf(@debinstall.staging_dir)
</span><ins>+ FileUtils.rm_rf("debian/files")
+ FileUtils.rm_rf("build-stamp")
</ins><span class="cx"> end
</span><span class="cx">
</span><span class="cx"> task :deb_clobber do |t|
</span><del>- FileUtils.rm_f(@debinstall.deb)
</del><ins>+ debfile = File.join(File.dirname(@debinstall.staging_dir), @debinstall.deb)
+ FileUtils.rm_f(debfile)
</ins><span class="cx"> end
</span><span class="cx">
</span><span class="cx"> desc "Create a deb file"
</span><span class="lines">@@ -429,11 +430,8 @@
</span><span class="cx"> task :clean => ["debian:deb_clean"]
</span><span class="cx"> task :clobber => ["debian:deb_clobber"]
</span><span class="cx">
</span><del>-
</del><span class="cx"> end
</span><span class="cx">
</span><del>-
-
</del><span class="cx"> class DebianInstallConfig < InstallConfig
</span><span class="cx">
</span><span class="cx"> attr_accessor :staging_dir, :deb
</span><span class="lines">@@ -457,11 +455,12 @@
</span><span class="cx"> end
</span><span class="cx"> @groups = []
</span><span class="cx"> @staging_dir = nil
</span><del>- @deb = "#{build.name}-#{build.version}.deb"
</del><ins>+ @deb = "#{build.name}_#{build.version}_all.deb"
</ins><span class="cx"> end
</span><span class="cx">
</span><span class="cx"> end
</span><span class="cx">
</span><ins>+
</ins><span class="cx"> ## # # # omf tasks # # # ##
</span><span class="cx">
</span><span class="cx"> def define_omf_tasks
</span></span></pre>
</div>
</div>
</body>
</html>