diff --git a/Makefile b/Makefile deleted file mode 100644 index d95841000..000000000 --- a/Makefile +++ /dev/null @@ -1,344 +0,0 @@ -REPO = git@github.com:mozilla/pdf.js.git -BUILD_DIR := build -BUILD_TARGET := $(BUILD_DIR)/pdf.js -DEFAULT_BROWSERS := resources/browser_manifests/browser_manifest.json -DEFAULT_TESTS := test_manifest.json -DEFAULT_PYTHON := python2.7 - -EXTENSION_SRC := ./extensions/ -EXTENSION_BASE_VERSION := f0f0418a9c6637981fe1182b9212c2d592774c7d -FIREFOX_EXTENSION_NAME := pdf.js.xpi -FIREFOX_AMO_EXTENSION_NAME := pdf.js.amo.xpi -CHROME_EXTENSION_NAME := pdf.js.crx - -all: bundle - -# Let folks define custom rules for their clones. --include local.mk - -# JS files needed for pdf.js. -PDF_JS_FILES = \ - core.js \ - util.js \ - api.js \ - canvas.js \ - obj.js \ - function.js \ - charsets.js \ - cidmaps.js \ - colorspace.js \ - crypto.js \ - evaluator.js \ - fonts.js \ - glyphlist.js \ - image.js \ - metrics.js \ - parser.js \ - pattern.js \ - stream.js \ - worker.js \ - ../external/jpgjs/jpg.js \ - jpx.js \ - bidi.js \ - metadata.js \ - $(NULL) - -# make server -# -# This target starts a local web server at localhost:8888. This can be -# used for testing all browsers. -server: - @cd test; $(DEFAULT_PYTHON) test.py --port=8888; - -# make test -# -# This target runs all the tests excluding the unit-test. This can be used for -# testing all browsers. -test: shell-test browser-test - -# -# Create production output (pdf.js, and corresponding changes to web files) -# -production: | bundle - @echo "Preparing web/viewer-production.html"; \ - cd web; \ - sed '/PDFJSSCRIPT_REMOVE_CORE/d' viewer.html > viewer-1.tmp; \ - sed '/PDFJSSCRIPT_INCLUDE_BUILD/ r viewer-snippet.html' viewer-1.tmp > viewer-production.html; \ - rm -f *.tmp; \ - cd .. - -# -# Bundle pdf.js -# -bundle: | $(BUILD_DIR) - @echo "Bundling source files into $(BUILD_TARGET)" - @cd src; \ - cat $(PDF_JS_FILES) > all_files.tmp; \ - sed '/PDFJSSCRIPT_INCLUDE_ALL/ r all_files.tmp' pdf.js > ../$(BUILD_TARGET); \ - cp ../$(BUILD_TARGET) ../$(BUILD_TARGET).bak; \ - sed "s/PDFJSSCRIPT_BUNDLE_VER/`git log --format="%h" -n 1`/" ../$(BUILD_TARGET).bak > ../$(BUILD_TARGET); \ - rm -f ../$(BUILD_TARGET).bak; \ - rm -f *.tmp; \ - cd .. - -# make unit-test -# -# This target runs in-browser unit tests with our test framework and the -# jasmine unit test framework. -unit-test: - cd test; \ - $(DEFAULT_PYTHON) test.py --unitTest \ - --browserManifestFile=$(PDF_BROWSERS) - -# make browser-test -# -# This target runs in-browser tests using two primary arguments: a -# test manifest file, and a browser manifest file. Both are simple -# JSON formats, and examples can be found in the test/ directory. The -# target will inspect the environment for the PDF_TESTS and -# PDF_BROWSERS variables, and use those if found. Otherwise, the -# defaults at the top of this file are used. -ifeq ($(PDF_TESTS),) -PDF_TESTS := $(DEFAULT_TESTS) -endif -ifeq ($(PDF_BROWSERS),) -PDF_BROWSERS := $(DEFAULT_BROWSERS) -endif - -browser-test: - @if [ ! -f "test/$(PDF_BROWSERS)" ]; then \ - echo "Browser manifest file $(PDF_BROWSERS) does not exist."; \ - echo "Try copying one of the examples" \ - "in test/resources/browser_manifests/"; \ - exit 1; \ - fi; - - cd test; \ - $(DEFAULT_PYTHON) test.py --reftest \ - --browserManifestFile=$(PDF_BROWSERS) \ - --manifestFile=$(PDF_TESTS) - -# # make shell-test -# # -# # This target runs all of the tests that can be run in a JS shell. -# # The shell used is taken from the JS_SHELL environment variable. If -# # that variable is not defined, the script will attempt to use the copy -# # of Rhino that comes with the Closure compiler used for producing the -# # website. -# SHELL_TARGET = $(NULL) -# ifeq ($(JS_SHELL),) -# JS_SHELL := "java -cp $(BUILD_DIR)/compiler.jar" -# JS_SHELL += "com.google.javascript.jscomp.mozilla.rhino.tools.shell.Main" -# SHELL_TARGET = compiler -# endif -# -# shell-test: shell-msg $(SHELL_TARGET) font-test -# shell-msg: -# ifeq ($(SHELL_TARGET), compiler) -# @echo "No JS_SHELL env variable present." -# @echo "The default is to find a copy of Rhino and try that." -# endif -# @echo "JS shell command is: $(JS_SHELL)" -# -# font-test: -# @echo "font test stub." - -# make lint -# -# This target runs the Closure Linter on most of our JS files. -# To install gjslint, see: -# -# -SRC_DIRS := src utils web test examples/helloworld extensions/firefox \ - extensions/firefox/components extensions/chrome test/unit -GJSLINT_FILES = $(foreach DIR, $(SRC_DIRS), $(wildcard $(DIR)/*.js)) -lint: - gjslint --nojsdoc $(GJSLINT_FILES) - -# make web -# -# This target produces the website for the project, by checking out -# the gh-pages branch underneath the build directory, and then move -# the various viewer files into place. -# -# TODO: Use the Closure compiler to optimize the pdf.js files. -# -GH_PAGES = $(BUILD_DIR)/gh-pages -web: | production extension compiler pages-repo - @cp $(BUILD_TARGET) $(GH_PAGES)/$(BUILD_TARGET) - @cp -R web/* $(GH_PAGES)/web - @cp web/images/* $(GH_PAGES)/web/images - @cp $(FIREFOX_BUILD_DIR)/$(FIREFOX_EXTENSION_NAME) \ - $(FIREFOX_BUILD_DIR)/$(FIREFOX_AMO_EXTENSION_NAME) \ - $(FIREFOX_BUILD_DIR)/update.rdf \ - $(GH_PAGES)/$(EXTENSION_SRC)/firefox/ - @cp $(GH_PAGES)/web/index.html.template $(GH_PAGES)/index.html; - @mv -f $(GH_PAGES)/web/viewer-production.html $(GH_PAGES)/web/viewer.html; - @cd $(GH_PAGES); git add -A; - @echo - @echo "Website built in $(GH_PAGES)." - @echo "Don't forget to cd into $(GH_PAGES)/ and issue 'git commit' to push changes." - -# make pages-repo -# -# This target clones the gh-pages repo into the build directory. It -# deletes the current contents of the repo, since we overwrite -# everything with data from the master repo. The 'make web' target -# then uses 'git add -A' to track additions, modifications, moves, -# and deletions. -pages-repo: | $(BUILD_DIR) - @if [ ! -d "$(GH_PAGES)" ]; then \ - git clone --depth 1 -b gh-pages $(REPO) $(GH_PAGES); \ - rm -rf $(GH_PAGES)/*; \ - fi; - @mkdir -p $(GH_PAGES)/web; - @mkdir -p $(GH_PAGES)/web/images; - @mkdir -p $(GH_PAGES)/build; - @mkdir -p $(GH_PAGES)/$(EXTENSION_SRC)/firefox; - -# # make compiler -# # -# # This target downloads the Closure compiler, and places it in the -# # build directory. This target is also useful when the user doesn't -# # have a JS shell available--we can have them use the Rhino shell that -# # comes with Closure. -# COMPILER_URL = http://closure-compiler.googlecode.com/files/compiler-latest.zip -# -# compiler: $(BUILD_DIR)/compiler.zip -# $(BUILD_DIR)/compiler.zip: | $(BUILD_DIR) -# curl $(COMPILER_URL) > $(BUILD_DIR)/compiler.zip; -# cd $(BUILD_DIR); unzip compiler.zip compiler.jar; - -# make extension -# -# This target produce a restartless firefox extension containing a -# copy of the pdf.js source. -CONTENT_DIR := content -BUILD_NUMBER := `git log --format=oneline $(EXTENSION_BASE_VERSION).. | wc -l | awk '{print $$1}'` -PDFJSSCRIPT_VERSION := 0.3.$(BUILD_NUMBER) -EXTENSION_WEB_FILES = \ - web/images \ - web/viewer.css \ - web/viewer.js \ - web/viewer.html \ - web/viewer-production.html \ - web/debugger.js \ - $(NULL) - -FIREFOX_BUILD_DIR := $(BUILD_DIR)/firefox -FIREFOX_BUILD_CONTENT := $(FIREFOX_BUILD_DIR)/$(CONTENT_DIR)/ -FIREFOX_CONTENT_DIR := $(EXTENSION_SRC)/firefox/$(CONTENT_DIR)/ -FIREFOX_EXTENSION_FILES_TO_COPY = \ - *.js \ - *.rdf \ - *.png \ - install.rdf.in \ - README.mozilla \ - components \ - ../../LICENSE \ - $(NULL) -FIREFOX_EXTENSION_FILES = \ - bootstrap.js \ - install.rdf \ - icon.png \ - icon64.png \ - components \ - content \ - LICENSE \ - $(NULL) -FIREFOX_MC_EXTENSION_FILES = \ - bootstrap.js \ - icon.png \ - icon64.png \ - components \ - content \ - LICENSE \ - $(NULL) - -CHROME_BUILD_DIR := $(BUILD_DIR)/chrome -CHROME_CONTENT_DIR := $(EXTENSION_SRC)/chrome/$(CONTENT_DIR)/ -CHROME_BUILD_CONTENT := $(CHROME_BUILD_DIR)/$(CONTENT_DIR)/ -CHROME_EXTENSION_FILES = \ - extensions/chrome/*.json \ - extensions/chrome/*.html \ - $(NULL) -extension: | production - # Clear out everything in the firefox extension build directory - @rm -Rf $(FIREFOX_BUILD_DIR) - @mkdir -p $(FIREFOX_BUILD_CONTENT) - @mkdir -p $(FIREFOX_BUILD_CONTENT)/$(BUILD_DIR) - @mkdir -p $(FIREFOX_BUILD_CONTENT)/web - @cd extensions/firefox; cp -r $(FIREFOX_EXTENSION_FILES_TO_COPY) ../../$(FIREFOX_BUILD_DIR)/ - # Copy a standalone version of pdf.js inside the content directory - @cp $(BUILD_TARGET) $(FIREFOX_BUILD_CONTENT)/$(BUILD_DIR)/ - @cp -r $(EXTENSION_WEB_FILES) $(FIREFOX_BUILD_CONTENT)/web/ - @rm $(FIREFOX_BUILD_CONTENT)/web/viewer-production.html - # Copy over the firefox extension snippet so we can inline pdf.js in it - @cp web/viewer-snippet-firefox-extension.html $(FIREFOX_BUILD_CONTENT)/web/ - # Modify the viewer so it does all the extension only stuff. - @cd $(FIREFOX_BUILD_CONTENT)/web; \ - cp viewer-snippet-firefox-extension.html viewer-snippet-firefox-extension.html.bak; \ - sed '/PDFJSSCRIPT_INCLUDE_BUNDLE/ r ../build/pdf.js' viewer-snippet-firefox-extension.html.bak > viewer-snippet-firefox-extension.html; \ - cp viewer.html viewer.html.bak; \ - sed '/PDFJSSCRIPT_REMOVE_CORE/d' viewer.html.bak > viewer.html; \ - cp viewer.html viewer.html.bak; \ - sed '/PDFJSSCRIPT_REMOVE_FIREFOX_EXTENSION/d' viewer.html.bak > viewer.html; \ - cp viewer.html viewer.html.bak; \ - sed '/PDFJSSCRIPT_INCLUDE_FIREFOX_EXTENSION/ r viewer-snippet-firefox-extension.html' viewer.html.bak > viewer.html; \ - rm -f *.bak; - # We don't need pdf.js anymore since its inlined - @rm -Rf $(FIREFOX_BUILD_CONTENT)/$(BUILD_DIR)/; - # Update the build version number - cp $(FIREFOX_BUILD_DIR)/install.rdf $(FIREFOX_BUILD_DIR)/install.rdf.bak - @sed "s/PDFJSSCRIPT_VERSION/$(PDFJSSCRIPT_VERSION)/" $(FIREFOX_BUILD_DIR)/install.rdf.bak > $(FIREFOX_BUILD_DIR)/install.rdf - cp $(FIREFOX_BUILD_DIR)/install.rdf.in $(FIREFOX_BUILD_DIR)/install.rdf.in.bak - @sed "s/PDFJSSCRIPT_VERSION/$(PDFJSSCRIPT_VERSION)/" $(FIREFOX_BUILD_DIR)/install.rdf.in.bak > $(FIREFOX_BUILD_DIR)/install.rdf.in - cp $(FIREFOX_BUILD_DIR)/update.rdf $(FIREFOX_BUILD_DIR)/update.rdf.bak - @sed "s/PDFJSSCRIPT_VERSION/$(PDFJSSCRIPT_VERSION)/" $(FIREFOX_BUILD_DIR)/update.rdf.bak > $(FIREFOX_BUILD_DIR)/update.rdf - cp $(FIREFOX_BUILD_DIR)/README.mozilla $(FIREFOX_BUILD_DIR)/README.mozilla.bak - @sed "s/PDFJSSCRIPT_VERSION/$(PDFJSSCRIPT_VERSION)/" $(FIREFOX_BUILD_DIR)/README.mozilla.bak > $(FIREFOX_BUILD_DIR)/README.mozilla - @rm -f $(FIREFOX_BUILD_DIR)/*.bak - @find $(FIREFOX_BUILD_DIR) -name ".*" -delete - # Create the xpi - @cd $(FIREFOX_BUILD_DIR); zip -r $(FIREFOX_EXTENSION_NAME) $(FIREFOX_EXTENSION_FILES) - @echo "extension created: " $(FIREFOX_EXTENSION_NAME) - # Build the amo extension too (remove the updateUrl) - cp $(FIREFOX_BUILD_DIR)/install.rdf $(FIREFOX_BUILD_DIR)/install.rdf.bak - @sed "/updateURL/d" $(FIREFOX_BUILD_DIR)/install.rdf.bak > $(FIREFOX_BUILD_DIR)/install.rdf - @rm -f $(FIREFOX_BUILD_DIR)/*.bak - @cd $(FIREFOX_BUILD_DIR); zip -r $(FIREFOX_AMO_EXTENSION_NAME) $(FIREFOX_EXTENSION_FILES) - @echo "AMO extension created: " $(FIREFOX_AMO_EXTENSION_NAME) - # List all files for mozilla-central - @cd $(FIREFOX_BUILD_DIR); find $(FIREFOX_MC_EXTENSION_FILES) -type f > extension-files - - # Clear out everything in the chrome extension build directory - @rm -Rf $(CHROME_BUILD_DIR) - @mkdir -p $(CHROME_BUILD_CONTENT) - @mkdir -p $(CHROME_BUILD_CONTENT)/$(BUILD_DIR) - @mkdir -p $(CHROME_BUILD_CONTENT)/web - @cp -R $(CHROME_EXTENSION_FILES) $(CHROME_BUILD_DIR)/ - # Copy a standalone version of pdf.js inside the content directory - @cp $(BUILD_TARGET) $(CHROME_BUILD_CONTENT)/$(BUILD_DIR)/ - @cp -r $(EXTENSION_WEB_FILES) $(CHROME_BUILD_CONTENT)/web/ - @mv -f $(CHROME_BUILD_CONTENT)/web/viewer-production.html $(CHROME_BUILD_CONTENT)/web/viewer.html - - # Create the crx - #TODO - - - -# Make sure there's a build directory. -$(BUILD_DIR): - mkdir -p $(BUILD_DIR) - -clean: - rm -rf $(BUILD_DIR) - -# make help -# -# This target just prints out a message to read these comments. :) -help: - @echo "Read the comments in the Makefile for guidance."; - -.PHONY:: production test browser-test font-test shell-test \ - shell-msg lint clean web compiler help server diff --git a/README.md b/README.md index 4c6fc1e18..9c242d0b8 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ Also, note that the development extension is updated on every merge and by defau auto-update extensions on a daily basis (you can change this through the `extensions.update.interval` option in `about:config`). -For an experimental Chrome extension, get the code as explained below and issue `make extension`. +For an experimental Chrome extension, get the code as explained below and issue `node make extension`. Then open Chrome, go to `Tools > Extension` and load the (unpackaged) extension from the directory `build/chrome`. @@ -50,9 +50,10 @@ To get a local copy of the current code, clone it using git: Next, you need to start a local web server as some browsers don't allow opening PDF files for a file:// url: - $ make server + $ node make server -If everything worked out, you can now serve +You can install Node via [nvm](https://github.com/creationix/nvm) or the +[official package](http://nodejs.org). If everything worked out, you can now serve + http://localhost:8888/web/viewer.html @@ -64,7 +65,7 @@ You can also view all the test pdf files on the right side serving In order to bundle all `src/` files into a final `pdf.js`, issue: - $ make + $ node make bundle This will generate the file `build/pdf.js` that can be included in your final project. (WARNING: That's a large file! Consider minifying it).