Subject: [PATCH] gnu: Add circos.

From: Roel Janssen <[email-masked]>
Date: Mon, 09 Mar 2020 15:26:38 +0100

Dear Guix,

We've had a recipe for "circos" for a while in our staging repository. 
It's quite involved, but nevertheless it has been battle-tested in our
group.

So without further ado, the attached patch adds Circos.  I hope I
didn't forget anything.

Kind regards,
Roel Janssen

From 3354081946899a7573c0af520ba4a29eaa818584 Mon Sep 17 00:00:00 2001
From: Roel Janssen <[email-masked]>
Date: Mon, 9 Mar 2020 15:21:43 +0100
Subject: [PATCH] gnu: Add circos.

* gnu/local.mk: Register circos-remove-findbin.patch.
* gnu/packages/patches/circos-remove-findbin.patch: New file.
* gnu/packages/perl.scm: New variable.
---
 gnu/local.mk                                  |   1 +
 .../patches/circos-remove-findbin.patch       | 538 ++++++++++++++++++
 gnu/packages/perl.scm                         |  96 ++++
 3 files changed, 635 insertions(+)
 create mode 100644 gnu/packages/patches/circos-remove-findbin.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 2f0768f036..e742cdd572 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -770,6 +770,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/calibre-remove-test-unrar.patch		\
   %D%/packages/patches/casync-renameat2-declaration.patch	\
   %D%/packages/patches/catdoc-CVE-2017-11110.patch		\
+  %D%/packages/patches/circos-remove-findbin.patch		\
   %D%/packages/patches/cdparanoia-fpic.patch			\
   %D%/packages/patches/cdrtools-3.01-mkisofs-isoinfo.patch 	\
   %D%/packages/patches/ceph-disable-cpu-optimizations.patch	\
