Pickle\Package\PHP\Command\Release\Windows\Binary::create PHP Method

create() public method

Create package.
public create ( array $args = [] )
$args array
    public function create(array $args = array())
    {
        if (!isset($args['build']) || !$args['build'] instanceof Interfaces\Package\Build) {
            throw new \Exception("Invalid or NULL object passed as Interfaces\\Package\\Build");
        }
        $this->build = $build = $args['build'];
        $info = $build->getInfo();
        $tmp_dir = $build->getTempDir();
        $tmp = $build->getLog('configure');
        if (preg_match(",Build dir:\\s+([\\:\\-\\.0-9a-zA-Z\\\\_]+),", $tmp, $m)) {
            if (preg_match(",^[a-z]\\:\\\\,i", $m[1]) && is_dir($m[1])) {
                /* Parsed the fully qualified path */
                $build_dir = $m[1];
            } else {
                /* otherwise construct */
                $build_dir = $tmp_dir . DIRECTORY_SEPARATOR . $m[1];
            }
        } else {
            $build_dir = 'x86' == $info['arch'] ? $tmp_dir : $tmp_dir . DIRECTORY_SEPARATOR . 'x64';
            $build_dir .= DIRECTORY_SEPARATOR . ($is_release ? 'Release' : 'Debug');
            $build_dir .= $info['thread_safe'] ? '_TS' : '';
        }
        /* Various file paths to pack. */
        $composer_json = $this->pkg->getRootDir() . DIRECTORY_SEPARATOR . 'composer.json';
        if (file_exists($tmp_dir . DIRECTORY_SEPARATOR . 'LICENSE')) {
            $license = $tmp_dir . DIRECTORY_SEPARATOR . 'LICENSE';
        } elseif (file_exists($tmp_dir . DIRECTORY_SEPARATOR . 'COPYING')) {
            $license = $tmp_dir . DIRECTORY_SEPARATOR . 'COPYING';
        } elseif (file_exists($tmp_dir . DIRECTORY_SEPARATOR . 'LICENSE.md')) {
            $license = $tmp_dir . DIRECTORY_SEPARATOR . 'LICENSE.md';
        } elseif (file_exists($tmp_dir . DIRECTORY_SEPARATOR . 'COPYING.md')) {
            $license = $tmp_dir . DIRECTORY_SEPARATOR . 'COPYING.md';
        } else {
            throw new \Exception("Couldn't find LICENSE");
        }
        $readme = null;
        if (file_exists($tmp_dir . DIRECTORY_SEPARATOR . 'README')) {
            $readme = $tmp_dir . DIRECTORY_SEPARATOR . 'README';
        } elseif (file_exists($tmp_dir . DIRECTORY_SEPARATOR . 'README.md')) {
            $readme = $tmp_dir . DIRECTORY_SEPARATOR . 'README.md';
        }
        /* pack the outcome */
        $zip_name = $this->getZipBaseName($build) . '.zip';
        $zip = new \ZipArchive();
        if (!$zip->open($zip_name, \ZipArchive::CREATE | \ZipArchive::OVERWRITE)) {
            throw new \Exception("Failed to open '{$zip_name}' for writing");
        }
        $ext_dll_found = false;
        $ext_names = $this->getMultiExtensionNames();
        foreach ($ext_names as $ext_name) {
            $dll_name = 'php_' . $ext_name . '.dll';
            $dll_file = $build_dir . DIRECTORY_SEPARATOR . $dll_name;
            if (!file_exists($dll_file)) {
                continue;
            }
            $ext_dll_found = true;
            $zip->addFile($dll_file, $dll_name);
            $pdb_name = 'php_' . $ext_name . '.pdb';
            $pdb_file = $build_dir . DIRECTORY_SEPARATOR . $pdb_name;
            if (file_exists($pdb_file)) {
                $zip->addFile($pdb_file, $pdb_name);
            }
        }
        if (!$ext_dll_found) {
            throw new \Exception("Couldn't find extension DLL");
        }
        $zip->addFile($composer_json, basename($composer_json));
        $zip->addFile($license, basename($license));
        if ($readme) {
            $zip->addFile($readme, basename($readme));
        }
        $zip->close();
    }