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 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217
|
use inc::Module::Install 0.91;
use Cwd;
use Config;
use Module::Install::CheckLib ();
# override library and include directories here if desired
my $lib = '';
my $inc = '';
my $extra_libs = '-lssl -lcrypto';
my @args = @ARGV;
my @pass_through_args;
while (my $arg = shift @args) {
if (my ($param, $val) = $arg =~ /^(inc|lib)=(.*)\z/) {
my $var = $param eq 'inc' ? \$inc : \$lib;
$$var = $val;
next;
}
push @pass_through_args, $arg;
}
@ARGV = @pass_through_args;
# Windows, as usual, is a special case
my $win32 = ($^O eq 'MSWin32');
my @define = $win32 ? (DEFINE => '-DLIBSSH2_WIN32') : ();
name 'Net-SSH2';
all_from 'lib/Net/SSH2.pm';
perl_version '5.006000';
my @search_paths = (
(split /\Q$Config{path_sep}\E/, $ENV{LD_RUN_PATH}),
(split /\Q$Config{path_sep}\E/, ($^O eq 'darwin' ?
$ENV{DYLD_LIBRARY_PATH} : $ENV{LD_LIBRARY_PATH})),
$ENV{HOME}, ($ENV{HOME}."/libssh2"),
(split ' ', $Config{libspath}),
$Config{siteprefixexp}, $Config{prefixexp},
'/usr/local/ssl', '/usr', '/usr/local', '/opt', '/opt/local', '/',
);
my %seen;
foreach my $path (@search_paths) {
$seen{$path}++;
}
my (%skip, @without_dups);
foreach my $path (@search_paths) {
next if $skip{$path};
if ($seen{$path} > 1) {
$skip{$path} = 1;
}
push @without_dups, $path;
}
@search_paths = @without_dups;
my @search_libs = grep -d, map +("$_/lib", "$_/lib64", $_), @search_paths;
my @search_incs = grep -d, map "$_/include", @search_paths;
print <<'EOF';
The libssh2 library is required by this module. If you don't have it, you can
download it from http://www.libssh2.org; you may also need OpenSSL, which can be
obtained from http://www.openssl.org.
Debian: sudo aptitude install libssh2-1-dev
OpenSUSE: sudo zypper in libssh2-1 libssh2-devel
You can pass your libssh2 lib and include dirs on the command line. E.g.:
perl Makefile.PL lib=$HOME/libssh2/lib inc=$HOME/libssh2/include
If you want to build on Windows, see the file BUILDING.WIN32 in the
distribution.
EOF
if (!$lib && !$inc) {
checklibs
lib => 'ssh2',
header => 'libssh2.h',
libpath => [@search_libs],
incpath => [@search_incs],
;
$lib = (join ' ', map "-L$_", @search_libs) . " -lssh2 $extra_libs";
$inc = join ' ', map "-I$_", @search_incs;
} else {
$lib = "-L$lib -lssh2 $extra_libs" if $lib;
$inc = "-I$inc" if $inc;
}
auto_provides;
libs $lib;
inc "$inc -I.";
makemaker_args @define;
realclean_files qw/const-c.inc const-xs.inc/;
resources repository =>
'git://github.com/rkitover/net-ssh2.git';
WriteAll;
if (eval {require ExtUtils::Constant; 1}) {
# If you edit these definitions to change the constants used by this module,
# you will need to use the generated const-c.inc and const-xs.inc
# files to replace their "fallback" counterparts before distributing your
# changes.
my @names = (qw(
LIBSSH2_CALLBACK_DEBUG
LIBSSH2_CALLBACK_DISCONNECT LIBSSH2_CALLBACK_IGNORE
LIBSSH2_CALLBACK_MACERROR LIBSSH2_CALLBACK_X11
LIBSSH2_CHANNEL_EXTENDED_DATA_IGNORE
LIBSSH2_CHANNEL_EXTENDED_DATA_MERGE
LIBSSH2_CHANNEL_EXTENDED_DATA_NORMAL LIBSSH2_CHANNEL_FLUSH_ALL
LIBSSH2_CHANNEL_FLUSH_EXTENDED_DATA LIBSSH2_CHANNEL_MINADJUST
LIBSSH2_CHANNEL_PACKET_DEFAULT LIBSSH2_CHANNEL_WINDOW_DEFAULT
LIBSSH2_DH_GEX_MAXGROUP LIBSSH2_DH_GEX_MINGROUP
LIBSSH2_DH_GEX_OPTGROUP LIBSSH2_ERROR_ALLOC
LIBSSH2_ERROR_BANNER_NONE LIBSSH2_ERROR_BANNER_SEND
LIBSSH2_ERROR_CHANNEL_CLOSED LIBSSH2_ERROR_CHANNEL_EOF_SENT
LIBSSH2_ERROR_CHANNEL_FAILURE LIBSSH2_ERROR_CHANNEL_OUTOFORDER
LIBSSH2_ERROR_CHANNEL_PACKET_EXCEEDED
LIBSSH2_ERROR_CHANNEL_REQUEST_DENIED
LIBSSH2_ERROR_CHANNEL_UNKNOWN
LIBSSH2_ERROR_CHANNEL_WINDOW_EXCEEDED LIBSSH2_ERROR_DECRYPT
LIBSSH2_ERROR_FILE LIBSSH2_ERROR_HOSTKEY_INIT
LIBSSH2_ERROR_HOSTKEY_SIGN LIBSSH2_ERROR_INVAL
LIBSSH2_ERROR_INVALID_MAC LIBSSH2_ERROR_INVALID_POLL_TYPE
LIBSSH2_ERROR_KEX_FAILURE LIBSSH2_ERROR_KEY_EXCHANGE_FAILURE
LIBSSH2_ERROR_METHOD_NONE LIBSSH2_ERROR_METHOD_NOT_SUPPORTED
LIBSSH2_ERROR_PASSWORD_EXPIRED LIBSSH2_ERROR_PROTO
LIBSSH2_ERROR_PUBLICKEY_UNRECOGNIZED
LIBSSH2_ERROR_PUBLICKEY_UNVERIFIED
LIBSSH2_ERROR_REQUEST_DENIED LIBSSH2_ERROR_SCP_PROTOCOL
LIBSSH2_ERROR_PUBLICKEY_PROTOCOL
LIBSSH2_ERROR_SFTP_PROTOCOL LIBSSH2_ERROR_SOCKET_DISCONNECT
LIBSSH2_ERROR_SOCKET_NONE LIBSSH2_ERROR_SOCKET_SEND
LIBSSH2_ERROR_SOCKET_TIMEOUT LIBSSH2_ERROR_TIMEOUT
LIBSSH2_ERROR_ZLIB LIBSSH2_FLAG_SIGPIPE LIBSSH2_FXF_APPEND
LIBSSH2_ERROR_EAGAIN
LIBSSH2_SOCKET_BLOCK_INBOUND
LIBSSH2_SOCKET_BLOCK_OUTBOUND
LIBSSH2_TRACE_TRANS
LIBSSH2_TRACE_KEX
LIBSSH2_TRACE_AUTH
LIBSSH2_TRACE_CONN
LIBSSH2_TRACE_SCP
LIBSSH2_TRACE_SFTP
LIBSSH2_TRACE_ERROR
LIBSSH2_TRACE_PUBLICKEY
LIBSSH2_TRACE_SOCKET
LIBSSH2_FXF_CREAT LIBSSH2_FXF_EXCL LIBSSH2_FXF_READ
LIBSSH2_FXF_TRUNC LIBSSH2_FXF_WRITE LIBSSH2_FX_BAD_MESSAGE
LIBSSH2_FX_CONNECTION_LOST LIBSSH2_FX_DIR_NOT_EMPTY
LIBSSH2_FX_EOF LIBSSH2_FX_FAILURE
LIBSSH2_FX_FILE_ALREADY_EXISTS LIBSSH2_FX_INVALID_FILENAME
LIBSSH2_FX_INVALID_HANDLE LIBSSH2_FX_LINK_LOOP
LIBSSH2_FX_LOCK_CONFlICT LIBSSH2_FX_NOT_A_DIRECTORY
LIBSSH2_FX_NO_CONNECTION LIBSSH2_FX_NO_MEDIA
LIBSSH2_FX_NO_SPACE_ON_FILESYSTEM LIBSSH2_FX_NO_SUCH_FILE
LIBSSH2_FX_NO_SUCH_PATH LIBSSH2_FX_OK
LIBSSH2_FX_OP_UNSUPPORTED LIBSSH2_FX_PERMISSION_DENIED
LIBSSH2_FX_QUOTA_EXCEEDED LIBSSH2_FX_UNKNOWN_PRINCIPLE
LIBSSH2_FX_WRITE_PROTECT LIBSSH2_H LIBSSH2_HOSTKEY_HASH_MD5
LIBSSH2_HOSTKEY_HASH_SHA1 LIBSSH2_METHOD_COMP_CS
LIBSSH2_METHOD_COMP_SC LIBSSH2_METHOD_CRYPT_CS
LIBSSH2_METHOD_CRYPT_SC LIBSSH2_METHOD_HOSTKEY
LIBSSH2_METHOD_KEX LIBSSH2_METHOD_LANG_CS
LIBSSH2_METHOD_LANG_SC LIBSSH2_METHOD_MAC_CS
LIBSSH2_METHOD_MAC_SC LIBSSH2_PACKET_MAXCOMP
LIBSSH2_PACKET_MAXDECOMP LIBSSH2_PACKET_MAXPAYLOAD
LIBSSH2_POLLFD_CHANNEL LIBSSH2_POLLFD_CHANNEL_CLOSED
LIBSSH2_POLLFD_LISTENER LIBSSH2_POLLFD_LISTENER_CLOSED
LIBSSH2_POLLFD_POLLERR LIBSSH2_POLLFD_POLLEX
LIBSSH2_POLLFD_POLLEXT LIBSSH2_POLLFD_POLLHUP
LIBSSH2_POLLFD_POLLIN LIBSSH2_POLLFD_POLLNVAL
LIBSSH2_POLLFD_POLLOUT LIBSSH2_POLLFD_POLLPRI
LIBSSH2_POLLFD_SESSION_CLOSED LIBSSH2_POLLFD_SOCKET
LIBSSH2_SFTP_ATTR_ACMODTIME LIBSSH2_SFTP_ATTR_EXTENDED
LIBSSH2_SFTP_ATTR_PERMISSIONS LIBSSH2_SFTP_ATTR_SIZE
LIBSSH2_SFTP_ATTR_UIDGID LIBSSH2_SFTP_LSTAT
LIBSSH2_SFTP_OPENDIR LIBSSH2_SFTP_OPENFILE
LIBSSH2_SFTP_PACKET_MAXLEN LIBSSH2_SFTP_READLINK
LIBSSH2_SFTP_REALPATH LIBSSH2_SFTP_RENAME_ATOMIC
LIBSSH2_SFTP_RENAME_NATIVE LIBSSH2_SFTP_RENAME_OVERWRITE
LIBSSH2_SFTP_SETSTAT LIBSSH2_SFTP_STAT LIBSSH2_SFTP_SYMLINK
LIBSSH2_SFTP_TYPE_BLOCK_DEVICE LIBSSH2_SFTP_TYPE_CHAR_DEVICE
LIBSSH2_SFTP_TYPE_DIRECTORY LIBSSH2_SFTP_TYPE_FIFO
LIBSSH2_SFTP_TYPE_REGULAR LIBSSH2_SFTP_TYPE_SOCKET
LIBSSH2_SFTP_TYPE_SPECIAL LIBSSH2_SFTP_TYPE_SYMLINK
LIBSSH2_SFTP_TYPE_UNKNOWN LIBSSH2_SFTP_VERSION
LIBSSH2_SOCKET_POLL_MAXLOOPS LIBSSH2_SOCKET_POLL_UDELAY
LIBSSH2_TERM_HEIGHT
LIBSSH2_TERM_HEIGHT_PX LIBSSH2_TERM_WIDTH
LIBSSH2_TERM_WIDTH_PX
));
ExtUtils::Constant::WriteConstants(
NAME => 'Net::SSH2',
NAMES => \@names,
DEFAULT_TYPE => 'IV',
C_FILE => 'const-c.inc',
XS_FILE => 'const-xs.inc',
);
}
else {
use File::Copy;
use File::Spec;
foreach my $file ('const-c.inc', 'const-xs.inc') {
my $fallback = File::Spec->catfile('fallback', $file);
copy ($fallback, $file) or die "Can't copy $fallback to $file: $!";
}
}
|