1 Star 0 Fork 0

iorichina/pdf.js

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
make.js 37.78 KB
一键复制 编辑 原始数据 按行查看 历史
Yury Delendik 提交于 2016-05-02 09:58 . Moves all testing into gulpfile.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329
/* Copyright 2012 Mozilla Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* jshint node:true */
/* globals cat, cd, cp, echo, env, exec, exit, find, ls, mkdir, mv, process, rm,
sed, target, test */
'use strict';
try {
require('shelljs/make');
} catch (e) {
console.log('ShellJS is not installed. Run "npm install" to install ' +
'all dependencies.');
return;
}
var builder = require('./external/builder/builder.js');
var path = require('path');
var fs = require('fs');
var CONFIG_FILE = 'pdfjs.config';
var config = JSON.parse(fs.readFileSync(CONFIG_FILE));
var ROOT_DIR = __dirname + '/', // absolute path to project's root
BUILD_DIR = 'build/',
SRC_DIR = 'src/',
BUILD_TARGET = BUILD_DIR + 'pdf.js',
BUILD_WORKER_TARGET = BUILD_DIR + 'pdf.worker.js',
BUILD_TARGETS = [BUILD_TARGET, BUILD_WORKER_TARGET],
FIREFOX_BUILD_DIR = BUILD_DIR + '/firefox/',
CHROME_BUILD_DIR = BUILD_DIR + '/chromium/',
B2G_BUILD_DIR = BUILD_DIR + '/b2g/',
JSDOC_DIR = BUILD_DIR + 'jsdoc',
EXTENSION_SRC_DIR = 'extensions/',
FIREFOX_CONTENT_DIR = EXTENSION_SRC_DIR + '/firefox/content/',
LOCALE_SRC_DIR = 'l10n/',
GH_PAGES_DIR = BUILD_DIR + 'gh-pages/',
GENERIC_DIR = BUILD_DIR + 'generic/',
MINIFIED_DIR = BUILD_DIR + 'minified/',
SINGLE_FILE_DIR = BUILD_DIR + 'singlefile/',
COMPONENTS_DIR = BUILD_DIR + 'components/',
REPO = 'git@github.com:mozilla/pdf.js.git',
MOZCENTRAL_PREF_PREFIX = 'pdfjs',
FIREFOX_PREF_PREFIX = 'extensions.uriloader@pdf.js',
MOZCENTRAL_STREAM_CONVERTER_ID = 'd0c5195d-e798-49d4-b1d3-9324328b2291',
FIREFOX_STREAM_CONVERTER_ID = '6457a96b-2d68-439a-bcfa-44465fbcdbb1',
MOZCENTRAL_STREAM_CONVERTER2_ID = 'd0c5195d-e798-49d4-b1d3-9324328b2292',
FIREFOX_STREAM_CONVERTER2_ID = '6457a96b-2d68-439a-bcfa-44465fbcdbb2';
var DEFINES = {
PRODUCTION: true,
// The main build targets:
GENERIC: false,
FIREFOX: false,
MOZCENTRAL: false,
CHROME: false,
MINIFIED: false,
SINGLE_FILE: false,
COMPONENTS: false
};
function getCurrentVersion() {
// The 'build/version.json' file is created by 'buildnumber' task.
return JSON.parse(fs.readFileSync(ROOT_DIR + 'build/version.json').toString())
.version;
}
//
// make all
//
target.all = function() {
// Don't do anything by default
echo('Please specify a target. Available targets:');
for (var t in target) {
if (t !== 'all') {
echo(' ' + t);
}
}
};
////////////////////////////////////////////////////////////////////////////////
//
// Production stuff
//
// Files that need to be included in every build.
var COMMON_WEB_FILES =
['web/images',
'web/debugger.js'],
COMMON_WEB_FILES_PREPROCESS =
['web/viewer.html'],
COMMON_FIREFOX_FILES_PREPROCESS =
[FIREFOX_CONTENT_DIR + 'PdfStreamConverter.jsm',
FIREFOX_CONTENT_DIR + 'PdfjsContentUtils.jsm',
FIREFOX_CONTENT_DIR + 'PdfjsChromeUtils.jsm'];
//
// make generic
// Builds the generic production viewer that should be compatible with most
// modern HTML5 browsers.
//
target.generic = function() {
exec('gulp bundle-generic');
target.locale();
cd(ROOT_DIR);
echo();
echo('### Creating generic viewer');
rm('-rf', GENERIC_DIR);
mkdir('-p', GENERIC_DIR);
mkdir('-p', GENERIC_DIR + BUILD_DIR);
mkdir('-p', GENERIC_DIR + '/web');
mkdir('-p', GENERIC_DIR + '/web/cmaps');
var defines = builder.merge(DEFINES, {GENERIC: true});
var setup = {
defines: defines,
copy: [
[BUILD_TARGETS, GENERIC_DIR + BUILD_DIR],
[BUILD_DIR + 'viewer.js', GENERIC_DIR + '/web'],
[COMMON_WEB_FILES, GENERIC_DIR + '/web'],
['LICENSE', GENERIC_DIR],
['external/webL10n/l10n.js', GENERIC_DIR + '/web'],
['web/compatibility.js', GENERIC_DIR + '/web'],
['web/compressed.tracemonkey-pldi-09.pdf', GENERIC_DIR + '/web'],
['external/bcmaps/*', GENERIC_DIR + '/web/cmaps/'],
['web/locale', GENERIC_DIR + '/web']
],
preprocess: [
[COMMON_WEB_FILES_PREPROCESS, GENERIC_DIR + '/web']
],
preprocessCSS: [
['generic', 'web/viewer.css',
GENERIC_DIR + '/web/viewer.css']
]
};
builder.build(setup);
cleanupJSSource(GENERIC_DIR + '/build/pdf.js');
cleanupJSSource(GENERIC_DIR + '/web/viewer.js');
cleanupCSSSource(GENERIC_DIR + '/web/viewer.css');
};
target.components = function() {
exec('gulp bundle-components');
cd(ROOT_DIR);
echo();
echo('### Creating generic components');
rm('-rf', COMPONENTS_DIR);
mkdir('-p', COMPONENTS_DIR);
mkdir('-p', COMPONENTS_DIR + 'images');
var defines = builder.merge(DEFINES, {COMPONENTS: true, GENERIC: true});
var COMPONENTS_IMAGES = [
'web/images/annotation-*.svg',
'web/images/loading-icon.gif',
'web/images/shadow.png',
'web/images/texture.png',
];
var setup = {
defines: defines,
copy: [
[BUILD_DIR + 'pdf_viewer.js', COMPONENTS_DIR],
[COMPONENTS_IMAGES, COMPONENTS_DIR + 'images'],
['web/compatibility.js', COMPONENTS_DIR],
],
preprocess: [],
preprocessCSS: [
['components', 'web/pdf_viewer.css', COMPONENTS_DIR + 'pdf_viewer.css'],
]
};
builder.build(setup);
cleanupJSSource(COMPONENTS_DIR + 'pdf_viewer.js');
cleanupCSSSource(COMPONENTS_DIR + 'pdf_viewer.css');
};
target.jsdoc = function() {
echo();
echo('### Generating jsdoc');
var JSDOC_FILES = [
'src/doc_helper.js',
'src/display/api.js',
'src/display/global.js',
'src/shared/util.js',
'src/core/annotation.js'
];
if (test('-d', JSDOC_DIR)) {
rm('-rf', JSDOC_DIR);
}
mkdir('-p',JSDOC_DIR);
exec('"node_modules/.bin/jsdoc" -d "' + JSDOC_DIR + '" ' +
JSDOC_FILES.join(' '));
echo();
};
//
// make web
// Generates the website for the project, by checking out the gh-pages branch
// underneath the build directory, and then moving the various viewer files
// into place.
//
target.web = function() {
target.generic();
target.extension();
target.b2g();
target.jsdoc();
echo();
echo('### Creating web site');
if (test('-d', GH_PAGES_DIR)) {
rm('-rf', GH_PAGES_DIR);
}
mkdir('-p', GH_PAGES_DIR + '/web');
mkdir('-p', GH_PAGES_DIR + '/web/images');
mkdir('-p', GH_PAGES_DIR + BUILD_DIR);
mkdir('-p', GH_PAGES_DIR + EXTENSION_SRC_DIR + '/firefox');
mkdir('-p', GH_PAGES_DIR + EXTENSION_SRC_DIR + '/chromium');
mkdir('-p', GH_PAGES_DIR + EXTENSION_SRC_DIR + '/b2g');
mkdir('-p', GH_PAGES_DIR + '/api/draft/');
mkdir('-p', GH_PAGES_DIR + '/examples/');
cp('-R', GENERIC_DIR + '/*', GH_PAGES_DIR);
cp(FIREFOX_BUILD_DIR + '/*.xpi', FIREFOX_BUILD_DIR + '/*.rdf',
GH_PAGES_DIR + EXTENSION_SRC_DIR + 'firefox/');
cp(CHROME_BUILD_DIR + '/*.crx', FIREFOX_BUILD_DIR + '/*.rdf',
GH_PAGES_DIR + EXTENSION_SRC_DIR + 'chromium/');
cp('-R', 'test/features', GH_PAGES_DIR);
cp('-R', 'examples/learning', GH_PAGES_DIR + '/examples/');
cp('-R', B2G_BUILD_DIR, GH_PAGES_DIR + EXTENSION_SRC_DIR + 'b2g/');
cp('-R', JSDOC_DIR + '/*', GH_PAGES_DIR + '/api/draft/');
var wintersmith = require('wintersmith');
var env = wintersmith('docs/config.json');
env.build(GH_PAGES_DIR, function (error) {
if (error) {
throw error;
}
sed('-i', /STABLE_VERSION/g, config.stableVersion,
GH_PAGES_DIR + '/getting_started/index.html');
sed('-i', /BETA_VERSION/g, config.betaVersion,
GH_PAGES_DIR + '/getting_started/index.html');
echo('Done building with wintersmith.');
var VERSION = getCurrentVersion();
var reason = process.env['PDFJS_UPDATE_REASON'];
cd(GH_PAGES_DIR);
exec('git init');
exec('git remote add origin ' + REPO);
exec('git add -A');
exec('git commit -am "gh-pages site created via make.js script" -m ' +
'"PDF.js version ' + VERSION + (reason ? ' - ' + reason : '') + '"');
exec('git branch -m gh-pages');
echo();
echo('Website built in ' + GH_PAGES_DIR);
});
};
target.dist = function() {
target.generic();
target.singlefile();
target.components();
var DIST_DIR = BUILD_DIR + 'dist/';
var DIST_REPO_URL = 'https://github.com/mozilla/pdfjs-dist';
var VERSION = getCurrentVersion();
cd(ROOT_DIR);
echo();
echo('### Cloning baseline distribution');
rm('-rf', DIST_DIR);
mkdir('-p', DIST_DIR);
exec('git clone --depth 1 ' + DIST_REPO_URL + ' ' + DIST_DIR);
echo();
echo('### Overwriting all files');
rm('-rf', DIST_DIR + '*');
cp('-R', ROOT_DIR + 'external/dist/*', DIST_DIR);
cp('-R', GENERIC_DIR + 'LICENSE', DIST_DIR);
cp('-R', GENERIC_DIR + 'web/cmaps', DIST_DIR);
mkdir('-p', DIST_DIR + 'build/');
cp('-R', [
GENERIC_DIR + 'build/pdf.js',
GENERIC_DIR + 'build/pdf.worker.js',
SINGLE_FILE_DIR + 'build/pdf.combined.js',
SRC_DIR + 'pdf.worker.entry.js',
], DIST_DIR + 'build/');
mkdir('-p', DIST_DIR + 'web/');
cp('-R', [
COMPONENTS_DIR + '*',
], DIST_DIR + 'web/');
echo();
echo('### Rebuilding manifests');
var DIST_NAME = 'pdfjs-dist';
var DIST_DESCRIPTION = 'Generic build of Mozilla\'s PDF.js library.';
var DIST_KEYWORDS = ['Mozilla', 'pdf', 'pdf.js'];
var DIST_HOMEPAGE = 'http://mozilla.github.io/pdf.js/';
var DIST_BUGS_URL = 'https://github.com/mozilla/pdf.js/issues';
var DIST_LICENSE = 'Apache-2.0';
var npmManifest = {
name: DIST_NAME,
version: VERSION,
main: 'build/pdf.js',
description: DIST_DESCRIPTION,
keywords: DIST_KEYWORDS,
homepage: DIST_HOMEPAGE,
bugs: DIST_BUGS_URL,
license: DIST_LICENSE,
dependencies: {
'node-ensure': '^0.0.0' // shim for node for require.ensure
},
browser: {
'node-ensure': false
},
format: 'amd', // to not allow system.js to choose 'cjs'
repository: {
type: 'git',
url: DIST_REPO_URL
},
};
fs.writeFileSync(DIST_DIR + 'package.json',
JSON.stringify(npmManifest, null, 2));
var bowerManifest = {
name: DIST_NAME,
version: VERSION,
main: [
'build/pdf.js',
'build/pdf.worker.js',
],
ignore: [],
keywords: DIST_KEYWORDS,
};
fs.writeFileSync(DIST_DIR + 'bower.json',
JSON.stringify(bowerManifest, null, 2));
echo();
echo('### Commiting changes');
cd(DIST_DIR);
var reason = process.env['PDFJS_UPDATE_REASON'];
var message = 'PDF.js version ' + VERSION + (reason ? ' - ' + reason : '');
exec('git add *');
exec('git commit -am \"' + message + '\"');
exec('git tag -a v' + VERSION + ' -m \"' + message + '\"');
cd(ROOT_DIR);
echo();
echo('Done. Push with');
echo(' cd ' + DIST_DIR + '; git push --tags ' + DIST_REPO_URL + ' master');
echo();
};
target.publish = function() {
exec('gulp publish');
};
//
// make locale
// Creates localized resources for the viewer and extension.
//
target.locale = function() {
var METADATA_OUTPUT = 'extensions/firefox/metadata.inc';
var CHROME_MANIFEST_OUTPUT = 'extensions/firefox/chrome.manifest.inc';
var EXTENSION_LOCALE_OUTPUT = 'extensions/firefox/locale';
var VIEWER_LOCALE_OUTPUT = 'web/locale/';
cd(ROOT_DIR);
echo();
echo('### Building localization files');
rm('-rf', EXTENSION_LOCALE_OUTPUT);
mkdir('-p', EXTENSION_LOCALE_OUTPUT);
rm('-rf', VIEWER_LOCALE_OUTPUT);
mkdir('-p', VIEWER_LOCALE_OUTPUT);
var subfolders = ls(LOCALE_SRC_DIR);
subfolders.sort();
var metadataContent = '';
var chromeManifestContent = '';
var viewerOutput = '';
for (var i = 0; i < subfolders.length; i++) {
var locale = subfolders[i];
var path = LOCALE_SRC_DIR + locale;
if (!test('-d', path)) {
continue;
}
if (!/^[a-z][a-z]([a-z])?(-[A-Z][A-Z])?$/.test(locale)) {
echo('Skipping invalid locale: ' + locale);
continue;
}
mkdir('-p', EXTENSION_LOCALE_OUTPUT + '/' + locale);
mkdir('-p', VIEWER_LOCALE_OUTPUT + '/' + locale);
chromeManifestContent += 'locale pdf.js ' + locale + ' locale/' +
locale + '/\n';
if (test('-f', path + '/viewer.properties')) {
viewerOutput += '[' + locale + ']\n' +
'@import url(' + locale + '/viewer.properties)\n\n';
cp(path + '/viewer.properties', EXTENSION_LOCALE_OUTPUT + '/' + locale);
cp(path + '/viewer.properties', VIEWER_LOCALE_OUTPUT + '/' + locale);
}
if (test('-f', path + '/chrome.properties')) {
cp(path + '/chrome.properties', EXTENSION_LOCALE_OUTPUT + '/' + locale);
}
if (test('-f', path + '/metadata.inc')) {
var metadata = cat(path + '/metadata.inc');
metadataContent += metadata;
}
}
viewerOutput.to(VIEWER_LOCALE_OUTPUT + 'locale.properties');
metadataContent.to(METADATA_OUTPUT);
chromeManifestContent.to(CHROME_MANIFEST_OUTPUT);
};
//
// make cmaps
// Compresses cmap files. Ensure that Adobe cmap download and uncompressed at
// ./external/cmaps location.
//
target.cmaps = function () {
var CMAP_INPUT = 'external/cmaps';
var VIEWER_CMAP_OUTPUT = 'external/bcmaps';
cd(ROOT_DIR);
echo();
echo('### Building cmaps');
// testing a file that usually present
if (!test('-f', CMAP_INPUT + '/UniJIS-UCS2-H')) {
echo('./external/cmaps has no cmap files, please download them from:');
echo(' https://github.com/adobe-type-tools/cmap-resources');
exit(1);
}
rm(VIEWER_CMAP_OUTPUT + '*.bcmap');
var compressCmaps =
require('./external/cmapscompress/compress.js').compressCmaps;
compressCmaps(CMAP_INPUT, VIEWER_CMAP_OUTPUT, true);
};
//
// make bundle
// Bundles all source files into one wrapper 'pdf.js' file, in the given order.
//
target.bundle = function(args) {
exec('gulp bundle');
};
//
// make singlefile
// Concatenates pdf.js and pdf.worker.js into one big pdf.combined.js, and
// flags the script loader to not attempt to load the separate worker JS file.
//
target.singlefile = function() {
cd(ROOT_DIR);
echo();
echo('### Creating singlefile build');
var SINGLE_FILE_BUILD_DIR = SINGLE_FILE_DIR + 'build/';
exec('gulp bundle-singlefile');
cd(ROOT_DIR);
rm('-rf', SINGLE_FILE_DIR);
mkdir('-p', SINGLE_FILE_DIR);
mkdir('-p', SINGLE_FILE_BUILD_DIR);
cp(BUILD_DIR + 'pdf.combined.js', SINGLE_FILE_BUILD_DIR);
};
function stripCommentHeaders(content) {
var notEndOfComment = '(?:[^*]|\\*(?!/))+';
var reg = new RegExp(
'\n/\\* Copyright' + notEndOfComment + '\\*/\\s*' +
'(?:/\\*' + notEndOfComment + '\\*/\\s*|//(?!#).*\n\\s*)*' +
'\\s*\'use strict\';', 'g');
content = content.replace(reg, '');
return content;
}
function cleanupJSSource(file) {
var content = cat(file);
content = stripCommentHeaders(content);
content.to(file);
}
function cleanupCSSSource(file) {
var content = cat(file);
// Strip out all license headers in the middle.
var reg = /\n\/\* Copyright(.|\n)*?Mozilla Foundation(.|\n)*?\*\//g;
content = content.replace(reg, '');
content.to(file);
}
//
// make minified
// Builds the minified production viewer that should be compatible with most
// modern HTML5 browsers.
//
target.minified = function() {
exec('gulp bundle-minified');
target.locale();
cd(ROOT_DIR);
echo();
echo('### Creating minified viewer');
rm('-rf', MINIFIED_DIR);
mkdir('-p', MINIFIED_DIR);
mkdir('-p', MINIFIED_DIR + BUILD_DIR);
mkdir('-p', MINIFIED_DIR + '/web');
mkdir('-p', MINIFIED_DIR + '/web/cmaps');
var defines = builder.merge(DEFINES, {GENERIC: true, MINIFIED: true});
var setup = {
defines: defines,
copy: [
[BUILD_TARGETS, MINIFIED_DIR + BUILD_DIR],
[BUILD_DIR + 'viewer.js', MINIFIED_DIR + '/web'],
[COMMON_WEB_FILES, MINIFIED_DIR + '/web'],
['web/compressed.tracemonkey-pldi-09.pdf', MINIFIED_DIR + '/web'],
['external/bcmaps/*', MINIFIED_DIR + '/web/cmaps'],
['web/locale', MINIFIED_DIR + '/web']
],
preprocess: [
[COMMON_WEB_FILES_PREPROCESS, MINIFIED_DIR + '/web']
],
preprocessCSS: [
['minified', 'web/viewer.css',
MINIFIED_DIR + '/web/viewer.css']
]
};
builder.build(setup);
cleanupCSSSource(MINIFIED_DIR + '/web/viewer.css');
var viewerFiles = [
'web/compatibility.js',
'external/webL10n/l10n.js',
MINIFIED_DIR + BUILD_DIR + 'pdf.js',
MINIFIED_DIR + '/web/viewer.js'
];
echo();
echo('### Minifying js files');
var UglifyJS = require('uglify-js');
// V8 chokes on very long sequences. Works around that.
var optsForHugeFile = {compress: {sequences: false}};
UglifyJS.minify(viewerFiles).code
.to(MINIFIED_DIR + '/web/pdf.viewer.js');
UglifyJS.minify(MINIFIED_DIR + '/build/pdf.js').code
.to(MINIFIED_DIR + '/build/pdf.min.js');
UglifyJS.minify(MINIFIED_DIR + '/build/pdf.worker.js', optsForHugeFile).code
.to(MINIFIED_DIR + '/build/pdf.worker.min.js');
echo();
echo('### Cleaning js files');
rm(MINIFIED_DIR + '/web/viewer.js');
rm(MINIFIED_DIR + '/web/debugger.js');
rm(MINIFIED_DIR + '/build/pdf.js');
rm(MINIFIED_DIR + '/build/pdf.worker.js');
mv(MINIFIED_DIR + '/build/pdf.min.js',
MINIFIED_DIR + '/build/pdf.js');
mv(MINIFIED_DIR + '/build/pdf.worker.min.js',
MINIFIED_DIR + '/build/pdf.worker.js');
};
////////////////////////////////////////////////////////////////////////////////
//
// Extension stuff
//
//
// make extension
//
target.extension = function() {
cd(ROOT_DIR);
echo();
echo('### Building extensions');
target.locale();
target.firefox();
target.chromium();
};
target.buildnumber = function() {
exec('gulp buildnumber');
};
//
// make firefox
//
target.firefox = function() {
cd(ROOT_DIR);
echo();
echo('### Building Firefox extension');
var defines = builder.merge(DEFINES, {FIREFOX: true});
var FIREFOX_BUILD_CONTENT_DIR = FIREFOX_BUILD_DIR + '/content/',
FIREFOX_EXTENSION_DIR = 'extensions/firefox/',
FIREFOX_EXTENSION_FILES_TO_COPY =
['*.js',
'*.rdf',
'*.svg',
'*.png',
'*.manifest',
'locale',
'chrome',
'../../LICENSE'],
FIREFOX_EXTENSION_FILES =
['bootstrap.js',
'install.rdf',
'chrome.manifest',
'icon.png',
'icon64.png',
'content',
'chrome',
'locale',
'LICENSE'],
FIREFOX_EXTENSION_NAME = 'pdf.js.xpi',
FIREFOX_AMO_EXTENSION_NAME = 'pdf.js.amo.xpi';
target.locale();
exec('gulp bundle-firefox');
cd(ROOT_DIR);
// Clear out everything in the firefox extension build directory
rm('-rf', FIREFOX_BUILD_DIR);
mkdir('-p', FIREFOX_BUILD_CONTENT_DIR);
mkdir('-p', FIREFOX_BUILD_CONTENT_DIR + BUILD_DIR);
mkdir('-p', FIREFOX_BUILD_CONTENT_DIR + '/web');
mkdir('-p', FIREFOX_BUILD_CONTENT_DIR + '/web/cmaps');
cp(FIREFOX_CONTENT_DIR + 'PdfJs-stub.jsm',
FIREFOX_BUILD_CONTENT_DIR + 'PdfJs.jsm');
cp(FIREFOX_CONTENT_DIR + 'PdfJsTelemetry-addon.jsm',
FIREFOX_BUILD_CONTENT_DIR + 'PdfJsTelemetry.jsm');
// Copy extension files
cd(FIREFOX_EXTENSION_DIR);
cp('-R', FIREFOX_EXTENSION_FILES_TO_COPY, ROOT_DIR + FIREFOX_BUILD_DIR);
cd(ROOT_DIR);
var setup = {
defines: defines,
copy: [
[BUILD_TARGETS, FIREFOX_BUILD_CONTENT_DIR + BUILD_DIR],
[BUILD_DIR + 'viewer.js', FIREFOX_BUILD_CONTENT_DIR + '/web'],
[COMMON_WEB_FILES, FIREFOX_BUILD_CONTENT_DIR + '/web'],
['web/compatibility.js', FIREFOX_BUILD_CONTENT_DIR + '/web'],
['external/bcmaps/*', FIREFOX_BUILD_CONTENT_DIR + '/web/cmaps'],
[FIREFOX_EXTENSION_DIR + 'tools/l10n.js',
FIREFOX_BUILD_CONTENT_DIR + '/web']
],
preprocess: [
[COMMON_WEB_FILES_PREPROCESS, FIREFOX_BUILD_CONTENT_DIR + '/web'],
[COMMON_FIREFOX_FILES_PREPROCESS, FIREFOX_BUILD_CONTENT_DIR],
[SRC_DIR + 'core/network.js', FIREFOX_BUILD_CONTENT_DIR],
[FIREFOX_EXTENSION_DIR + 'bootstrap.js', FIREFOX_BUILD_DIR]
],
preprocessCSS: [
['firefox', 'web/viewer.css',
FIREFOX_BUILD_CONTENT_DIR + '/web/viewer.css']
]
};
builder.build(setup);
cleanupJSSource(FIREFOX_BUILD_CONTENT_DIR + '/web/viewer.js');
cleanupJSSource(FIREFOX_BUILD_DIR + 'bootstrap.js');
cleanupJSSource(FIREFOX_BUILD_CONTENT_DIR + 'PdfjsChromeUtils.jsm');
cleanupCSSSource(FIREFOX_BUILD_CONTENT_DIR + '/web/viewer.css');
// Remove '.DS_Store' and other hidden files
find(FIREFOX_BUILD_DIR).forEach(function(file) {
if (file.match(/^\./)) {
rm('-f', file);
}
});
// Update the build version number
var VERSION = getCurrentVersion();
sed('-i', /PDFJSSCRIPT_VERSION/, VERSION,
FIREFOX_BUILD_DIR + '/install.rdf');
sed('-i', /PDFJSSCRIPT_VERSION/, VERSION,
FIREFOX_BUILD_DIR + '/update.rdf');
sed('-i', /PDFJSSCRIPT_STREAM_CONVERTER_ID/, FIREFOX_STREAM_CONVERTER_ID,
FIREFOX_BUILD_CONTENT_DIR + 'PdfStreamConverter.jsm');
sed('-i', /PDFJSSCRIPT_STREAM_CONVERTER2_ID/, FIREFOX_STREAM_CONVERTER2_ID,
FIREFOX_BUILD_CONTENT_DIR + 'PdfStreamConverter.jsm');
sed('-i', /PDFJSSCRIPT_PREF_PREFIX/, FIREFOX_PREF_PREFIX,
FIREFOX_BUILD_CONTENT_DIR + 'PdfStreamConverter.jsm');
sed('-i', /PDFJSSCRIPT_MOZ_CENTRAL/, 'false',
FIREFOX_BUILD_CONTENT_DIR + 'PdfStreamConverter.jsm');
sed('-i', /PDFJSSCRIPT_PREF_PREFIX/, FIREFOX_PREF_PREFIX,
FIREFOX_BUILD_CONTENT_DIR + 'PdfjsChromeUtils.jsm');
// Update localized metadata
var localizedMetadata = cat(EXTENSION_SRC_DIR + '/firefox/metadata.inc');
sed('-i', /.*PDFJS_LOCALIZED_METADATA.*\n/, localizedMetadata,
FIREFOX_BUILD_DIR + '/install.rdf');
var chromeManifest = cat(EXTENSION_SRC_DIR + '/firefox/chrome.manifest.inc');
sed('-i', /.*PDFJS_SUPPORTED_LOCALES.*\n/, chromeManifest,
FIREFOX_BUILD_DIR + '/chrome.manifest');
// Set timezone to UTC before calling zip to get reproducible results.
process.env.TZ = 'UTC';
// Create the xpi
cd(FIREFOX_BUILD_DIR);
exec('zip -r ' + FIREFOX_EXTENSION_NAME + ' ' +
FIREFOX_EXTENSION_FILES.join(' '));
echo('extension created: ' + FIREFOX_EXTENSION_NAME);
cd(ROOT_DIR);
// Build the amo extension too (remove the updateUrl)
cd(FIREFOX_BUILD_DIR);
sed('-i', /.*updateURL.*\n/, '', 'install.rdf');
exec('zip -r ' + FIREFOX_AMO_EXTENSION_NAME + ' ' +
FIREFOX_EXTENSION_FILES.join(' '));
echo('AMO extension created: ' + FIREFOX_AMO_EXTENSION_NAME);
cd(ROOT_DIR);
};
//
// make mozcentral
//
target.mozcentral = function() {
cd(ROOT_DIR);
echo();
echo('### Building mozilla-central extension');
var defines = builder.merge(DEFINES, {MOZCENTRAL: true});
var MOZCENTRAL_DIR = BUILD_DIR + 'mozcentral/',
MOZCENTRAL_EXTENSION_DIR = MOZCENTRAL_DIR + 'browser/extensions/pdfjs/',
MOZCENTRAL_CONTENT_DIR = MOZCENTRAL_EXTENSION_DIR + 'content/',
MOZCENTRAL_L10N_DIR = MOZCENTRAL_DIR + 'browser/locales/en-US/pdfviewer/',
FIREFOX_CONTENT_DIR = EXTENSION_SRC_DIR + '/firefox/content/',
FIREFOX_EXTENSION_FILES_TO_COPY =
['*.svg',
'*.png',
'*.manifest',
'README.mozilla',
'../../LICENSE'],
DEFAULT_LOCALE_FILES =
[LOCALE_SRC_DIR + 'en-US/viewer.properties',
LOCALE_SRC_DIR + 'en-US/chrome.properties'],
FIREFOX_MC_EXCLUDED_FILES =
['icon.png',
'icon64.png'];
exec('gulp bundle-mozcentral');
cd(ROOT_DIR);
// Clear out everything in the firefox extension build directory
rm('-rf', MOZCENTRAL_DIR);
mkdir('-p', MOZCENTRAL_CONTENT_DIR);
mkdir('-p', MOZCENTRAL_L10N_DIR);
mkdir('-p', MOZCENTRAL_CONTENT_DIR + BUILD_DIR);
mkdir('-p', MOZCENTRAL_CONTENT_DIR + '/web');
mkdir('-p', MOZCENTRAL_CONTENT_DIR + '/web/cmaps');
cp(FIREFOX_CONTENT_DIR + 'PdfJsTelemetry.jsm', MOZCENTRAL_CONTENT_DIR);
// Copy extension files
cd('extensions/firefox');
cp('-R', FIREFOX_EXTENSION_FILES_TO_COPY,
ROOT_DIR + MOZCENTRAL_EXTENSION_DIR);
mv('-f', ROOT_DIR + MOZCENTRAL_EXTENSION_DIR + '/chrome-mozcentral.manifest',
ROOT_DIR + MOZCENTRAL_EXTENSION_DIR + '/chrome.manifest');
cd(ROOT_DIR);
var setup = {
defines: defines,
copy: [
[BUILD_TARGETS, MOZCENTRAL_CONTENT_DIR + BUILD_DIR],
[BUILD_DIR + 'viewer.js', MOZCENTRAL_CONTENT_DIR + '/web'],
[COMMON_WEB_FILES, MOZCENTRAL_CONTENT_DIR + '/web'],
['external/bcmaps/*', MOZCENTRAL_CONTENT_DIR + '/web/cmaps'],
['extensions/firefox/tools/l10n.js', MOZCENTRAL_CONTENT_DIR + '/web']
],
preprocess: [
[COMMON_WEB_FILES_PREPROCESS, MOZCENTRAL_CONTENT_DIR + '/web'],
[FIREFOX_CONTENT_DIR + 'pdfjschildbootstrap.js', MOZCENTRAL_CONTENT_DIR],
[SRC_DIR + 'core/network.js', MOZCENTRAL_CONTENT_DIR],
[COMMON_FIREFOX_FILES_PREPROCESS, MOZCENTRAL_CONTENT_DIR],
[FIREFOX_CONTENT_DIR + 'PdfJs.jsm', MOZCENTRAL_CONTENT_DIR]
],
preprocessCSS: [
['mozcentral',
'web/viewer.css',
MOZCENTRAL_CONTENT_DIR + '/web/viewer.css']
]
};
builder.build(setup);
cleanupJSSource(MOZCENTRAL_CONTENT_DIR + '/web/viewer.js');
cleanupJSSource(MOZCENTRAL_CONTENT_DIR + '/PdfJs.jsm');
cleanupJSSource(MOZCENTRAL_CONTENT_DIR + '/PdfjsChromeUtils.jsm');
cleanupCSSSource(MOZCENTRAL_CONTENT_DIR + '/web/viewer.css');
// Remove '.DS_Store' and other hidden files
find(MOZCENTRAL_DIR).forEach(function(file) {
if (file.match(/^\./)) {
rm('-f', file);
}
});
// Remove excluded files
cd(MOZCENTRAL_EXTENSION_DIR);
FIREFOX_MC_EXCLUDED_FILES.forEach(function(file) {
if (test('-f', file)) {
rm('-r', file);
}
});
cd(ROOT_DIR);
// Copy default localization files
cp(DEFAULT_LOCALE_FILES, MOZCENTRAL_L10N_DIR);
// Update the build version number
var VERSION = getCurrentVersion();
sed('-i', /PDFJSSCRIPT_VERSION/, VERSION,
MOZCENTRAL_EXTENSION_DIR + 'README.mozilla');
sed('-i', /PDFJSSCRIPT_STREAM_CONVERTER_ID/, MOZCENTRAL_STREAM_CONVERTER_ID,
MOZCENTRAL_CONTENT_DIR + 'PdfStreamConverter.jsm');
sed('-i', /PDFJSSCRIPT_STREAM_CONVERTER2_ID/, MOZCENTRAL_STREAM_CONVERTER2_ID,
MOZCENTRAL_CONTENT_DIR + 'PdfStreamConverter.jsm');
sed('-i', /PDFJSSCRIPT_PREF_PREFIX/, MOZCENTRAL_PREF_PREFIX,
MOZCENTRAL_CONTENT_DIR + 'PdfStreamConverter.jsm');
sed('-i', /PDFJSSCRIPT_MOZ_CENTRAL/, 'true',
MOZCENTRAL_CONTENT_DIR + 'PdfStreamConverter.jsm');
sed('-i', /PDFJSSCRIPT_PREF_PREFIX/, MOZCENTRAL_PREF_PREFIX,
MOZCENTRAL_CONTENT_DIR + 'PdfjsChromeUtils.jsm');
};
target.b2g = function() {
target.generic();
target.components();
echo();
echo('### Building B2G (Firefox OS App)');
var B2G_BUILD_CONTENT_DIR = B2G_BUILD_DIR + '/content/';
// Clear out everything in the b2g build directory
cd(ROOT_DIR);
rm('-Rf', B2G_BUILD_DIR);
mkdir('-p', B2G_BUILD_CONTENT_DIR);
mkdir('-p', B2G_BUILD_CONTENT_DIR + '/web');
// Simulating pdfjs-dist structure in the pdfjs-components folder.
mkdir('-p', B2G_BUILD_CONTENT_DIR + '/pdfjs-components/web');
mkdir('-p', B2G_BUILD_CONTENT_DIR + '/pdfjs-components/build');
mkdir('-p', B2G_BUILD_CONTENT_DIR + '/pdfjs-components/cmaps');
var setup = {
defines: DEFINES,
copy: [
['extensions/b2g/images', B2G_BUILD_CONTENT_DIR + '/web'],
['extensions/b2g/viewer.html', B2G_BUILD_CONTENT_DIR + '/web'],
['extensions/b2g/viewer.css', B2G_BUILD_CONTENT_DIR + '/web'],
['extensions/b2g/viewer.js', B2G_BUILD_CONTENT_DIR + '/web'],
['web/locale', B2G_BUILD_CONTENT_DIR + '/web'],
['build/generic/build/pdf.js',
B2G_BUILD_CONTENT_DIR + '/pdfjs-components/build'],
['build/generic/build/pdf.worker.js',
B2G_BUILD_CONTENT_DIR + '/pdfjs-components/build'],
['build/components/pdf_viewer.js',
B2G_BUILD_CONTENT_DIR + '/pdfjs-components/web'],
['build/components/pdf_viewer.css',
B2G_BUILD_CONTENT_DIR + '/pdfjs-components/web'],
['build/components/images',
B2G_BUILD_CONTENT_DIR + '/pdfjs-components/web'],
['external/bcmaps/*', B2G_BUILD_CONTENT_DIR + '/pdfjs-components/cmaps']
],
preprocess: []
};
builder.build(setup);
cleanupJSSource(B2G_BUILD_CONTENT_DIR + '/web/viewer.js');
};
//
// make chrome
//
target.chromium = function() {
target.locale();
cd(ROOT_DIR);
echo();
echo('### Building Chromium extension');
var defines = builder.merge(DEFINES, {CHROME: true});
var CHROME_BUILD_DIR = BUILD_DIR + '/chromium/',
CHROME_BUILD_CONTENT_DIR = CHROME_BUILD_DIR + '/content/';
exec('gulp bundle-chromium');
cd(ROOT_DIR);
// Clear out everything in the chrome extension build directory
rm('-Rf', CHROME_BUILD_DIR);
mkdir('-p', CHROME_BUILD_CONTENT_DIR);
mkdir('-p', CHROME_BUILD_CONTENT_DIR + BUILD_DIR);
mkdir('-p', CHROME_BUILD_CONTENT_DIR + '/web');
var setup = {
defines: defines,
copy: [
[BUILD_TARGETS, CHROME_BUILD_CONTENT_DIR + BUILD_DIR],
[BUILD_DIR + 'viewer.js', CHROME_BUILD_CONTENT_DIR + '/web'],
[COMMON_WEB_FILES, CHROME_BUILD_CONTENT_DIR + '/web'],
[['extensions/chromium/*.json',
'extensions/chromium/*.html',
'extensions/chromium/*.js',
'extensions/chromium/*.css',
'extensions/chromium/icon*.png',],
CHROME_BUILD_DIR],
['extensions/chromium/pageAction/*.*', CHROME_BUILD_DIR + '/pageAction'],
['extensions/chromium/options/*.*', CHROME_BUILD_DIR + '/options'],
['external/webL10n/l10n.js', CHROME_BUILD_CONTENT_DIR + '/web'],
['external/bcmaps/*', CHROME_BUILD_CONTENT_DIR + '/web/cmaps'],
['web/locale', CHROME_BUILD_CONTENT_DIR + '/web']
],
preprocess: [
[COMMON_WEB_FILES_PREPROCESS, CHROME_BUILD_CONTENT_DIR + '/web']
],
preprocessCSS: [
['chrome', 'web/viewer.css',
CHROME_BUILD_CONTENT_DIR + '/web/viewer.css']
]
};
builder.build(setup);
cleanupJSSource(CHROME_BUILD_CONTENT_DIR + '/web/viewer.js');
cleanupCSSSource(CHROME_BUILD_CONTENT_DIR + '/web/viewer.css');
// Update the build version number
var VERSION = getCurrentVersion();
sed('-i', /PDFJSSCRIPT_VERSION/, VERSION,
CHROME_BUILD_DIR + '/manifest.json');
// Allow PDF.js resources to be loaded by adding the files to
// the "web_accessible_resources" section.
var file_list = ls('-RA', CHROME_BUILD_CONTENT_DIR);
var public_chrome_files = file_list.reduce(function(war, file) {
// Exclude directories (naive: Exclude paths without dot)
if (file.indexOf('.') !== -1) {
// Only add a comma after the first file
if (war) {
war += ',\n';
}
war += JSON.stringify('content/' + file);
}
return war;
}, '');
sed('-i', /"content\/\*"/, public_chrome_files,
CHROME_BUILD_DIR + '/manifest.json');
// Bundle the files to a Chrome extension file .crx if path to key is set
var pem = env['PDFJS_CHROME_KEY'];
if (!pem) {
return;
}
echo();
echo('### Bundling .crx extension into ' + CHROME_BUILD_DIR);
if (!test('-f', pem)) {
echo('Incorrect PDFJS_CHROME_KEY path');
exit(1);
}
var browserManifest = env['PDF_BROWSERS'] ||
'test/resources/browser_manifests/browser_manifest.json';
if (!test('-f', browserManifest)) {
echo('Browser manifest file ' + browserManifest + ' does not exist.');
echo('Copy and adjust the example in test/resources/browser_manifests.');
exit(1);
}
var manifest;
try {
manifest = JSON.parse(cat(browserManifest));
} catch (e) {
echo('Malformed browser manifest file');
echo(e.message);
exit(1);
}
var executable;
manifest.forEach(function(browser) {
if (browser.name === 'chrome') {
executable = browser.path;
}
});
// If there was no chrome entry in the browser manifest, exit
if (!executable) {
echo('There was no \'chrome\' entry in the browser manifest');
exit(1);
}
// If we're on a Darwin (Mac) OS, then let's check for an .app path
if (process.platform === 'darwin' && executable.indexOf('.app') !== -1) {
executable = executable + '/Contents/MacOS/Google Chrome';
}
// If the chrome executable doesn't exist
if (!test('-f', executable)) {
echo('Incorrect executable path to chrome');
exit(1);
}
// Let chrome pack the extension for us
exec('"' + executable + '"' +
' --no-message-box' +
' "--pack-extension=' + ROOT_DIR + CHROME_BUILD_DIR + '"' +
' "--pack-extension-key=' + pem + '"');
// Rename to pdf.js.crx
mv(BUILD_DIR + 'chrome.crx', CHROME_BUILD_DIR + 'pdf.js.crx');
};
////////////////////////////////////////////////////////////////////////////////
//
// Test stuff
//
//
// make test
//
target.test = function() {
exec('gulp test');
};
//
// make bottest
// (Special tests for the Github bot)
//
target.bottest = function() {
exec('gulp bottest');
};
//
// make browsertest
//
target.browsertest = function(options) {
if (options && options.noreftest) {
exec('gulp browsertest-noreftest');
} else {
exec('gulp browsertest');
}
};
//
// make unittest
//
target.unittest = function(options, callback) {
exec('gulp unittest');
};
//
// make fonttest
//
target.fonttest = function(options, callback) {
exec('gulp fonttest');
};
//
// make botmakeref
//
target.botmakeref = function() {
exec('gulp botmakeref');
};
////////////////////////////////////////////////////////////////////////////////
//
// Baseline operation
//
target.baseline = function() {
cd(ROOT_DIR);
echo();
echo('### Creating baseline environment');
var baselineCommit = env['BASELINE'];
if (!baselineCommit) {
echo('Baseline commit is not provided. Please specify BASELINE variable');
exit(1);
}
if (!test('-d', BUILD_DIR)) {
mkdir(BUILD_DIR);
}
var BASELINE_DIR = BUILD_DIR + 'baseline';
if (test('-d', BASELINE_DIR)) {
cd(BASELINE_DIR);
exec('git fetch origin');
} else {
cd(BUILD_DIR);
exec('git clone .. baseline');
cd(ROOT_DIR + BASELINE_DIR);
}
exec('git checkout ' + baselineCommit);
};
target.mozcentralbaseline = function() {
target.baseline();
cd(ROOT_DIR);
echo();
echo('### Creating mozcentral baseline environment');
var BASELINE_DIR = BUILD_DIR + 'baseline';
var MOZCENTRAL_BASELINE_DIR = BUILD_DIR + 'mozcentral.baseline';
if (test('-d', MOZCENTRAL_BASELINE_DIR)) {
rm('-rf', MOZCENTRAL_BASELINE_DIR);
}
cd(BASELINE_DIR);
if (test('-d', 'build')) {
rm('-rf', 'build');
}
exec('node make mozcentral');
cd(ROOT_DIR);
mkdir(MOZCENTRAL_BASELINE_DIR);
cp('-Rf', BASELINE_DIR + '/build/mozcentral/*', MOZCENTRAL_BASELINE_DIR);
// fixing baseline
if (test('-f', MOZCENTRAL_BASELINE_DIR +
'/browser/extensions/pdfjs/PdfStreamConverter.js')) {
rm(MOZCENTRAL_BASELINE_DIR +
'/browser/extensions/pdfjs/PdfStreamConverter.js');
}
cd(MOZCENTRAL_BASELINE_DIR);
exec('git init');
exec('git add .');
exec('git commit -m "mozcentral baseline"');
};
target.mozcentraldiff = function() {
target.mozcentral();
cd(ROOT_DIR);
echo();
echo('### Creating mozcentral diff');
var MOZCENTRAL_DIFF = BUILD_DIR + 'mozcentral.diff';
if (test('-f', MOZCENTRAL_DIFF)) {
rm(MOZCENTRAL_DIFF);
}
var MOZCENTRAL_BASELINE_DIR = BUILD_DIR + 'mozcentral.baseline';
if (!test('-d', MOZCENTRAL_BASELINE_DIR)) {
echo('mozcentral baseline was not found');
echo('Please build one using "gulp mozcentralbaseline"');
exit(1);
}
cd(MOZCENTRAL_BASELINE_DIR);
exec('git reset --hard');
cd(ROOT_DIR); rm('-rf', MOZCENTRAL_BASELINE_DIR + '/*'); // trying to be safe
cd(MOZCENTRAL_BASELINE_DIR);
cp('-Rf', '../mozcentral/*', '.');
exec('git add -A');
exec('git diff --binary --cached --unified=8', {silent: true}).output.
to('../mozcentral.diff');
echo('Result diff can be found at ' + MOZCENTRAL_DIFF);
};
target.mozcentralcheck = function() {
cd(ROOT_DIR);
echo();
echo('### Checking mozcentral changes');
var mcPath = env['MC_PATH'];
if (!mcPath) {
echo('mozilla-central path is not provided.');
echo('Please specify MC_PATH variable');
exit(1);
}
if ((mcPath[0] !== '/' && mcPath[0] !== '~' && mcPath[1] !== ':') ||
!test('-d', mcPath)) {
echo('mozilla-central path is not in absolute form or does not exist.');
exit(1);
}
var MOZCENTRAL_DIFF = BUILD_DIR + 'mozcentral_changes.diff';
if (test('-f', MOZCENTRAL_DIFF)) {
rm(MOZCENTRAL_DIFF);
}
var MOZCENTRAL_BASELINE_DIR = BUILD_DIR + 'mozcentral.baseline';
if (!test('-d', MOZCENTRAL_BASELINE_DIR)) {
echo('mozcentral baseline was not found');
echo('Please build one using "gulp mozcentralbaseline"');
exit(1);
}
cd(MOZCENTRAL_BASELINE_DIR);
exec('git reset --hard');
cd(ROOT_DIR); rm('-rf', MOZCENTRAL_BASELINE_DIR + '/*'); // trying to be safe
cd(MOZCENTRAL_BASELINE_DIR);
mkdir('browser');
cd('browser');
mkdir('-p', 'extensions/pdfjs');
cp('-Rf', mcPath + '/browser/extensions/pdfjs/*', 'extensions/pdfjs');
mkdir('-p', 'locales/en-US/pdfviewer');
cp('-Rf', mcPath + '/browser/locales/en-US/pdfviewer/*',
'locales/en-US/pdfviewer');
// Remove '.DS_Store' and other hidden files
find('.').forEach(function(file) {
if (file.match(/^\.\w|~$/)) {
rm('-f', file);
}
});
cd('..');
exec('git add -A');
var diff = exec('git diff --binary --cached --unified=8',
{silent: true}).output;
if (diff) {
echo('There were changes found at mozilla-central.');
diff.to('../mozcentral_changes.diff');
echo('Result diff can be found at ' + MOZCENTRAL_DIFF);
exit(1);
}
echo('Success: there are no changes at mozilla-central');
};
////////////////////////////////////////////////////////////////////////////////
//
// Other
//
//
// make server
//
target.server = function () {
exit(exec('gulp server'));
};
//
// make lint
//
target.lint = function() {
exit(exec('gulp lint'));
};
//
// make clean
//
target.clean = function() {
exit(exec('gulp clean'));
};
//
// make makefile
//
target.makefile = function () {
exit(exec('gulp makefile'));
};
//
//make importl10n
//
target.importl10n = function() {
exit(exec('gulp importl10n'));
};
exports.stripCommentHeaders = stripCommentHeaders;
exports.builder = builder;
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/iorichina/pdf.js.git
git@gitee.com:iorichina/pdf.js.git
iorichina
pdf.js
pdf.js
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385