#!/bin/sh
eval 'if [ -x /usr/local/cpanel/3rdparty/bin/perl ]; then exec /usr/local/cpanel/3rdparty/bin/perl -x -- $0 ${1+"$@"}; else exec /usr/bin/perl -x $0 ${1+"$@"}; fi;'
  if 0;

#!/usr/bin/perl

use lib '/usr/local/cpanel';
use Cpanel::FileUtils;
use Cpanel::SafeRun;

my $installed = 0;

my @prefixes = ('/usr/local');
if (@ARGV) {
    @prefixes = @ARGV;
}

my $install_dir = '/usr/local/IonCube5';

foreach my $php_prefix (@prefixes) {
    $php_prefix =~ s/\/$//;
    my $php_ini = $php_prefix . '/lib/php.ini';
    if ( $php_prefix eq '/usr/local/cpanel/3rdparty' || $php_prefix eq '/var/cpanel/3rdparty' ) {
        $php_ini = '/usr/local/cpanel/3rdparty/etc/php.ini';
    }
    next unless ( -e $php_ini && -e $php_prefix . '/bin/php' && -e $php_prefix . '/bin/phpize' && -e $php_prefix . '/bin/php-config' );
    local %ENV = ();

    # create install directory
    if ( !-d $install_dir ) {
        print "Creating install directory at $install_dir\n";
        mkdir $install_dir || die "Could not mkdir $install_dir: $!";
        chmod 0755, $install_dir || die "Could not chmod $install_dir: $!";
    }

    # determine version to use
    print "Determining PHP version\n";
    my @cmd;
    if ( -e '/usr/local/cpanel/scripts/php.ini' ) {
        @cmd = ( $php_prefix . '/bin/php', '-c', '/usr/local/cpanel/scripts/php.ini', '-v' );
    }
    else {
        @cmd = ( $php_prefix . '/bin/php', '-v' );
    }
    my $phpout = Cpanel::SafeRun::saferunallerrors(@cmd);
    my $php_version;
    if ( $phpout =~ m/^PHP\s+(\d\.\d)\.\d+\S*\s+\(([^\)]+)\)/m ) {
        $php_version = $1;
    }
    else {
        print "Could not determine PHP version from output:\n";
        print $phpout;
        next;
    }

    my $systype = 'lin';

    # install binaries
    print "Installing IonCube Loader binaries\n";
    my $ion_file = 'ioncube_loader_' . $systype . '_' . $php_version . '.so';
    die "$ion_file missing in IonCube5 Loader tarball" unless ( -e $ion_file );    # this works because we are already in the right place when Cpanel::Easy::IonCube5 runs this script
    Cpanel::FileUtils::safecopy( $ion_file, $install_dir ) || die "Could not move ${ion_file} to $install_dir: $!";
    chmod 0644, "$install_dir/$ion_file" || die "Could not chmod $install_dir/${ion_file}: $!";

    print "Activating IonCube5 Loader extension in ${php_ini}\n";
    my ( $ok, $res ) = activate_ioncube( $php_prefix, $php_ini, $php_version, $systype );
    $installed = 1 if $ok;
    print $res . "\n";
}

if ($installed) {
    exit 0;
}
else {
    exit 1;
}

sub activate_ioncube {
    my $prefix      = shift;
    my $php_ini     = shift;
    my $php_version = shift;
    my $systype     = shift;
    my $phpconfig   = $prefix . '/bin/php-config';

    my $ext_dir = Cpanel::SafeRun::saferun( $phpconfig, '--extension-dir' );
    chomp $ext_dir;

    # IonCube needs to be loaded before any other Zend Extensions.  We'll anchor it to the extension_dir line to put it above the [Zend] section

    Cpanel::FileUtils::regex_rep_file( $php_ini, { qr{^\s*zend_extension(_ts)?\s*=\s*"?\S+\/ioncube_loader_(fre|lin)_\d\.\d(_ts)?.so"?\s*$}is => q{}, }, {}, );
    my $success = Cpanel::FileUtils::regex_rep_file(
        $php_ini,
        {
            qr{^\s*;?\s*extension_dir\s*=.*$}i => qq{extension_dir = "$ext_dir"\nzend_extension="$install_dir/ioncube_loader_${systype}_${php_version}.so"},
        },
        {},
    );

    return ( 1, 'IonCube5 Loader extension activated' ) if $success;
    return ( 0, 'Failed to activate IonCube5 Loader in php.ini' );
}