diff --git a/gnu/packages/patches/circos-remove-findbin.patch b/gnu/packages/patches/circos-remove-findbin.patch
new file mode 100644
index 0000000000..aeb8103a5c
--- /dev/null
+++ b/gnu/packages/patches/circos-remove-findbin.patch
@@ -0,0 +1,538 @@
+diff -crB circos-0.69-6/bin/circos circos-0.69-6-new/bin/circos
+*** circos-0.69-6/bin/circos	2016-02-19 01:42:59.000000000 +0100
+--- circos-0.69-6-new/bin/circos	2018-01-12 09:59:25.662731269 +0100
+***************
+*** 474,486 ****
+  
+  use strict;
+  use warnings;
+- use FindBin;
+  use Getopt::Long qw(:config pass_through posix_default auto_abbrev);
+  use Pod::Usage;
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+  use Circos;
+  
+  use Cwd;
+--- 474,482 ----
+diff -crB circos-0.69-6/lib/Circos/Colors.pm circos-0.69-6-new/lib/Circos/Colors.pm
+*** circos-0.69-6/lib/Circos/Colors.pm	2015-03-17 01:25:43.000000000 +0100
+--- circos-0.69-6-new/lib/Circos/Colors.pm	2018-01-12 10:10:39.174797379 +0100
+***************
+*** 49,55 ****
+  
+  use Carp qw( carp confess croak );
+  use Digest::MD5 qw(md5_hex);
+- use FindBin;
+  use File::Basename;
+  use File::Spec::Functions;
+  use File::Temp qw(tempdir);
+--- 49,54 ----
+***************
+*** 65,74 ****
+  #use Time::HiRes qw(gettimeofday tv_interval);
+  #use List::Util qw( max min );
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use POSIX qw(pow);
+
+  use Circos::Configuration;
+--- 64,69 ----
+diff -crB circos-0.69-6/lib/Circos/Configuration.pm circos-0.69-6-new/lib/Circos/Configuration.pm
+*** circos-0.69-6/lib/Circos/Configuration.pm	2015-03-17 22:11:01.000000000 +0100
+--- circos-0.69-6-new/lib/Circos/Configuration.pm	2018-01-12 10:11:41.064008273 +0100
+***************
+*** 59,68 ****
+  use Params::Validate qw(:all);
+  use List::MoreUtils qw(uniq);
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use Circos::Constants;
+  use Circos::Debug;
+  use Circos::Utils;
+--- 59,64 ----
+diff -crB circos-0.69-6/lib/Circos/DataPoint.pm circos-0.69-6-new/lib/Circos/DataPoint.pm
+*** circos-0.69-6/lib/Circos/DataPoint.pm	2014-05-12 18:20:19.000000000 +0200
+--- circos-0.69-6-new/lib/Circos/DataPoint.pm	2018-01-12 10:11:54.888270731 +0100
+***************
+*** 38,51 ****
+  
+  use Carp qw( carp confess croak );
+  use Data::Dumper;
+- use FindBin;
+  use GD::Image;
+  use Params::Validate qw(:all);
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use Circos::Configuration; # qw(%CONF $DIMS);
+  use Circos::Constants;
+  use Circos::Debug;
+--- 38,46 ----
+diff -crB circos-0.69-6/lib/Circos/Debug.pm circos-0.69-6-new/lib/Circos/Debug.pm
+*** circos-0.69-6/lib/Circos/Debug.pm	2015-03-24 01:26:13.000000000 +0100
+--- circos-0.69-6-new/lib/Circos/Debug.pm	2018-01-12 10:12:07.192502006 +0100
+***************
+*** 63,75 ****
+  
+  use Carp qw( carp confess croak );
+  use Data::Dumper;
+- use FindBin;
+  use Memoize;
+  use List::MoreUtils qw(uniq);
+  use Time::HiRes qw(gettimeofday tv_interval);
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+  
+  use Circos::Constants;
+  
+--- 63,71 ----
+diff -crB circos-0.69-6/lib/Circos/Division.pm circos-0.69-6-new/lib/Circos/Division.pm
+*** circos-0.69-6/lib/Circos/Division.pm	2015-11-17 00:55:58.000000000 +0100
+--- circos-0.69-6-new/lib/Circos/Division.pm	2018-01-12 10:12:21.544769084 +0100
+***************
+*** 37,52 ****
+  our @EXPORT = qw();
+  
+  use Carp qw( carp confess croak );
+- use FindBin;
+  use GD;
+  use Math::Round;
+  use List::MoreUtils qw(uniq);
+  use Params::Validate qw(:all);
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use Circos::Configuration;
+  use Circos::Constants;
+  use Circos::Debug;
+--- 37,47 ----
+diff -crB circos-0.69-6/lib/Circos/Error.pm circos-0.69-6-new/lib/Circos/Error.pm
+*** circos-0.69-6/lib/Circos/Error.pm	2015-03-17 22:46:36.000000000 +0100
+--- circos-0.69-6-new/lib/Circos/Error.pm	2018-01-12 10:12:32.472970548 +0100
+***************
+*** 44,53 ****
+  use Params::Validate;
+  use Text::Format;
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use Circos::Constants;
+  use Circos::Debug;
+  use Circos::Utils;
+--- 44,49 ----
+diff -crB circos-0.69-6/lib/Circos/Expression.pm circos-0.69-6-new/lib/Circos/Expression.pm
+*** circos-0.69-6/lib/Circos/Expression.pm	2015-11-30 23:49:36.000000000 +0100
+--- circos-0.69-6-new/lib/Circos/Expression.pm	2018-01-12 10:12:41.953144015 +0100
+***************
+*** 39,55 ****
+  
+  use Carp qw( carp confess croak );
+  use Data::Dumper;
+- use FindBin;
+  use Params::Validate qw(:all);
+  use Math::Round;
+  use Math::VecStat qw(average);
+  use List::Util qw(min max);
+  use Text::Balanced qw(extract_bracketed);
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use Circos::Configuration;
+  use Circos::Constants;
+  use Circos::Debug;
+--- 39,50 ----
+diff -crB circos-0.69-6/lib/Circos/Font.pm circos-0.69-6-new/lib/Circos/Font.pm
+*** circos-0.69-6/lib/Circos/Font.pm	2014-05-12 18:20:19.000000000 +0200
+--- circos-0.69-6-new/lib/Circos/Font.pm	2018-01-12 10:12:51.657320357 +0100
+***************
+*** 45,59 ****
+  );
+  
+  use Carp qw( carp confess croak );
+- use FindBin;
+  use GD::Image;
+  use Font::TTF::Font;
+  use Params::Validate qw(:all);
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use Circos::Configuration; # qw(%CONF $DIMS fetch_conf);
+  use Circos::Constants;
+  use Circos::Colors;
+--- 45,54 ----
+diff -crB circos-0.69-6/lib/Circos/Geometry.pm circos-0.69-6-new/lib/Circos/Geometry.pm
+*** circos-0.69-6/lib/Circos/Geometry.pm	2014-05-12 18:20:19.000000000 +0200
+--- circos-0.69-6-new/lib/Circos/Geometry.pm	2018-01-12 10:12:58.961452282 +0100
+***************
+*** 41,54 ****
+  );
+  
+  use Carp qw( carp confess croak );
+- use FindBin;
+  use GD::Image;
+  use Params::Validate qw(:all);
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use Circos::Configuration; # qw(%CONF $DIMS fetch_conf);
+  use Circos::Constants;
+  use Circos::Debug;
+--- 41,49 ----
+diff -crB circos-0.69-6/lib/Circos/Heatmap.pm circos-0.69-6-new/lib/Circos/Heatmap.pm
+*** circos-0.69-6/lib/Circos/Heatmap.pm	2016-03-30 22:08:12.000000000 +0200
+--- circos-0.69-6-new/lib/Circos/Heatmap.pm	2018-01-12 10:13:09.953649538 +0100
+***************
+*** 24,40 ****
+  use Carp qw( carp confess croak );
+  use Clone;
+  use Data::Dumper;
+- use FindBin;
+  use GD::Image;
+  use Math::VecStat qw(min max);
+  use Params::Validate qw(:all);
+  use List::MoreUtils qw(uniq);
+  use Regexp::Common qw(number);
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use Circos::Configuration;
+  use Circos::Constants;
+  use Circos::Colors;
+--- 24,35 ----
+diff -crB circos-0.69-6/lib/Circos/Ideogram.pm circos-0.69-6-new/lib/Circos/Ideogram.pm
+*** circos-0.69-6/lib/Circos/Ideogram.pm	2015-11-17 01:18:53.000000000 +0100
+--- circos-0.69-6-new/lib/Circos/Ideogram.pm	2018-01-12 10:13:22.045864798 +0100
+***************
+*** 40,46 ****
+  
+  use Carp qw( carp confess croak );
+  use Cwd;
+- use FindBin;
+  use File::Spec::Functions;
+  use Math::Round;
+  use Math::VecStat qw(max);
+--- 40,45 ----
+***************
+*** 50,59 ****
+  
+  use POSIX qw(floor ceil);
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use Circos::Configuration;
+  use Circos::Constants;
+  use Circos::Debug;
+--- 49,54 ----
+diff -crB circos-0.69-6/lib/Circos/Image.pm circos-0.69-6-new/lib/Circos/Image.pm
+*** circos-0.69-6/lib/Circos/Image.pm	2014-05-12 18:20:19.000000000 +0200
+--- circos-0.69-6-new/lib/Circos/Image.pm	2018-01-12 10:13:31.094024696 +0100
+***************
+*** 45,58 ****
+  );
+  
+  use Carp qw( carp confess croak );
+- use FindBin;
+  use GD::Image;
+  use Params::Validate qw(:all);
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use Circos::Configuration; 
+  use Circos::Colors;
+  use Circos::Constants;
+--- 45,53 ----
+diff -crB circos-0.69-6/lib/Circos/IO.pm circos-0.69-6-new/lib/Circos/IO.pm
+*** circos-0.69-6/lib/Circos/IO.pm	2015-12-03 05:51:11.000000000 +0100
+--- circos-0.69-6-new/lib/Circos/IO.pm	2018-01-12 10:13:41.686210640 +0100
+***************
+*** 39,45 ****
+  use Carp qw( carp confess croak );
+  use Storable qw(dclone);
+  use Cwd;
+- use FindBin;
+  use Data::Dumper;
+  use File::Spec::Functions;
+  use Math::Round;
+--- 39,44 ----
+***************
+*** 49,58 ****
+  
+  use POSIX qw(floor ceil);
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use Circos::Constants;
+  use Circos::Colors;
+  use Circos::Configuration;
+--- 48,53 ----
+diff -crB circos-0.69-6/lib/Circos/Karyotype.pm circos-0.69-6-new/lib/Circos/Karyotype.pm
+*** circos-0.69-6/lib/Circos/Karyotype.pm	2014-09-09 00:15:58.000000000 +0200
+--- circos-0.69-6-new/lib/Circos/Karyotype.pm	2018-01-12 10:13:53.318413330 +0100
+***************
+*** 38,44 ****
+  
+  use Carp qw( carp confess croak );
+  use Cwd;
+- use FindBin;
+  use Math::Round;
+  use Math::VecStat qw(max);
+  use Params::Validate qw(:all);
+--- 38,43 ----
+***************
+*** 48,57 ****
+  #use Regexp::Common qw(number);
+  #use POSIX qw(floor ceil);
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use Circos::Configuration;
+  use Circos::Constants;
+  use Circos::Debug;
+--- 47,52 ----
+diff -crB circos-0.69-6/lib/Circos/PNG.pm circos-0.69-6-new/lib/Circos/PNG.pm
+*** circos-0.69-6/lib/Circos/PNG.pm	2014-09-17 05:33:06.000000000 +0200
+--- circos-0.69-6-new/lib/Circos/PNG.pm	2018-01-12 10:14:31.011059637 +0100
+***************
+*** 37,51 ****
+  our @EXPORT = qw();
+  
+  use Carp qw( carp confess croak );
+- use FindBin;
+  use GD;
+  use Math::VecStat qw(min max);
+  use Params::Validate qw(:all);
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use Circos::Configuration;
+  use Circos::Colors;
+  use Circos::Constants;
+--- 37,46 ----
+diff -crB circos-0.69-6/lib/Circos/Rule.pm circos-0.69-6-new/lib/Circos/Rule.pm
+*** circos-0.69-6/lib/Circos/Rule.pm	2014-10-02 01:14:25.000000000 +0200
+--- circos-0.69-6-new/lib/Circos/Rule.pm	2018-01-12 10:14:38.195181067 +0100
+***************
+*** 38,51 ****
+  
+  use Carp qw( carp confess croak );
+  use Data::Dumper;
+- use FindBin;
+  use GD::Image;
+  use Params::Validate qw(:all);
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use Circos::Configuration; # qw(%CONF $DIMS);
+  use Circos::Constants;
+  use Circos::DataPoint;
+--- 38,46 ----
+diff -crB circos-0.69-6/lib/Circos/SVG.pm circos-0.69-6-new/lib/Circos/SVG.pm
+*** circos-0.69-6/lib/Circos/SVG.pm	2015-11-30 23:23:52.000000000 +0100
+--- circos-0.69-6-new/lib/Circos/SVG.pm	2018-01-12 10:14:47.803342631 +0100
+***************
+*** 26,39 ****
+  							 );
+  
+  use Carp qw( carp confess croak );
+- use FindBin;
+  use GD::Image;
+  use Params::Validate qw(:all);
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use Circos::Configuration;
+  use Circos::Colors;
+  use Circos::Constants;
+--- 26,34 ----
+diff -crB circos-0.69-6/lib/Circos/Text.pm circos-0.69-6-new/lib/Circos/Text.pm
+*** circos-0.69-6/lib/Circos/Text.pm	2014-05-12 18:20:19.000000000 +0200
+--- circos-0.69-6-new/lib/Circos/Text.pm	2018-01-12 10:14:57.083497772 +0100
+***************
+*** 42,55 ****
+  );
+  
+  use Carp qw( carp confess croak );
+- use FindBin;
+  use GD::Image;
+  use Params::Validate qw(:all);
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use Circos::Configuration; # qw(%CONF $DIMS);
+  use Circos::Constants;
+  use Circos::Colors;
+--- 42,50 ----
+diff -crB circos-0.69-6/lib/Circos/Track/Highlight.pm circos-0.69-6-new/lib/Circos/Track/Highlight.pm
+*** circos-0.69-6/lib/Circos/Track/Highlight.pm	2014-10-01 00:43:27.000000000 +0200
+--- circos-0.69-6-new/lib/Circos/Track/Highlight.pm	2018-01-12 10:15:06.795659206 +0100
+***************
+*** 37,50 ****
+  our @EXPORT = qw();
+  
+  use Carp qw( carp confess croak );
+- use FindBin;
+  use GD::Image;
+  use Params::Validate qw(:all);
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use Circos::Configuration; # qw(%CONF $DIMS);
+  use Circos::Constants;
+  #use Circos::Colors;
+--- 37,45 ----
+diff -crB circos-0.69-6/lib/Circos/Track/Link.pm circos-0.69-6-new/lib/Circos/Track/Link.pm
+*** circos-0.69-6/lib/Circos/Track/Link.pm	2014-05-12 18:20:19.000000000 +0200
+--- circos-0.69-6-new/lib/Circos/Track/Link.pm	2018-01-12 10:15:17.387834198 +0100
+***************
+*** 37,50 ****
+  our @EXPORT = qw();
+  
+  use Carp qw( carp confess croak );
+- use FindBin;
+  use GD::Image;
+  use Params::Validate qw(:all);
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use Circos::Configuration; # qw(%CONF $DIMS);
+  use Circos::Constants;
+  #use Circos::Colors;
+--- 37,45 ----
+diff -crB circos-0.69-6/lib/Circos/Track.pm circos-0.69-6-new/lib/Circos/Track.pm
+*** circos-0.69-6/lib/Circos/Track.pm	2014-09-16 05:31:46.000000000 +0200
+--- circos-0.69-6-new/lib/Circos/Track.pm	2018-01-12 10:15:29.628035063 +0100
+***************
+*** 41,56 ****
+  
+  use Carp qw( carp confess croak );
+  use Data::Dumper;
+- use FindBin;
+  use GD::Image;
+  use List::MoreUtils qw(uniq);
+  use Math::VecStat qw(min max);
+  use Params::Validate qw(:all);
+  use Regexp::Common;
+  use Statistics::Basic qw(average stddev);
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+  
+  use Circos::Configuration; # qw(%CONF $DIMS);
+  use Circos::Constants;
+--- 41,52 ----
+diff -crB circos-0.69-6/lib/Circos/Unit.pm circos-0.69-6-new/lib/Circos/Unit.pm
+*** circos-0.69-6/lib/Circos/Unit.pm	2014-05-12 18:20:19.000000000 +0200
+--- circos-0.69-6-new/lib/Circos/Unit.pm	2018-01-12 10:15:37.892169871 +0100
+***************
+*** 46,60 ****
+  );
+  
+  use Carp qw( carp confess croak );
+- use FindBin;
+  use Data::Dumper;
+  use Params::Validate qw(:all);
+  use Regexp::Common qw(number);
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use Circos::Configuration qw(%CONF $DIMS);
+  use Circos::Constants;
+  use Circos::Debug;
+--- 46,55 ----
+diff -crB circos-0.69-6/lib/Circos/URL.pm circos-0.69-6-new/lib/Circos/URL.pm
+*** circos-0.69-6/lib/Circos/URL.pm	2014-05-12 18:20:19.000000000 +0200
+--- circos-0.69-6-new/lib/Circos/URL.pm	2018-01-12 10:15:46.092303006 +0100
+***************
+*** 39,52 ****
+  );
+  
+  use Carp qw( carp confess croak );
+- use FindBin;
+  use GD;
+  use Params::Validate qw(:all);
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use Circos::Configuration;
+  #use Circos::Colors;
+  use Circos::Constants;
+--- 39,47 ----
+diff -crB circos-0.69-6/lib/Circos/Utils.pm circos-0.69-6-new/lib/Circos/Utils.pm
+*** circos-0.69-6/lib/Circos/Utils.pm	2014-10-01 21:36:19.000000000 +0200
+--- circos-0.69-6-new/lib/Circos/Utils.pm	2018-01-12 10:16:11.576712858 +0100
+***************
+*** 105,114 ****
+  
+  use POSIX qw(floor ceil);
+  
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+- 
+  use Circos::Constants;
+  use Circos::Debug;
+  use Circos::Error;
+--- 105,110 ----
+diff -crB circos-0.69-6/lib/Circos.pm circos-0.69-6-new/lib/Circos.pm
+*** circos-0.69-6/lib/Circos.pm	2016-06-25 00:19:27.000000000 +0200
+--- circos-0.69-6-new/lib/Circos.pm	2018-01-12 10:16:35.801097176 +0100
+***************
+*** 49,57 ****
+  
+  use strict;
+  use warnings;
+- use lib "$FindBin::RealBin";
+- use lib "$FindBin::RealBin/../lib";
+- use lib "$FindBin::RealBin/lib";
+  
+  BEGIN {
+  	require Circos::Modules;
+--- 49,54 ----
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index a6b087240c..160a4002e9 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -52,6 +52,7 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages gd)
   #:use-module (gnu packages less)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages perl-check)
