| #!/usr/bin/env perl |
| |
| # Copyright (C) 2015-2021 Apple Inc. All rights reserved. |
| # |
| # Redistribution and use in source and binary forms, with or without |
| # modification, are permitted provided that the following conditions |
| # are met: |
| # 1. Redistributions of source code must retain the above copyright |
| # notice, this list of conditions and the following disclaimer. |
| # 2. Redistributions in binary form must reproduce the above copyright |
| # notice, this list of conditions and the following disclaimer in the |
| # documentation and/or other materials provided with the distribution. |
| # |
| # THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' |
| # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
| # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS |
| # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
| # THE POSSIBILITY OF SUCH DAMAGE. |
| |
| use warnings; |
| use English; |
| use File::Basename qw(dirname); |
| use File::Copy qw(copy); |
| use File::Path qw(make_path remove_tree); |
| use File::Spec; |
| use Getopt::Long; |
| |
| my $verbose = 0; |
| GetOptions('verbose' => \$verbose); |
| |
| sub debugLog($) |
| { |
| my $logString = shift; |
| print "-- $logString\n" if $verbose; |
| } |
| |
| my $useDirCopy = 0; |
| |
| # Not all systems (e.g., OS X) include File::Copy::Recursive. Only |
| # use it if we have it installed. |
| eval "use File::Copy::Recursive"; |
| unless ($@) { |
| $useDirCopy = 1; |
| File::Copy::Recursive->import(); |
| } |
| |
| sub ditto($$) |
| { |
| my ($source, $destination) = @_; |
| |
| if ($useDirCopy) { |
| File::Copy::Recursive::dircopy($source, $destination) or die "Unable to copy directory $source to $destination: $!"; |
| } elsif ($^O eq 'darwin') { |
| system('ditto', $source, $destination); |
| } elsif ($^O ne 'MSWin32') { |
| # Ditto copies the *contents* of the source directory, not the directory itself. |
| opendir(my $dh, $source) or die "Can't open $source: $!"; |
| make_path($destination); |
| while (readdir $dh) { |
| if ($_ ne '..' and $_ ne '.') { |
| system('cp', '-R', "${source}/$_", $destination) == 0 or die "Failed to copy ${source}/$_ to $destination"; |
| } |
| } |
| closedir $dh; |
| } else { |
| die "Please install the PEP module File::Copy::Recursive"; |
| } |
| } |
| |
| sub seedFile($$) |
| { |
| my ($targetFile, $seedText) = @_; |
| |
| if (open(TARGET_FILE, '>', $targetFile)) { |
| print TARGET_FILE $seedText; |
| close(TARGET_FILE); |
| } |
| } |
| |
| sub appendFile($$) |
| { |
| my ($targetFile, $srcFile) = @_; |
| |
| open(SRC_FILE, '<', $srcFile) or die "Unable to open $srcFile: $!"; |
| my @srcText = <SRC_FILE>; |
| close(SRC_FILE); |
| open(TARGET_FILE, '>>', $targetFile) or die "Unable to open $targetFile: $!"; |
| print TARGET_FILE @srcText; |
| close(TARGET_FILE); |
| } |
| |
| sub readLicenseFile($) |
| { |
| my ($licenseFilePath) = @_; |
| |
| open(LICENSE_FILE, '<', $licenseFilePath) or die "Unable to open $licenseFilePath: $!"; |
| |
| my $license = "/*\n"; |
| $license .= ' * ' . $_ while <LICENSE_FILE>; |
| $license .= " */\n"; |
| |
| close(LICENSE_FILE); |
| |
| return $license; |
| } |
| |
| my $inspectorLicense = <<'EOF'; |
| /* |
| * Copyright (C) 2007-2021 Apple Inc. All rights reserved. |
| * Copyright (C) 2008 Matt Lilek. All rights reserved. |
| * Copyright (C) 2008-2009 Anthony Ricaud <rik@webkit.org> |
| * Copyright (C) 2009-2010 Joseph Pecoraro. All rights reserved. |
| * Copyright (C) 2009-2011 Google Inc. All rights reserved. |
| * Copyright (C) 2009 280 North Inc. All Rights Reserved. |
| * Copyright (C) 2010 Nikita Vasilyev. All rights reserved. |
| * Copyright (C) 2011 Brian Grinstead All rights reserved. |
| * Copyright (C) 2013 Matt Holden <jftholden@yahoo.com> |
| * Copyright (C) 2013 Samsung Electronics. All rights reserved. |
| * Copyright (C) 2013 Seokju Kwon (seokju.kwon@gmail.com) |
| * Copyright (C) 2013 Adobe Systems Inc. All rights reserved. |
| * Copyright (C) 2013-2015 University of Washington. All rights reserved. |
| * Copyright (C) 2014-2015 Saam Barati <saambarati1@gmail.com> |
| * Copyright (C) 2014 Antoine Quint |
| * Copyright (C) 2015 Tobias Reiss <tobi+webkit@basecode.de> |
| * Copyright (C) 2015-2017 Devin Rousso <webkit@devinrousso.com>. All rights reserved. |
| * Copyright (C) 2017 The Chromium Authors |
| * Copyright (C) 2017-2018 Sony Interactive Entertainment Inc. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * |
| * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' |
| * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
| * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS |
| * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
| * THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| EOF |
| |
| my $perl = $^X; |
| my $python = ($OSNAME =~ /cygwin/) ? "/usr/bin/python3" : "python3"; |
| my $derivedSourcesDir = $ENV{'DERIVED_SOURCES_DIR'}; |
| my $scriptsRoot = File::Spec->catdir($ENV{'SRCROOT'}, 'Scripts'); |
| my $sharedScriptsRoot = File::Spec->catdir($ENV{'JAVASCRIPTCORE_PRIVATE_HEADERS_DIR'}); |
| my $uiRoot = File::Spec->catdir($ENV{'SRCROOT'}, 'UserInterface'); |
| my $targetResourcePath = File::Spec->catdir($ENV{'TARGET_BUILD_DIR'}, $ENV{'UNLOCALIZED_RESOURCES_FOLDER_PATH'}); |
| my $protocolDir = File::Spec->catdir($targetResourcePath, 'Protocol'); |
| my $workersDir = File::Spec->catdir($targetResourcePath, 'Workers'); |
| my $codeMirrorPath = File::Spec->catdir($uiRoot, 'External', 'CodeMirror'); |
| my $esprimaPath = File::Spec->catdir($uiRoot, 'External', 'Esprima'); |
| my $threejsPath = File::Spec->catdir($uiRoot, 'External', 'three.js'); |
| my $cssDocumentationPath = File::Spec->catdir($uiRoot, 'External', 'CSSDocumentation'); |
| |
| $webInspectorUIAdditionsDir = &webInspectorUIAdditionsDir(); |
| |
| my $codeMirrorLicense = readLicenseFile(File::Spec->catfile($codeMirrorPath, 'LICENSE')); |
| my $esprimaLicense = readLicenseFile(File::Spec->catfile($esprimaPath, 'LICENSE')); |
| my $threejsLicense = readLicenseFile(File::Spec->catfile($threejsPath, 'LICENSE')); |
| my $cssDocumentationLicense = readLicenseFile(File::Spec->catfile($cssDocumentationPath, 'LICENSE')); |
| make_path($protocolDir, $targetResourcePath); |
| |
| $python = $ENV{"PYTHON"} if defined($ENV{"PYTHON"}); |
| |
| # Copy over dynamically loaded files from other frameworks, even if we aren't combining resources. |
| copy(File::Spec->catfile($ENV{'JAVASCRIPTCORE_PRIVATE_HEADERS_DIR'}, 'InspectorBackendCommands.js'), File::Spec->catfile($protocolDir, 'InspectorBackendCommands.js')) or die "Copy of InspectorBackendCommands.js failed: $!"; |
| |
| my $forceToolInstall = defined $ENV{'FORCE_TOOL_INSTALL'} && ($ENV{'FORCE_TOOL_INSTALL'} eq 'YES'); |
| my $shouldCombineMain = defined $ENV{'COMBINE_INSPECTOR_RESOURCES'} && ($ENV{'COMBINE_INSPECTOR_RESOURCES'} eq 'YES'); |
| my $shouldCombineTest = defined $ENV{'COMBINE_TEST_RESOURCES'} && ($ENV{'COMBINE_TEST_RESOURCES'} eq 'YES'); |
| my $combineResourcesCmd = File::Spec->catfile($scriptsRoot, 'combine-resources.pl'); |
| |
| if ($forceToolInstall) { |
| # Copy all files over individually to ensure we have Test.html / Test.js and files included from Test.html. |
| # We may then proceed to include combined & optimized resources which will output mostly to different paths |
| # but overwrite Main.html / Main.js with optimized versions. |
| ditto($uiRoot, $targetResourcePath); |
| |
| # Also force combining test resources for tool installs. |
| $shouldCombineTest = 1; |
| } |
| |
| if (!$shouldCombineMain) { |
| # Keep the files separate for engineering builds. Copy these before altering Main.html |
| # in other ways, such as combining for WebKitAdditions or inlining files. |
| ditto($uiRoot, $targetResourcePath); |
| } |
| |
| # Always refer to the copy in derived sources so the order of replacements does not matter. |
| make_path($derivedSourcesDir); |
| my $derivedSourcesMainHTML = File::Spec->catfile($derivedSourcesDir, 'Main.html'); |
| copy(File::Spec->catfile($uiRoot, 'Main.html'), File::Spec->catfile($derivedSourcesDir, 'Main.html')) or die "Copy failed: $!"; |
| |
| sub webInspectorUIAdditionsDir() { |
| my $webkitAdditionsDir; |
| if (defined $ENV{'BUILT_PRODUCTS_DIR'}) { |
| $webkitAdditionsDir = File::Spec->catdir($ENV{'BUILT_PRODUCTS_DIR'}, 'usr', 'local', 'include', 'WebKitAdditions'); |
| undef $webkitAdditionsDir unless -d $webkitAdditionsDir |
| } |
| if (!$webkitAdditionsDir and defined $ENV{'SDKROOT'}) { |
| $webkitAdditionsDir = File::Spec->catdir($ENV{'SDKROOT'}, 'usr', 'local', 'include', 'WebKitAdditions'); |
| undef $webkitAdditionsDir unless -d $webkitAdditionsDir |
| } |
| return unless $webkitAdditionsDir; |
| debugLog("webkitAdditionsDir: $webkitAdditionsDir"); |
| return File::Spec->catdir($webkitAdditionsDir, 'WebInspectorUI'); |
| } |
| |
| sub combineOrStripResourcesForWebKitAdditions() { |
| my $combineWebKitAdditions = 0; |
| |
| if (!defined $webInspectorUIAdditionsDir) { |
| debugLog("Didn't define \$webInspectorUIAdditionsDir"); |
| } elsif (-d $webInspectorUIAdditionsDir) { |
| debugLog("Found $webInspectorUIAdditionsDir"); |
| |
| opendir(DIR, $webInspectorUIAdditionsDir) || die "$!"; |
| my @files = grep { !/^\.{1,2}$/ } readdir (DIR); |
| closedir(DIR); |
| |
| # The WebKitAdditions/WebInspectorUI directory may exist without any files in it. |
| # Make sure that there is something to be processed in the directory before proceeding. |
| my $foundJSFile = 0; |
| my $foundCSSFile = 0; |
| foreach my $file (@files) { |
| my $path = File::Spec->catdir($webInspectorUIAdditionsDir, $file); |
| next if -d $path; |
| if ($file =~ /\.js$/) { |
| debugLog("Found a JavaScript file to combine: $file"); |
| $foundJSFile = 1; |
| } elsif ($file =~ /\.css$/) { |
| debugLog("Found a CSS file to combine: $file"); |
| $foundCSSFile = 1; |
| } |
| } |
| $combineWebKitAdditions = 1 if $foundCSSFile or $foundJSFile; |
| } else { |
| debugLog("Didn't find $webInspectorUIAdditionsDir"); |
| } |
| |
| if ($combineWebKitAdditions) { |
| debugLog("Combining resources provided by WebKitAdditions."); |
| combineResourcesForWebKitAdditions(); |
| } else { |
| debugLog("Stripping resources provided by WebKitAdditions."); |
| stripResourcesForWebKitAdditions(); |
| } |
| } |
| |
| sub stripResourcesForWebKitAdditions() { |
| system($perl, $combineResourcesCmd, |
| '--input-dir', 'WebKitAdditions', |
| '--input-html', $derivedSourcesMainHTML, |
| '--derived-sources-dir', $derivedSourcesDir, |
| '--output-dir', $derivedSourcesDir, |
| '--strip'); |
| } |
| |
| sub combineResourcesForWebKitAdditions() { |
| $rootPathForRelativeIncludes = dirname(dirname($webInspectorUIAdditionsDir)); |
| system($perl, $combineResourcesCmd, |
| '--input-dir', 'WebKitAdditions', |
| '--input-html', $derivedSourcesMainHTML, |
| '--input-html-dir', $rootPathForRelativeIncludes, |
| '--derived-sources-dir', $derivedSourcesDir, |
| '--output-dir', $derivedSourcesDir, |
| '--output-script-name', 'WebKitAdditions.js', |
| '--output-style-name', 'WebKitAdditions.css'); |
| |
| # Export the license into WebKitAdditions files. |
| my $targetWebKitAdditionsJS = File::Spec->catfile($targetResourcePath, 'WebKitAdditions.js'); |
| seedFile($targetWebKitAdditionsJS, $inspectorLicense); |
| |
| my $targetWebKitAdditionsCSS = File::Spec->catfile($targetResourcePath, 'WebKitAdditions.css'); |
| seedFile($targetWebKitAdditionsCSS, $inspectorLicense); |
| |
| appendFile($targetWebKitAdditionsJS, File::Spec->catfile($derivedSourcesDir, 'WebKitAdditions.js')); |
| appendFile($targetWebKitAdditionsCSS, File::Spec->catfile($derivedSourcesDir, 'WebKitAdditions.css')); |
| } |
| |
| if ($shouldCombineMain) { |
| # Remove Debug JavaScript and CSS files in Production builds. |
| system($perl, $combineResourcesCmd, |
| '--input-dir', 'Debug', |
| '--input-html', $derivedSourcesMainHTML, |
| '--input-html-dir', $uiRoot, |
| '--derived-sources-dir', $derivedSourcesDir, |
| '--output-dir', $derivedSourcesDir, |
| '--output-script-name', 'Debug.js', |
| '--output-style-name', 'Debug.css', |
| '--strip'); |
| |
| # Combine the JavaScript and CSS files in Production builds into single files (Main.js and Main.css). |
| system($perl, $combineResourcesCmd, |
| '--input-html', $derivedSourcesMainHTML, |
| '--input-html-dir', $uiRoot, |
| '--derived-sources-dir', $derivedSourcesDir, |
| '--output-dir', $derivedSourcesDir, |
| '--output-script-name', 'Main.js', |
| '--output-style-name', 'Main.css'); |
| |
| # Process WebKitAdditions.{css,js} after Main.{js,css}. Otherwise, the combined WebKitAdditions files |
| # will get slurped into Main.{js,css} because the 'WebKitAdditions' relative URL prefix will be removed. |
| combineOrStripResourcesForWebKitAdditions(); |
| |
| # Combine the CodeMirror JavaScript and CSS files in Production builds into single files (CodeMirror.js and CodeMirror.css). |
| system($perl, $combineResourcesCmd, |
| '--input-dir', 'External/CodeMirror', |
| '--input-html', $derivedSourcesMainHTML, |
| '--input-html-dir', $uiRoot, |
| '--derived-sources-dir', $derivedSourcesDir, |
| '--output-dir', $derivedSourcesDir, |
| '--output-script-name', 'CodeMirror.js', |
| '--output-style-name', 'CodeMirror.css'); |
| |
| # Combine the CSSDocumentation JavaScript files in Production builds into a single file (CSSDocumentation.js). |
| system($perl, $combineResourcesCmd, |
| '--input-dir', 'External/CSSDocumentation', |
| '--input-html', $derivedSourcesMainHTML, |
| '--input-html-dir', $uiRoot, |
| '--derived-sources-dir', $derivedSourcesDir, |
| '--output-dir', $derivedSourcesDir, |
| '--output-script-name', 'CSSDocumentation.js'); |
| |
| # Combine the Esprima JavaScript files in Production builds into a single file (Esprima.js). |
| system($perl, $combineResourcesCmd, |
| '--input-dir', 'External/Esprima', |
| '--input-html', $derivedSourcesMainHTML, |
| '--input-html-dir', $uiRoot, |
| '--derived-sources-dir', $derivedSourcesDir, |
| '--output-dir', $derivedSourcesDir, |
| '--output-script-name', 'Esprima.js'); |
| |
| # Combine the three.js JavaScript files in Production builds into a single file (Three.js). |
| system($perl, $combineResourcesCmd, |
| '--input-dir', 'External/three.js', |
| '--input-html', $derivedSourcesMainHTML, |
| '--input-html-dir', $uiRoot, |
| '--derived-sources-dir', $derivedSourcesDir, |
| '--output-dir', $derivedSourcesDir, |
| '--output-script-name', 'Three.js'); |
| |
| # Combine non-minified JavaScript files in Production builds into a single file (NonMinified.js), which will be |
| # appended to Main.js after Main.js has been minified. |
| system($perl, $combineResourcesCmd, |
| '--input-dir', 'NonMinified', |
| '--input-html', $derivedSourcesMainHTML, |
| '--input-html-dir', $uiRoot, |
| '--derived-sources-dir', $derivedSourcesDir, |
| '--output-dir', $derivedSourcesDir, |
| '--output-script-name', 'NonMinified.js', |
| '--skip-concatenate-tag'); |
| |
| # Remove console.assert calls from the Main.js file. |
| my $derivedSourcesMainJS = File::Spec->catfile($derivedSourcesDir, 'Main.js'); |
| system($perl, File::Spec->catfile($scriptsRoot, 'remove-console-asserts.pl'), |
| '--input-script', $derivedSourcesMainJS, |
| '--output-script', $derivedSourcesMainJS); |
| |
| # Remove console.assert calls from the NonMinified.js file. |
| my $derivedSourcesNonMinifiedJS = File::Spec->catfile($derivedSourcesDir, 'NonMinified.js'); |
| system($perl, File::Spec->catfile($scriptsRoot, 'remove-console-asserts.pl'), |
| '--input-script', $derivedSourcesNonMinifiedJS, |
| '--output-script', $derivedSourcesNonMinifiedJS); |
| |
| # Fix Image URLs in the Main.css file by removing the "../". |
| my $derivedSourcesMainCSS = File::Spec->catfile($derivedSourcesDir, 'Main.css'); |
| if (open(INPUT_MAIN, '<', $derivedSourcesMainCSS)) { |
| local $/; |
| my $cssContents = <INPUT_MAIN>; |
| close(INPUT_MAIN); |
| open(OUTPUT_MAIN, '>', $derivedSourcesMainCSS); |
| $cssContents =~ s/\.\.\/Images/Images/g; |
| print OUTPUT_MAIN $cssContents; |
| close(OUTPUT_MAIN); |
| } |
| |
| # Export the license into Main.js. |
| my $targetMainJS = File::Spec->catfile($targetResourcePath, 'Main.js'); |
| seedFile($targetMainJS, $inspectorLicense); |
| |
| my $targetMainCSS = File::Spec->catfile($targetResourcePath, 'Main.css'); |
| seedFile($targetMainCSS, $inspectorLicense); |
| |
| # Export the license into CodeMirror.js and CodeMirror.css. |
| my $targetCodeMirrorJS = File::Spec->catfile($targetResourcePath, 'CodeMirror.js'); |
| seedFile($targetCodeMirrorJS, $codeMirrorLicense); |
| |
| my $targetCodeMirrorCSS = File::Spec->catfile($targetResourcePath, 'CodeMirror.css'); |
| seedFile($targetCodeMirrorCSS, $codeMirrorLicense); |
| |
| # Export the license into CSSDocumentation.js. |
| my $targetCSSDocumentationJS = File::Spec->catfile($targetResourcePath, 'CSSDocumentation.js'); |
| seedFile($targetCSSDocumentationJS, $cssDocumentationLicense); |
| |
| # Export the license into Esprima.js. |
| my $targetEsprimaJS = File::Spec->catfile($targetResourcePath, 'Esprima.js'); |
| seedFile($targetEsprimaJS, $esprimaLicense); |
| |
| # Export the license into Three.js. |
| my $targetThreejsJS = File::Spec->catfile($targetResourcePath, 'Three.js'); |
| seedFile($targetThreejsJS, $threejsLicense); |
| |
| # Minify the Main.js and Main.css files, with Main.js appending to the license that was exported above. |
| my $jsMinScript = File::Spec->catfile($sharedScriptsRoot, 'jsmin.py'); |
| my $cssMinScript = File::Spec->catfile($sharedScriptsRoot, 'cssmin.py'); |
| system(qq("$python" "$jsMinScript" < "$derivedSourcesMainJS" >> "$targetMainJS")) and die "Failed to minify $derivedSourcesMainJS: $!"; |
| system(qq("$python" "$cssMinScript" < "$derivedSourcesMainCSS" >> "$targetMainCSS")) and die "Failed to minify $derivedSourcesMainCSS: $!"; |
| |
| # Minify the CodeMirror.js and CodeMirror.css files, appending to the license that was exported above. |
| my $derivedSourcesCodeMirrorJS = File::Spec->catfile($derivedSourcesDir, 'CodeMirror.js'); |
| my $derivedSourcesCodeMirrorCSS = File::Spec->catfile($derivedSourcesDir, 'CodeMirror.css'); |
| system(qq("$python" "$jsMinScript" < "$derivedSourcesCodeMirrorJS" >> "$targetCodeMirrorJS")) and die "Failed to minify $derivedSourcesCodeMirrorJS: $!"; |
| system(qq("$python" "$cssMinScript" < "$derivedSourcesCodeMirrorCSS" >> "$targetCodeMirrorCSS")) and die "Failed to minify $derivedSourcesCodeMirrorCSS: $!"; |
| |
| # Minify the CSSDocumentation.js file, appending to the license that was exported above. |
| my $derivedSourcesCSSDocumentationJS = File::Spec->catfile($derivedSourcesDir, 'CSSDocumentation.js'); |
| system(qq("$python" "$jsMinScript" < "$derivedSourcesCSSDocumentationJS" >> "$targetCSSDocumentationJS")) and die "Failed to minify $derivedSourcesCSSDocumentationJS: $!"; |
| |
| # Minify the Esprima.js file, appending to the license that was exported above. |
| my $derivedSourcesEsprimaJS = File::Spec->catfile($derivedSourcesDir, 'Esprima.js'); |
| system(qq("$python" "$jsMinScript" < "$derivedSourcesEsprimaJS" >> "$targetEsprimaJS")) and die "Failed to minify $derivedSourcesEsprimaJS: $!"; |
| |
| # Minify the Three.js file, appending to the license that was exported above. |
| my $derivedSourcesThreejsJS = File::Spec->catfile($derivedSourcesDir, 'Three.js'); |
| system(qq("$python" "$jsMinScript" < "$derivedSourcesThreejsJS" >> "$targetThreejsJS")) and die "Failed to minify $derivedSourcesThreejsJS: $!"; |
| |
| # Append non-minified JavaScript to Main.js. |
| appendFile($targetMainJS, $derivedSourcesNonMinifiedJS); |
| |
| # Copy over the Images directory. |
| ditto(File::Spec->catdir($uiRoot, 'Images'), File::Spec->catdir($targetResourcePath, 'Images')); |
| |
| # Copy the Protocol/Legacy and Workers directories. |
| ditto(File::Spec->catfile($uiRoot, 'Protocol', 'Legacy'), File::Spec->catfile($protocolDir, 'Legacy')); |
| ditto(File::Spec->catfile($uiRoot, 'Workers'), $workersDir); |
| |
| # Remove console.assert calls from the Worker js files. |
| system($perl, File::Spec->catfile($scriptsRoot, 'remove-console-asserts.pl'), |
| '--input-directory', $workersDir); |
| |
| # Fix import references in Workers directories. This rewrites "../../External/script.js" import paths to their new locations. |
| system($perl, File::Spec->catfile($scriptsRoot, 'fix-worker-imports-for-optimized-builds.pl'), |
| '--input-directory', $workersDir) and die "Failed to update Worker imports for optimized builds."; |
| } else { |
| # Always process WebKitAdditions files because the 'WebKitAdditions' path prefix is not real, |
| # so it can't proceed as a normal load from the bundle as written. This function replaces the |
| # dummy prefix with the actual WebKitAdditions path when looking for files to inline and combine. |
| combineOrStripResourcesForWebKitAdditions(); |
| } |
| |
| # Always copy over Main.html because we may have combined WebKitAdditions files |
| # without minifying anything else. We always want to combine WKA so the relevant |
| # resources are copied out of Derived Sources rather than an arbitrary WKA directory. |
| copy($derivedSourcesMainHTML, File::Spec->catfile($targetResourcePath, 'Main.html')); |
| |
| if ($shouldCombineTest) { |
| # Combine the JavaScript files for testing into a single file (TestCombined.js). |
| system($perl, $combineResourcesCmd, |
| '--input-html', File::Spec->catfile($uiRoot, 'Test.html'), |
| '--derived-sources-dir', $derivedSourcesDir, |
| '--output-dir', $derivedSourcesDir, |
| '--output-script-name', 'TestCombined.js', |
| '--output-style-name', 'TestCombined.css'); |
| |
| my $derivedSourcesTestHTML = File::Spec->catfile($derivedSourcesDir, 'Test.html'); |
| my $derivedSourcesTestJS = File::Spec->catfile($derivedSourcesDir, 'TestCombined.js'); |
| |
| # Combine non-minified JavaScript files in Production builds into the same TestCombined.js, because test files are not minified. |
| system($perl, $combineResourcesCmd, |
| '--input-dir', 'NonMinified', |
| '--input-html', $derivedSourcesTestHTML, |
| '--input-html-dir', $uiRoot, |
| '--derived-sources-dir', $derivedSourcesDir, |
| '--output-dir', $derivedSourcesDir, |
| '--output-script-name', 'NonMinifiedTestCombined.js', |
| '--skip-concatenate-tag'); |
| |
| my $derivedSourcesNonMinifiedTestJS = File::Spec->catfile($derivedSourcesDir, 'NonMinifiedTestCombined.js'); |
| |
| # Combine the CodeMirror JavaScript files into single file (TestCodeMirror.js). |
| system($perl, $combineResourcesCmd, |
| '--input-dir', 'External/CodeMirror', |
| '--input-html', $derivedSourcesTestHTML, |
| '--input-html-dir', $uiRoot, |
| '--derived-sources-dir', $derivedSourcesDir, |
| '--output-dir', $derivedSourcesDir, |
| '--output-script-name', 'TestCodeMirror.js'); |
| |
| # Combine the Esprima JavaScript files for testing into a single file (TestEsprima.js). |
| system($perl, $combineResourcesCmd, |
| '--input-dir', 'External/Esprima', |
| '--input-html', $derivedSourcesTestHTML, |
| '--input-html-dir', $uiRoot, |
| '--derived-sources-dir', $derivedSourcesDir, |
| '--output-dir', $derivedSourcesDir, |
| '--output-script-name', 'TestEsprima.js'); |
| |
| # Export the license into TestCombined.js. |
| my $targetTestJS = File::Spec->catfile($targetResourcePath, 'TestCombined.js'); |
| seedFile($targetTestJS, $inspectorLicense); |
| |
| # Export the license into TestCodeMirror.js. |
| my $targetCodeMirrorJS = File::Spec->catfile($targetResourcePath, 'TestCodeMirror.js'); |
| seedFile($targetCodeMirrorJS, $codeMirrorLicense); |
| |
| # Export the license into TestEsprima.js. |
| my $targetEsprimaJS = File::Spec->catfile($targetResourcePath, 'TestEsprima.js'); |
| seedFile($targetEsprimaJS, $esprimaLicense); |
| |
| # Append TestCombined.js to the license that was exported above. |
| appendFile($targetTestJS, $derivedSourcesTestJS); |
| |
| # Append the non-minified sources to TestCombined.js. |
| appendFile($targetTestJS, $derivedSourcesNonMinifiedTestJS); |
| |
| # Append CodeMirror.js to the license that was exported above. |
| my $derivedSourcesCodeMirrorJS = File::Spec->catfile($derivedSourcesDir, 'TestCodeMirror.js'); |
| appendFile($targetCodeMirrorJS, $derivedSourcesCodeMirrorJS); |
| |
| # Append Esprima.js to the license that was exported above. |
| my $derivedSourcesEsprimaJS = File::Spec->catfile($derivedSourcesDir, 'TestEsprima.js'); |
| appendFile($targetEsprimaJS, $derivedSourcesEsprimaJS); |
| |
| # Copy over Test.html. |
| copy($derivedSourcesTestHTML, File::Spec->catfile($targetResourcePath, 'Test.html')); |
| |
| # Combine the JavaScript files for testing into a single file (TestStub.js). |
| system($perl, $combineResourcesCmd, |
| '--input-html', File::Spec->catfile($uiRoot, 'TestStub.html'), |
| '--derived-sources-dir', $derivedSourcesDir, |
| '--output-dir', $derivedSourcesDir, |
| '--output-script-name', 'TestStubCombined.js'); |
| |
| # Copy over TestStub.html and TestStubCombined.js. |
| copy(File::Spec->catfile($derivedSourcesDir, 'TestStub.html'), File::Spec->catfile($targetResourcePath, 'TestStub.html')); |
| copy(File::Spec->catfile($derivedSourcesDir, 'TestStubCombined.js'), File::Spec->catfile($targetResourcePath, 'TestStubCombined.js')); |
| |
| # Copy the Legacy directory. |
| ditto(File::Spec->catfile($uiRoot, 'Protocol', 'Legacy'), File::Spec->catfile($protocolDir, 'Legacy')); |
| } |