File: find_htslib.patch

package info (click to toggle)
libbio-db-hts-perl 3.01-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,152 kB
  • sloc: perl: 2,375; sh: 247; makefile: 9
file content (134 lines) | stat: -rw-r--r-- 4,906 bytes parent folder | download | duplicates (2)
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
Author: Andreas Tille <tille@debian.org>
Last-Update: 2019-07-10
Description: Take over changes in Build.PL from commit 83c9327 to make sure htslib will be found

--- a/Build.PL
+++ b/Build.PL
@@ -1,6 +1,6 @@
 #!/usr/bin/perl
 
-# Copyright [2015-2018] EMBL-European Bioinformatics Institute
+# Copyright [2015-2019] EMBL-European Bioinformatics Institute
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -75,7 +75,15 @@ sub find_hts {
     # If either of these are set, we expect to find the htslib files there:
     # (They're explicitly set by the user, so we shouldn't fall back to
     # finding another copy somewhere else.)
-    if (my $dir = $self->args('htslib')) {
+    my $incdir = $self->args('htslib-includedir');
+    my $libdir = $self->args('htslib-libdir');
+    if ($incdir && $libdir) {
+        return 1 if $self->find_hts_in_split_install_dirs($incdir, $libdir);
+        $self->die_hts_not_found(
+            "--htslib-includedir '$incdir' or --htslib-libdir '$libdir' command line parameters do not contain expected files\n"
+        );
+    }
+    elsif (my $dir = $self->args('htslib')) {
         return 1 if $self->find_hts_in_build_dir($dir);
         return 1 if $self->find_hts_in_install_dir($dir);
         $self->die_hts_not_found(
@@ -105,6 +113,9 @@ sub find_hts {
     }
     return 1 if $found;
 
+    # Try pkgconfig again but this time trust whatever it returns, without extra verification
+    return 1 if $self->find_hts_with_pkgconfig();
+
     $self->die_hts_not_found();
 }
 
@@ -114,12 +125,14 @@ sub set_include_and_compiler_flags {
     my $hts_include = $self->config_data('hts_include');
     my $hts_lib     = $self->config_data('hts_lib');
     my $static      = $self->args('static');
-    $self->include_dirs([$hts_include]);
-    if($static){
-      $self->extra_linker_flags("-L$hts_lib", '-lhts', '-lpthread', '-lz');
-    }else{
-      $self->extra_linker_flags("-L$hts_lib", "-Wl,-rpath,$hts_lib", '-lhts', '-lpthread', '-lz');
+
+    $self->include_dirs([$hts_include]) if $hts_include;
+
+    my @linker_dirflags;
+    if ($hts_lib) {
+      push @linker_dirflags, "-L$hts_lib";
     }
+    $self->extra_linker_flags(@linker_dirflags, '-lhts', '-lpthread', '-lz');
 }
 
 sub hts_dev_files_exist {
@@ -165,6 +178,48 @@ sub find_hts_in_install_dir {
     }
 }
 
+sub find_hts_in_split_install_dirs {
+    my ($self, $hts_include, $hts_lib) = @_;
+
+    chomp($hts_lib);
+    chomp($hts_include);
+    $hts_include =~ s{include/htslib$}{include};
+
+    if (hts_dev_files_exist($hts_lib, $hts_include)) {
+        $self->config_data('hts_lib'     => $hts_lib);
+        $self->config_data('hts_include' => $hts_include);
+        return 1;
+    }
+    else {
+        return 0;
+    }
+}
+
+sub find_hts_with_pkgconfig {
+    my ($self) = @_;
+
+    return 0 unless can_load(
+        modules => { 'ExtUtils::PkgConfig' => undef }
+    );
+    my $pkg_name = 'htslib';
+    return 0 unless ExtUtils::PkgConfig->exists($pkg_name);
+
+    if (my $libs_only_L = ExtUtils::PkgConfig->libs_only_L($pkg_name)) {
+        # For compatibility with other htslib search methods. Note that this
+        # assumes there will be at most one each of -I/-L directories, which
+        # is true as of htslib-1.5 but might change in the future.
+        $libs_only_L =~ s{^-L}{};
+        $self->config_data('hts_lib' => $libs_only_L);
+    }
+    if (my $cflags_only_I = ExtUtils::PkgConfig->cflags_only_I($pkg_name)) {
+        # See above
+        $cflags_only_I =~ s{^-I}{};
+        $self->config_data('hts_include' => $cflags_only_I);
+    }
+
+    return 1;
+}
+
 sub die_hts_not_found {
     my ($self, $msg) = @_;
 
@@ -177,12 +232,17 @@ Install it if you have not done so alrea
 This script will attempt to locate HTSlib by looking for htslib/hts.h
 and libhts.a / libhts.so in:
 
-  1. --htslib command line argument
-  2. HTSLIB_DIR environment variable
-  3. --prefix command line argument (which also sets installation location)
-  4. Alien::HTSlib dependency resolver
-  5. pkg-config (extra directories can be set in PKG_CONFIG_PATH environment variable)
-  6. common library locations: /usr /usr/local, /usr/share, /opt/local
+  1. --htslib-includedir and --htslib-libdir command line arguments
+  2. --htslib command line argument
+  3. HTSLIB_DIR environment variable
+  4. --prefix command line argument (which also sets installation location)
+  5. Alien::HTSlib dependency resolver
+  6. pkg-config (extra directories can be set in PKG_CONFIG_PATH environment variable)
+  7. common library locations: /usr /usr/local, /usr/share, /opt/local
+
+If none of the above succeeds but htslib is registered with pkg-config, the script
+will try using pkg-config paths (via ExtUtils::PkgConfig) without checking if header
+and library files exist.
 
 END