Commit:    f2e9b996640c0c5cc5105c5ba05f814469b30c9a
Author:    Anatol Belski <a...@php.net>         Wed, 21 Feb 2018 18:47:05 +0100
Parents:   cb2e95f1b1c591861da283fc215f22bd62aae469
Branches:  master

Link:       
http://git.php.net/?p=web/rmtools.git;a=commitdiff;h=f2e9b996640c0c5cc5105c5ba05f814469b30c9a

Log:
Implement move all dep dlls into package

Changed paths:
  M  data/config/pecl/libs.ini
  M  include/PeclExt.php


Diff:
diff --git a/data/config/pecl/libs.ini b/data/config/pecl/libs.ini
index 11f94f5..fb2c892 100644
--- a/data/config/pecl/libs.ini
+++ b/data/config/pecl/libs.ini
@@ -4,12 +4,17 @@
 ; expand_include=    Whether subdirs in the includes of this lib have to be 
added to the path.
 ;                    Usually no header clashing happens, so if not set, 
default is true. Set
 ;                    explicitly to zero if you don't want it.
+; copy_all_dep_dll - Copy all dlls from libs configured, not just those that 
were linked.
+;                 Useful for libs like ImageMagic, that have loadable modules 
which
+;                 wouldn't be recognized by deplister otherwise.
 
 [GraphicsMagick]
 expand_include=1
+copy_all_dep_dll=1
 
 [ImageMagick]
 expand_include=1
+copy_all_dep_dll=1
 
 [libavro]
 expand_include=0
diff --git a/include/PeclExt.php b/include/PeclExt.php
index 6fcbf38..5f7f746 100644
--- a/include/PeclExt.php
+++ b/include/PeclExt.php
@@ -723,7 +723,7 @@ if (!function_exists('rmtools\combinations')) {
                                        $ret
                                );
 
-                               if(file_exists($look_for)) {
+                               if(file_exists($look_for) && 
!file_exists($dll_file)) {
                                        if (!copy($look_for, $dll_file)) {
                                                throw new \Exception("The 
dependency dll '$dll_name' "
                                                . "was found but couldn't be 
copied into '$target'");
@@ -739,7 +739,7 @@ if (!function_exists('rmtools\combinations')) {
                                        . DIRECTORY_SEPARATOR . $pdb_name;
 
 
-                               if(file_exists($look_for)) {
+                               if(file_exists($look_for) && 
!file_exists($pdb_file)) {
                                        if (!copy($look_for, $pdb_file)) {
                                                throw new \Exception("The 
dependency pdb '$dll_name' "
                                                . "was found but couldn't be 
copied into '$target'");
@@ -813,6 +813,62 @@ if (!function_exists('rmtools\combinations')) {
                        throw new \Exception($msg);
                }
 
+               /* Look if we have to package all the dep DLLs. */
+               $config = $this->getPackageConfig();
+               var_dump($config);
+               if ($config && isset($config["libs"]) && 
is_array($config["libs"])) {
+                       $deps_path = 
$this->build->branch->config->getPeclDepsBase();
+                       foreach($config['libs'] as $lib) {
+                               if (!$lib) {
+                                       continue;
+                               }
+
+                               $lib_conf = $this->getLibraryConfig($lib);
+                               var_dump($lib_conf);
+                               if (!isset($lib_conf["copy_all_dep_dll"]) || 
!$lib_conf["copy_all_dep_dll"]) {
+                                       continue;
+                               }
+
+                               $bin_path = $deps_path . DIRECTORY_SEPARATOR . 
$lib . DIRECTORY_SEPARATOR . "bin";
+                               var_dump($bin_path);
+                               if (!is_dir($bin_path)) {
+                                       continue;
+                               }
+
+                               $dep_dll = glob($bin_path . DIRECTORY_SEPARATOR 
. "*.dll");
+                               var_dump($dep_dll);
+                               foreach ($dep_dll as $base_dll_file) {
+                                       $dll_file = $target . 
DIRECTORY_SEPARATOR . basename($base_dll_file);
+                                       if (!file_exists($dll_file)) {
+                                               if (!copy($base_dll_file, 
$dll_file)) {
+                                                       throw new 
\Exception("Couldn't copy '$base_dll_file' into '$target'");
+                                               }
+                                       }
+                                       $files_to_zip[] = $dll_file;
+
+                                       $base_pdb_file = 
dirname($base_dll_file) . DIRECTORY_SEPARATOR . basename($base_dll_file, 
".dll") . ".pdb";
+                                       $pdb_file = $target . 
DIRECTORY_SEPARATOR . basename($base_dll_file, ".dll") . ".pdb";
+                                       if (file_exists($base_pdb_file) && 
!file_exists($pdb_file)) {
+                                               if (!copy($base_pdb_file, 
$pdb_file)) {
+                                                       throw new 
\Exception("Couldn't copy '$base_pdb_file' into '$target'");
+                                               }
+                                               $files_to_zip[] = $pdb_file;
+                                       }
+
+                                       $files_to_zip = 
array_merge($this->prepareAllDepDlls($base_dll_file, $target), $files_to_zip);
+                               }
+
+                               $dep_pdb = glob($bin_path . DIRECTORY_SEPARATOR 
. "*.pdb");
+                               foreach ($dep_pdb as $base_pdb_file) {
+                                       $pdb_file = $target . 
DIRECTORY_SEPARATOR . basename($base_pdb_file);
+                                       if (!copy($base_pdb_file, $pdb_file)) {
+                                               throw new \Exception("Couldn't 
copy '$base_pdb_file' into '$target'");
+                                       }
+                               }
+                       }
+               }
+               var_dump($files_to_zip);
+
                /* care about extension license */
                /* The ext license will be copied based on the info from 
package.xml, but let these lines stay */
                $files_to_zip = array_merge(


--
PHP Webmaster List Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to