|
1 |
| -const {copySync, removeSync, existsSync} = require("fs-extra"); |
| 1 | +const fs = require("fs"); |
| 2 | +const {copySync, removeSync, existsSync, ensureDirSync} = require("fs-extra"); |
2 | 3 | const {join} = require("path");
|
| 4 | +const unzip = require("yauzl"); |
| 5 | + |
3 | 6 | const isBuilding = process.env.NATIVEPHP_BUILDING;
|
4 | 7 | const phpBinaryPath = process.env.NATIVEPHP_PHP_BINARY_PATH;
|
| 8 | +const phpVersion = process.env.NATIVEPHP_PHP_BINARY_VERSION; |
5 | 9 | const certificatePath = process.env.NATIVEPHP_CERTIFICATE_FILE_PATH;
|
6 | 10 |
|
7 | 11 | // Differentiates for Serving and Building
|
@@ -30,28 +34,50 @@ if (isArm64) {
|
30 | 34 | binaryArch = 'arm64';
|
31 | 35 | }
|
32 | 36 |
|
33 |
| - |
34 |
| - |
35 |
| -const binarySrcDir = join(phpBinaryPath, targetOs, binaryArch); |
| 37 | +const phpVersionZip = 'php-' + phpVersion + '.zip'; |
| 38 | +const binarySrcDir = join(phpBinaryPath, targetOs, binaryArch, phpVersionZip); |
36 | 39 | const binaryDestDir = join(__dirname, 'resources/php');
|
37 | 40 |
|
38 | 41 | console.log('Binary Source: ', binarySrcDir);
|
39 | 42 | console.log('Binary Filename: ', phpBinaryFilename);
|
| 43 | +console.log('PHP version: ' + phpVersion); |
40 | 44 |
|
41 | 45 | if (phpBinaryPath) {
|
42 | 46 | try {
|
43 |
| - console.log('Copying PHP file(s) from ' + binarySrcDir + ' to ' + binaryDestDir); |
| 47 | + console.log('Unzipping PHP binary from ' + binarySrcDir + ' to ' + binaryDestDir); |
44 | 48 | removeSync(binaryDestDir);
|
45 |
| - copySync(binarySrcDir, binaryDestDir); |
46 | 49 |
|
| 50 | + ensureDirSync(binaryDestDir); |
| 51 | + |
| 52 | + // Unzip the files |
| 53 | + unzip.open(binarySrcDir, {lazyEntries: true}, function (err, zipfile) { |
| 54 | + if (err) throw err; |
| 55 | + zipfile.readEntry(); |
| 56 | + zipfile.on("entry", function (entry) { |
| 57 | + zipfile.openReadStream(entry, function (err, readStream) { |
| 58 | + if (err) throw err; |
| 59 | + |
| 60 | + const writeStream = fs.createWriteStream(join(binaryDestDir, 'php')); |
| 61 | + |
| 62 | + readStream.pipe(writeStream); |
| 63 | + |
| 64 | + writeStream.on("close", function() { |
| 65 | + console.log('Copied PHP binary to ', binaryDestDir); |
| 66 | + |
| 67 | + // Add execute permissions |
| 68 | + fs.chmod(join(binaryDestDir, 'php'), 0o755, (err) => { |
| 69 | + if (err) { |
| 70 | + console.log(`Error setting permissions: ${err}`); |
| 71 | + } |
| 72 | + }); |
47 | 73 |
|
48 |
| - // If we're building for Windows, copy the php.exe from the dest dir to `php`. |
49 |
| - // This allows the same import command to work on all platforms (same binary filename) |
50 |
| - if (isWindows && existsSync(join(binaryDestDir, phpBinaryFilename))) { |
51 |
| - copySync(join(binaryDestDir, phpBinaryFilename), join(binaryDestDir, 'php')); |
52 |
| - } |
| 74 | + zipfile.readEntry(); |
| 75 | + }); |
| 76 | + }); |
| 77 | + }); |
| 78 | + }); |
53 | 79 | } catch (e) {
|
54 |
| - console.log('Error copying PHP binary', e); |
| 80 | + console.error('Error copying PHP binary', e); |
55 | 81 | }
|
56 | 82 | }
|
57 | 83 |
|
|
0 commit comments