@@ -870,6 +871,101 @@ the Carp.pm module doesn't help.")
     ;; Either GPLv2 or the "Artistic" license.
     (license (list gpl2 artistic2.0))))
 
+(define-public circos
+  (package
+    (name "circos")
+    (version "0.69-9")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "http://circos.ca/distribution/circos-" version ".tgz"))
+              (sha256
+               (base32 "1ll9yxbk0v64813np0qz6h8bc53qlnhg9y1053b57xgkxgmxgn1l"))
+              (patches (list (search-patch "circos-remove-findbin.patch")))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; There are no tests.
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (delete 'build)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (datapath (string-append out "/share/Circos"))
+                    (error (string-append out "/share/Circos/error"))
+                    (fonts (string-append out "/share/Circos/fonts"))
+                    (data (string-append out "/share/Circos/data"))
+                    (tiles (string-append out "/share/Circos/tiles"))
+                    (etc (string-append out "/share/Circos/etc"))
+                    (lib (string-append out "/lib/perl5/site_perl/"
+                                        ,(package-version perl)))
+                    (install-directory (lambda (source target)
+                                         (mkdir-p target)
+                                         (copy-recursively source target))))
+               ;; Circos looks into a relative path for its configuration
+               ;; files.  We need to provide an absolute path towards the
+               ;; corresponding paths in the store.
+               (substitute* '("bin/circos" "etc/colors_fonts_patterns.conf"
+                              "etc/gddiag.conf" "etc/brewer.conf" "README")
+                 (("<<include etc") (string-append "<<include " etc)))
+               (substitute* '("etc/colors.conf" "etc/image.black.conf"
+                              "etc/patterns.conf" "etc/image.conf")
+                 (("<<include ") (string-append "<<include " etc "/")))
+               (substitute* '("etc/fonts.conf" "fonts/README.fonts")
+                 (("= fonts") (string-append "= " fonts)))
+               (substitute* "etc/patterns.conf"
+                 (("= tiles") (string-append "= " tiles)))
+               (substitute* "lib/Circos/Error.pm"
+                 (("error/configuration.missing.txt")
+                  (string-append error "/configuration.missing.txt")))
+               (substitute* "etc/housekeeping.conf"
+                 (("# data_path = /home/martink/circos-tutorials ")
+                  (string-append "data_path = " datapath)))
+               (substitute* "lib/Circos/Configuration.pm"
+                 (("my @possibilities = \\(")
+                  (string-append "my @possibilities = ("
+                                 "catfile( \"" datapath "\", $arg ), "
+                                 "catfile( \"" etc "\", $arg ), "
+                                 "catfile( \"" etc "/tracks\", $arg ), ")))
+               (for-each install-directory
+                         (list "error" "fonts" "data" "tiles" "etc" "lib")
+                         (list error fonts data tiles etc lib))
+               (install-file "bin/circos" bin)
+               #t))))))
+    (propagated-inputs
+     `(("perl" ,perl)
+       ("perl-carp" ,perl-carp)
+       ("perl-clone" ,perl-clone)
+       ("perl-config-general" ,perl-config-general)
+       ("perl-digest-md5" ,perl-digest-md5)
+       ("perl-file-temp" ,perl-file-temp)
+       ("perl-font-ttf" ,perl-font-ttf)
+       ("perl-gd" ,perl-gd)
+       ("perl-getopt-long" ,perl-getopt-long)
+       ("perl-list-allutils" ,perl-list-allutils)
+       ("perl-math-bezier" ,perl-math-bezier)
+       ("perl-math-round" ,perl-math-round)
+       ("perl-math-vecstat" ,perl-math-vecstat)
+       ("perl-memoize" ,perl-memoize)
+       ("perl-number-format" ,perl-number-format)
+       ("perl-params-validate" ,perl-params-validate)
+       ("perl-readonly" ,perl-readonly)
+       ("perl-regexp-common" ,perl-regexp-common)
+       ("perl-set-intspan" ,perl-set-intspan)
+       ("perl-statistics-basic" ,perl-statistics-basic)
+       ("perl-svg" ,perl-svg)
+       ("perl-text-balanced" ,perl-text-balanced)
+       ("perl-text-format" ,perl-text-format)
+       ("perl-time-hires" ,perl-time-hires)))
+    (home-page "http://circos.ca/")
+    (synopsis "Generation of circularly composited renditions")
+    (description
+     "Circos is a program for the generation of publication-quality, circularly
+composited renditions of genomic data and related annotations.")
+    (license gpl2+)))
+
 (define-public perl-class-accessor
   (package
     (name "perl-class-accessor")
-- 
2.25.1