Mercurial > dive4elements > gnv-client
changeset 1138:2c00570ab3bd
merged doc
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 28 Sep 2012 12:14:02 +0200 |
parents | ccfa07b88476 (current diff) bc1d817b80a4 (diff) |
children | 3a28fef65500 |
files | |
diffstat | 38 files changed, 13847 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/ChangeLog Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,546 @@ +2012-07-05 Felix Wolfsteller <felix.wolfsteller@intevation.de> + + * README: New file with minimal instructions how to build the + documentation. + +2010-08-13 Tim Englich <tim@intevation.de> + + * admin-manual/installation-artifact-server.tex, + admin-manual/operating-the-system.tex, + admin-manual/installation-base.tex, + admin-manual/installation-webclient.tex: + Added corrections and wishes of the training on the installation + which was given to the BSH. + +2010-06-30 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * admin-manual/installation-base.tex: Some refactoring of the proxy + installation. + +2010-06-30 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * config-manual/general_settings.tex: Removed section 'Adding new + Languages'. This section should be placed in an own file. + + * config-manual/adding_new_languages.tex: New file for section 'Adding new + Languages'. + + * config-manual/config-manual.tex: Include section 'Adding new Languages'. + +2010-06-29 Tim Englich <tim@intevation.de> + + * admin-manual/installation-base.tex: + Added Section which explains how to install the proxy-script + which is required for the OpenLayers-Client which is integrated in the + GNV-Web-Client. + +2010-06-29 Tim Englich <tim@intevation.de> + + * config-manual/general_settings.tex: + Added section with the description how to add a new + language to the system into the config-manual. + +2010-06-25 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * licenses/overview.txt: Overview of external libs and its licenses. + +2010-05-12 Hans Plum <hans@intevation.de> + + Tagging as Version 1.0 + +2010-05-12 Hans Plum <hans@intevation.de> + + * config-manual/config-manual.tex, + config-manual/model_of_transitions.tex, + config-manual/title.tex, + config-manual/generating_maps.tex, + config-manual/general_settings.tex, + config-manual/miscellanea.tex, + config-manual/Makefile, + config-manual/administering_artifact-server.tex: + Adapted titlepage to admin manual. Replaced with public Makefile + according to admin manual. (XXX) Added some workaround linebreaks with + typewriter sections + +2010-05-12 Hans Plum <hans@intevation.de> + + + * config-manual/config-manual.tex, + config-manual/model_of_transitions.tex, + config-manual/generating_maps.tex, + config-manual/overview.tex, + config-manual/generating_charts.tex, + config-manual/general_settings.tex, + config-manual/administering_artifact-server.tex: + Final QS of all chapters. Cleanup FIXMEs and typos mainly. + +2010-05-10 Hans Plum <hans@intevation.de> + + * config-manual/generating_maps.tex: + Added content about generating maps with extensive background + information about the interaction between artifact-server and + mapserver. + +2010-05-10 Hans Plum <hans@intevation.de> + + * config-manual/model_of_transitions.tex, + config-manual/generating_charts.tex, + config-manual/general_settings.tex: + Added content about generating charts. + +2010-05-10 Tim Englich <tim@intevation.de> + + * config-manual/general_settings.tex, + config-manual/config-manual.txt: + Added short documentation for the file timegap_definition.xml. The + usage and the definition of the values stored in the file are + explained in the file itself. + +2010-05-10 Tim Englich <tim@intevation.de> + + * config-manual/model_of_transitions.tex: + Done some litte changes in the introduction of the + Section Model of Transitions. + +2010-05-10 Tim Englich <tim@intevation.de> + + * config-manual/model_of_transitions.tex, + config-manual/general_settings.tex: + Moved section Query-configuration to Section Model of Transitions. + +2010-05-10 Tim Englich <tim@intevation.de> + + * config-manual/model_of_transitions.tex: + Do some Documentstyling. Added Typewriter-Style + to mark XML-Elements and other technical Items. + +2010-05-10 Tim Englich <tim@intevation.de> + + * config-manual/model_of_transitions.tex: + Fixed some mistakes. + +2010-05-09 Hans Plum <hans@intevation.de> + + * config-manual/config-manual.txt: + fragment missed in last commit + + * admin-manual/overview.tex: + fix some copy&paste mistakes + +2010-05-09 Hans Plum <hans@intevation.de> + + * config-manual/config-manual.tex: + referenced new documents + + * config-manual/overview.tex (added): + introduction/overview of the GNV-server consisting of + artifact- and mapserver + + * config-manual/general_settings.tex: + overview of the entire configuration + + * config-manual/generating_maps.tex (added), + config-manual/generating_charts.tex (added), + config-manual/administering_artifact-server.tex (added): + split up in typical tasks: + - administration and installation + - generating charts (TODO: Fill me) + - generating maps (TODO: Fill me) + - configuring fis, products, etc. (TODO: Integrate me) + + * config-manual/config-manual.txt: + Added some hints + +2010-05-07 Tim Englich <tim@intevation.de> + + * general_settings.tex: + Document following Sections: + artifact-factories, artifacts, mapserver, velocity, ehcache, + geo-backend + Description of geo-backend/Backend-Configuration is missing. + +2010-05-07 Tim Englich <tim@intevation.de> + + * general_settings.tex: + Added first Structure and XML-Structure for the documentation + of the File conf.xml. + Added the Documentation for the System-Properties. + +2010-05-07 Tim Englich <tim@intevation.de> + + * general_settings.tex: + Added separat LaTex-File for the Documentation of the general + settings. + * config-manual.tex: + Include the File general_settings.tex into the main Document. + +2010-05-07 Tim Englich <tim@intevation.de> + + * model_of_transitions.tex: + Answerd Questions and increase some Sections of the Documentation. + +2010-05-07 Hans Plum <hans@intevation.de> + + * config-manual/config-manual.txt: Added some more FIXMEs for internal + DB interface + +2010-05-07 Hans Plum <hans@intevation.de> + + * config-manual/config-manual.txt, + config-manual/model_of_transitions.tex: + Commit before and now: Added some FIXMEs for getting a better + understanding + +2010-05-06 Hans Plum <hans@intevation.de> + + * admin-manual/figures/bsh_logo.gif: + converted to .png because of compile error + +2010-05-06 Hans Plum <hans@intevation.de> + + * tex/*, src/*, README: + Deleted stubs of documentation. + + * test-guideline/README: Added a README to give user more orientation. + +2010-05-06 Hans Plum <hans@intevation.de> + + * admin-manual/installation-artifact-server.tex, + admin-manual/installation-base.tex: + Renamed gnv-wrapper to gnv-wms to clearify function + +2010-05-06 Hans Plum <hans@intevation.de> + + * admin-manual/installation-admin-manual.txt: + Clean up; all content moved tp *.tex + + * admin-manual/installation-admin-manual.tex: + Adapted a file name after renaming + +2010-05-06 Hans Plum <hans@intevation.de> + + * admin-manual/installation-artifact-server.tex: renamed from + admin-manual/installation-artefact-server.tex in order to unify use of + naming + +2010-05-06 Hans Plum <hans@intevation.de> + + * admin-manual/overview.tex, + admin-manual/operating-the-system.tex, + admin-manual/installation-artefact-server.tex: + Unified naming of artefact to artifact + +2010-05-06 Hans Plum <hans@intevation.de> + + * admin-manual/title.tex, + admin-manual/installation-admin-manual.tex, + admin-manual/figures/bsh_logo.gif, + admin-manual/operating-the-system.tex, + admin-manual/installation-base.tex, + admin-manual/installation-webclient.tex, + admin-manual/installation-artefact-server.tex: + Finalized documentation with references, unifying tools, adding logos. + TODO: Unify the use of artifact. Checking against implementation. + +2010-05-06 Hans Plum <hans@intevation.de> + + * admin-manual/Makefile: + Replaced selfmade Makefile through a specialized one from + http://www.bouncingchairs.net/oss (GPL) + +2010-05-05 Hans Plum <hans@intevation.de> + + * admin-manual/overview.tex, + admin-manual/operating-the-system.tex, + admin-manual/installation-base.tex, + admin-manual/installation-webclient.tex, + admin-manual/installation-artefact-server.tex: + Removed sections about deinstallation and monitoring because they were + not tested. + +2010-05-05 Hans Plum <hans@intevation.de> + + * admin-manual/installation-admin-manual.tex, + admin-manual/overview.tex, + admin-manual/operating-the-system.tex, + admin-manual/installation-base.tex, + admin-manual/installation-webclient.tex, + admin-manual/installation-artefact-server.tex: + Improving artifact, webclient and operation section. Added hyperref + package. + +2010-05-04 Tim Englich <tim@intevation.de> + * config-manual/model_of_transitions.tex: + Fixed some typos. Do some document-styling. + +2010-05-04 Tim Englich <tim@intevation.de> + + * config-manual/model_of_transitions.tex: + Added Sample calls for creating an FIS and also getting + the Products which it contains. + * config-manual/sample-documents/create-artifact.xml: + Added XMl-Document which contains the XML-Request-Body for + the http-post call for creating an Artifact. + +2010-05-04 Tim Englich <tim@intevation.de> + + * config-manual/model_of_transitions.tex: + Added Example for adding a new Product to a FIS. + +2010-05-04 Tim Englich <tim@intevation.de> + + * config-manual/model_of_transitions.tex: + Added Example for adding a new Artifact for the FIS with no + Products to the REST-Server. + +2010-05-04 Tim Englich <tim@intevation.de> + + * config-manual/model_of_transitions.tex: + Added Example for adding a new FIS to the REST-Server. + +2010-05-04 Tim Englich <tim@intevation.de> + + * config-manual/model_of_transitions.tex: + Added listing of all supported OutputStates. + +2010-05-04 Tim Englich <tim@intevation.de> + + * config-manual/model_of_transitions.tex: + Added MarineFeatures as Subtype of ESRI ArcMarineBSH + +2010-05-04 Tim Englich <tim@intevation.de> + + * config-manual/model_of_transitions.tex: + Added description for Configuration of InputValue of states and short + examples of the usage in SQL-statements to the Documentation. + +2010-05-04 Hans Plum <hans@intevation.de> + + * config-manual/config-manual.tex, + config-manual/model_of_transitions.tex: + Fixed compilation error and revert temporary change for graphix + package + +2010-05-04 Hans Plum <hans@intevation.de> + + * config-manual/config-manual.tex, + config-manual/model_of_transitions.tex: + Added an overview of the subject-specific part of the configuration + introducing the dependencies of the relevant files + +2010-05-03 Tim Englich <tim@intevation.de> + + * config-manual/model_of_transitions.tex: + Added Mapping between the Configuration an the shown Objects in the + System into the Documentation. + +2010-05-03 Tim Englich <tim@intevation.de> + + * config-manual/model_of_transitions.tex: + Added Description of Configuration for OutputStates and OutputModes. + +2010-05-03 Tim Englich <tim@intevation.de> + + * config-manual/model_of_transitions.tex: + Added description of Configuration of States and Transitions. + Also added description for the Configuration of an product. + Added enumerations. + +2010-04-30 Tim Englich <tim.englich@intevation.de> + + * config-manual/model_of_transitions.tex: + Added the first descriptions of the Configuration of + Artifact-Factories, Artifacts representing a FIS and the Products + which can be configured to the different FIS. + +2010-04-30 Tim Englich <tim.englich@intevation.de> + + * config-manual/config-manual.tex: + Added Include for File model_of_transitions.tex into the main + Document. + * config-manual/model_of_transitions.tex: + Added File for the Documentation of the FIS, Products and the + required Transitionmodels of a Product. + Added Howto for configuring a new FIS, configuring a new product and + adding a additional Product to a FIS. + +2010-04-30 Tim Englich <tim.englich@intevation.de> + + * config-manual/config-manual.tex: + Added the main LaTex-Document. + * config-manual/title.tex: + Added the LaTex-IncludeDocument which will include + the Title-Page of this document + * config-manual/figures: + Added folder for figures which should be integrated in this Document. + * config-manual/Makefile: + Adding Makefile for generating e.g. an PDF-Document + * config-manual/figures/intevation-logo.eps: + Added Intevation Logo. + +2010-04-30 Hans Plum <hans@intevation.de> + + * config-manual/config-manual.txt: + Added a first draft for a configuration manual for the + artifact server + +2010-04-28 Hans Plum <hans@intevation.de> + + * test-guideline/gnv-horizontalprofile.txt, + test-guideline/gnv-verticalprofile.txt, + test-guideline/gnv-timerseries.txt, test-guideline/gnv-layer.txt, + test-guideline/gnv-framework.txt, + test-guideline/gnv-horizontal-cross-section.txt, + test-guideline/gnv-vertical-cross-section.txt, + test-guideline/gnv-test-guideline.txt, + test-guideline/gnv-horizontales-schnittprofil.txt: + Added a test-guideline for the matrix of products to database + schemata. Look into test-guideline/gnv-test-guideline.txt for further + information. + +2010-04-28 Hans Plum <hans@intevation.de> + + * Renamed admin-manual/abbildungen in admin-manual/figures + + * admin-manual/title.tex: Adapted file path after renaming + + * admin-manual/installation-artefact-server.tex: + Added 2 FIXMEs + +2010-04-28 Hans Plum <hans@intevation.de> + + * admin-manual, admin-manual/installation-admin-manual.txt, + admin-manual/title.tex, admin-manual/installation-admin-manual.tex, + admin-manual/overview.tex, admin-manual/operating-the-system.tex, + admin-manual/installation-base.tex, + admin-manual/installation-webclient.tex, admin-manual/abbildungen, + admin-manual/installation-artefact-server.tex, admin-manual/Makefile: + Moved all admin-manual specific files in new directory admin-manual + +2010-04-28 Hans Plum <hans@intevation.de> + + * installation-admin-manual.txt, title.tex, + tex/*, installation-admin-manual.tex, overview.tex, ChangeLog, + operating-the-system.tex, src/*, installation-base.tex, abbildungen, + installation-webclient.tex, installation-artefact-server.tex, + Makefile, README: + Moved content to trunk. + +2010-04-28 Hans Plum <hans@intevation.de> + + * trunk/, tags/, branches/: + Added standard SVN structure for this module + +2010-04-28 Hans Plum <hans@intevation.de> + + * installation-admin-manual.txt: + Moved content into LaTeX documents + + * New: title.tex + installation-admin-manual.tex + overview.tex + operating-the-system.tex + installation-base.tex + installation-webclient.tex + installation-artefact-server.tex: + Formatting of content and updating content. + +2010-04-27 Tim Englich <tim.englich@intevation.de> + + * installation-admin-manual.tex: + First Documentstructure for LaTex-Document + * abbildungen: + Added Folder for images. + * MakeFile: + File to generate PDF. + +2010-04-27 Tim Englich <tim.englich@intevation.de> + + * installation-admin-manual.txt: + Added description which Version of Operatin System has + to be installed. + +2010-04-27 Tim Englich <tim.englich@intevation.de> + + * installation-admin-manual.txt: + Added description howto install, configure and uninstall the + GNV-Client into the Tomcat Application Server. + +2010-04-27 Tim Englich <tim.englich@intevation.de> + + * installation-admin-manual.txt: + Added description howto install, configure and uninstall the + UMN-Mapserver Version 5.6.3 using Gispatcher-Resources on + the Operation System. + +2010-04-27 Tim Englich <tim.englich@intevation.de> + + * installation-admin-manual.txt: + Added description howto install, configure and uninstall Apache + Webserver Version 2.2 including Mod-JK on the Operation System. + +2010-04-27 Hans Plum <hans@eulimene> + + * installation-admin-manual.txt: + Added overview of the system, installation of + artefact-server and operation of the GNV system. + +2010-04-26 Tim Englich <tim.englich@intevation.de> + + * installation-admin-manual.txt: + Added description howto install, configure and uninstall Apache + Tomcat Applicationserver Version 5.5 on the Operation System. + Added all relevant commands which have to be executed + from the Systemadministrator. Also put Snippets of the Configuration + Files to the Content of this File. + + +2010-04-26 Tim Englich <tim.englich@intevation.de> + + * installation-admin-manual.txt: + Added description howto install, configure and uninstall Java 1.6 on + the Operation System. + Added all relevant commands which have to be executed from the + Systemadministrator. + +2010-04-20 Hans Plum <hans@intevation.de> + + * installation-admin-manual.txt: + Added relevant installation notices of an installation of a vanilla + Debian Lenny System with Tomcat 5.5 and UMN MapServer (Debian Package) + preinstalled + +2010-04-20 Hans Plum <hans@intevation.de> + + * installation-admin-manual.txt: + Added UMN Mapserver as component; added responsibility for chapters; + removed extensive numbering in order to avoid manual updating. A word + processor can do this later on. + +2010-04-20 Hans Plum <hans@intevation.de> + + * installation-admin-manual.txt: + Renamed handbook.txt to installation-admin-manual.txt to make the task + clearer. + +2010-04-20 Hans Plum <hans@intevation.de> + + * handbook.txt: + Restructered the draft a bit and added Integration of Apache WebServer + and Apache Tomcat explicitly. + +2010-04-19 Tim Englich <tim.englich@intevation.de> + + * handbook.txt: + Initial Checkin of installation and administration manual. + This document contains a first draft of an outline of the contents. + +2010-04-11 Sascha L. Teichmann <sascha.teichmann@intevation.de> + + * tex/Makefile, tex/tech-doku.tex: Initialer Checkin der + technischen Dokumentarion. + +2010-02-16 Sascha L. Teichmann <sascha.teichmann@intevation.de> + + * src: Quellen der Dokumentation + * ChangeLog, README: Angelegt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/README Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,11 @@ +To build pdf documentation, call `make` with the documents name without the +".tex" extension, e.g. + + cd admin-manual + make installation-admin-manual + +will result in + + installation-admin-manual.pdf + +.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/admin-manual/Makefile Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,3492 @@ +# Copyright 2004 Chris Monson (shiblon@gmail.com) +# Latest version available at http://www.bouncingchairs.net/oss +# +# This file is part of ``Chris Monson's Free Software''. +# +# ``Chris Monson's Free Software'' is free software; you can redistribute it +# and/or modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, Version 2. +# +# ``Chris Monson's Free Software'' is distributed in the hope that it will +# be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with ``Chris Monson's Free Software''; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# It is also available on the web at http://www.gnu.org/copyleft/gpl.html +# +# Note that using this makefile to build your documents does NOT place them +# under the GPL unless you, the author, specifically do so. In other words, +# I, Chris Monson, the copyright holder and author of this makefile, +# consider it impossible to ``link'' to this makefile in any way covered by +# the GPL. +# +# TO OBTAIN INSTRUCTIONS FOR USING THIS FILE, RUN: +# make help +# +fileinfo := LaTeX Makefile +author := Chris Monson +version := 2.2.0-rc1 +# +# Note that the user-global version is imported *after* the source directory, +# so that you can use stuff like ?= to get proper override behavior. +.PHONY: Makefile GNUmakefile Makefile.ini $(HOME)/.latex-makefile/Makefile.ini +-include Makefile.ini +-include $(HOME)/.latex-makefile/Makefile.ini +# +# This can be pdflatex or latex - you can change this by adding the following line to your Makefile.ini: +# BUILD_STRATEGY := latex +BUILD_STRATEGY ?= pdflatex +# +# Sets LC_ALL=C, by default, so that the locale-aware tools, like sort, be +# # immune to changes to the locale in the user environment. +export LC_ALL ?= C +# +# +# If you specify sources here, all other files with the same suffix +# will be treated as if they were _include_ files. +#onlysources.tex ?= main.tex +#onlysources.tex.sh ?= +#onlysources.tex.pl ?= +#onlysources.tex.py ?= +#onlysources.rst ?= +#onlysources.fig ?= +#onlysources.gpi ?= +#onlysources.dot ?= +#onlysources.xvg ?= +#onlysources.svg ?= +#onlysources.eps.gz ?= +#onlysources.eps ?= +# +# If you list files here, they will be treated as _include_ files +#includes.tex ?= file1.tex file2.tex +#includes.tex.sh ?= +#includes.tex.pl ?= +#includes.tex.py ?= +#includes.rst ?= +#includes.fig ?= +#includes.gpi ?= +#includes.dot ?= +#includes.xvg ?= +#includes.svg ?= +#includes.eps.gz ?= +#includes.eps ?= +# +# If you list files or wildcards here, they will *not* be cleaned - default is +# to allow everything to be cleaned. +#neverclean ?= *.pdf +# +# Alternatively (recommended), you can add those lines to a Makefile.ini file +# and it will get picked up automatically without your having to edit this +# Makefile. +# +# KNOWN ISSUES: +# * The following occurs: +# file with: \usepackage{named}\bibliographystyle{named} +# Compile +# change to: \usepackage{apalike}\bibliographystyle{apalike} +# Compile again -- BARF! +# +# The workaround: make clean-nographics; make +# +# Note that we may not be able to fix this. LaTeX itself barfs +# on this, not the makefile. The very first invocation of LaTeX +# (when something like this has happened) reads the existing .aux +# file and discovers invalid commands like \citeauthoryear that +# are only valid in the package that was just removed. It then +# tries to parse them and explodes. It's not at all clear to me +# how to fix this. I tried removing the .aux files on the first +# run of LaTeX, but that necessarily requires more subsequent +# rebuilds on common edits. There does not appear to be a +# graceful solution to this issue. +# +# CHANGES: +# Chris Monson (2010-04-08): +# * Bumped version to 2.2.0-rc1 +# * Added back in the rst_style_file stuff that got broken when switching +# rst -> tex to use the script mechanism +# Chris Monson (2010-03-23): +# * Bumped version to 2.2.0-beta8 +# * Work on issue 76: bad backtick escape for some sed versions, failure +# to clear out the hold buffer when outputting MISSING comment. +# - Backed out 2>&1 to &> (doesn't work in sh) +# - Backed out using . to source variables +# Chris Monson (2010-03-22): +# * Bumped version to 2.2.0-beta7 +# * Issue 72: Fix latex/bibtex invocation order for annotated bib styles +# * Fixed informational output to reflect which LaTeX run we're on +# * Fixed graphic detection to include graphics that are already there in +# .d files +# * Tightened up the .d file output to only make .d depend on graphic +# *source* files. This means that building foo.d no longer +# builds all of the graphics files on which foo.tex depends. +# Had to use .SECONDEXPANSION trickery to make it work. +# * Changed get-graphics to only accept a stem. +# * Fixed build-once logic for scripted .tex to work better +# * Made get-inputs sed script more maintainable. +# * Moved Makefile.ini import up higher. +# * Changed bare stems to not recursively invoke make +# * Updated diff output to be more silent everywhere +# * Added a MISSING comment to the .d file if stuff isn't found - forces +# removal of .1st.make file, which often forces it to try again. +# * Fixed broken graphics-target function +# * Added sleep to .d file generation when stuff is missing - if it +# builds too fast, make doesn't realize it needs to be reloaded, +# and thus never discovers some deeper dependencies (especially +# evident when graphics are included from scripted include +# files). +# Chris Monson (2010-03-17): +# * Bumped version to 2.2.0-beta6 +# * Fixed bareword builds to actually work (requires static patterns) +# * Fixed colorization to work with new paragraph stuff +# Chris Monson (2010-03-17): +# * Bumped version to 2.2.0-beta5 +# * Fixed graphic detection to be much more focused - splits log file +# into paragraphs before doing pattern matching. +# * Fixed make foo to work properly (recursively calls make foo.pdf) +# * Fixed gpi -> pdf generation to not waste time building .eps *after* +# the pdf already exists. +# * Changed log copies to include MAKE_RESTARTS as part of the name. +# * Fixed missing include file detection (also makes use of the paragraph +# stuff) to detect missing scripted include files. +# Chris Monson (2010-03-16): +# * Bumped version to 2.2.0-beta4 +# * issue 70: .pdf not moved out of the way properly on first +# compilation, resulting in early error detection failure. +# * issue 74: fixed broken error on missing .aux files: the +# implementation was masking real errors. +# Chris Monson (2010-03-15): +# * Bumped version to 2.2.0-beta3 +# * issue 71: Made the tput dependency optional +# * issue 73: Made .tex targets not pull in .d files (building them from +# scripts should not require a .d) +# * issue 74: Output a much saner error when a .aux file is not produced +# (e.g., when you are typing "make" without arguments in a +# directory with included .tex files that are not named with +# ._include_.) +# Chris Monson (2010-03-11): +# * Bumped version to 2.2.0-beta2 +# * Fixed clean-graphics to get rid of intermediate .eps files that may +# be hanging around +# * Added an automatic setting to use eps terminals in pdflatex mode for +# gnuplot if it doesn't understand pdf. +# * issue 66: Removed grayscale generation via magic suffix. Grayscale +# generation is now only available via GRAY=1 +# * issue 68: Added explicit handling of LC_ALL for locale-aware tools +# like "sort" +# Chris Monson (2010-03-10): +# * Bumped version to 2.2.0-beta1 +# * Fixed success message to handle output message in different places +# * Added name of produced file to success message +# Chris Monson (2010-03-10): +# * Bumped version to 2.2.0-alpha3 +# * Added meaningful error message for wrong hyperref options +# * Added meaningful error message for incorrect graphics extensions +# Chris Monson (2010-03-09): +# * Bumped version to 2.2.0-alpha2 +# * Updated graphics handling (gnuplot and fig generate pdf natively) +# * Changed xmgrace to output monochrome natively +# Chris Monson (2010-03-09): +# * Bumped version to 2.2.0-alpha1 - major change! +# * Support pdflatex natively and by default (issue 6 - a long time coming) +# * Add ability to have a single $HOME/.latex-makefile/Makefile.ini for +# all invocations +# * Reworked graphic inclusion detection so that extensions need not be +# specified for either build strategy (e.g., +# \includegraphics{test1.eps} -> \includegrahpics{test1}) +# * Changed log format to include filenames and line numbers +# Chris Monson (2010-02-04): +# * Bumped version to 2.1.43 +# * All of the following are for issue 63 (thanks to mojoh81): +# * Added documentation about fixing Makefile.ini default target +# * Added perl and python script targets +# * Fixed run logic to allow included .tex files to be scripted (the +# run-again logic now detects missing .tex files, and the MV +# command has been switched out for a command that only invokes +# MV if the files exist) +# * Changed scripted generation to only run once per make invocation +# * Added dependency on expr +# Chris Monson (2010-01-19): +# * Bumped version to 2.1.42 +# * issue 62: Added .brf extension to cleanable files (backrefs) +# Chris Monson (2010-01-07): +# * Bumped version to 2.1.41 +# * issue 60: bad makeindex runs now error out on subsequent tries +# Chris Monson (2009-12-01): +# * Bumped version to 2.1.40 +# * issue 36: build all indices (for e.g., splitidx usage) +# * issue 59: clean up all generated files (including indices) +# Chris Monson (2009-11-23): +# * Bumped version to 2.1.39 +# * issue 57: change ps2pdf invocations to just use gs directly +# Chris Monson (2009-11-19): +# * Bumped version to 2.1.38 +# * issue 57: Added some limited support for Cygwin (spaces in filenames) +# Chris Monson (2009-11-15): +# * Bumped version to 2.1.37 +# * Removed svninfo, since this is now managed by mercurial +# * Fixed typo in changelist +# * Issue 52: added jpg->eps conversion (thanks to brubakee) +# * Issue 54: fix missing Overfull colorization due to lack of a blank +# line preceding the first error. +# * Issue 51: remove head.tmp and body.tmp in make clean invocation +# * Issue 56: maintain multiple versions of log files (for debugging) +# Chris Monson (2009-11-14): +# * Bumped version to 2.1.36 +# * Issues 53 and 49: added .brf, .mtc, and .maf to the cleanables +# Chris Monson (2009-11-05): +# * Bumped version to 2.1.35 +# * Added nomenclature support (see issue 48) +# Chris Monson (2009-10-29): +# * Bumped version to 2.1.34 +# * Fixed _out_ creation bug introduced in 2.1.33 (it was always created) +# * Fixed erroneous help output for $HOME in BINARY_TARGET_DIR +# * Changed contact email address - bring on the spam! +# Chris Monson (2009-10-21): +# * Bumped version to 2.1.33 +# * Fixed issue 46, adding support for dot2tex (thanks to fdemesmay) +# * Made all_files.* settable in Makefile.ini (using ?= instead of :=) +# * Fixed issue 47, thanks to fdemesmay: add binary copy directory, copy +# dvi, pdf, and ps if it exists +# Chris Monson (2009-09-25): +# * Bumped version to 2.1.32 +# * Fixed so that a changed lol file will cause a rebuild +# * Added .lol files to the cleanable list +# Chris Monson (2009-09-08): +# * Bumped version to 2.1.31 +# * Closed issue 43: evince doesn't notice pdf change w/out touch +# Chris Monson (2009-08-28): +# * Bumped version to 2.1.30 +# * Closed issue 39: Capture multi-line log warnings/errors to output +# Chris Monson (2009-08-26): +# * Bumped version to 2.1.29 +# * Closed issue 42: add svg support using inkscape +# Chris Monson (2009-08-17): +# * Bumped version to 2.1.28 +# * Patch from paul.biggar for issue 38: package warnings are overlooked +# Chris Monson (2009-08-07): +# * Bumped version to 2.1.27 +# * Included patch for issue 37 - removes pdf/ps files before copying, +# allowing some broken viewers to see changes properly. +# Chris Monson (2009-05-15): +# * Bumped version to 2.1.26 +# * Included patch for issue 9 from favonia - detects .fig changes for +# pstex files during regular compilation, so long as the pstex +# has been built at least once with make all-pstex. +# Chris Monson (2009-03-27): +# * Bumped version to 2.1.25 +# * Cleaned up a bunch of variable setting stuff - more stuff is now +# settable from Makefile.ini +# * Cleaned up documentation for various features, especially settable +# variables. +# * issue 28: support for png -> eps conversion (it even looks good!) +# * issue 29: support for "neverclean" files in Makefile.ini +# * issue 30: make ps2pdf14 the default - fall back when not there +# Chris Monson (2009-03-09): +# * Bumped version to 2.1.24 +# * issue 27: xmgrace support (thanks to rolandschulzhd) +# Chris Monson (2008-10-23): +# * Bumped version to 2.1.23 +# * issue 23: fixed _check_programs to not use bash string subs +# Chris Monson (2008-09-02): +# * Bumped version to 2.1.22 +# * Appled patch from Holger <yllohy@googlemail.com> to add include +# sources and some documentation updates. +# * Updated backup_patterns to be a bit more aggressive (also thanks to +# Holger) +# Chris Monson (2008-08-30): +# * Bumped version to 2.1.21 +# * Added ability to specify onlysources.* variables to indicate the only +# files that should *not* be considered includes. Thanks to Holger +# <yllohy@googlemail.com> for this patch. +# * Added an automatic include of Makefile.ini if it exists. Allows +# settings to be made outside of this makefile. +# Chris Monson (2008-05-21): +# * Bumped version to 2.1.20 +# * Added manual pstex compilation support (run make all-pstex first) +# * Removed all automatic pstex support. It was totally breaking +# everything and is very hard to incorporate into the makefile +# concept because it requires LaTeX to *fail* before it can +# determine that it needs the files. +# Chris Monson (2008-04-17): +# * Bumped version to 2.1.19 +# * Changed the pstex build hack to be on by default +# Chris Monson (2008-04-09): +# * Bumped version to 2.1.18 +# * issue 16: fixed pstex build problems, seems nondeterministic. Added +# gratuitious hack for testing: set PSTEX_BUILD_ALL_HACK=1. +# Chris Monson (2008-04-09): +# * Bumped version to 2.1.17 +# * issue 20: fixed accumulation of <pid>*.make files - wildcard was +# refusing to work on files that are very recently created. +# Chris Monson (2008-04-02): +# * Bumped version to 2.1.16 +# * issue 19: Removed the use of "type" to fix broken "echo" settings +# Chris Monson (2008-03-27): +# * Bumped version to 2.1.15 +# * issue 18: Favors binary echo over builtin, as binary understands -n +# * issue 16: Fixed handling of missing pstex_t files in the log +# * issue 9: Added .SECONDARY target for .pstex files +# Chris Monson (2008-03-21): +# * Bumped version to 2.1.14 +# * Fixed broken aux file flattening, which caused included bibs to be +# missed. +# Chris Monson (2008-03-20): +# * Bumped version to 2.1.13 +# * Changed error output colorization to show errors for missing files +# that are not graphics files. +# Chris Monson (2008-03-20): +# * Bumped version to 2.1.12 +# * Fixed a regression introduced in r28 that makes bibtex fail when +# there is no index file present +# Chris Monson (2008-03-03): +# * Bumped version to 2.1.11 +# * Fixed issue 11 (handle index files, reported by abachn) +# * Cleaned up some comments and help text +# Chris Monson (2008-01-24): +# * Bumped version to 2.1.10 +# * Fixed to work when 'sh' is a POSIX shell like 'dash' +# Chris Monson (2007-12-12): +# * Bumped version to 2.1.9 +# * Fixed documentation and dependency graph for pstex files +# Chris Monson (2007-12-12): +# * Bumped version to 2.1.8 +# * Added basic pstex_t support for fig files (Issue 9 by favonia) +# I still suggest that psfrag be used instead. +# Chris Monson (2007-10-16): +# * Bumped version to 2.1.7 +# * Removed todo item: allow other comment directives for rst conversion +# * Added ability to use global rst style file _rststyle_._include_.tex +# * Added help text to that effect +# Chris Monson (2007-05-20): +# * Bumped version to 2.1.6 +# * Changed default paper size for rst files +# * Added todo item: fix paper size for rst files +# * Added todo item: allow other comment directives for rst conversion +# Chris Monson (2007-04-02): +# * Bumped version to 2.1.5 +# * Addressed Issue 7, incorrect .gpi.d generation in subdirectories +# Chris Monson (2007-03-28): +# * Bumped version to 2.1.4 +# * Fixed syntax error in dot output +# Chris Monson (2007-03-01): +# * Bumped version to 2.1.3 +# * Added reST to the included documentation +# * Fixed graphics and script generation to be settable in the +# environment. +# Chris Monson (2007-02-23): +# * Bumped version to 2.1.2 +# * Added the ability to generate .tex files from .rst files +# Chris Monson (2006-10-17): +# * Bumped version to 2.1.1 +# * Fixed includes from subdirectories (sed-to-sed slash escape problem) +# Chris Monson (2006-10-05): +# * Bumped version to 2.1.0 (pretty serious new feature added) +# * New feature: bib files can now be anywhere on the BIBINPUTS path +# * New programs: kpsewhich (with tetex) and xargs (BSD) +# Chris Monson (2006-09-28): +# * Bumped version to 2.0.9 +# * Added ability to parse more than one bibliography +# Chris Monson (2006-06-01): +# * Bumped version to 2.0.8 +# * Added .vrb to the list of cleaned files +# Chris Monson (2006-04-26): +# * Bumped version to 2.0.7 +# * Fixed so that clean-nographics does not remove .gpi.d files +# * Removed jpg -> eps hack (not working properly -- just pre-convert) +# * Fixed so that postscript grayscale can be done with BSD sed +# Chris Monson (2006-04-25): +# * Bumped version to 2.0.6 +# * Fixed so that changed toc, lot, lof, or out causes a rebuild +# Chris Monson (2006-04-17): +# * Bumped version to 2.0.5 +# * Added jpg -> eps conversion target +# Chris Monson (2006-04-12): +# * Bumped version to 2.0.4 +# * Fixed BSD sed invocation to not use \| as a branch delimiter +# * Added a comment section on what is and is not allowed in BSD sed +# * Made paper size handling more robust while I was at it +# * Fixed postscript RGB grayscale to use a weighted average +# * Fixed postscript HSB grayscale to convert to RGB first +# * Fixed a problem with rebuilding .bbl files +# Chris Monson (2006-04-11): +# * Bumped version to 2.0.3 +# * Fixed some BSD sed problems: can't use \n in substitutions +# Chris Monson (2006-04-10): +# * Bumped version to 2.0.2 +# * Once again removed ability to create .tex files from scripts +# * \includeonly works again +# Chris Monson (2006-04-09): +# * Bumped version to 2.0.1 +# * Fixed grayscale postscript handling to be more robust +# * Added ability to generate ._gray_. files from eps and eps.gz +# * Added ability to clean ._gray_.eps files created from .eps files +# Chris Monson (2006-04-07): +# * Bumped version to 2.0.0 +# * Removed clunky ability to create included .tex files from scripts +# * Added note in the help about included tex scripting not working +# * Fixed the .eps generation to delete %.gpihead.make when finished +# * Abandoned designs to use shell variables to create sed scripts +# * Abandoned __default__.tex.sh idea: it causes recursion with %: . +# * Removed web page to-do. All items are now complete. +# * Added better grayscale conversion for dot figures (direct ps fixup). +# * Include files can now be scripted (at the expense of \includeonly). +# * Updated dependency graph to contain better node names. +# Chris Monson (2006-04-06): +# * Bumped version to 2.0b3 +# * Top level includes now fail if there is no rule to build them +# * A helpful message is printed when they do fail +# * Grayscale has been changed to be ._gray_, other phonies use _ now, too +# * Grayscale handling has been completed +# * Changed _include_stems target to _includes target. +# * Fixed _includes target to be useful by itself. +# * Removed the ability to specify clean and build targets at once +# * Verified that epsfig works fine with current code +# * Fixed included scripts so that they are added to the dep files +# * Fixed so that graphics includes don't happen if they aren't for gpi +# * Fixed dot output to allow grayscale. +# Chris Monson (2006-04-05): +# * Bumped version to 2.0b2 +# * Removed automatic -gray output. It needs fixing in a bad way. +# * Revamped dependency creation completely. +# * Fixed conditional inclusion to actually work (test.nobuild.d, test.d). +# * Fixed clean target to remove log targets +# * Added the 'monochrome' word for gray gpi output +# * Added a _check_gpi_files target that checks for common problems +# * Changed the _version target into the version target (no _) +# * Added better handling of grayscale files. Use the .gray.pdf target. +# * Fixed testing for rebuilds +# Chris Monson (2006-04-04): +# * Bumped version to 2.0b1 +# * Changed colorization of output +# * Made .auxbbl and .auxtex .make files secondary targets +# * Shortened and simplified the final latex invocation loop +# * Added version-specific output ($$i vs. $$$$i) in latex loop +# * Added a build message for the first .dvi run (Building .dvi (0)) +# * Removed some build messages that most people don't care about. +# * Simplified procedure for user-set colors -- simple text specification +# * Fixed diff output to...not output. +# * Fixed rerun bug -- detect not only when preceded with LaTeX Warning +# * Sped up gpi plotting +# * Added error handling and colorized output for gpi failure +# * Documented color changing stuff. +# * Now sort the flattened aux file to avoid false recompilation needs +# * Added clean-nographics target +# * Don't remove self.dvi file if self.aux is missing in the log +# * Clarified some code. Did some very minor adjusting. +# Chris Monson (2006-04-03): +# * Bumped version to 2.0a7 +# * Added .dvi and .ps files as secondary files. +# * Fixed handling of multiple run detection when includeonly is in use. +# * Added code to flatten .aux files. +# * Added more files as .SECONDARY prerequisites to avoid recompilation. +# * Fixed the inputs generation to be much simpler and to use pipes. +# * Added the dependency graph directly into the makefile. +# * Changed flatten-aux to remove \@writefile \relax \newlabel, etc. +# * Undid pipe changes with sed usage (BSD sed doesn't know -f-). +# * Added a _check_programs target that tells you what your system has. +# * Fixed an error in colorization that made unnecessary errors appear +# * Added view targets. +# * Updated help text. +# * Augmented cookies so that .aux can trigger .bbl and .dvi rebuilds +# * Added more informative error handling for dvips and ps2pdf +# Chris Monson (2006-04-02): +# * Bumped version to 2.0a6 +# * Added indirection to .bbl dependencies to avoid rebuilding .bbl files +# * Streamlined the diff invocation to eliminate an existence test +# * Removed special shell quote escape variables +# * Moved includes to a more prominent location +# * Fixed .inputs.make to not contain .aux files +# * Fixed embedding to use a file instead of always grepping. +# * Added *.make.temp to the list of cleanable files +# * Fixed Ruby. It should now be supported properly. +# * Now differentiate between all, default, and buildable files. +# * Fixed to bail out on serious errors. +# * Revised the handling of includable files. Still working on it. +# Chris Monson (2006-03-31): +# * Bumped version to 2.0a5 +# * Fixed a bug with LaTeX error detection (there can be spaces) +# * Added .bbl support, simplifying everything and making it more correct +# * Refactored some tests that muddy the code +# * Did a little cleanup of some shell loops that can safely be make loops +# * Added support for graphviz .dot files +# * Made _all_programs output easier to read +# * Added the ruby support that has long been advertised +# * Font embedding was screwed up for PostScript -- now implicit +# * Changed the generation of -gray.gpi files to a single command +# * Changed any make-generated file that is not included from .d to .make +# Chris Monson (2006-03-30): +# * Bumped version to 2.0a4 +# * Fixed a bug with very long graphics file names +# * Added a todo entry for epsfig support +# * Fixed a bug paper size bug: sometimes more than one entry appears +# * Fixed DVI build echoing to display the number instead of process ID +# * DVI files are now removed on first invocation if ANY file is missing +# * Added a simple grayscale approach: if a file ends with -gray.gpi, it +# is created from the corresponding .gpi file with a special +# comment ##GRAY in its header, which causes coloring to be +# turned off. +# * Fixed a bug in the handling of .tex.sh files. For some reason I had +# neglected to define file stems for scripted output. +# * Removed a trailing ; from the %.graphics dependencies +# * Added dvips embedding (I think it works, anyway) +# Chris Monson (2006-03-29): +# * Bumped version to 2.0a3 +# * Fixed error in make 3.79 with MAKEFILE_LIST usage +# * Added the presumed filename to the _version output +# * Added a vim macro for converting sed scripts to make commands +# * Added gpi dependency support (plotting external files and loading gpi) +# * Allow .gpi files to be ignored if called .include.gpi or .nobuild.gpi +# * Fixed sed invocations where \+ was used. BSD sed uses \{1,\}. +# Chris Monson (2006-03-28): +# * Bumped version to 2.0a2 +# * Added SHELL_DEBUG and VERBOSE options +# * Changed the default shell back to /bin/sh (unset, in other words) +# * Moved .PHONY declarations closer to their targets +# * Moved help text into its own define block to obtain better formatting +# * Removed need for double-entry when adding a new program invocation +# * Moved .SECONDARY declaration closer to its relevant occurrence +# * Commented things more heavily +# * Added help text about setting terminal and output in gnuplot +# * Created more fine-grained clean targets +# * Added a %.graphics target that generates all of %'s graphics +# * Killed backward-compatible graphics generation (e.g., eps.gpi=gpi.eps) +# * For now, we're just GPL 2, not 3. Maybe it will change later +# * Made the version and svninfo into variables +# Chris Monson (2006-03-27): +# * Bumped version to 2.0a1 +# * Huge, sweeping changes -- automatic dependencies + +# IMPORTANT! +# +# When adding to the following list, do not introduce any blank lines. The +# list is extracted for documentation using sed and is terminated by a blank +# line. +# +# EXTERNAL PROGRAMS: +# = ESSENTIAL PROGRAMS = +# == Basic Shell Utilities == +CAT ?= cat +CP ?= cp -f +DIFF ?= diff +ECHO ?= echo +EGREP ?= egrep +ENV ?= env +EXPR ?= expr +MV ?= mv -f +SED ?= sed +SORT ?= sort +TOUCH ?= touch +UNIQ ?= uniq +WHICH ?= which +XARGS ?= xargs +SLEEP ?= sleep +# == LaTeX (tetex-provided) == +BIBTEX ?= bibtex +DVIPS ?= dvips +LATEX ?= latex +PDFLATEX ?= pdflatex +EPSTOPDF ?= epstopdf +MAKEINDEX ?= makeindex +KPSEWHICH ?= kpsewhich +GS ?= gs +# = OPTIONAL PROGRAMS = +# == Makefile Color Output == +TPUT ?= tput +# == TeX Generation == +PERL ?= perl +PYTHON ?= python +RST2LATEX ?= rst2latex.py +# == EPS Generation == +CONVERT ?= convert # ImageMagick +DOT ?= dot # GraphViz +DOT2TEX ?= dot2tex # dot2tex - add options (not -o) as needed +FIG2DEV ?= fig2dev # XFig +GNUPLOT ?= gnuplot # GNUplot +INKSCAPE ?= inkscape # Inkscape (svg support) +XMGRACE ?= xmgrace # XMgrace +PNGTOPNM ?= pngtopnm # From NetPBM - step 1 for png -> eps +PPMTOPGM ?= ppmtopgm # From NetPBM - (gray) step 2 for png -> eps +PNMTOPS ?= pnmtops # From NetPBM - step 3 for png -> eps +GUNZIP ?= gunzip # GZipped EPS +# == Beamer Enlarged Output == +PSNUP ?= psnup +# == Viewing Stuff == +VIEW_POSTSCRIPT ?= gv +VIEW_PDF ?= xpdf +VIEW_GRAPHICS ?= display + +# Command options for embedding fonts and postscript->pdf conversion +PS_EMBED_OPTIONS ?= -dPDFSETTINGS=/printer -dEmbedAllFonts=true -dSubsetFonts=true -dMaxSubsetPct=100 +PS_COMPATIBILITY ?= 1.4 + +# Defaults for GPI +DEFAULT_GPI_EPS_FONTSIZE ?= 22 +DEFAULT_GPI_PDF_FONTSIZE ?= 12 + +# Style file for ReST +RST_STYLE_FILE ?= $(wildcard _rststyle_._include_.tex) + +# This ensures that even when echo is a shell builtin, we still use the binary +# (the builtin doesn't always understand -n) +FIXED_ECHO := $(if $(findstring -n,$(shell $(ECHO) -n)),$(shell which echo),$(ECHO)) +ECHO := $(if $(FIXED_ECHO),$(FIXED_ECHO),$(ECHO)) + +define determine-gnuplot-output-extension +$(if $(shell $(WHICH) $(GNUPLOT)), + $(if $(findstring unknown or ambiguous, $(shell $(GNUPLOT) -e "set terminal pdf" 2>&1)), + eps, pdf), + none) +endef + +GNUPLOT_OUTPUT_EXTENSION ?= $(strip $(call determine-gnuplot-output-extension)) + +# Directory into which we place "binaries" if it exists. +# Note that this can be changed on the commandline or in Makefile.ini: +# +# Command line: +# make BINARY_TARGET_DIR=$HOME/pdfs myfile.pdf +# +# Also, you can specify a relative directory (relative to the Makefile): +# make BINARY_TARGET_DIR=pdfs myfile.pdf +# +# Or, you can use Makefile.ini: +# +# BINARY_TARGET_DIR := $(HOME)/bin_out +# +BINARY_TARGET_DIR ?= _out_ + +RESTARTS := $(if $(MAKE_RESTARTS),$(MAKE_RESTARTS),0) +# SH NOTES +# +# On some systems, /bin/sh, which is the default shell, is not linked to +# /bin/bash. While bash is supposed to be sh-compatible when invoked as sh, it +# just isn't. This section details some of the things you have to stay away +# from to remain sh-compatible. +# +# * File pattern expansion does not work for {} +# * [ "$x" = "$y" ] has to be [ x"$x" x"$y" ] +# * &> for stderr redirection doesn't work, use 2>&1 instead +# +# BSD SED NOTES +# +# BSD SED is not very nice compared to GNU sed, but it is the most +# commonly-invoked sed on Macs (being based on BSD), so we have to cater to +# it or require people to install GNU sed. It seems like the GNU +# requirement isn't too bad since this makefile is really a GNU makefile, +# but apparently GNU sed is much less common than GNU make in general, so +# I'm supporting it here. +# +# Sad experience has taught me the following about BSD sed: +# +# * \+ is not understood to mean \{1,\} +# * \| is meaningless (does not branch) +# * \n cannot be used as a substitution character +# * ? does not mean \{0,1\}, but is literal +# * a\ works, but only reliably for a single line if subsequent lines +# have forward slashes in them (as is the case in postscript) +# +# For more info (on the Mac) you can consult +# +# man -M /usr/share/man re_format +# +# And look for the word "Obsolete" near the bottom. + +# +# EXTERNAL PROGRAM DOCUMENTATION SCRIPT +# + +# $(call output-all-programs,[<output file>]) +define output-all-programs + [ -f '$(this_file)' ] && \ + $(SED) \ + -e '/^[[:space:]]*#[[:space:]]*EXTERNAL PROGRAMS:/,/^$$/!d' \ + -e '/EXTERNAL PROGRAMS/d' \ + -e '/^$$/d' \ + -e '/^[[:space:]]*#/i\ '\ + -e 's/^[[:space:]]*#[[:space:]][^=]*//' \ + $(this_file) $(if $1,> '$1',) || \ + $(ECHO) "Cannot determine the name of this makefile." +endef + +# If they misspell gray, it should still work. +GRAY ?= $(call get-default,$(GREY),) + +# +# Utility Functions and Definitions +# + +# While not exactly a make function, this vim macro is useful. It takes a +# verbatim sed script and converts each line to something suitable in a command +# context. Just paste the script's contents into the editor, yank this into a +# register (starting at '0') and run the macro once for each line of the +# original script: +# +# 0i -e :s/\$/$$/eg :s/'/'"'"'/eg ^Ela'A' \:noh j + +# don't call this directly - it is here to avoid calling wildcard more than +# once in remove-files. +remove-files-helper = $(if $1,$(RM) $1,$(sh_true)) + +# $(call remove-files,file1 file2) +remove-files = $(call remove-files-helper,$(wildcard $1)) + +# Removes all cleanable files in the given list +# $(call clean-files,file1 file2 file3 ...) +# Works exactly like remove-files, but filters out files in $(neverclean) +clean-files = \ + $(call remove-files-helper,$(call cleanable-files,$(wildcard $1))) + +# Outputs all generated files to STDOUT, along with some others that are +# created by these (e.g., .idx files end up producing .ilg and .ind files). +# Discovered by reading *.fls OUTPUT lines and producing corresponding .ind +# filenames as needed. +# +# $(call get-generated-names,<source recorder file (*.fls)>) +define get-generated-names +[ -f '$1' ] && \ +$(SED) \ + -e '/^OUTPUT /{' \ + -e ' s///' \ + -e ' p' \ + -e ' s/\.idx/\.ind/p' \ + -e ' s/\.ind/\.ilg/p' \ + -e '}' \ + -e 'd' \ + '$1' \ +| $(SORT) | $(UNIQ) +endef + +# This removes files without checking whether they are there or not. This +# sometimes has to be used when the file is created by a series of shell +# commands, but there ends up being a race condition: make doesn't know about +# the file generation as quickly as the system does, so $(wildcard ...) doesn't +# work right. Blech. +# $(call remove-temporary-files,filenames) +remove-temporary-files = $(if $1,$(RM) $1,:) + +# Create an identifier from a file name +# $(call cleanse-filename,filename) +cleanse-filename = $(subst .,_,$(subst /,__,$1)) + +# Escape dots +# $(call escape-dots,str) +escape-dots = $(subst .,\\.,$1) + +# Test that a file exists +# $(call test-exists,file) +test-exists = [ -e '$1' ] + +# $(call move-files,source,destination) +move-if-exists = $(call test-exists,$1) && $(MV) '$1' '$2' + +# Copy file1 to file2 only if file2 doesn't exist or they are different +# $(call copy-if-different,sfile,dfile) +copy-if-different = $(call test-different,$1,$2) && $(CP) '$1' '$2' +copy-if-exists = $(call test-exists,$1) && $(CP) '$1' '$2' +move-if-different = $(call test-different,$1,$2) && $(MV) '$1' '$2' +replace-if-different-and-remove = \ + $(call test-different,$1,$2) \ + && $(MV) '$1' '$2' \ + || $(call remove-files,'$1') + +# Note that $(DIFF) returns success when the files are the SAME.... +# $(call test-different,sfile,dfile) +test-different = ! $(DIFF) -q '$1' '$2' >/dev/null 2>&1 +test-exists-and-different = \ + $(call test-exists,$2) && $(call test-different,$1,$2) + +# Return value 1, or value 2 if value 1 is empty +# $(call get-default,<possibly empty arg>,<default value if empty>) +get-default = $(if $1,$1,$2) + +# Copy a file and log what's going on +# $(call copy-with-logging,<source>,<target>) +define copy-with-logging +if [ -d '$2/' ]; then \ + if $(CP) '$1' '$2/'; then \ + $(ECHO) "$(C_INFO)Copied '$1' to '$2/'$(C_RESET)"; \ + else \ + $(ECHO) "$(C_ERROR)Failed to copy '$1' to '$2/'$(C_RESET)"; \ + fi; \ +fi +endef + +# Gives a reassuring message about the failure to find include files +# $(call include-message,<list of include files>) +define include-message +$(strip \ +$(if $(filter-out $(wildcard $1),$1),\ + $(shell $(ECHO) \ + "$(C_INFO)NOTE: You may ignore warnings about the"\ + "following files:" >&2;\ + $(ECHO) >&2; \ + $(foreach s,$(filter-out $(wildcard $1),$1),$(ECHO) ' $s' >&2;)\ + $(ECHO) "$(C_RESET)" >&2) +)) +endef +# Characters that are hard to specify in certain places +space := $(empty) $(empty) +colon := \: +comma := , + +# Useful shell definitions +sh_true := : +sh_false := ! : + +# Clear out the standard interfering make suffixes +.SUFFIXES: + +# Turn off forceful rm (RM is usually mapped to rm -f) +ifdef SAFE_RM +RM := rm +endif + +# Turn command echoing back on with VERBOSE=1 +ifndef VERBOSE +QUIET := @ +endif + +# Turn on shell debugging with SHELL_DEBUG=1 +# (EVERYTHING is echoed, even $(shell ...) invocations) +ifdef SHELL_DEBUG +SHELL += -x +endif + +# Get the name of this makefile (always right in 3.80, often right in 3.79) +# This is only really used for documentation, so it isn't too serious. +ifdef MAKEFILE_LIST +this_file := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) +else +this_file := $(wildcard GNUmakefile makefile Makefile) +endif + +# Terminal color definitions + +REAL_TPUT := $(if $(NO_COLOR),,$(shell $(WHICH) $(TPUT))) + +# $(call get-term-code,codeinfo) +# e.g., +# $(call get-term-code,setaf 0) +get-term-code = $(if $(REAL_TPUT),$(shell $(REAL_TPUT) $1),) + +black := $(call get-term-code,setaf 0) +red := $(call get-term-code,setaf 1) +green := $(call get-term-code,setaf 2) +yellow := $(call get-term-code,setaf 3) +blue := $(call get-term-code,setaf 4) +magenta := $(call get-term-code,setaf 5) +cyan := $(call get-term-code,setaf 6) +white := $(call get-term-code,setaf 7) +bold := $(call get-term-code,bold) +uline := $(call get-term-code,smul) +reset := $(call get-term-code,sgr0) + +# +# User-settable definitions +# +LATEX_COLOR_WARNING ?= magenta +LATEX_COLOR_ERROR ?= red +LATEX_COLOR_INFO ?= green +LATEX_COLOR_UNDERFULL ?= magenta +LATEX_COLOR_OVERFULL ?= red bold +LATEX_COLOR_PAGES ?= bold +LATEX_COLOR_BUILD ?= cyan +LATEX_COLOR_GRAPHIC ?= yellow +LATEX_COLOR_DEP ?= green +LATEX_COLOR_SUCCESS ?= green bold +LATEX_COLOR_FAILURE ?= red bold + +# Gets the real color from a simple textual definition like those above +# $(call get-color,ALL_CAPS_COLOR_NAME) +# e.g., $(call get-color,WARNING) +get-color = $(subst $(space),,$(foreach c,$(LATEX_COLOR_$1),$($c))) + +# +# STANDARD COLORS +# +C_WARNING := $(call get-color,WARNING) +C_ERROR := $(call get-color,ERROR) +C_INFO := $(call get-color,INFO) +C_UNDERFULL := $(call get-color,UNDERFULL) +C_OVERFULL := $(call get-color,OVERFULL) +C_PAGES := $(call get-color,PAGES) +C_BUILD := $(call get-color,BUILD) +C_GRAPHIC := $(call get-color,GRAPHIC) +C_DEP := $(call get-color,DEP) +C_SUCCESS := $(call get-color,SUCCESS) +C_FAILURE := $(call get-color,FAILURE) +C_RESET := $(reset) + +# +# PRE-BUILD TESTS +# + +# Check that clean targets are not combined with other targets (weird things +# happen, and it's not easy to fix them) +hascleangoals := $(if $(sort $(filter clean clean-%,$(MAKECMDGOALS))),1) +hasbuildgoals := $(if $(sort $(filter-out clean clean-%,$(MAKECMDGOALS))),1) +ifneq "$(hasbuildgoals)" "" +ifneq "$(hascleangoals)" "" +$(error $(C_ERROR)Clean and build targets specified together$(C_RESET))) +endif +endif + +# +# VARIABLE DECLARATIONS +# + +# Names of sed scripts that morph gnuplot files -- only the first found is used +GNUPLOT_SED := global-gpi.sed gnuplot.sed +GNUPLOT_GLOBAL := global._include_.gpi gnuplot.global + +ifneq "$(strip $(BUILD_STRATEGY))" "pdflatex" +default_graphic_extension ?= eps +latex_build_program ?= $(LATEX) +build_target_extension ?= dvi +hyperref_driver_pattern ?= hdvips +hyperref_driver_error ?= Using dvips: specify ps2pdf in the hyperref options. +else +default_graphic_extension ?= pdf +latex_build_program ?= $(PDFLATEX) +build_target_extension ?= pdf +hyperref_driver_pattern ?= hpdf.* +hyperref_driver_error ?= Using pdflatex: specify pdftex in the hyperref options (or leave it blank). +endif + +# Files of interest +all_files.tex ?= $(wildcard *.tex) +all_files.tex.sh ?= $(wildcard *.tex.sh) +all_files.tex.pl ?= $(wildcard *.tex.pl) +all_files.tex.py ?= $(wildcard *.tex.py) +all_files.rst ?= $(wildcard *.rst) +all_files.fig ?= $(wildcard *.fig) +all_files.gpi ?= $(wildcard *.gpi) +all_files.dot ?= $(wildcard *.dot) +all_files.xvg ?= $(wildcard *.xvg) +all_files.svg ?= $(wildcard *.svg) +all_files.png ?= $(wildcard *.png) +all_files.jpg ?= $(wildcard *.jpg) +all_files.eps.gz ?= $(wildcard *.eps.gz) +all_files.eps ?= $(wildcard *.eps) + +# Utility function for obtaining all files not specified in $(neverclean) +# $(call cleanable-files,file1 file2 file3 ...) +# Returns the list of files that is not in $(wildcard $(neverclean)) +cleanable-files = $(filter-out $(wildcard $(neverclean)), $1) + +# Utility function for getting all .$1 files that are to be ignored +# * files listed in $(includes.$1) +# * files not listed in $(onlysources.$1) if it is defined +ignore_files = \ + $(includes.$1) \ + $(if $(onlysources.$1),$(filter-out $(onlysources.$1), $(all_files.$1))) + +# Patterns to never be allowed as source targets +ignore_patterns := %._include_ + +# Patterns allowed as source targets but not included in 'all' builds +nodefault_patterns := %._nobuild_ $(ignore_patterns) + +# Utility function for getting targets suitable building +# $(call filter-buildable,suffix) +filter-buildable = \ + $(filter-out $(call ignore_files,$1) \ + $(addsuffix .$1,$(ignore_patterns)),$(all_files.$1)) + +# Utility function for getting targets suitable for 'all' builds +# $(call filter-default,suffix) +filter-default = \ + $(filter-out $(call ignore_files,$1) \ + $(addsuffix .$1,$(nodefault_patterns)),$(all_files.$1)) + +# Top level sources that can be built even when they are not by default +files.tex := $(call filter-buildable,tex) +files.tex.sh := $(call filter-buildable,tex.sh) +files.tex.pl := $(call filter-buildable,tex.pl) +files.tex.py := $(call filter-buildable,tex.py) +files.rst := $(call filter-buildable,rst) +files.gpi := $(call filter-buildable,gpi) +files.dot := $(call filter-buildable,dot) +files.fig := $(call filter-buildable,fig) +files.xvg := $(call filter-buildable,xvg) +files.svg := $(call filter-buildable,svg) +files.png := $(call filter-buildable,png) +files.jpg := $(call filter-buildable,jpg) +files.eps.gz := $(call filter-buildable,eps.gz) + +# Make all pstex targets secondary. The pstex_t target requires the pstex +# target, and nothing else really depends on it, so it often gets deleted. +# This avoids that by allowing *all* fig files to be pstex targets, which is +# perfectly valid and causes no problems even if they're going to become eps +# files in the end. +.SECONDARY: $(patsubst %.fig,%.pstex,$(files.fig)) + +# Top level sources that are built by default targets +default_files.tex := $(call filter-default,tex) +default_files.tex.sh := $(call filter-default,tex.sh) +default_files.tex.pl := $(call filter-default,tex.pl) +default_files.tex.py := $(call filter-default,tex.py) +default_files.rst := $(call filter-default,rst) +default_files.gpi := $(call filter-default,gpi) +default_files.dot := $(call filter-default,dot) +default_files.fig := $(call filter-default,fig) +default_files.xvg := $(call filter-default,xvg) +default_files.svg := $(call filter-default,svg) +default_files.png := $(call filter-default,png) +default_files.jpg := $(call filter-default,jpg) +default_files.eps.gz := $(call filter-default,eps.gz) + +# Utility function for creating larger lists of files +# $(call concat-files,suffixes,[prefix]) +concat-files = $(foreach s,$1,$($(if $2,$2_,)files.$s)) + +# Useful file groupings +all_files_source := $(call concat-files,tex,all) +all_files_scripts := $(call concat-files,tex.sh tex.pl tex.py rst,all) + +.PHONY: $(all_files_scripts) + +default_files_source := $(call concat-files,tex,default) +default_files_scripts := $(call concat-files,tex.sh tex.pl tex.py rst,default) + +files_source := $(call concat-files,tex) +files_scripts := $(call concat-files,tex.sh tex.pl tex.py rst) + +# Utility function for obtaining stems +# $(call get-stems,suffix,[prefix]) +get-stems = $(sort $($(if $2,$2_,)files.$1:%.$1=%)) + +# List of all stems (including ._include_ and ._nobuild_ file stems) +all_stems.tex := $(call get-stems,tex,all) +all_stems.tex.sh := $(call get-stems,tex.sh,all) +all_stems.tex.pl := $(call get-stems,tex.pl,all) +all_stems.tex.py := $(call get-stems,tex.py,all) +all_stems.rst := $(call get-stems,rst,all) +all_stems.fig := $(call get-stems,fig,all) +all_stems.gpi := $(call get-stems,gpi,all) +all_stems.dot := $(call get-stems,dot,all) +all_stems.xvg := $(call get-stems,xvg,all) +all_stems.svg := $(call get-stems,svg,all) +all_stems.png := $(call get-stems,png,all) +all_stems.jpg := $(call get-stems,jpg,all) +all_stems.eps.gz := $(call get-stems,eps.gz,all) +all_stems.eps := $(call get-stems,eps,all) + +# List of all default stems (all default PDF targets): +default_stems.tex := $(call get-stems,tex,default) +default_stems.tex.sh := $(call get-stems,tex.sh,default) +default_stems.tex.pl := $(call get-stems,tex.pl,default) +default_stems.tex.py := $(call get-stems,tex.py,default) +default_stems.rst := $(call get-stems,rst,default) +default_stems.fig := $(call get-stems,fig,default) +default_stems.gpi := $(call get-stems,gpi,default) +default_stems.dot := $(call get-stems,dot,default) +default_stems.xvg := $(call get-stems,xvg,default) +default_stems.svg := $(call get-stems,svg,default) +default_stems.png := $(call get-stems,png,default) +default_stems.jpg := $(call get-stems,jpg,default) +default_stems.eps.gz := $(call get-stems,eps.gz,default) + +# List of all stems (all possible bare PDF targets created here): +stems.tex := $(call get-stems,tex) +stems.tex.sh := $(call get-stems,tex.sh) +stems.tex.pl := $(call get-stems,tex.pl) +stems.tex.py := $(call get-stems,tex.py) +stems.rst := $(call get-stems,rst) +stems.fig := $(call get-stems,fig) +stems.gpi := $(call get-stems,gpi) +stems.dot := $(call get-stems,dot) +stems.xvg := $(call get-stems,xvg) +stems.svg := $(call get-stems,svg) +stems.png := $(call get-stems,png) +stems.jpg := $(call get-stems,jpg) +stems.eps.gz := $(call get-stems,eps.gz) + +# Utility function for creating larger lists of stems +# $(call concat-stems,suffixes,[prefix]) +concat-stems = $(sort $(foreach s,$1,$($(if $2,$2_,)stems.$s))) + +# The most likely to be source but not finished product go first +graphic_source_extensions := fig \ + gpi \ + xvg \ + svg \ + dot \ + eps.gz + +ifneq "$(strip $(BUILD_STRATEGY))" "pdflatex" +graphic_source_extensions += png jpg +graphic_target_extensions := eps ps +else +graphic_source_extensions += eps +graphic_target_extensions := pdf png jpg mps tif +endif + +all_stems_source := $(call concat-stems,tex,all) +all_stems_script := $(call concat-stems,tex.sh tex.pl tex.py rst,all) +all_stems_graphic := $(call concat-stems,$(graphic_source_extensions),all) +all_stems_ss := $(sort $(all_stems_source) $(all_stems_script)) +all_stems_sg := $(sort $(all_stems_script)) +all_stems_ssg := $(sort $(all_stems_ss)) + +default_stems_source := $(call concat-stems,tex,default) +default_stems_script := $(call concat-stems,tex.sh tex.pl tex.py rst,default) +default_stems_ss := $(sort $(default_stems_source) $(default_stems_script)) +default_stems_sg := $(sort $(default_stems_script)) +default_stems_ssg := $(sort $(default_stems_ss)) + +stems_source := $(call concat-stems,tex) +stems_script := $(call concat-stems,tex.sh tex.pl tex.py rst) +stems_graphic := $(call concat-stems,$(graphic_source_extensions)) +stems_gg := $(sort $(stems_graphic)) +stems_ss := $(sort $(stems_source) $(stems_script)) +stems_sg := $(sort $(stems_script)) +stems_ssg := $(sort $(stems_ss)) + +# Calculate names that can generate the need for an include file. We can't +# really do this with patterns because it's too easy to screw up, so we create +# an exhaustive list. +allowed_source_suffixes := \ + pdf \ + ps \ + dvi \ + ind \ + nls \ + bbl \ + aux \ + aux.make \ + d \ + auxbbl.make \ + _graphics \ + _show +allowed_source_patterns := $(addprefix %.,$(allowed_source_suffixes)) + +allowed_graphic_suffixes := \ + pdf \ + eps \ + gpihead.make \ + gpi.d +allowed_graphic_patterns := $(addprefix %.,$(allowed_graphic_suffixes)) + +# All targets allowed to build documents +allowed_source_targets := \ + $(foreach suff,$(allowed_source_suffixes),\ + $(addsuffix .$(suff),$(stems_ssg))) + +# All targets allowed to build graphics +allowed_graphic_targets := \ + $(foreach suff,$(allowed_graphic_suffixes),\ + $(addsuffix .$(suff),$(stems_gg))) + +# All targets that build multiple documents (like 'all') +allowed_batch_source_targets := \ + all \ + all-pdf \ + all-ps \ + all-dvi \ + all-bbl \ + all-ind \ + all-gls \ + all-nls \ + show + +# All targets that build multiple graphics (independent of document) +allowed_batch_graphic_targets := \ + all-graphics \ + all-pstex \ + all-dot2tex \ + show-graphics + +# Now we figure out which stuff is available as a make target for THIS RUN. +real_goals := $(call get-default,$(filter-out _includes,$(MAKECMDGOALS)),\ + all) + +specified_source_targets := $(strip \ + $(filter $(allowed_source_targets) $(stems_ssg),$(real_goals)) \ + ) + +specified_batch_source_targets := $(strip \ + $(filter $(allowed_batch_source_targets),$(real_goals)) \ + ) + +specified_graphic_targets := $(strip \ + $(filter $(allowed_graphic_targets),$(real_goals)) \ + ) + +specified_batch_graphic_targets := $(strip \ + $(filter $(allowed_batch_graphic_targets),$(real_goals)) \ + ) + +specified_gpi_targets := $(patsubst %.gpi,%.$(default_graphic_extension),\ + $(filter $(patsubst %.$(default_graphic_extension),%.gpi,$(specified_graphic_targets)),\ + $(all_files.gpi)) \ + ) + +# Determine which .d files need including from the information gained above. +# This is done by first checking whether a batch target exists. If it does, +# then all *default* stems are used to create possible includes (nobuild need +# not apply for batch status). If no batch targets exist, then the individual +# targets are considered and appropriate includes are taken from them. +source_stems_to_include := \ + $(sort\ + $(if $(specified_batch_source_targets),\ + $(default_stems_ss),\ + $(foreach t,$(specified_source_targets),\ + $(foreach p,$(allowed_source_patterns),\ + $(patsubst $p,%,$(filter $p $(stems_ssg),$t)) \ + )) \ + )) + +# Determine which .gpi.d files are needed using the above information. We +# first check whether a batch target is specified, then check individual +# graphics that may have been specified. +graphic_stems_to_include := \ + $(sort\ + $(if $(specified_batch_graphic_targets),\ + $(default_stems.gpi),\ + $(foreach t,$(specified_gpi_targets),\ + $(foreach p,$(allowed_graphic_patterns),\ + $(patsubst $p,%,$(filter $p,$t)) \ + )) \ + )) + +# All dependencies for the 'all' targets +all_pdf_targets := $(addsuffix .pdf,$(stems_ssg)) +all_ps_targets := $(addsuffix .ps,$(stems_ssg)) +all_dvi_targets := $(addsuffix .dvi,$(stems_ssg)) +all_tex_targets := $(addsuffix .tex,$(stems_sg)) +all_d_targets := $(addsuffix .d,$(stems_ssg)) +all_graphics_targets := $(addsuffix .$(default_graphic_extension),$(stems_gg)) +intermediate_graphics_targets := $(if $(filter pdf,$(default_graphic_extension)),$(addsuffix .eps,$(stems_gg)),) +all_pstex_targets := $(addsuffix .pstex_t,$(stems.fig)) +all_dot2tex_targets := $(addsuffix .dot_t,$(stems.dot)) + +all_known_graphics := $(sort $(all_graphics_targets) $(wildcard *.$(default_graphic_extension))) + +default_pdf_targets := $(addsuffix .pdf,$(default_stems_ss)) +ifneq "$(strip $(BUILD_STRATEGY))" "pdflatex" +default_ps_targets := $(addsuffix .ps,$(default_stems_ss)) +default_dvi_targets := $(addsuffix .dvi,$(default_stems_ss)) +pre_pdf_extensions := dvi ps +endif + +# Extensions generated by LaTeX invocation that can be removed when complete +rm_ext := \ + log *.log aux $(pre_pdf_extensions) pdf blg bbl out nav snm toc lof lot lol pfg \ + fls vrb idx ind ilg glg glo gls lox nls nlo nlg brf mtc maf brf +backup_patterns := *~ *.bak *.backup body.tmp head.tmp + +graph_stem := _graph + +# All LaTeX-generated files that can be safely removed + +rm_tex := \ + $(foreach e,$(rm_ext),$(addsuffix .$e,$(all_stems_source))) \ + $(foreach e,$(rm_ext) tex,$(addsuffix .$e,$(all_stems_sg))) \ + $(addsuffix .log,$(all_ps_targets) $(all_pdf_targets)) \ + $(addsuffix .*.log,$(stems_graphic)) + +# These are the files that will affect .gpi transformation for all .gpi files. +# +# Use only the first one found. Backward compatible values are at the end. +# Note that we use foreach, even though wildcard also returns a list, to ensure +# that the order in the uppercase variables is preserved. Directory listings +# provide no such guarantee, so we avoid relying on them. +gpi_sed := $(strip \ + $(firstword $(foreach f,$(GNUPLOT_SED),$(wildcard $f)))) +gpi_global := $(strip \ + $(firstword $(foreach f,$(GNUPLOT_GLOBAL),$(wildcard $f)))) + +# +# Functions used in generating output +# + +# Outputs all source dependencies to stdout. The first argument is the file to +# be parsed, the second is a list of files that will show up as dependencies in +# the new .d file created here. +# +# NOTE: BSD sed does not understand \|, so we have to do something more +# clunky to extract suitable extensions. +# +# Also, we do a little bit of funny rewriting up front (TARGETS=) to make sure +# that we can properly backslash-escape spaces in file names (e.g, on Cygwin +# for tex distributions that have "Program Files" in their name). +# +# $(call get-inputs,<parsed file>,<target files>) +define get-inputs +$(SED) \ +-e '/^INPUT/!d' \ +-e 's!^INPUT \(\./\)\{0,1\}!!' \ +-e 's/[[:space:]]/\\ /g' \ +-e 's/\(.*\)\.aux$$/\1.tex/' \ +-e '/\.tex$$/b addtargets' \ +-e '/\.cls$$/b addtargets' \ +-e '/\.sty$$/b addtargets' \ +-e '/\.pstex_t$$/b addtargets' \ +-e '/\.dot_t$$/b addtargets' \ +-e 'd' \ +-e ':addtargets' \ +-e 's/^/$2: /' \ +$1 | $(SORT) | $(UNIQ) +endef + +# $(call get-missing-inputs,<log file>,<target files>) +define get-missing-inputs +$(SED) \ +-e '$$ b para' \ +-e '/^$$/b para' \ +-e 'H' \ +-e 'd' \ +-e ':para' \ +-e 'x' \ +-e '/^$$/d' \ +-e 's/^\n*//' \ +-e '/^! LaTeX Error: File /{' \ +-e ' s/^/::DOUBLE_PARAGRAPH::/' \ +-e ' h' \ +-e ' d' \ +-e '}' \ +-e 's/^::DOUBLE_PARAGRAPH:://' \ +-e '/Default extension: /!d' \ +-e 's/[[:space:]]\{1,\}/ /g' \ +-e 's/\n\{1,\}/ /g' \ +-e 's/^.*File `//' \ +-e 's/'"'"' not found\..*//' \ +-e '/\.tex/!s/$$/.tex/' \ +-e 's/[[:space:]]/\\ /g' \ +-e 'h' \ +-e 's/.*/# MISSING input "&" - (presence of comment affects build)/' \ +-e 'p' \ +-e 's/.*//' \ +-e 'x' \ +-e 's/^/$2: /' \ +$1 | $(SORT) | $(UNIQ) +endef + +# Get source file for specified graphics stem. +# +# $(call graphics-source,<stem>) +define graphics-source +$(strip $(firstword \ + $(wildcard \ + $(addprefix $1.,\ + $(graphic_source_extensions))) \ + $1 \ +)) +endef + +# Get the target file for the specified graphics file/stem +# +# $(call graphics-target,<stem>) +define graphics-target +$(strip $(if $(filter $(addprefix %.,$(graphic_target_extensions)),$1), $1, + $(firstword $(patsubst $(addprefix %.,$(graphic_source_extensions) $(graphic_target_extensions)), %, $1).$(default_graphic_extension) $1.$(default_graphic_extension)))) +endef + +# Outputs all of the graphical dependencies to stdout. The first argument is +# the stem of the source file being built, the second is a list of suffixes +# that will show up as dependencies in the generated .d file. +# +# Note that we try to escape spaces in filenames where possible. We have to do +# it with three backslashes so that as the name percolates through the makefile +# it eventually ends up with the proper escaping when the build rule is found. +# Ugly, but it appears to work. Note that graphicx doesn't allow filenames +# with spaces, so this could in many ways be moot unless you're using something +# like grffile. +# +# For pdflatex, we really need the missing file to be specified without an +# extension, otherwise compilation barfs on the first missing file. Truly +# annoying, but there you have it. +# +# It turns out that the graphics errors, although they have lines with empty +# space, are only made of two paragraphs. So, we just use some sed magic to +# get everything into paragraphs, detect when it's a paragraph that interests +# us, and double it up. Then we get the filename only if we're missing +# extensions (a sign that it's graphicx complaining). +# +# $(call get-graphics,<target file stem>) +#.log,$(addprefix $*.,d $(build_target_extension) _graphics) +define get-graphics +$(SED) \ +-e '$$ b para' \ +-e '/^$$/b para' \ +-e 'H' \ +-e 'd' \ +-e ':para' \ +-e 'x' \ +-e '/^$$/d' \ +-e 's/^\n*//' \ +-e '/^! LaTeX Error: File `/{' \ +-e ' s/^/::DOUBLE_PARAGRAPH::/' \ +-e ' h' \ +-e ' d' \ +-e '}' \ +-e 's/^::DOUBLE_PARAGRAPH:://' \ +-e '/could not locate the file with any of these extensions:/{' \ +-e ' s/\n\{1,\}/ /g' \ +-e ' s/[[:space:]]\{1,\}/ /g' \ +-e ' s/^.*File `//' \ +-e ' s/'"'"' not found\..*//' \ +-e ' h' \ +-e ' s/.*/# MISSING stem "&" - (presence of comment affects build)/' \ +-e ' p' \ +-e ' g' \ +-e ' b addtargets' \ +-e '}' \ +-e '/.*File: \(.*\) Graphic file (type [^)]*).*/{' \ +-e ' s//\1/' \ +-e ' b addtargets' \ +-e '}' \ +-e 'd' \ +-e ':addtargets' \ +-e 's/[[:space:]]/\\\\\\&/g' \ +-e 'h' \ +-e 's/.*/-include &.gpi.d/' \ +-e 'p' \ +-e 'g' \ +-e 's/.*/$(addprefix $1,.d): $$$$(call graphics-source,&)/' \ +-e 'p' \ +-e 's/.*//' \ +-e 'x' \ +-e 's/.*/$(addprefix $1.,$(build_target_extension) _graphics): $$$$(call graphics-target,&)/' \ +-e 'p' \ +-e 'd' \ +$*.log +endef + +# Checks for build failure due to pstex inclusion, and gives instructions. +# +# $(call die-on-pstexs,<parsed file>) +define die-on-pstexs +if $(EGREP) -q '^! LaTeX Error: File .*\.pstex.* not found' $1; then \ + $(ECHO) "$(C_ERROR)Missing pstex_t file(s)$(C_RESET)"; \ + $(ECHO) "$(C_ERROR)Please run$(C_RESET)"; \ + $(ECHO) "$(C_ERROR) make all-pstex$(C_RESET)"; \ + $(ECHO) "$(C_ERROR)before proceeding.$(C_RESET)"; \ + exit 1; \ +fi +endef + +# Checks for build failure due to dot2tex, and gives instructions. +# +# $(call die-on-dot2tex,<parsed file>) +define die-on-dot2tex +if $(EGREP) -q ' LaTeX Error: File .*\.dot_t.* not found' $1; then \ + $(ECHO) "$(C_ERROR)Missing dot_t file(s)$(C_RESET)"; \ + $(ECHO) "$(C_ERROR)Please run$(C_RESET)"; \ + $(ECHO) "$(C_ERROR) make all-dot2tex$(C_RESET)"; \ + $(ECHO) "$(C_ERROR)before proceeding.$(C_RESET)"; \ + exit 1; \ +fi +endef + +# Checks for the existence of a .aux file, and dies with an error message if it +# isn't there. Note that we pass the file stem in, not the full filename, +# e.g., to check for foo.aux, we call it thus: $(call die-on-no-aux,foo) +# +# $(call die-on-no-aux,<aux stem>) +define die-on-no-aux +if [ ! -e '$1.aux' ]; then \ + $(call colorize-latex-errors,$1.log); \ + exit 1; \ +fi +endef + +# Outputs all index files to stdout. Arg 1 is the source file stem, arg 2 is +# the list of targets for the discovered dependency. +# +# $(call get-log-index,<log file stem>,<target files>) +define get-log-index +$(SED) \ +-e 's/^No file \(.*\.ind\)\.$$/TARGETS=\1/' \ +-e 's/^No file \(.*\.[gn]ls\)\.$$/TARGETS=\1/' \ +-e 's/[[:space:]]/\\&/g' \ +-e '/^TARGETS=/{' \ +-e ' h' \ +-e ' s/^TARGETS=/$2: /p' \ +-e ' g' \ +-e ' s/^TARGETS=\(.*\)/\1: $1.tex/p' \ +-e '}' \ +-e 'd' \ +'$1.log' | $(SORT) | $(UNIQ) +endef + + +# Outputs all bibliography files to stdout. Arg 1 is the source stem, arg 2 is +# a list of targets for each dependency found. +# +# The script kills all lines that do not contain bibdata. Remaining lines have +# the \bibdata macro and delimiters removed to create a dependency list. A +# trailing comma is added, then all adjacent commas are collapsed into a single +# comma. Then commas are replaced with the string .bib[space], and the +# trailing space is killed off. Finally, all filename spaces are escaped. +# This produces a list of space-delimited .bib filenames, which is what the +# make dep file expects to see. +# +# Note that we give kpsewhich a bogus argument so that a failure of sed to +# produce output will not cause an error. +# +# $(call get-bibs,<aux file>,<targets>) +define get-bibs +$(SED) \ +-e '/^\\bibdata/!d' \ +-e 's/\\bibdata{\([^}]*\)}/\1,/' \ +-e 's/,\{2,\}/,/g' \ +-e 's/[[:space:]]/\\&/g' \ +-e 's/,/.bib /g' \ +-e 's/ \{1,\}$$//' \ +$1 | $(XARGS) $(KPSEWHICH) '#######' | \ +$(SED) \ +-e 's/^/$2: /' | \ +\$(SORT) | $(UNIQ) +endef + +# Makes a an aux file that only has stuff relevant to the target in it +# $(call make-auxtarget-file,<flattened-aux>,<new-aux>) +define make-auxtarget-file +$(SED) \ +-e '/^\\newlabel/!d' \ +$1 > $2 +endef + +# Makes an aux file that only has stuff relevant to the bbl in it +# $(call make-auxbbl-file,<flattened-aux>,<new-aux>) +define make-auxbbl-file +$(SED) \ +-e '/^\\newlabel/d' \ +$1 > $2 +endef + +# Makes a .gpi.d file from a .gpi file +# $(call make-gpi-d,<.gpi>,<.gpi.d>) +define make-gpi-d +$(ECHO) '# vim: ft=make' > $2; \ +$(ECHO) 'ifndef INCLUDED_$(call cleanse-filename,$2)' >> $2; \ +$(ECHO) 'INCLUDED_$(call cleanse-filename,$2) := 1' >> $2; \ +$(call get-gpi-deps,$1,$(addprefix $(2:%.gpi.d=%).,$(GNUPLOT_OUTPUT_EXTENSION) gpi.d)) >> $2; \ +$(ECHO) 'endif' >> $2; +endef + +# Parse .gpi files for data and loaded dependencies, output to stdout +# +# The sed script here tries to be clever about obtaining valid +# filenames from the gpi file. It assumes that the plot command starts its own +# line, which is not too difficult a constraint to satisfy. +# +# This command script also generates 'include' directives for every 'load' +# command in the .gpi file. The load command must appear on a line by itself +# and the file it loads must have the suffix .gpi. If you don't want it to be +# compiled when running make graphics, then give it a suffix of ._include_.gpi. +# +# $(call get-gpi-deps,<gpi file>,<targets>) +define get-gpi-deps +$(SED) \ +-e '/^[[:space:]]*s\{0,1\}plot/,/[^\\]$$/{' \ +-e ' H' \ +-e ' /[^\\]$$/{' \ +-e ' s/.*//' \ +-e ' x' \ +-e ' s/\\\{0,1\}\n//g' \ +-e ' s/^[[:space:]]*s\{0,1\}plot[[:space:]]*\(\[[^]]*\][[:space:]]*\)*/,/' \ +-e ' s/[[:space:]]*\(['\''"][^'\''"]*['\''"]\)\{0,1\}[^,]*/\1/g' \ +-e ' s/,['\''"]-\{0,1\}['\''"]//g' \ +-e ' s/[,'\''"]\{1,\}/ /g' \ +-e ' s!.*!$2: &!' \ +-e ' p' \ +-e ' }' \ +-e ' d' \ +-e '}' \ +-e 's/^[[:space:]]*load[[:space:]]*['\''"]\([^'\''"]*\.gpi\)['\''"].*$$/-include \1.d/p' \ +-e 'd' \ +$1 +endef + +# Colorizes real, honest-to-goodness LaTeX errors that can't be overcome with +# recompilation. +# +# Note that we only ignore file not found errors for things that we know how to +# build, like graphics files. +# +# $(call colorize-latex-errors,<log file>) +define colorize-latex-errors +$(SED) \ +-e '$$ b para' \ +-e '/^$$/b para' \ +-e 'H' \ +-e 'd' \ +-e ':para' \ +-e 'x' \ +-e '/^$$/d' \ +-e 's/^\n*//' \ +-e '/^! LaTeX Error: File /{' \ +-e ' s/^/::DOUBLE_PARAGRAPH::/' \ +-e ' h' \ +-e ' d' \ +-e '}' \ +-e 's/^::DOUBLE_PARAGRAPH:://' \ +-e '/could not locate the file with any of these extensions:/d' \ +-e '/Missing .begin.document/{' \ +-e ' h' \ +-e ' s/.*/Are you trying to build an include file?/' \ +-e ' x' \ +-e ' G' \ +-e '}' \ +-e '/ LaTeX Error: Cannot determine size/d' \ +-e 's/.* LaTeX Error .*/$(C_ERROR)&$(C_RESET)/p' \ +-e 's/Error: pdflatex (file .*/$(C_ERROR)& - try specifying it without an extension$(C_RESET)/p' \ +-e '/.*\*hyperref using.*driver \(.*\)\*.*/{' \ +-e ' s//\1/' \ +-e ' /^$(hyperref_driver_pattern)$$/!{' \ +-e ' s/.*//' \ +-e ' p' \ +-e ' s/.*/$(C_ERROR)--- Using incorrect driver for hyperref! ---$(C_RESET)/' \ +-e ' p' \ +-e ' s/.*/$(C_ERROR)$(hyperref_driver_error)$(C_RESET)/' \ +-e ' p' \ +-e ' }' \ +-e ' d' \ +-e '}' \ +-e '/ LaTeX Error: Unknown graphics extension/{' \ +-e ' s/^/ /' \ +-e ' h' \ +-e ' s/.*/--- Graphics extension error:/' \ +-e ' G' \ +-e ' h' \ +-e ' s/.*/--- If you specified the extension explicitly in your .tex file, try removing it./' \ +-e ' H' \ +-e ' g' \ +-e ' s/.*/$(C_ERROR)&$(C_RESET)/' \ +-e ' p' \ +-e ' s/.*//' \ +-e ' h' \ +-e ' b' \ +-e '}' \ +-e 's/.*\(\n\{0,\}! .*\)/$(C_ERROR)\1$(C_RESET)/p' \ +-e 'd' \ +$1 +endef + +# Colorize Makeindex errors +define colorize-makeindex-errors +$(SED) \ +-e '/^!! /{' \ +-e ' N' \ +-e ' s/^.*$$/$(C_ERROR)&$(C_RESET)/' \ +-e ' p' \ +-e '}' \ +-e 'd' \ +$1 +endef + +# Colorize epstopdf errors +# +# $(call colorize-epstopdf-errors,<log file>) +define colorize-epstopdf-errors +$(SED) \ +-e '/^Error:/,/^Execution stack:/{' \ +-e ' /^Execution stack:/d' \ +-e ' s/.*/$(C_ERROR)&$(C_RESET)/' \ +-e ' p' \ +-e '}' \ +-e 'd' \ +$1 +endef + +# Colorize GNUplot errors +# +# $(call colorize-gnuplot-errors,<log file>) +define colorize-gnuplot-errors +$(SED) \ +-e '/, line [0-9]*:/!{' \ +-e ' H' \ +-e ' x' \ +-e ' s/.*\n\(.*\n.*\)$$/\1/' \ +-e ' x' \ +-e '}' \ +-e '/, line [0-9]*:/{' \ +-e ' H' \ +-e ' /unknown.*terminal type/{' \ +-e ' s/.*/--- Try changing the GNUPLOT_OUTPUT_EXTENSION variable to 'eps'./' \ +-e ' H' \ +-e ' }' \ +-e ' /gpihead/{' \ +-e ' s/.*/--- This could be a Makefile bug - contact the maintainer./' \ +-e ' H' \ +-e ' }' \ +-e ' g' \ +-e ' s/.*/$(C_ERROR)&$(C_RESET)/' \ +-e ' p' \ +-e '}' \ +-e '/^gnuplot>/,/^$$/{' \ +-e ' s/^gnuplot.*/$(C_ERROR)&/' \ +-e ' s/^$$/$(C_RESET)/' \ +-e ' p' \ +-e '}' \ +-e 'd' \ +$1 +endef + +# Colorize GraphViz errors +# +# $(call colorize-dot-errors,<log file>) +define colorize-dot-errors +$(SED) \ +-e '/^Error:/,/context:/s/.*/$(C_ERROR)&$(C_RESET)/p' \ +-e 's/^Warning:.*/$(C_WARNING)&$(C_RESET)/p' \ +-e 'd' \ +'$1' +endef + +# Get all important .aux files from the top-level .aux file and merges them all +# into a single file, which it outputs to stdout. +# +# $(call flatten-aux,<toplevel aux>,<output file>) +define flatten-aux +$(SED) \ +-e '/\\@input{\(.*\)}/{' \ +-e 's//\1/' \ +-e 's![.:]!\\&!g' \ +-e 'h' \ +-e 's!.*!\\:\\\\@input{&}:{!' \ +-e 'p' \ +-e 'x' \ +-e 's/\\././g' \ +-e 's/.*/r &/p' \ +-e 's/.*/d/p' \ +-e 's/.*/}/p' \ +-e 'd' \ +-e '}' \ +-e 'd' \ +'$1' > "$1.$$$$.sed.make"; \ +$(SED) -f "$1.$$$$.sed.make" '$1' > "$1.$$$$.make"; \ +$(SED) \ +-e '/^\\relax/d' \ +-e '/^\\bibcite/d' \ +-e 's/^\(\\newlabel{[^}]\{1,\}}\).*/\1/' \ +"$1.$$$$.make" | $(SORT) > '$2'; \ +$(call remove-temporary-files,$1.$$$$.make $1.$$$$.sed.make) +endef + +# Generate pdf from postscript +# +# Note that we don't just call ps2pdf, since there are so many versions of that +# script on various systems. Instead, we call the postscript interpreter +# directly. +# +# $(call ps2pdf,infile,outfile,[embed fonts]) +define ps2pdf + $(GS) \ + -dSAFER -dCompatibilityLevel=$(PS_COMPATIBILITY) \ + $(if $3,$(PS_EMBED_OPTIONS)) \ + -q -dNOPAUSE -dBATCH \ + -sDEVICE=pdfwrite -sstdout=%stderr \ + '-sOutputFile=$2' \ + -dSAFER -dCompatibilityLevel=$(PS_COMPATIBILITY) \ + $(if $3,$(PS_EMBED_OPTIONS)) \ + -c .setpdfwrite \ + -f '$1' +endef + +# Colorize LaTeX output. +# This uses a neat trick from the Sed & Awk Book from O'Reilly: +# 1) If a line has a single ending paren, delete it to make a blank line (so +# that we catch the first error, which is not always preceded by a blank +# line). +# 2) Ensure that the last line of the file gets appended to the hold buffer, +# and blank it out to trigger end-of-paragraph logic below. +# 3) When encountering a blank line (LaTeX output helpfully breaks output on +# newlines) +# a) swap the hold buffer (containing the paragraph) into the pattern buffer (putting a blank line into the hold buffer), +# b) remove the newline at the beginning (don't ask), +# c) apply any colorizing substitutions necessary to ensure happiness. +# d) get the newline out of the hold buffer and append it +# e) profit! (print) +# 4) Anything not colorized is deleted, unless in verbose mode. +color_tex := \ + $(SED) \ + -e '$${' \ + -e ' /^$$/!{' \ + -e ' H' \ + -e ' s/.*//' \ + -e ' }' \ + -e '}' \ + -e '/^$$/!{' \ + -e ' H' \ + -e ' d' \ + -e '}' \ + -e '/^$$/{' \ + -e ' x' \ + -e ' s/^\n//' \ + -e ' /Output written on /{' \ + -e ' s/.*Output written on \([^(]*\) (\([^)]\{1,\}\)).*/Success! Wrote \2 to \1/' \ + -e ' s/[[:digit:]]\{1,\}/$(C_PAGES)&$(C_RESET)/g' \ + -e ' s/Success!/$(C_SUCCESS)&$(C_RESET)/g' \ + -e ' s/to \(.*\)$$/to $(C_SUCCESS)\1$(C_RESET)/' \ + -e ' b end' \ + -e ' }' \ + -e ' / *LaTeX Error:.*/{' \ + -e ' s/.*\( *LaTeX Error:.*\)/$(C_ERROR)\1$(C_RESET)/' \ + -e ' b end' \ + -e ' }' \ + -e ' /.*Warning:.*/{' \ + -e ' s//$(C_WARNING)&$(C_RESET)/' \ + -e ' b end' \ + -e ' }' \ + -e ' /Underfull.*/{' \ + -e ' s/.*\(Underfull.*\)/$(C_UNDERFULL)\1$(C_RESET)/' \ + -e ' b end' \ + -e ' }' \ + -e ' /Overfull.*/{' \ + -e ' s/.*\(Overfull.*\)/$(C_OVERFULL)\1$(C_RESET)/' \ + -e ' b end' \ + -e ' }' \ + $(if $(VERBOSE),,-e ' d') \ + -e ' :end' \ + -e ' G' \ + -e '}' \ + +# Colorize BibTeX output. +color_bib := \ + $(SED) \ + -e 's/^Warning--.*/$(C_WARNING)&$(C_RESET)/' -e 't' \ + -e '/---/,/^.[^:]/{' \ + -e ' H' \ + -e ' /^.[^:]/{' \ + -e ' x' \ + -e ' s/\n\(.*\)/$(C_ERROR)\1$(C_RESET)/' \ + -e ' p' \ + -e ' s/.*//' \ + -e ' h' \ + -e ' d' \ + -e ' }' \ + -e ' d' \ + -e '}' \ + -e '/(.*error.*)/s//$(C_ERROR)&$(C_RESET)/' \ + $(if $(VERBOSE),,-e 'd') + + +# Make beamer output big enough to print on a full page. Landscape doesn't +# seem to work correctly. +enlarge_beamer = $(PSNUP) -l -1 -W128mm -H96mm -pletter + +# $(call test-run-again,<source stem>) +test-run-again = $(EGREP) -q '^(.*Rerun .*|No file $1\.[^.]+\.)$$' $1.log + +# This tests whether the build target commands should be run at all, from +# viewing the log file. +# $(call test-log-for-need-to-run,<source stem>) +define test-log-for-need-to-run +$(SED) \ +-e '/^No file $(call escape-dots,$1)\.aux\./d' \ +$1.log \ +| $(EGREP) -q '^(.*Rerun .*|No file $1\.[^.]+\.|No file .+\.tex\.|LaTeX Warning: File.*)$$' +endef + +# LaTeX invocations +# +# $(call latex,<tex file>,[<extra LaTeX args>]) +run-latex = $(latex_build_program) --interaction=batchmode $(if $2,$2,) $1 > /dev/null + +# $(call latex-color-log,<LaTeX stem>) +latex-color-log = $(color_tex) $1.log + +# $(call run-makeindex,<input>,<output>,<log>,<extra flags>) +define run-makeindex +success=1; \ +if ! $(MAKEINDEX) -q $1 -t $3 -o $2 $4 > /dev/null || $(EGREP) -q '^!!' $3; then \ + $(call colorize-makeindex-errors,$3); \ + $(RM) -f '$2'; \ + success=0; \ +fi; \ +[ "$$success" = "1" ] && $(sh_true) || $(sh_false); +endef + +# This runs the given script to generate output, and it uses MAKE_RESTARTS to +# ensure that it never runs it more than once for a particular root make +# invocation. +# +# $(call run-script,<interpreter>,<input>,<output>) +define run-script +[ ! -e '$2.cookie' ] && $(ECHO) "restarts=$(RESTARTS)" > $2.cookie && $(ECHO) "level=$(MAKELEVEL)" >> $2.cookie; \ +restarts=`$(SED) -n -e 's/^restarts=//p' $2.cookie`; \ +level=`$(SED) -n -e 's/^level=//p' $2.cookie`; \ +if $(EXPR) $(MAKELEVEL) '<=' $$level '&' $(RESTARTS) '<=' $$restarts >/dev/null; then \ + $(call echo-build,$2,$3,$(RESTARTS)-$(MAKELEVEL)); \ + $1 '$2' '$3'; \ + $(ECHO) "restarts=$(RESTARTS)" > '$2.cookie'; \ + $(ECHO) "level=$(MAKELEVEL)" >> '$2.cookie'; \ +fi +endef + +# BibTeX invocations +# +# $(call run-bibtex,<tex stem>) +run-bibtex = $(BIBTEX) $1 | $(color_bib) + + +# $(call convert-eps-to-pdf,<eps file>,<pdf file>,[gray]) +# Note that we don't use the --filter flag because it has trouble with bounding boxes that way. +define convert-eps-to-pdf +$(if $3,$(CAT) '$1' | $(call kill-ps-color) > '$1.cookie',$(CP) '$1' '$1.cookie'); \ +$(EPSTOPDF) '$1.cookie' --outfile='$2' > $1.log; \ +$(call colorize-epstopdf-errors,$1.log); +endef + +# $(call convert-gpi,<gpi file>,<output file>,[gray]) +# +define convert-gpi +$(ECHO) 'set terminal $(if $(filter %.pdf,$2),pdf enhanced,postscript enhanced eps)' \ +$(if $(filter %.pdf,$2),fsize ,)$(call get-default,$(strip \ +$(firstword \ + $(shell \ + $(SED) \ + -e 's/^\#\#FONTSIZE=\([[:digit:]]\{1,\}\)/\1/p' \ + -e 'd' \ + $1 $(strip $(gpi_global)) \ + ) \ +) \ +),$(if $(filter %.pdf,$2),$(DEFAULT_GPI_PDF_FONTSIZE),$(DEFAULT_GPI_EPS_FONTSIZE))) \ +$(strip $(if $3,monochrome,$(if \ +$(shell $(EGREP) '^\#\#[[:space:]]*GRAY[[:space:]]*$$' $< $(gpi_global)),\ +,color))) > $1head.make; \ +$(ECHO) 'set output "$2"' >> $1head.make; \ +$(if $(gpi_global),$(CAT) $(gpi_global) >> $1head.make;,) \ +fnames='$1head.make $1';\ +$(if $(gpi_sed),\ + $(SED) -f '$(gpi_sed)' $$fnames > $1.temp.make; \ + fnames=$1.temp.make;,\ +) \ +success=1; \ +if ! $(GNUPLOT) $$fnames 2>$1.log; then \ + $(call colorize-gnuplot-errors,$1.log); \ + success=0; \ +fi; \ +$(if $(gpi_sed),$(call remove-temporary-files,$1.temp.make);,) \ +$(call remove-temporary-files,$1head.make); \ +[ "$$success" = "1" ] && $(sh_true) || $(sh_false); +endef + +# Creation of .eps files from .png files +# +# The intermediate step of PNM (using NetPBM) produces much nicer output than +# ImageMagick's "convert" binary. I couldn't get the right combination of +# flags to make it look nice, anyway. +# +# To handle gray scale conversion, we pipe things through ppmtopgm in the +# middle. +# +# $(call convert-png,<png file>,<eps file>) +define convert-png +$(PNGTOPNM) "$1" \ + $(if $3,| $(PPMTOPGM),) \ + | $(PNMTOPS) -noturn \ + > "$2" +endef + +# Creation of .eps files from .jpg files +# +# Thanks to brubakee for this solution. +# +# Uses Postscript level 2 to avoid file size bloat +# $(call convert-jpg,<jpg file>,<eps file>) +define convert-jpg +$(CONVERT) $(if $3,-type Grayscale,) '$1' eps2:'$2' +endef + +# Creation of .eps files from .fig files +# $(call convert-fig,<fig file>,<output file>,[gray]) +convert-fig = $(FIG2DEV) -L $(if $(filter %.pdf,$2),pdf,eps) $(if $3,-N,) $1 $2 + +# Creation of .pstex files from .fig files +# $(call convert-fig-pstex,<fig file>,<pstex file>) +convert-fig-pstex = $(FIG2DEV) -L pstex $1 $2 > /dev/null 2>&1 + +# Creation of .pstex_t files from .fig files +# $(call convert-fig-pstex-t,<fig file>,<pstex file>,<pstex_t file>) +convert-fig-pstex-t = $(FIG2DEV) -L pstex_t -p $3 $1 $2 > /dev/null 2>&1 + +# Creation of .dot_t files from .dot files +# #(call convert-dot-tex,<dot file>,<dot_t file>) +convert-dot-tex = $(DOT2TEX) '$1' > '$2' + +# Converts svg files into .eps files +# +# $(call convert-svg,<svg file>,<eps file>,[gray]) +convert-svg = $(INKSCAPE) --export-eps='$2' '$1' + +# Converts xvg files into .eps files +# +# $(call convert-xvg,<xvg file>,<eps file>,[gray]) +convert-xvg = $(XMGRACE) '$1' -printfile - -hardcopy -hdevice $(if $3,-mono,) EPS > '$2' + +# Converts .eps.gz files into .eps files +# +# $(call convert-epsgz,<eps.gz file>,<eps file>,[gray]) +convert-epsgz = $(GUNZIP) -c '$1' $(if $3,| $(call kill-ps-color)) > '$2' + +# Converts .eps files into .eps files (usually a no-op, but can make grayscale) +# +# $(call convert-eps,<in file>,<out file>,[gray]) +convert-eps = $(if $3,$(call kill-ps-color) $1 > $2) + +# The name of the file containing special postscript commands for grayscale +gray_eps_file := gray.eps.make + +# Changes sethsbcolor and setrgbcolor calls in postscript to always produce +# grayscale. In general, this is accomplished by writing new versions of those +# functions into the user dictionary space, which is looked up before the +# global or system dictionaries (userdict is one of the permanent dictionaries +# in postscript and is not read-only like systemdict). +# +# For setrgbcolor, the weighted average of the triple is computed and the +# triple is replaced with three copies of that average before the original +# procedure is called: .299R + .587G + .114B +# +# For sethsbcolor, the color is first converted to RGB, then to grayscale by +# the new setrgbcolor operator as described above. Why is this done? +# Because simply using the value component will tend to make pure colors +# white, a very undesirable thing. Pure blue should not translate to white, +# but to some level of gray. Conversion to RGB does the right thing. It's +# messy, but it works. +# +# From +# http://en.wikipedia.org/wiki/HSV_color_space#Transformation_from_HSV_to_RGB, +# HSB = HSV (Value = Brightness), and the formula used to convert to RGB is +# as follows: +# +# Hi = int(floor(6 * H)) mod 6 +# f = 6 * H - Hi +# p = V(1-S) +# q = V(1-fS) +# t = V(1-(1-f)S) +# if Hi = 0: R G B <-- V t p +# if Hi = 1: R G B <-- q V p +# if Hi = 2: R G B <-- p V t +# if Hi = 3: R G B <-- p q V +# if Hi = 4: R G B <-- t p V +# if Hi = 5: R G B <-- V p q +# +# The messy stack-based implementation is below +# $(call create-gray-eps-file,filename) +define create-gray-eps-file +$(ECHO) -n -e '\ +/OLDRGB /setrgbcolor load def\n\ +/setrgbcolor {\n\ + .114 mul exch\n\ + .587 mul add exch\n\ + .299 mul add\n\ + dup dup\n\ + OLDRGB\n\ +} bind def\n\ +/OLDHSB /sethsbcolor load def\n\ +/sethsbcolor {\n\ + 2 index % H V S H\n\ + 6 mul floor cvi 6 mod % Hi V S H\n\ + 3 index % H Hi V S H\n\ + 6 mul % 6H Hi V S H\n\ + 1 index % Hi 6H Hi V S H\n\ + sub % f Hi V S H\n\ + 2 index 1 % 1 V f Hi V S H\n\ + 4 index % S 1 V f Hi V S H\n\ + sub mul % p f Hi V S H\n\ + 3 index 1 % 1 V p f Hi V S H\n\ + 6 index % S 1 V p f Hi V S H\n\ + 4 index % f S 1 V p f Hi V S H\n\ + mul sub mul % q p f Hi V S H\n\ + 4 index 1 1 % 1 1 V q p f Hi V S H\n\ + 5 index % f 1 1 V q p f Hi V S H\n\ + sub % (1-f) 1 V q p f Hi V S H\n\ + 8 index % S (1-f) 1 V q p f Hi V S H\n\ + mul sub mul % t q p f Hi V S H\n\ + 4 -1 roll pop % t q p Hi V S H\n\ + 7 -2 roll pop pop % t q p Hi V\n\ + 5 -2 roll % Hi V t q p\n\ + dup 0 eq\n\ + {1 index 3 index 6 index}\n\ + {\n\ + dup 1 eq\n\ + {3 index 2 index 6 index}\n\ + {\n\ + dup 2 eq\n\ + {4 index 2 index 4 index}\n\ + {\n\ + dup 3 eq\n\ + {4 index 4 index 3 index}\n\ + {\n\ + dup 4 eq\n\ + {2 index 5 index 3 index}\n\ + {\n\ + dup 5 eq\n\ + {1 index 5 index 5 index}\n\ + {0 0 0}\n\ + ifelse\n\ + }\n\ + ifelse\n\ + }\n\ + ifelse\n\ + }\n\ + ifelse\n\ + }\n\ + ifelse\n\ + }\n\ + ifelse % B G R Hi V t q p\n\ + setrgbcolor\n\ + 5 {pop} repeat\n\ +} bind def\n'\ +> $1 +endef + +# This actually inserts the color-killing code into a postscript file +# $(call kill-ps-color) +define kill-ps-color +$(SED) -e '/%%EndComments/r $(gray_eps_file)' +endef + +# Converts graphviz .dot files into .eps files +# Grayscale is not directly supported by dot, so we pipe it through fig2dev in +# that case. +# $(call convert-dot,<dot file>,<eps file>,<log file>,[gray]) +define convert-dot +$(DOT) -Tps '$1' 2>'$3' $(if $4,| $(call kill-ps-color)) > $2; \ +$(call colorize-dot-errors,$3) +endef + +# Convert DVI to Postscript +# $(call make-ps,<dvi file>,<ps file>,<log file>,[<paper size>]) +make-ps = \ + $(DVIPS) -o '$2' $(if $(filter-out BEAMER,$4),-t$(firstword $4),) '$1' \ + $(if $(filter BEAMER,$4),| $(enlarge_beamer)) > $3 2>&1 + +# Convert Postscript to PDF +# $(call make-pdf,<ps file>,<pdf file>,<log file>,<embed file>) +make-pdf = \ + $(call ps2pdf,$1,$2,$(filter 1,$(shell $(CAT) '$4'))) > '$3' 2>&1 + +# Display information about what is being done +# $(call echo-build,<input file>,<output file>,[<run number>]) +echo-build = $(ECHO) "$(C_BUILD)= $1 --> $2$(if $3, ($3),) =$(C_RESET)" +echo-graphic = $(ECHO) "$(C_GRAPHIC)= $1 --> $2 =$(C_RESET)" +echo-dep = $(ECHO) "$(C_DEP)= $1 --> $2 =$(C_RESET)" + +# Display a list of something +# $(call echo-list,<values>) +echo-list = for x in $1; do $(ECHO) "$$x"; done + +# +# DEFAULT TARGET +# + +.PHONY: all +all: $(default_pdf_targets) ; + +.PHONY: all-pdf +all-pdf: $(default_pdf_targets) ; + +ifneq "$(strip $(BUILD_STRATEGY))" "pdflatex" +.PHONY: all-ps +all-ps: $(default_ps_targets) ; + +.PHONY: all-dvi +all-dvi: $(default_dvi_targets) ; +endif + +# +# VIEWING TARGET +# +.PHONY: show +show: all + $(QUIET)for x in $(default_pdf_targets); do \ + [ -e "$$x" ] && $(VIEW_PDF) $$x & \ + done + +# +# INCLUDES +# +source_includes := $(addsuffix .d,$(source_stems_to_include)) +graphic_includes := $(addsuffix .gpi.d,$(graphic_stems_to_include)) + +# Include only the dependencies used +ifneq "" "$(source_includes)" +include $(source_includes)$(call include-message,$(source_includes)) +endif +ifneq "" "$(graphic_includes)" +include $(graphic_includes)$(call include-message,$(graphic_includes)) +endif + +# +# MAIN TARGETS +# + +# Note that we don't just say %: %.pdf here - this can tend to mess up our +# includes, which detect what kind of file we are asking for. For example, +# asking to build foo.pdf is much different than asking to build foo when +# foo.gpi exists, because we look through all of the goals for *.pdf that +# matches *.gpi, then use that to determine which include files we need to +# build. +# +# Thus, we invoke make recursively with better arugments instead, restarting +# all of the appropriate machinery. +.PHONY: $(default_stems_ss) +$(default_stems_ss): %: %.pdf ; + +# This builds and displays the wanted file. +.PHONY: $(addsuffix ._show,$(stems_ssg)) +%._show: %.pdf + $(QUIET)$(VIEW_PDF) $< & + +ifneq "$(strip $(BUILD_STRATEGY))" "pdflatex" +.SECONDARY: $(all_pdf_targets) +%.pdf: %.ps %.embed.make + $(QUIET)$(call echo-build,$<,$@) + $(QUIET)$(call make-pdf,$<,$@.temp,$@.log,$*.embed.make); \ + if [ x"$$?" = x"0" ]; then \ + $(if $(VERBOSE),$(CAT) $@.log,:); \ + $(RM) -f '$@'; \ + $(MV) '$@.temp' '$@'; \ + $(TOUCH) '$@'; \ + $(call copy-with-logging,$@,$(BINARY_TARGET_DIR)); \ + else \ + $(CAT) $@.log; \ + $(call remove-temporary-files,'$@.temp'); \ + $(sh_false); \ + fi + +.SECONDARY: $(all_ps_targets) +%.ps: %.dvi %.paper.make + $(QUIET)$(call echo-build,$<,$@) + $(QUIET)$(call make-ps,$<,$@.temp,$@.log,\ + $(firstword $(shell $(CAT) $*.paper.make))); \ + if [ x"$$?" = x"0" ]; then \ + $(if $(VERBOSE),$(CAT) $@.log,:); \ + $(RM) -f '$@'; \ + $(MV) '$@.temp' '$@'; \ + $(TOUCH) '$@'; \ + $(call copy-with-logging,$@,$(BINARY_TARGET_DIR)); \ + else \ + $(CAT) $@.log; \ + $(call remove-temporary-files,'$@.temp'); \ + $(sh_false); \ + fi +endif + +# Build the final target (dvi or pdf) file. This is a very tricky rule because +# of the way that latex runs multiple times, needs graphics after the first run +# (or maybe already has them), and relies on bibliographies or indices that may +# not exist. +# +# Check the log for fatal errors. If they exist, colorize and bail. +# +# Create the .auxtarget.cookie file. (Needed for next time if not present) +# +# If any of the following are true, we must rebuild at least one time: +# +# * the .bbl was recently rebuilt +# +# check a cookie, then delete it +# +# * any of several output files was created or changed: +# +# check $*.run.cookie, then delete it +# +# * the .aux file changed in a way that necessitates attention +# +# Note that if the .auxtarget.make file doesn't exist, this means +# that we are doing a clean build, so it doesn't figure into the +# test for running again. +# +# compare against .auxtarget.make +# +# move if different, remove if not +# +# * the .log file has errors or warnings requiring at least one more run +# +# We use a loop over a single item to simplify the process of breaking +# out when we find one of the conditions to be true. +# +# If we do NOT need to run latex here, then we move the $@.1st.make file +# over to $@ because the target file has already been built by the first +# dependency run and is valid. +# +# If we do, we delete that cookie file and do the normal multiple-runs +# routine. +# +ifneq "$(strip $(BUILD_STRATEGY))" "pdflatex" +.SECONDARY: $(all_dvi_targets) +endif +%.$(build_target_extension): %.bbl %.aux %.$(build_target_extension).1st.make + $(QUIET)\ + fatal=`$(call colorize-latex-errors,$*.log)`; \ + if [ x"$$fatal" != x"" ]; then \ + $(ECHO) "$$fatal"; \ + exit 1; \ + fi; \ + $(call make-auxtarget-file,$*.aux.make,$*.auxtarget.cookie); \ + run=0; \ + for i in 1; do \ + if $(call test-exists,$*.bbl.cookie); then \ + run=1; \ + break; \ + fi; \ + if $(call test-exists,$*.run.cookie); then \ + run=1; \ + break; \ + fi; \ + if $(call \ + test-exists-and-different,$*.auxtarget.cookie,$*.auxtarget.make);\ + then \ + run=1; \ + break; \ + fi; \ + if $(call test-log-for-need-to-run,$*); then \ + run=1; \ + break; \ + fi; \ + done; \ + $(call remove-temporary-files,$*.bbl.cookie $*.run.cookie); \ + $(MV) $*.auxtarget.cookie $*.auxtarget.make; \ + if [ x"$$run" = x"1" ]; then \ + $(call remove-files,$@.1st.make); \ + for i in 2 3 4 5; do \ + $(if $(findstring 3.79,$(MAKE_VERSION)),\ + $(call echo-build,$*.tex,$@,$(RESTARTS)-$$$$i),\ + $(call echo-build,$*.tex,$@,$(RESTARTS)-$$i)\ + ); \ + $(call run-latex,$*); \ + $(CP) '$*.log' '$*.'$(RESTARTS)-$$i'.log'; \ + $(call test-run-again,$*) || break; \ + done; \ + else \ + $(MV) '$@.1st.make' '$@'; \ + fi; \ + $(call copy-with-logging,$@,$(BINARY_TARGET_DIR)); \ + $(call latex-color-log,$*) + +# Build the .bbl file. When dependencies are included, this will (or will +# not!) depend on something.bib, which we detect, acting accordingly. The +# dependency creation also produces the %.auxbbl.make file. BibTeX is a bit +# finicky about what you call the actual files, but we can rest assured that if +# a .auxbbl.make file exists, then the .aux file does, as well. The +# .auxbbl.make file is a cookie indicating whether the .bbl needs to be +# rewritten. It only changes if the .aux file changes in ways relevant to .bbl +# creation. +# +# Note that we do NOT touch the .bbl file if there is no need to +# create/recreate it. We would like to leave existing files alone if they +# don't need to be changed, thus possibly avoiding a rebuild trigger. +%.bbl: %.auxbbl.make + $(QUIET)\ + $(if $(filter %.bib,$^),\ + $(call echo-build,$(filter %.bib,$?) $*.aux,$@); \ + $(call run-bibtex,$*); \ + $(TOUCH) $@.cookie; \ + ) \ + if $(EGREP) -q 'bibstyle.(apacann|chcagoa|[^}]*annot)' '$*.aux'; then \ + $(call echo-build,** annotated extra latex **,output ignored,$(RESTARTS)-1); \ + $(call run-latex,$*); \ + $(CP) '$*.log' '$*.$(RESTARTS)-annotated.log'; \ + $(if $(filter %.bib,$^),\ + $(call echo-build,** annotated extra bibtex ** $(filter %.bib,$?) $*.aux,$@); \ + $(call run-bibtex,$*); \ + $(TOUCH) $@.cookie; \ + ) \ + $(call echo-build,** annotated extra latex **,output ignored,$(RESTARTS)-2); \ + $(call run-latex,$*); \ + fi + +# Create the index file - note that we do *not* depend on %.tex here, since +# that unnecessarily restricts the kinds of indices that we can build to those +# with exactly the same stem as the source file. Things like splitidx create +# idx files with other names. +# +# Therefore, we add the .tex dependency in the sourcestem.d file in the call to +# get index file dependencies from the logs. +%.ind: %.idx + $(QUIET)$(call echo-build,$<,$@) + $(QUIET)$(call run-makeindex,$<,$@,$*.ilg) + +# Create the glossary file +%.gls: %.glo %.tex + $(QUIET)$(call echo-build,$<,$@) + $(QUIET)$(call run-makeindex,$<,$@,$*.glg,-s nomencl.ist) + +# Create the nomenclature file +%.nls: %.nlo %.tex + $(QUIET)$(call echo-build,$<,$@) + $(QUIET)$(call run-makeindex,$<,$@,$*.nlg,-s nomencl.ist) + +# SCRIPTED LaTeX TARGETS +# +# Keep the generated .tex files around for debugging if needed. +.SECONDARY: $(all_tex_targets) + +%.tex:: %.tex.sh + $(QUIET)$(call run-script,$(SHELL),$<,$@) + +%.tex:: %.tex.py + $(QUIET)$(call run-script,$(PYTHON),$<,$@) + +%.tex:: %.tex.pl + $(QUIET)$(call run-script,$(PERL),$<,$@) + +%.tex:: %.rst $(RST_STYLE_FILE) + $(QUIET)\ + $(call run-script,$(RST2LATEX)\ + --documentoptions=letterpaper\ + $(if $(RST_STYLE_FILE),--stylesheet=$(RST_STYLE_FILE),),$<,$@) + +# +# GRAPHICS TARGETS +# +.PHONY: all-graphics +all-graphics: $(all_graphics_targets); + +ifneq "$(strip $(BUILD_STRATEGY))" "pdflatex" +.PHONY: all-pstex +all-pstex: $(all_pstex_targets); +endif + +.PHONY: all-dot2tex +all-dot2tex: $(all_dot2tex_targets); + +.PHONY: show-graphics +show-graphics: all-graphics + $(VIEW_GRAPHICS) $(all_known_graphics) + +$(gray_eps_file): + $(QUIET)$(call echo-build,$^,$@) + $(QUIET)$(call create-gray-eps-file,$@) + +ifeq "$(strip $(BUILD_STRATEGY))" "pdflatex" +%.pdf: %.eps $(if $(GRAY),$(gray_eps_file)) + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-eps-to-pdf,$<,$@,$(GRAY)) + +ifeq "$(strip $(GNUPLOT_OUTPUT_EXTENSION))" "pdf" +%.pdf: %.gpi %.gpi.d $(gpi_sed) + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-gpi,$<,$@,$(GRAY)) +endif + +%.pdf: %.fig + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-fig,$<,$@,$(GRAY)) + +endif + +%.eps: %.gpi %.gpi.d $(gpi_sed) + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-gpi,$<,$@,$(GRAY)) + +%.eps: %.fig + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-fig,$<,$@,$(GRAY)) + +%.eps: %.dot $(if $(GRAY),$(gray_eps_file)) + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-dot,$<,$@,$<.log,$(GRAY)) + +%.eps: %.xvg $(if $(GRAY),$(gray_eps_file)) + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-xvg,$<,$@,$(GRAY)) + +%.eps: %.svg $(if $(GRAY),$(gray_eps_file)) + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-svg,$<,$@,$(GRAY)) + +%.eps: %.jpg $(if $(GRAY),$(gray_eps_file)) + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-jpg,$<,$@,$(GRAY)) + +%.eps: %.png $(if $(GRAY),$(gray_eps_file)) + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-png,$<,$@,$(GRAY)) + +%.eps: %.eps.gz $(if $(GRAY),$(gray_eps_file)) + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-epsgz,$<,$@,$(GRAY)) + +%.pstex: %.fig + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-fig-pstex,$<,$@,$(GRAY)) + +%.pstex_t: %.fig %.pstex + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-fig-pstex-t,$<,$@,$*.pstex,$(GRAY)) + +%.dot_t: %.dot + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-dot-tex,$<,$@) + +# +# DEPENDENCY-RELATED TARGETS. +# + +# Generate all of the information needed to get dependencies +# As a side effect, this creates a .dvi or .pdf file (depending on the build +# strategy). We need to be sure to remove it if there are errors. Errors can +# take several forms and all of them are found within the log file: +# * There was a LaTeX error +# * A needed file was not found +# * Cross references need adjustment +# +# Behavior: +# This rule is responsible for generating the following: +# %.aux +# %.d +# %.aux.make +# %.(pdf|dvi).1st.make (the .pdf or .dvi output file, moved) +# +# Steps: +# +# Run latex +# Move .pdf or .dvi somewhere else (make no judgements about success) +# Flatten the .aux file into another file +# Add source dependencies +# Add graphic dependencies +# Add bib dependencies +# +# Create cookies for various suffixes that may represent files that +# need to be read by LaTeX in order for it to function properly. +# +# Note that if some of the dependencies are discovered because they turn +# up missing in the log file, we really need the .d file to be reloaded. +# Adding a sleep command helps with this. Otherwise make is extremely +# nondeterministic, sometimes working, sometimes not. +# +# Usually we can force this by simply removing the generated pdf file and +# not creating a .1st.make file.. +# +%.$(build_target_extension).1st.make %.d %.aux %.aux.make %.fls: %.tex + $(QUIET)$(call echo-build,$<,$*.d $*.$(build_target_extension).1st.make,$(RESTARTS)-1) + $(QUIET)\ + $(call run-latex,$<,--recorder) || $(sh_true); \ + $(CP) '$*.log' '$*.$(RESTARTS)-1.log'; \ + $(call die-on-dot2tex,$*.log); \ + $(call die-on-no-aux,$*); \ + $(call flatten-aux,$*.aux,$*.aux.make); \ + $(ECHO) "# vim: ft=make" > $*.d; \ + $(ECHO) ".PHONY: $*._graphics" >> $*.d; \ + $(call get-inputs,$*.fls,$(addprefix $*.,aux aux.make d $(build_target_extension))) >> $*.d; \ + $(call get-missing-inputs,$*.log,$(addprefix $*.,aux aux.make d $(build_target_extension))) >> $*.d; \ + $(ECHO) ".SECONDEXPANSION:" >> $*.d; \ + $(call get-graphics,$*) >> $*.d; \ + $(call get-log-index,$*,$(addprefix $*.,d aux aux.make)) >> $*.d; \ + $(call get-bibs,$*.aux.make,$(addprefix $*.,bbl aux aux.make)) >> $*.d; \ + $(EGREP) -q "# MISSING" $*.d && $(SLEEP) 1 && $(RM) $*.pdf; \ + $(call move-if-exists,$*.$(build_target_extension),$*.$(build_target_extension).1st.make); \ + for s in toc out lot lof lol nav; do \ + if [ -e "$*.$$s" ]; then \ + if ! $(DIFF) -q $*.$$s $*.$$s.make >/dev/null 2>&1; then \ + $(TOUCH) $*.run.cookie; \ + fi; \ + $(CP) $*.$$s $*.$$s.make; \ + fi; \ + done + +# This is a cookie that is updated if the flattened aux file has changed in a +# way that affects the bibliography generation. +.SECONDARY: $(addsuffix .auxbbl.make,$(stems_ssg)) +%.auxbbl.make: %.aux.make + $(QUIET)\ + $(call make-auxbbl-file,$<,$@.temp); \ + $(call replace-if-different-and-remove,$@.temp,$@) + +# Build a dependency file for .gpi files. These often plot data files that +# also reside in the directory, so if a data file changes, it's nice to know +# about it. This also handles loaded .gpi files, whose filename should have +# _include_. in it. +%.gpi.d: %.gpi + $(QUIET)$(call echo-build,$<,$@) + $(QUIET)$(call make-gpi-d,$<,$@) + +# Store the paper size for this document -- note that if beamer is used we set +# it to the special BEAMER paper size. We only do this, however, if the +# special comment exists, in which case we enlarge the output with psnup. +# +# The paper size is extracted from a documentclass attribute. +%.paper.make: %.tex + $(QUIET)$(SED) \ + -e '/\\documentclass/,/}/{' \ + -e ' s/%.*//' \ + -e ' H' \ + -e ' /}/{' \ + -e ' s/.*//' \ + -e ' x' \ + -e ' /\\documentclass/!d' \ + -e ' s/[\n[:space:]]*//g' \ + -e ' s/\([,{[]\)\([[:alnum:]]\{1,\}\)paper\([],}]\)/\1%-\2-%\3/g' \ + -e ' s/\([,{[]\)\(landscape\)\([],}]\)/\1%-\2-%\3/g' \ + -e ' s/^[^%]*%-//' \ + -e ' s/-%[^%]*$$//' \ + -e ' s/-%[^%]%-/ /g' \ + -e ' p' \ + -e ' }' \ + -e ' d' \ + -e '}' \ + -e 'd' \ + $< > $@; \ + $(EGREP) -q '^[^%]*\\documentclass[^{]*{beamer}' $< && \ + (\ + $(EGREP) -q '^%%[[:space:]]*BEAMER[[:space:]]*LARGE$$' $< && \ + $(ECHO) "BEAMER" > $@ || \ + : > $@ \ + ) || $(sh_true) + +# Store embedding instructions for this document using a special comment +%.embed.make: %.tex + $(QUIET)$(EGREP) '^%%[[:space:]]*NO[[:space:]]*EMBED[[:space:]]*$$' $< \ + && $(ECHO) '' > $@ \ + || $(ECHO) '1' > $@; + +# +# HELPFUL PHONY TARGETS +# + +.PHONY: _all_programs +_all_programs: + $(QUIET)$(ECHO) "== All External Programs Used ==" + $(QUIET)$(call output-all-programs) + +.PHONY: _check_programs +_check_programs: + $(QUIET)$(ECHO) "== Checking Makefile Dependencies =="; $(ECHO) + $(QUIET) \ + $(ECHO) hi; \ + allprogs=`\ + ($(call output-all-programs)) | \ + $(SED) \ + -e 's/^[[:space:]]*//' \ + -e '/^#/d' \ + -e 's/[[:space:]]*#.*//' \ + -e '/^=/s/[[:space:]]/_/g' \ + -e '/^[[:space:]]*$$/d' \ + -e 's/^[^=].*=[[:space:]]*\([^[:space:]]\{1,\}\).*$$/\\1/' \ + `; \ + spaces=' '; \ + for p in $${allprogs}; do \ + case $$p in \ + =*) $(ECHO); $(ECHO) "$$p";; \ + *) \ + $(ECHO) -n "$$p:$$spaces" | $(SED) -e 's/^\(.\{0,20\}\).*$$/\1/'; \ + loc=`$(WHICH) $$p`; \ + if [ x"$$?" = x"0" ]; then \ + $(ECHO) "$(C_SUCCESS)Found:$(C_RESET) $$loc"; \ + else \ + $(ECHO) "$(C_FAILURE)Not Found$(C_RESET)"; \ + fi; \ + ;; \ + esac; \ + done + +.PHONY: _check_gpi_files +_check_gpi_files: + $(QUIET)$(ECHO) "== Checking all .gpi files for common errors =="; \ + $(ECHO); \ + for f in $(files.gpi); do \ + result=`$(EGREP) '^([^#]*set terminal |set output )' $$f`; \ + $(ECHO) -n "$$f: "; \ + if [ x"$$result" = x"" ]; then \ + $(ECHO) "$(C_SUCCESS)Okay$(C_RESET)"; \ + else \ + $(ECHO) "$(C_FAILURE)Warning: Problematic commands:$(C_RESET)";\ + $(ECHO) "$(C_ERROR)$$result$(C_RESET)"; \ + fi; \ + done; \ + $(ECHO) + +.PHONY: _all_stems +_all_stems: + $(QUIET)$(ECHO) "== All Stems ==" + $(QUIET)$(call echo-list,$(sort $(default_stems_ss))) + +.PHONY: _includes +_includes: + $(QUIET)$(ECHO) "== Include Stems ==" + $(QUIET)$(ECHO) "=== Sources ===" + $(QUIET)$(call echo-list,$(sort $(source_includes))) + $(QUIET)$(ECHO) "=== Graphics ===" + $(QUIET)$(call echo-list,$(sort $(graphic_includes))) + +.PHONY: _all_sources +_all_sources: + $(QUIET)$(ECHO) "== All Sources ==" + $(QUIET)$(call echo-list,$(sort $(all_files.tex))) + +.PHONY: _dependency_graph +_dependency_graph: + $(QUIET)$(ECHO) "/* LaTeX Dependency Graph */" + $(QUIET)$(call output-dependency-graph) + +.PHONY: _show_dependency_graph +_show_dependency_graph: + $(QUIET)$(call output-dependency-graph,$(graph_stem).dot) + $(QUIET)$(DOT) -Tps -o $(graph_stem).eps $(graph_stem).dot + $(QUIET)$(VIEW_POSTSCRIPT) $(graph_stem).eps + $(QUIET)$(call remove-temporary-files,$(graph_stem).*) + +.PHONY: _sources +_sources: + $(QUIET)$(ECHO) "== Sources ==" + $(QUIET)$(call echo-list,$(sort $(files.tex))) + +.PHONY: _scripts +_scripts: + $(QUIET)$(ECHO) "== Scripts ==" + $(QUIET)$(call echo-list,$(sort $(files_scripts))) + +.PHONY: _graphic_outputs +_graphic_outputs: + $(QUIET)$(ECHO) "== Graphic Outputs ==" + $(QUIET)$(call echo-list,$(sort $(all_graphics_targets))) + +.PHONY: _env +_env: +ifdef .VARIABLES + $(QUIET)$(ECHO) "== MAKE VARIABLES ==" + $(QUIET)$(call echo-list,$(foreach var,$(sort $(.VARIABLES)),'$(var)')) +endif + $(QUIET)$(ECHO) "== ENVIRONMENT ==" + $(QUIET)$(ENV) + +# +# CLEAN TARGETS +# +# clean-generated is somewhat unique - it relies on the .fls file being +# properly built so that it can determine which of the files was generated, and +# which was not. Expect it to silently fail if the .fls file is missing. +# +# This is used to, e.g., clean up index files that are generated by the LaTeX. +.PHONY: clean-generated +clean-generated: + $(QUIET)$(call clean-files,$(foreach e,$(addsuffix .fls,$(all_stems_source)),\ + $(shell $(call get-generated-names,$e)))) + +.PHONY: clean-deps +clean-deps: + $(QUIET)$(call clean-files,$(all_d_targets) *.make *.make.temp *.cookie) + +.PHONY: clean-tex +clean-tex: clean-deps + $(QUIET)$(call clean-files,$(rm_tex)) + +.PHONY: clean-graphics +# TODO: This *always* deletes pstex files, even if they were not generated by +# anything.... In other words, if you create a pstex and pstex_t pair by hand +# an drop them in here without the generating fig file, they will be deleted +# and you won't get them back. It's a hack put in here because I'm not sure we +# even want to keep pstex functionality, so my motivation is not terribly high +# for doing it right. +clean-graphics: + $(QUIET)$(call clean-files,$(all_graphics_targets) $(intermediate_graphics_targets) *.gpi.d *.pstex *.pstex_t *.dot_t) + +.PHONY: clean-backups +clean-backups: + $(QUIET)$(call clean-files,$(backup_patterns) *.temp) + +.PHONY: clean-auxiliary +clean-auxiliary: + $(QUIET)$(call clean-files,$(graph_stem).*) + +.PHONY: clean-nographics +clean-nographics: clean-tex clean-deps clean-backups clean-auxiliary ; + +.PHONY: clean +clean: clean-generated clean-tex clean-graphics clean-deps clean-backups clean-auxiliary + +# +# HELP TARGETS +# + +.PHONY: help +help: + $(help_text) + +.PHONY: version +version: + $(QUIET)\ + $(ECHO) "$(fileinfo) Version $(version)"; \ + $(ECHO) "by $(author)"; \ + +# +# HELP TEXT +# + +define help_text +# $(fileinfo) Version $(version) +# +# by $(author) +# +# Generates a number of possible output files from a LaTeX document and its +# various dependencies. Handles .bib files, \include and \input, and .eps +# graphics. All dependencies are handled automatically by running LaTeX over +# the source. +# +# USAGE: +# +# make [GRAY=1] [VERBOSE=1] [SHELL_DEBUG=1] <target(s)> +# +# STANDARD OPTIONS: +# GRAY: +# Setting this variable forces all recompiled graphics to be grayscale. +# It is useful when creating a document for printing. The default is +# to allow colors. Note that it only changes graphics that need to be +# rebuilt! It is usually a good idea to do a 'make clean' first. +# +# VERBOSE: +# This turns off all @ prefixes for commands invoked by make. Thus, +# you get to see all of the gory details of what is going on. +# +# SHELL_DEBUG: +# This enables the -x option for sh, meaning that everything it does is +# echoed to stderr. This is particularly useful for debugging +# what is going on in $$(shell ...) invocations. One of my favorite +# debugging tricks is to do this: +# +# make -d SHELL_DEBUG=1 VERBOSE=1 2>&1 | less +# +# STANDARD AUXILIARY FILES: +# +# Makefile.ini +# +# This file can contain variable declarations that override various +# aspects of the makefile. For example, one might specify +# +# neverclean := *.pdf *.ps +# onlysources.tex := main.tex +# LATEX_COLOR_WARNING := 'bold red uline' +# +# And this would override the neverclean setting to ensure that pdf +# and ps files always remain behind, set the makefile to treat all +# .tex files that are not "main.tex" as includes (and therefore not +# default targets). It also changes the LaTeX warning output to be +# red, bold, and underlined. +# +# There are numerous variables in this file that can be overridden in +# this way. Search for '?=' to find them all. +# +# Also, you can put arbitrary targets into it if, for example, you +# want your source built from something else, e.g.: +# +# generated.tex: generating_script.weird_lang depA depB +# ./generating_script.weird_lang > $$@ +# +# Note that if you are not careful, you can override the default +# target (what happens when you type "make" without arguments), so if +# you do use Makefile.ini, you probably want to start it with +# something like the following line: +# +# default: all +# +# Since the first target in any makefile is automatically the default, +# and the makefile already has a sensible "all" target, this will do +# what you want. +# +# The Makefile.ini is imported before *anything else* is done, so go +# wild with your ideas for changes to this makefile in there. It +# makes it easy to test them before submitting patches. +# +# STANDARD ENVIRONMENT VARIABLES: +# +# LATEX_COLOR_WARNING '$(LATEX_COLOR_WARNING)' +# LATEX_COLOR_ERROR '$(LATEX_COLOR_ERROR)' +# LATEX_COLOR_UNDERFULL '$(LATEX_COLOR_UNDERFULL)' +# LATEX_COLOR_OVERFULL '$(LATEX_COLOR_OVERFULL)' +# LATEX_COLOR_PAGES '$(LATEX_COLOR_PAGES)' +# LATEX_COLOR_BUILD '$(LATEX_COLOR_BUILD)' +# LATEX_COLOR_GRAPHIC '$(LATEX_COLOR_GRAPHIC)' +# LATEX_COLOR_DEP '$(LATEX_COLOR_DEP)' +# LATEX_COLOR_SUCCESS '$(LATEX_COLOR_SUCCESS)' +# LATEX_COLOR_FAILURE '$(LATEX_COLOR_FAILURE)' +# +# These may be redefined in your environment to be any of the following: +# +# black +# red +# green +# yellow +# blue +# magenta +# cyan +# white +# +# Bold or underline may be used, as well, either alone or in combination +# with colors: +# +# bold +# uline +# +# Order is not important. You may want, for example, to specify: +# +# export LATEX_COLOR_SUCCESS='bold blue uline' +# +# in your .bashrc file. I don't know why, but you may want to. +# +# STANDARD TARGETS: +# +# all: +# Make all possible documents in this directory. The documents are +# determined by scanning for .tex and .tex.sh (described in more detail +# later) and omitting any file that ends in ._include_.tex or +# ._nobuild_.tex. The output is a set of .pdf files. +# +# If you wish to omit files without naming them with the special +# underscore names, set the following near the top of the Makefile, +# or (this is recommended) within a Makefile.ini in the same directory: +# +# includes.tex := file1.tex file2.tex +# +# This will cause the files listed to be considered as include files. +# +# If you have only few source files, you can set +# +# onlysources.tex := main.tex +# +# This will cause only the source files listed to be considered in +# dependency detection. All other .tex files will be considered as +# include files. Note that these options work for *any* source type, +# so you could do something similar with includes.gpi, for example. +# Note that this works for *any valid source* target. All of the +# onlysources.* variables are commented out in the shipping version of +# this file, so it does the right thing when they simply don't exist. +# The comments are purely documentation. If you know, for example, that +# file.mycoolformat is supported by this Makefile, but don't see the +# "onlysources.mycoolformat" declared in the comments, that doesn't mean +# you can't use it. Go ahead and set "onlysources.mycoolformat" and it +# should do the right thing. +# +# show: +# Builds and displays all documents in this directory. It uses the +# environment-overridable value of VIEW_PDF (currently $(VIEW_PDF)) to +# do its work. +# +# all-graphics: +# Make all of the graphics in this directory. +# +# all-pstex (only for BUILD_STRATEGY=latex): +# Build all fig files into pstex and pstex_t files. Gray DOES NOT WORK. +# +# all-gray-pstex (only for BUILD_STRATEGY=latex): +# Build all fig files into grayscale pstex and pstex_t files. +# +# all-dot2tex: +# Build all dot files into tex files. +# +# show-graphics: +# Builds and displays all graphics in this directory. Uses the +# environment-overridable value of VIEW_GRAPHICS (currently +# $(VIEW_GRAPHICS)) to do its work. +# +# clean: +# Remove ALL generated files, leaving only source intact. +# This will *always* skip files mentioned in the "neverclean" variable, +# either in this file or specified in Makefile.ini: +# +# neverclean := *.pdf *.ps +# +# The neverclean variable works on all "clean" targets below, as well. +# +# clean-graphics: +# Remove all generated graphics files. +# +# clean-backups: +# Remove all backup files: $(backup_patterns) +# (XFig and other editors have a nasty habit of leaving them around) +# Also removes Makefile-generated .temp files +# +# clean-tex: +# Remove all files generated from LaTeX invocations except dependency +# information. Leaves graphics alone. +# +# clean-deps: +# Removes all auto-generated dependency information. +# +# clean-auxiliary: +# Removes extra files created by various targets (like the dependency +# graph output). +# +# clean-nographics: +# Cleans everything *except* the graphics files. +# +# help: +# This help text. +# +# version: +# Version information about this LaTeX makefile. +# +# DEBUG TARGETS: +# +# _all_programs: +# A list of the programs used by this makefile. +# +# _check_programs: +# Checks your system for the needed software and reports what it finds. +# +# _check_gpi_files: +# Checks the .gpi files in the current directory for common errors, such +# as specification of the terminal or output file inside of the gpi file +# itself. +# +# _dependency_graph: +# Outputs a .dot file to stdout that represents a graph of LaTeX +# dependencies. To see it, use the _show_dependency_graph target or +# direct the output to a file, run dot on it, and view the output, e.g.: +# +# make _dependency_graph > graph.dot +# dot -T ps -o graph.eps graph.dot +# gv graph.eps +# +# _show_dependency_graph: +# Makes viewing the graph simple: extracts, builds and displays the +# dependency graph given in the _dependency_graph target using the value +# of the environment-overridable VIEW_POSTSCRIPT variable (currently set +# to $(VIEW_POSTSCRIPT)). The postscript viewer is used because it +# makes it easier to zoom in on the graph, a critical ability for +# something so dense and mysterious. +# +# _all_sources: +# List all .tex files in this directory. +# +# _sources: +# Print out a list of all compilable sources in this directory. This is +# useful for determining what make thinks it will be using as the +# primary source for 'make all'. +# +# _scripts: +# Print out a list of scripts that make knows can be used to generate +# .tex files (described later). +# +# _all_stems: +# Print a list of stems. These represent bare targets that can be +# executed. Listing <stem> as a bare target will produce <stem>.pdf. +# +# _includes: +# A list of .d files that would be included in this run if _includes +# weren't specified. This target may be used alone or in conjunction +# with other targets. +# +# _graphic_outputs: +# A list of all generated .eps files +# +# _env: +# A list of environment variables and their values. If supported by +# your version of make, also a list of variables known to make. +# +# FILE TARGETS: +# +# %, %.pdf: +# Build a PDF file from the corresponding %.tex file. +# +# If BUILD_STRATEGY=pdflatex, then this builds the pdf directly. +# Otherwise, it uses this old-school but effective approach: +# +# latex -> dvips -> ps2pdf +# +# The BUILD_STRATEGY can be overridden in Makefile.ini in the same +# directory. The default is pdflatex. +# +# Reasons for using latex -> dvips include the "psfrag" package, and the +# generation of postscript instead of PDF. Arguments for using pdflatex +# include "new and shiny" and "better supported." I can't argue with +# either of those, and supporting them both didn't turn out to be that +# difficult, so there you have it. Choices. +# +# %._show: +# A phony target that builds the pdf file and then displays it using the +# environment-overridable value of VIEW_PDF ($(VIEW_PDF)). +# +# %._graphics: +# A phony target that generates all graphics on which %.pdf (or %.dvi) +# depends. +# +# %.ps (only for BUILD_STRATEGY=latex): +# Build a Postscript file from the corresponding %.tex file. +# This is done using dvips. Paper size is automatically +# extracted from the declaration +# +# \documentclass[<something>paper] +# +# or it is the system default. +# +# If using beamer (an excellent presentation class), the paper +# size is ignored. More on this later. +# +# %.dvi (only for BUILD_STRATEGY=latex): +# Build the DVI file from the corresponding %.tex file. +# +# %.ind: +# Build the index for this %.tex file. +# +# %.gls: +# Build the nomenclature glossary for this %.tex file. +# +# %.nls: +# Build the (newer) nomenclature file for this %.tex file. +# +# %.eps: +# Build an eps file from one of the following file types: +# +# .dot : graphviz +# .gpi : gnuplot +# .fig : xfig +# .xvg : xmgrace +# .svg : scalable vector graphics (goes through inkscape) +# .png : png (goes through NetPBM) +# .jpg : jpeg (goes through ImageMagick) +# .eps.gz : gzipped eps +# +# The behavior of this makefile with each type is described in +# its own section below. +# +# %.pstex{,_t} (only for BUILD_STRATEGY=latex): +# Build a .pstex_t file from a .fig file. +# +# FEATURES: +# +# Optional Binary Directory: +# If you create the _out_ directory in the same place as the makefile, +# it will automatically be used as a dumping ground for .pdf (or .dvi, +# .ps, and .pdf) output files. +# +# Alternatively, you can set the BINARY_TARGET_DIR variable, either as a +# make argument or in Makefile.ini, to point to your directory of +# choice. Note that no pathname wildcard expansion is done in the +# makefile, so make sure that the path is complete before going in +# there. E.g., if you want to specify something in your home directory, +# use $$HOME/ instead of ~/ so that the shell expands it before it gets +# to the makefile. +# +# External Program Dependencies: +# Every external program used by the makefile is represented by an +# ALLCAPS variable at the top of this file. This should allow you to +# make judgments about whether your system supports the use of this +# makefile. The list is available in the ALL_PROGRAMS variable and, +# provided that you are using GNU make 3.80 or later (or you haven't +# renamed this file to something weird like "mylatexmakefile" and like +# invoking it with make -f) can be viewed using +# +# make _all_programs +# +# Additionally, the availability of these programs can be checked +# automatically for you by running +# +# make _check_programs +# +# The programs are categorized according to how important they are and +# what function they perform to help you decide which ones you really +# need. +# +# Colorized Output: +# The output of commands is colorized to highlight things that are often +# important to developers. This includes {underfull,overfull} +# {h,v}boxes, general LaTeX Errors, each stage of document building, and +# the number of pages in the final document. The colors are obtained +# using 'tput', so colorization should work pretty well on any terminal. +# +# The colors can be customized very simply by setting any of the +# LATEX_COLOR_<CONTEXT> variables in your environment (see above). +# +# Predecessors to TeX Files: +# Given a target <target>, if no <target>.tex file exists but a +# corresponding script or predecessor file exists, then appropriate +# action will be taken to generate the tex file. +# +# Currently supported script or predecessor languages are: +# +# sh: %.tex.sh +# perl: %.tex.pl +# python: %.tex.py +# +# Calls the script using the appropriate interpreter, assuming that +# its output is a .tex file. +# +# The script is called thus: +# +# <interpreter> <script file name> <target tex file> +# +# and therefore sees exactly one parameter: the name of the .tex +# file that it is to create. +# +# Why does this feature exist? I ran into this while working on +# my paper dissertation. I wrote a huge bash script that used a +# lot of sed to bring together existing papers in LaTeX. It +# would have been nice had I had something like this to make my +# life easier, since as it stands I have to run the script and +# then build the document with make. This feature provides hooks +# for complicated stuff that you may want to do, but that I have +# not considered. It should work fine with included dependencies, +# too. +# +# Scripts are run every time make is invoked. Some trickery is +# employed to make sure that multiple restarts of make don't cause +# them to be run again. +# +# reST: %.rst +# +# Runs the reST to LaTeX converter to generate a .tex file +# If it finds a file names _rststyle_._include_.tex, uses it as +# the "stylesheet" option to rst2latex. +# +# Note that this does not track sub-dependencies in rst files. It +# assumes that the top-level rst file will change if you want a +# rebuild. +# +# Dependencies: +# +# In general, dependencies are extracted directly from LaTeX output on +# your document. This includes +# +# * Bibliography information +# * \include or \input files (honoring \includeonly, too) +# * Graphics files inserted by the graphicx package +# +# Where possible, all of these are built correctly and automatically. +# In the case of graphics files, these are generated from the following +# file types: +# +# GraphViz: .dot +# GNUPlot: .gpi +# XFig: .fig +# XMgrace: .xvg +# SVG: .svg +# PNG: .png +# JPEG: .jpg +# GZipped EPS: .eps.gz +# +# If the file exists as a .eps already, it is merely used (and will not +# be deleted by 'clean'!). +# +# LaTeX and BibTeX are invoked correctly and the "Rerun to get +# cross-references right" warning is heeded a reasonable number of +# times. In my experience this is enough for even the most troublesome +# documents, but it can be easily changed (if LaTeX has to be run after +# BibTeX more than three times, it is likely that something is moving +# back and forth between pages, and no amount of LaTeXing will fix +# that). +# +# \includeonly is honored by this system, so files that are not +# specified there will not trigger a rebuild when changed. +# +# Beamer: +# A special TeX source comment is recognized by this makefile (only when +# BUILD_STRATEGY=latex, since this invokes psnup): +# +# %%[[:space:]]*BEAMER[[:space:]]*LARGE +# +# The presence of this comment forces the output of dvips through psnup +# to enlarge beamer slides to take up an entire letter-sized page. This +# is particularly useful when printing transparencies or paper versions +# of the slides. For some reason landscape orientation doesn't appear +# to work, though. +# +# If you want to put multiple slides on a page, use this option and then +# print using mpage, a2ps, or psnup to consolidate slides. My personal +# favorite is a2ps, but your mileage may vary. +# +# When beamer is the document class, dvips does NOT receive a paper size +# command line attribute, since beamer does special things with sizes. +# +# GNUPlot Graphics: +# When creating a .gpi file, DO NOT INCLUDE the "set terminal" or "set +# output" commands! The makefile will include terminal information for +# you. Besides being unnecessary and potentially harmful, including the +# terminal definition in the .gpi file makes it harder for you, the one +# writing the document, to preview your graphics, e.g., with +# +# gnuplot -persist myfile.gpi +# +# so don't do specify a terminal or an output file in your .gpi files. +# +# When building a gpi file into an eps file, there are several features +# available to the document designer: +# +# Global Header: +# The makefile searches for the files in the variable GNUPLOT_GLOBAL +# in order: +# +# ($(GNUPLOT_GLOBAL)) +# +# Only the first found is used. All .gpi files in the directory are +# treated as though the contents of GNUPLOT_GLOBAL were directly +# included at the top of the file. +# +# NOTE: This includes special comments! (see below) +# +# Font Size: +# A special comment in a .gpi file (or a globally included file) of +# the form +# +# ## FONTSIZE=<number> +# +# will change the font size of the GPI output. If font size is +# specified in both the global file and the GPI file, the +# specification in the individual GPI file is used. +# +# Grayscale Output: +# GNUplot files also support a special comment to force them to be +# output in grayscale *no matter what*: +# +# ## GRAY +# +# This is not generally advisable, since you can always create a +# grayscale document using the forms mentioned above. But, if your +# plot simply must be grayscale even in a document that allows +# colors, this is how you do it. +# +# XFig Graphics: +# No special handling is done with XFig, except when a global +# grayscale method is used, e.g. +# +# make GRAY=1 document +# +# In these cases the .eps files is created using the -N switch to +# fig2dev to turn off color output. (Only works with eps, not pstex +# output) +# +# GraphVis Graphics: +# Color settings are simply ignored here. The 'dot' program is used +# to transform a .dot file into a .eps file. +# +# If you want, you can use the dot2tex program to convert dot files +# to tex graphics. The default is to just call dot2tex with no +# arguments, but you can change the DOT2TEX definition to include +# options as needed (in your Makefile.ini). +# +# Note that, as with pstex, the makefile cannot use latex's own +# output to discover all missing dot_t (output) files, since anytime +# TeX includes TeX, it has to bail when it can't find the include +# file. It can therefore only stop on the first missing file it +# discovers, and we can't get a large list of them out easily. +# +# So, the makefile errors out if it's missing an included dot_t +# file, then prompts the user to run this command manually: +# +# make all-dot2tex +# +# GZipped EPS Graphics: +# +# A .eps.gz file is sometimes a nice thing to have. EPS files can get +# very large, especially when created from bitmaps (don't do this if you +# don't have to). This makefile will unzip them (not in place) to +# create the appropriate EPS file. +# +endef + +# +# DEPENDENCY CHART: +# +#digraph "g" { +# rankdir=TB +# size="9,9" +# edge [fontsize=12 weight=10] +# node [shape=box fontsize=14 style=rounded] +# +# eps [ +# shape=Mrecord +# label="{{<gpi> GNUplot|<epsgz> GZip|<dot> Dot|<fig> XFig}|<eps> eps}" +# ] +# pstex [label="%.pstex"] +# pstex_t [label="%.pstex_t"] +# tex_outputs [shape=point] +# extra_tex_files [shape=point] +# gpi_data [label="<data>"] +# gpi_includes [label="_include_.gpi"] +# aux [label="%.aux"] +# fls [label="%.fls"] +# idx [label="%.idx"] +# glo [label="%.glo"] +# ind [label="%.ind"] +# log [label="%.log"] +# tex_sh [label="%.tex.sh"] +# rst [label="%.rst"] +# tex [ +# shape=record +# label="<tex> %.tex|<include> _include_.tex" +# ] +# include_aux [label="_include_.aux"] +# file_bib [label=".bib"] +# bbl [label="%.bbl"] +# dvi [label="%.dvi"] +# ps [label="%.ps"] +# pdf [label="%.pdf"] +# fig [label=".fig"] +# dot [label=".dot"] +# gpi [label=".gpi"] +# eps_gz [label=".eps.gz"] +# +# gpi_files [shape=point] +# +# rst -> tex:tex [label="reST"] +# tex_sh -> tex:tex [label="sh"] +# tex_pl -> tex:tex [label="perl"] +# tex_py -> tex:tex [label="python"] +# tex -> tex_outputs [label="latex"] +# tex_outputs -> dvi +# tex_outputs -> aux +# tex_outputs -> log +# tex_outputs -> fls +# tex_outputs -> idx +# tex_outputs -> include_aux +# aux -> bbl [label="bibtex"] +# file_bib -> bbl [label="bibtex"] +# idx -> ind [label="makeindex"] +# glo -> gls [label="makeindex"] +# nlo -> nls [label="makeindex"] +# gls -> extra_tex_files +# nls -> extra_tex_files +# ind -> extra_tex_files +# bbl -> extra_tex_files +# eps -> extra_tex_files +# extra_tex_files -> dvi [label="latex"] +# gpi_files -> eps:gpi [label="gnuplot"] +# gpi -> gpi_files +# gpi_data -> gpi_files +# gpi_includes -> gpi_files +# eps_gz -> eps:epsgz [label="gunzip"] +# fig -> eps:fig [label="fig2dev"] +# fig -> pstex [label="fig2dev"] +# fig -> pstex_t [label="fig2dev"] +# pstex -> pstex_t [label="fig2dev"] +# dot -> eps:dot [label="dot"] +# dvi -> ps [label="dvips"] +# include_aux -> bbl [label="bibtex"] +# ps -> pdf [label="ps2pdf"] +# +# edge [ color=blue label="" style=dotted weight=1 fontcolor=blue] +# fls -> tex:include [label="INPUT: *.tex"] +# fls -> file_bib [label="INPUT: *.aux"] +# aux -> file_bib [label="\\bibdata{...}"] +# include_aux -> file_bib [label="\\bibdata{...}"] +# log -> gpi [label="Graphic file"] +# log -> fig [label="Graphic file"] +# log -> eps_gz [label="Graphic file"] +# log -> dot [label="Graphic file"] +# log -> idx [label="No file *.ind"] +# log -> glo [label="No file *.gls"] +# log -> nlo [label="No file *.nls"] +# gpi -> gpi_data [label="plot '...'"] +# gpi -> gpi_includes [label="load '...'"] +# tex:tex -> ps [label="paper"] +# tex:tex -> pdf [label="embedding"] +#} + +# +# DEPENDENCY CHART SCRIPT +# +# $(call output_dependency_graph,[<output file>]) +define output-dependency-graph + if [ -f '$(this_file)' ]; then \ + $(SED) \ + -e '/^[[:space:]]*#[[:space:]]*DEPENDENCY CHART:/,/^$$/!d' \ + -e '/DEPENDENCY CHART/d' \ + -e '/^$$/d' \ + -e 's/^[[:space:]]*#//' \ + $(this_file) $(if $1,> '$1',); \ + else \ + $(ECHO) "Cannot determine the name of this makefile."; \ + fi +endef +# vim: noet sts=0 sw=8 ts=8
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/admin-manual/figures/intevation-logo.eps Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,1222 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%For: Frank Koormann,,, +%%CreationDate: Thu Mar 29 14:37:25 2001 +%%Title: intevation_logo-thin.eps +%%Creator: Sketch 0.6.8 +%%Pages: 1 +%%BoundingBox: 78 68 132 94 +%%Extensions: CMYK +%%DocumentSuppliedResources: (atend) +%%EndComments + +%%BeginProlog +%%BeginResource: procset Linux-Sketch-Procset 1.0 2 +/SketchDict 100 dict def +SketchDict begin +/bd { bind def } bind def +/x { exch } bd +/xd { exch def } bd +/PI 3.14159265358979323846264338327 def +/radgrad { 180 mul PI div } bd +/skstartmatrix matrix currentmatrix def +/tmpmat matrix def +/ISOLatin1Encoding dup where +{ pop pop } +{ [/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand +/quoteright /parenleft /parenright /asterisk /plus /comma /minus /period +/slash /zero /one /two /three /four /five /six /seven /eight /nine /colon +/semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J +/K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash +/bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i +/j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright +/asciitilde /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /dotlessi /grave /acute /circumflex /tilde /macron /breve +/dotaccent /dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek +/caron /space /exclamdown /cent /sterling /currency /yen /brokenbar /section +/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen +/registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu +/paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright +/onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex +/Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex +/Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve +/Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute +/Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute +/acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute +/ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde +/ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave +/uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] def +} +ifelse +/arct dup where +{pop pop} +{ +/arct {arcto pop pop pop pop} bd +} +ifelse +/size 0 def +/fontname 0 def +/newfont 0 def +/sf { +/size xd +/fontname xd +fontname findfont +dup /Encoding get StandardEncoding eq +{ +dup +length dict /newfont xd +{ +1 index +/FID ne +{ newfont 3 1 roll put } +{ pop pop } +ifelse +} forall +newfont /Encoding ISOLatin1Encoding put +fontname newfont definefont +} +if +size scalefont setfont +} bd +/pusht {matrix currentmatrix} bd +/popt {setmatrix} bd +/pushc {gsave} bd +/popc {grestore} bd +/rgb {setrgbcolor} bd +/w { setlinewidth } bd +/j { setlinejoin } bd +/J { setlinecap } bd +/d { setdash } bd +/F { eofill } bd +/f { closepath F } bd +/S { +pusht +skstartmatrix setmatrix stroke +popt +} bd +/s { closepath S } bd +/m { moveto } bd +/l { lineto } bd +/c { curveto } bd +/txt { +/tmpmat tmpmat currentmatrix def +dup type /arraytype eq {concat} {translate} ifelse +0 0 m +tmpmat +} bd +/T {txt x show popt} bd +/P {txt x true charpath popt} bd +/TP {txt x dup show 0 0 m true charpath popt} bd +/C {newpath 0 360 arc} bd +/R { +2 copy m +x 2 index l +x 2 index x l +l +closepath +} bd +/ellipse { +dup type /arraytype eq +{ +pusht x concat +0 0 1.0 C +popt +} +{ +pusht 5 1 roll +4 -1 roll concat +newpath +dup 2 eq { +0 0 m +} if +3 1 roll +radgrad x +radgrad x +0 0 1 5 -2 roll +arc +0 ne { closepath } if +popt +} +ifelse +} bd +/radius1 0 def +/radius2 0 def +/factor 0 def +/rect { +dup type /arraytype eq +{ +pusht x concat +0 0 m 1 0 l 1 1 l 0 1 l closepath +popt +} +{ +/radius2 xd +/radius1 xd +pusht x concat +radius1 radius2 div 1 scale +0 radius2 m +0 1 radius2 1 radius2 arct +radius2 radius1 div +dup 1 1 index 0 radius2 arct +0 0 0 radius2 arct +0 0 0 1 radius2 arct +closepath +popt +} +ifelse +} bd +/buf 0 def +/width 0 def +/height 0 def +/skcimg { +/tmpmat tmpmat currentmatrix def +{ concat } if +/height xd +/width xd +/buf width 3 mul string def +width height scale +width height 8 +[width 0 0 height neg 0 height] +{ currentfile buf readhexstring pop } bind +false 3 colorimage +tmpmat setmatrix +} bd +/skgimg { +/tmpmat tmpmat currentmatrix def +{ concat } if +/height xd +/width xd +/buf width string def +width height scale +width height 8 +[width 0 0 height neg 0 height] +{ currentfile buf readhexstring pop } bind +image +tmpmat setmatrix +} bd +/rclip { +4 2 roll m +dup 0 x rlineto +x 0 rlineto +neg 0 x rlineto +closepath +clip +} bd +/skeps { +10 dict begin +/sk_state save def +concat +3 index neg 3 index neg translate +rclip +0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin +10 setmiterlimit [ ] 0 setdash +newpath +/sk_dict_count countdictstack def +/sk_count count 1 sub def +userdict begin +/showpage { } def +/languagelevel where +{ +pop +languagelevel 1 ne +{ +false setstrokeadjust +false setoverprint +} if +} if +} bd +/skepsend { +count sk_count sub { pop } repeat +countdictstack sk_dict_count sub { end } repeat +sk_state restore +end +} bd +/gradidx 0 def +/gradient { +3 mul array +/gradidx 0 def +} bd +/$ { +3 index gradidx 5 -1 roll put +2 index gradidx 1 add 4 -1 roll put +1 index gradidx 2 add 3 -1 roll put +/gradidx gradidx 3 add def +} bd +/! { +3 +{ +dup dup gradidx dup 3 1 roll 3 sub get put +/gradidx gradidx 1 add def +} +repeat +} bd +/gradcolor { +3 mul dup 2 add 1 exch % idx 1 idx+2 +{ +1 index exch % array array i +get % array component +exch % component array +} +for +4 1 roll +} bd +/x0 0 def /y0 0 def /x1 0 def /y1 0 def +/left 0 def /right 0 def /top 0 def /bottom 0 def +/numcolors 0 def +/axial { +/y1 xd /x1 xd /y0 xd /x0 xd +dup length 3 idiv /numcolors xd +pusht exch % ctm array +x0 x1 ne y0 y1 ne or +{ +x0 y0 translate +[x1 x0 sub y1 y0 sub dup neg 2 index 0 0] concat +clippath flattenpath pathbbox +/top xd /right xd /bottom xd /left xd +newpath +0 gradcolor rgb clippath f +0 1 numcolors 1 sub +{ +dup numcolors div +3 1 roll +gradcolor rgb +exch +bottom right top R f +} +for +} +if +pop +popt +} bd +/r0 0 def /r1 0 def /dr 0 def +/radial { +/r1 xd /r0 xd /y0 xd /x0 xd +/dr r1 r0 sub def +dup length 3 idiv /numcolors xd +pusht exch % ctm array +r0 r1 ne +{ +x0 y0 translate +clippath flattenpath pathbbox +/top xd /right xd /bottom xd /left xd +newpath +dr 0 gt {numcolors 1 sub}{0} ifelse gradcolor rgb +clippath f +dr 0 gt {numcolors 1 sub -1 0} { 0 1 numcolors 1 sub} ifelse +{ +dup numcolors div dr mul r0 add +3 1 roll +gradcolor rgb +exch +0 0 3 -1 roll C f +} +for +} +if +pop +popt +} bd +/max { +2 copy lt {exch} if pop +} bd +/conical { +pusht 5 1 roll +3 1 roll /y0 xd /x0 xd +x0 y0 translate +radgrad rotate +dup length 3 idiv /numcolors xd +clippath flattenpath pathbbox newpath +4 { abs 4 1 roll} repeat +3 { max } repeat +2 mul +dup scale +0 gradcolor rgb +0 0 1 0 360 arc f +1 1 numcolors 1 sub +{ +dup numcolors div 180 mul +3 1 roll +gradcolor rgb +exch +0 0 moveto +0 0 1 4 -1 roll dup neg arc +closepath f +} +for +pop +popt +} bd +/XStep 0 def /YStep 0 def /imagedata 0 def /components 0 def +/tileimage2 { +exch 4 2 roll +/height xd +/width xd +mark +/components 2 index +/PatternType 1 +/PaintType 1 +/TilingType 1 +/BBox [0 0 width height] +/XStep width +/YStep height +/PaintProc { +begin +XStep YStep 8 +matrix +imagedata +false +components +colorimage +end +} +counttomark 2 div cvi dup dict begin +{ def } repeat +pop currentdict end +dup +/imagedata +4 -1 roll +width height mul mul string +currentfile exch readhexstring pop +put +exch +makepattern +setpattern +clippath +eofill +} bd +/tileimage1 { +concat +/components xd +/height xd +/width xd +/imagedata +currentfile +width height mul components mul string +readhexstring pop +def +clippath flattenpath pathbbox +/top xd /right xd /bottom xd /left xd +left width div floor width mul +bottom height div floor height mul +translate +top bottom sub height div ceiling cvi +{ +gsave +right left sub width div ceiling cvi +{ +width height 8 matrix +components 1 eq +{ +{ imagedata } +image +} +{ +imagedata +false components +colorimage +} +ifelse +width 0 translate +} +repeat +grestore +0 height translate +} +repeat +} bd +/makepattern where +{ +pop +/tileimage /tileimage2 load def +} +{ +/tileimage /tileimage1 load def +} +ifelse +end +%%EndResource +%%EndProlog + +%%BeginSetup + +10.433 setmiterlimit +%%EndSetup + +%%Page: 1 1 +SketchDict begin +newpath +81.1479 90.3363 m +83.1262 89.4518 85.8962 89.4399 87.7755 90.732 c +88.4885 91.2221 89.1744 91.8548 89.1744 92.7451 c +89.3805 92.7446 89.5146 92.3854 89.7059 92.4617 c +90.3588 92.7216 91.0745 92.5334 91.5725 92.3012 c +91.8169 92.1873 92.0442 92.7366 92.3141 92.7358 c +92.4246 92.4106 93.2359 91.4866 93.2359 91.4372 c +95.3948 89.4748 99.2768 88.555 102.019 89.186 c +102.881 89.3844 110.268 92.0436 110.268 92.7837 c +110.735 92.6454 111.042 92.3763 111.801 92.3588 c +113.208 92.7366 l +114.425 92.9532 114.356 92.6862 114.93 92.6609 c +114.93 90.5837 114.005 87.8389 114.95 85.8136 c +115.043 85.6129 115.327 85.1931 115.474 85.044 c +119.365 81.1112 125.41 82.6691 129.868 84.5493 c +129.868 84.4181 130.124 84.2636 130.124 84.1323 c +130.124 83.9504 129.868 83.7916 129.868 83.6096 c +129.521 83.6096 129.294 83.4821 129.005 83.2726 c +126.771 81.6517 123.827 80.5003 121.756 78.5645 c +121.551 78.3735 121.558 78.1688 121.558 77.872 c +121.756 77.6246 122.036 77.2541 122.315 77.061 c +122.399 77.0029 122.564 76.8961 124.449 75.877 c +126.015 75.0309 127.68 74.6575 129.194 74.6604 c +129.194 74.475 129.046 74.2851 129.051 74.0807 c +129.052 74.0297 129.066 73.9744 129.086 73.9171 c +129.106 73.8599 129.132 73.8003 129.158 73.7411 c +129.183 73.6819 129.209 73.6226 129.227 73.5659 c +129.245 73.5087 129.255 73.4539 129.252 73.4038 c +129.238 73.1617 129.151 72.9814 129.076 72.7773 c +126.75 73.9407 124.211 75.0082 121.611 75.7449 c +120.232 76.1358 118.876 76.4938 117.501 76.7872 c +116.305 77.0426 113.981 77.2912 113.298 75.7452 c +112.578 74.1158 113.329 72.4451 113.544 70.8622 c +113.245 70.9989 113.04 71.6163 112.826 71.3291 c +112.556 70.799 l +112.21 71.5408 111.908 72.5375 111.698 73.3754 c +111.413 74.5161 110.852 75.2644 109.473 75.4597 c +107.323 75.7648 107.541 75.5249 106.808 75.0986 c +105.489 74.3316 104.447 72.6469 104.427 70.7633 c +104.103 70.8166 104.04 71.1029 103.715 71.1562 c +103.661 71.1361 103.594 71.1001 103.521 71.0624 c +103.448 71.0247 103.368 70.985 103.288 70.9575 c +103.209 70.9303 103.129 70.9147 103.056 70.9254 c +102.983 70.9359 102.916 70.9725 102.862 71.049 c +102.814 71.2619 102.513 71.4476 102.165 71.1947 c +101.229 70.799 l +101.108 71.1117 100.582 71.3382 100.316 71.5037 c +99.0659 72.2807 97.0528 71.5295 96.2781 70.5102 c +96.093 70.57 95.9079 70.6298 95.7225 70.6896 c +95.5289 70.7905 95.2567 70.9099 94.8114 70.6321 c +94.4917 70.5802 l +94.4917 70.8373 94.9407 70.8557 95.0994 71.1094 c +95.4787 71.7155 95.856 72.5599 96.434 73.236 c +97.4233 74.3934 98.3768 75.7545 97.6356 77.2578 c +97.415 77.7045 97.576 77.5078 96.6749 78.2941 c +96.1414 78.7598 95.3594 79.3486 94.7173 79.6468 c +91.9201 80.9465 88.4556 81.0936 85.1714 80.6681 c +83.4604 80.4467 81.7831 80.1902 80.3068 79.6031 c +80.2609 79.585 80.3031 79.5122 80.2535 79.5122 c +80.306 79.6936 80.6359 79.9461 80.4556 80.0496 c +80.2343 80.1389 80.2481 80.2886 80.2552 80.4833 c +80.2731 80.7971 l +80.4213 80.7971 80.3077 80.824 80.4554 80.8396 c +82.6332 81.0712 84.5517 81.7552 86.5887 82.4718 c +87.2231 82.6952 87.987 83.0019 88.527 83.452 c +88.8771 83.744 89.3216 84.2214 89.3216 84.6667 c +89.3216 85.0624 88.8949 85.959 88.6166 86.1815 c +86.4209 87.9381 80.8845 88.8736 80.8346 88.9422 c +80.7828 89.0136 l +80.7856 89.1103 81.0512 89.1729 81.1198 89.3575 c +81.1731 89.5006 81.0506 89.7858 81.1017 89.9232 c +81.1924 90.1679 81.2247 90.3363 81.1479 90.3363 c +closepath +gsave +0.9 0.9 0.9 rgb +F +grestore +0.9 0.9 0.9 rgb +0.215433 w +0 j +0 J +[] 0 d +S +newpath +108.203 84.2032 m +107.659 84.1536 106.67 83.9557 106.373 83.5107 c +106.324 83.5107 106.274 83.4611 106.274 83.4118 c +106.126 83.3622 106.027 82.9665 105.829 82.8675 c +105.829 82.1257 105.533 81.4828 106.126 80.8396 c +106.225 80.7407 l +106.423 80.6914 l +107.907 79.8999 109.341 79.9989 110.726 80.8892 c +110.776 80.9882 l +110.875 81.0375 111.072 81.3343 111.27 81.3343 c +111.27 81.8782 111.765 82.4225 111.418 83.115 c +111.32 83.3129 110.825 83.4611 110.825 83.659 c +110.726 83.659 110.132 84.0054 110.132 84.0547 c +109.935 84.0547 l +109.737 84.2525 108.401 84.2525 108.203 84.2032 c +closepath +gsave +0.8 0.8 0.8 rgb +F +grestore +0.7 0.7 0.7 rgb +0.566929 w +0 j +0 J +[] 0 d +S +newpath +129.218 74.6074 m +126.745 74.9042 123.636 75.6956 121.805 77.5256 c +121.657 77.6742 121.459 78.0203 121.459 78.2677 c +121.558 78.3171 l +121.558 78.3667 121.757 78.5634 121.805 78.6139 c +123.135 79.9966 125.128 80.6576 126.673 81.7561 c +128.047 82.7323 129.427 83.5107 129.67 83.5107 c +129.775 83.5629 130.033 83.615 130.115 83.659 c +129.109 72.8173 m +127.427 73.3119 125.912 74.363 124.229 74.9042 c +121.542 75.7684 l +120.528 76.0947 119.51 76.4014 118.523 76.5599 c +116.741 76.8465 115.229 77.6229 113.743 76.2892 c +112.805 75.4467 113.006 74.657 113.006 73.4205 c +113.121 72.9094 113.569 71.2846 113.569 70.7888 c +112.54 70.8024 m +111.897 72.0885 111.86 74.2406 110.585 75.1462 c +109.981 75.576 107.912 75.6808 107.214 75.4484 c +106.724 75.2851 106.373 74.7559 106.027 74.4095 c +105.087 73.4698 104.431 72.0363 104.431 70.7009 c +101.387 70.7216 m +100.435 71.9918 98.2462 72.4301 97.0247 71.1409 c +96.8801 71.0068 96.6052 70.7772 96.0915 70.388 c +94.588 70.6593 m +95.3302 71.0054 95.6213 71.8212 95.9603 72.5171 c +96.561 73.7499 98.571 75.6363 97.6602 77.1169 c +97.3518 77.6183 l +97.063 78.124 95.8361 79.0019 95.7069 79.1312 c +95.509 79.329 94.9892 79.5357 94.7496 79.6525 c +90.7346 81.6135 86.2429 80.9354 82.0379 80.1471 c +81.4945 80.0454 80.7354 79.496 80.1915 79.496 c +80.855 88.9875 m +81.4486 88.839 81.943 88.619 82.5326 88.4566 c +83.9216 88.0751 85.6935 87.8542 86.9841 87.1708 c +87.3753 86.9639 87.8251 86.5772 88.2209 86.3794 c +88.9627 86.0333 89.3091 85.2418 89.2595 84.4008 c +89.2595 84.2032 88.8592 83.7624 88.7155 83.6096 c +88.0678 82.9214 86.6839 82.482 85.7972 82.175 c +84.1118 81.5919 82.1369 80.7407 80.3068 80.7407 c +80.2575 80.6914 l +81.2564 90.302 m +81.7865 90.031 81.8707 90.1115 82.3007 89.9334 c +83.7949 89.3152 85.8009 89.932 87.1823 90.5344 c +88.1222 90.944 89.2116 91.7442 89.2116 92.8407 c +92.2753 92.7032 m +92.9678 91.6646 93.7564 90.8221 94.8982 90.2869 c +95.3392 90.0803 95.9901 89.7098 96.481 89.5944 c +98.5129 89.1165 100.233 88.7908 102.318 89.1987 c +102.511 89.2367 102.58 89.2282 103.109 89.3966 c +105.253 90.0783 107.678 91.2292 109.638 92.3148 c +109.697 92.3474 110.336 92.8129 110.352 92.8129 c +114.93 92.7352 m +114.815 91.7541 114.609 90.9627 114.61 90.427 c +114.611 88.8645 114.327 87.8086 114.634 86.6268 c +115.198 84.4504 118.458 82.8638 119.975 82.7193 c +123.178 82.4137 126.158 83.2958 129.076 84.3515 c +129.123 84.3682 129.274 84.4008 129.373 84.4008 c +129.423 84.4997 129.818 84.6483 129.967 84.6483 c +0.8 0.8 0.8 rgb +1 j +1 J +S +newpath +81.6246 86.9766 m +82.6698 86.9766 l +82.6698 79.2655 l +81.6246 79.2655 l +81.6246 86.9766 l +closepath +84.0446 82.4667 m +84.0446 82.7598 84.0959 83.0368 84.1988 83.297 c +84.3014 83.5575 84.4553 83.8013 84.6606 84.0286 c +84.8734 84.2486 85.1226 84.4155 85.4086 84.5292 c +85.6946 84.6429 86.0209 84.6996 86.3877 84.6996 c +86.4464 84.6996 86.5104 84.6959 86.5802 84.6885 c +86.6499 84.6811 86.725 84.6704 86.8058 84.6556 c +86.8863 84.6409 86.9688 84.6227 87.0533 84.6006 c +87.1375 84.5785 87.2236 84.5493 87.3118 84.5125 c +87.4657 84.4467 87.6123 84.3622 87.7517 84.2596 c +87.8909 84.157 88.0267 84.0323 88.1588 83.8857 c +88.2906 83.7463 88.3898 83.5739 88.4559 83.3687 c +88.5216 83.1632 88.5548 82.9285 88.5548 82.6646 c +88.5548 82.6572 88.5548 82.6481 88.5548 82.6371 c +88.5548 82.626 88.5548 82.6133 88.5548 82.5985 c +88.5548 82.5911 88.5548 82.5821 88.5548 82.571 c +88.5548 82.56 88.5548 82.5472 88.5548 82.5325 c +88.5548 79.2655 l +87.5097 79.2655 l +87.5097 82.3786 l +87.5097 82.5398 87.4858 82.6994 87.4382 82.857 c +87.3906 83.0146 87.3192 83.1632 87.2236 83.3026 c +87.1284 83.4492 87.0037 83.5592 86.8497 83.6326 c +86.6958 83.706 86.5124 83.7426 86.2998 83.7426 c +86.1017 83.7426 85.9276 83.7097 85.7771 83.6437 c +85.6269 83.5776 85.4968 83.4787 85.3868 83.3466 c +85.2768 83.2145 85.1906 83.0733 85.1283 82.9231 c +85.0659 82.7729 85.0237 82.6133 85.0016 82.4446 c +85.0016 79.2655 l +84.0446 79.2655 l +84.0446 82.4667 l +closepath +89.6767 85.8436 m +90.7108 85.8436 l +90.7108 84.5456 l +92.7126 84.5456 l +92.7126 83.5997 l +90.7108 83.5997 l +90.7108 80.9156 l +90.7108 80.813 90.7179 80.7211 90.7326 80.6406 c +90.7474 80.5598 90.7695 80.483 90.7987 80.4096 c +90.8279 80.3362 90.8922 80.2832 90.9912 80.25 c +91.0901 80.2171 91.2276 80.2007 91.4036 80.2007 c +92.6248 80.2225 l +92.6248 79.2655 l +91.3268 79.2655 l +91.3194 79.2655 91.312 79.2655 91.3047 79.2655 c +91.2973 79.2655 91.2899 79.2655 91.2826 79.2655 c +91.2755 79.2655 91.2698 79.2655 91.2661 79.2655 c +91.2624 79.2655 91.2571 79.2619 91.2497 79.2545 c +91.2423 79.2545 91.2349 79.2545 91.2276 79.2545 c +91.2205 79.2545 91.2131 79.2545 91.2057 79.2545 c +91.1984 79.2545 91.193 79.2545 91.1893 79.2545 c +91.1856 79.2545 91.18 79.2545 91.1726 79.2545 c +90.9234 79.2545 90.7071 79.2913 90.5237 79.3645 c +90.3403 79.4379 90.1901 79.5516 90.0727 79.7055 c +89.9554 79.8597 89.8655 80.0247 89.8032 80.2007 c +89.7408 80.3764 89.7023 80.5598 89.6878 80.7506 c +89.6804 80.7654 89.6767 80.7818 89.6767 80.7999 c +89.6767 80.8184 89.6767 80.8385 89.6767 80.8606 c +89.6767 80.8753 89.6767 80.8918 89.6767 80.9099 c +89.6767 80.9283 89.6767 80.9485 89.6767 80.9706 c +89.6767 80.9927 l +89.6767 85.8436 l +closepath +96.7829 83.1595 m +96.7682 83.1669 96.7534 83.1762 96.7387 83.187 c +96.7242 83.198 96.7095 83.2145 96.6948 83.2366 c +96.68 83.2513 96.6636 83.2695 96.6454 83.2916 c +96.627 83.3137 96.6069 83.3355 96.5848 83.3576 c +96.5629 83.3724 96.5388 83.3888 96.5133 83.407 c +96.4875 83.4254 96.4637 83.4455 96.4419 83.4676 c +96.4124 83.4824 96.3832 83.4988 96.3537 83.5172 c +96.3246 83.5354 96.2914 83.5518 96.2548 83.5666 c +96.1814 83.6031 96.0952 83.6289 95.9963 83.6437 c +95.8974 83.6584 95.7854 83.6655 95.6607 83.6655 c +95.3747 83.6655 95.1235 83.6142 94.9072 83.5116 c +94.6909 83.4089 94.5095 83.2587 94.3627 83.0606 c +94.2161 82.8627 94.1062 82.6535 94.0327 82.4335 c +93.9593 82.2136 93.9228 81.9862 93.9228 81.7515 c +93.9228 81.7442 93.9228 81.7368 93.9228 81.7297 c +93.9228 81.7186 l +93.9228 81.5058 93.9613 81.3025 94.0384 81.1081 c +94.1152 80.9136 94.2272 80.7285 94.3737 80.5525 c +94.5206 80.3764 94.702 80.2446 94.9183 80.1565 c +95.1346 80.0686 95.382 80.0247 95.6607 80.0247 c +95.9614 80.0247 96.2126 80.0592 96.4144 80.129 c +96.616 80.1987 96.7682 80.3033 96.8708 80.4425 c +96.9734 80.5893 97.0669 80.7617 97.1514 80.9595 c +97.2356 81.1577 97.3107 81.3813 97.3768 81.6305 c +97.3768 81.6415 l +97.3878 81.6526 l +97.3878 81.6637 l +98.3448 81.6087 l +98.3448 81.5939 98.3448 81.5812 98.3448 81.5701 c +98.3448 81.5591 98.3485 81.55 98.3559 81.5426 c +98.3559 81.5279 98.3559 81.5168 98.3559 81.5094 c +98.3559 81.5024 98.3559 81.4913 98.3559 81.4766 c +98.3559 81.4692 98.3559 81.4601 98.3559 81.4491 c +98.3559 81.438 98.3595 81.4289 98.3669 81.4216 c +98.3669 81.4068 98.3669 81.3958 98.3669 81.3887 c +98.3669 81.3813 98.3669 81.374 98.3669 81.3666 c +98.3669 81.3079 98.3632 81.2475 98.3559 81.1852 c +98.3485 81.1228 98.3374 81.0585 98.323 80.9927 c +98.3156 80.9632 98.3063 80.9303 98.2952 80.8935 c +98.2844 80.8569 98.2751 80.824 98.2677 80.7946 c +98.2532 80.758 98.2402 80.7231 98.2294 80.69 c +98.2184 80.6571 98.2056 80.6222 98.1909 80.5856 c +98.1027 80.4022 97.9854 80.2225 97.8388 80.0465 c +97.6923 79.8705 97.5126 79.7055 97.3 79.5516 c +97.0944 79.3976 96.8543 79.282 96.5794 79.2052 c +96.3044 79.1281 95.9983 79.0895 95.6607 79.0895 c +95.272 79.0895 94.9129 79.1502 94.5827 79.2709 c +94.2527 79.392 93.9559 79.5774 93.6917 79.8265 c +93.4205 80.0833 93.2189 80.3711 93.0868 80.69 c +92.9547 81.0091 92.8887 81.3629 92.8887 81.7515 c +92.8887 82.1623 92.9437 82.5254 93.0536 82.8406 c +93.1636 83.1558 93.3289 83.4274 93.5489 83.6547 c +93.7688 83.882 93.9999 84.0688 94.2417 84.2157 c +94.4837 84.3622 94.7369 84.4685 95.0008 84.5346 c +95.0303 84.542 95.0577 84.5473 95.0833 84.551 c +95.1091 84.5547 95.1366 84.5604 95.1657 84.5675 c +95.1952 84.5675 95.2227 84.5695 95.2482 84.5731 c +95.274 84.5768 95.3015 84.5822 95.3307 84.5896 c +95.3894 84.5969 95.4464 84.6023 95.5014 84.606 c +95.5564 84.6097 95.6094 84.6117 95.6607 84.6117 c +95.9614 84.6117 96.2421 84.5695 96.5023 84.485 c +96.7628 84.4008 97.0029 84.2744 97.2229 84.1057 c +97.4354 83.937 97.6279 83.75 97.8003 83.5447 c +97.9726 83.3392 98.1248 83.1192 98.2569 82.8845 c +94.6158 80.9156 l +94.1867 81.6855 l +96.7829 83.1595 l +closepath +99.6431 84.5456 m +101.282 80.3875 l +102.756 84.5456 l +103.889 84.5456 l +102.063 79.7826 l +102.019 79.6726 101.969 79.5791 101.914 79.502 c +101.859 79.4251 101.799 79.3608 101.733 79.3095 c +101.667 79.2655 101.599 79.229 101.53 79.1995 c +101.46 79.1703 101.385 79.1519 101.304 79.1445 c +101.297 79.1445 101.291 79.1445 101.287 79.1445 c +101.284 79.1445 101.278 79.1445 101.271 79.1445 c +101.264 79.1445 101.256 79.1445 101.249 79.1445 c +101.168 79.1445 101.09 79.1556 101.012 79.1777 c +100.935 79.1995 100.857 79.2327 100.776 79.2766 c +100.703 79.3353 100.637 79.403 100.578 79.4801 c +100.519 79.5569 100.468 79.6505 100.424 79.7605 c +98.5101 84.5456 l +99.6431 84.5456 l +closepath +108.388 82.3015 m +108.388 82.463 108.357 82.6223 108.294 82.7802 c +108.232 82.9378 108.139 83.0864 108.014 83.2255 c +107.889 83.3724 107.713 83.4824 107.486 83.5555 c +107.259 83.6289 106.984 83.6655 106.661 83.6655 c +106.609 83.6655 106.556 83.6618 106.501 83.6547 c +106.447 83.6473 106.386 83.6363 106.32 83.6215 c +106.254 83.6142 106.188 83.5997 106.122 83.5776 c +106.056 83.5555 105.99 83.5263 105.924 83.4897 c +105.807 83.4381 105.693 83.3667 105.583 83.2751 c +105.473 83.1833 105.367 83.0753 105.264 82.9506 c +105.169 82.8332 105.092 82.6884 105.033 82.516 c +104.974 82.3437 104.938 82.1475 104.923 81.9276 c +104.923 81.6342 104.963 81.3793 105.044 81.1631 c +105.125 80.9468 105.245 80.7654 105.407 80.6185 c +105.576 80.4793 105.75 80.3674 105.929 80.2832 c +106.109 80.1987 106.298 80.1454 106.496 80.1236 c +106.503 80.1236 106.513 80.1236 106.523 80.1236 c +106.534 80.1236 106.544 80.1236 106.551 80.1236 c +106.566 80.1162 106.578 80.1125 106.589 80.1125 c +106.6 80.1125 106.609 80.1125 106.617 80.1125 c +106.632 80.1125 106.643 80.1125 106.65 80.1125 c +106.657 80.1125 106.668 80.1125 106.683 80.1125 c +106.69 80.1125 106.699 80.1125 106.71 80.1125 c +106.721 80.1125 106.731 80.1125 106.738 80.1125 c +106.826 80.1125 106.909 80.1179 106.985 80.129 c +107.062 80.14 107.138 80.1602 107.211 80.1896 c +107.248 80.2041 107.282 80.2188 107.315 80.2336 c +107.348 80.2483 107.383 80.2628 107.42 80.2775 c +107.449 80.2996 107.482 80.3214 107.519 80.3436 c +107.556 80.3657 107.589 80.3912 107.618 80.4207 c +107.655 80.4425 107.689 80.47 107.722 80.5032 c +107.756 80.536 107.79 80.5672 107.827 80.5967 c +107.864 80.6333 107.9 80.6681 107.937 80.701 c +107.974 80.7342 108.01 80.7688 108.047 80.8056 c +108.047 79.6066 l +108.04 79.5918 108.032 79.5808 108.025 79.5737 c +108.025 79.5626 l +107.937 79.5039 107.845 79.4506 107.75 79.403 c +107.655 79.3554 107.556 79.3132 107.453 79.2766 c +107.35 79.2471 107.225 79.2233 107.079 79.2052 c +106.932 79.1867 106.764 79.1777 106.573 79.1777 c +106.566 79.1777 106.56 79.1777 106.556 79.1777 c +106.553 79.1777 106.547 79.1777 106.54 79.1777 c +106.533 79.1777 106.522 79.1777 106.507 79.1777 c +106.5 79.1777 106.492 79.1777 106.485 79.1777 c +106.478 79.1777 106.47 79.1777 106.463 79.1777 c +106.456 79.1777 106.45 79.1777 106.447 79.1777 c +106.443 79.1777 106.437 79.1777 106.43 79.1777 c +106.092 79.1777 105.779 79.238 105.49 79.3591 c +105.2 79.4801 104.934 79.6652 104.692 79.9147 c +104.45 80.1712 104.268 80.4663 104.147 80.7999 c +104.026 81.1339 103.966 81.5094 103.966 81.9276 c +103.966 82.2944 104.025 82.6354 104.142 82.9506 c +104.259 83.2658 104.435 83.5555 104.67 83.8197 c +104.904 84.0836 105.194 84.2817 105.539 84.4135 c +105.884 84.5456 106.283 84.6117 106.738 84.6117 c +107.17 84.6117 107.556 84.553 107.893 84.4357 c +108.23 84.3183 108.513 84.1423 108.74 83.9076 c +108.975 83.6729 109.149 83.4254 109.262 83.1652 c +109.376 82.9047 109.433 82.6354 109.433 82.3564 c +109.433 79.2655 l +108.388 79.2655 l +108.388 82.3015 l +closepath +110.467 85.8436 m +111.501 85.8436 l +111.501 84.5456 l +113.503 84.5456 l +113.503 83.5997 l +111.501 83.5997 l +111.501 80.9156 l +111.501 80.813 111.508 80.7211 111.523 80.6406 c +111.538 80.5598 111.56 80.483 111.589 80.4096 c +111.618 80.3362 111.683 80.2832 111.782 80.25 c +111.881 80.2171 112.018 80.2007 112.194 80.2007 c +113.415 80.2225 l +113.415 79.2655 l +112.117 79.2655 l +112.11 79.2655 112.102 79.2655 112.095 79.2655 c +112.088 79.2655 112.08 79.2655 112.073 79.2655 c +112.066 79.2655 112.06 79.2655 112.057 79.2655 c +112.053 79.2655 112.047 79.2619 112.04 79.2545 c +112.033 79.2545 112.025 79.2545 112.018 79.2545 c +112.011 79.2545 112.004 79.2545 111.996 79.2545 c +111.989 79.2545 111.983 79.2545 111.98 79.2545 c +111.976 79.2545 111.97 79.2545 111.963 79.2545 c +111.714 79.2545 111.498 79.2913 111.314 79.3645 c +111.131 79.4379 110.981 79.5516 110.863 79.7055 c +110.746 79.8597 110.656 80.0247 110.594 80.2007 c +110.531 80.3764 110.493 80.5598 110.478 80.7506 c +110.471 80.7654 110.467 80.7818 110.467 80.7999 c +110.467 80.8184 110.467 80.8385 110.467 80.8606 c +110.467 80.8753 110.467 80.8918 110.467 80.9099 c +110.467 80.9283 110.467 80.9485 110.467 80.9706 c +110.467 80.9927 l +110.467 85.8436 l +closepath +114.449 84.5456 m +115.406 84.5456 l +115.406 79.2655 l +114.449 79.2655 l +114.449 84.5456 l +closepath +114.372 85.7665 m +114.372 85.8473 114.387 85.9224 114.416 85.9922 c +114.446 86.0619 114.493 86.1223 114.559 86.1736 c +114.618 86.2175 114.682 86.2524 114.752 86.2782 c +114.821 86.3037 114.893 86.3167 114.966 86.3167 c +115.047 86.3167 115.12 86.3057 115.186 86.2836 c +115.252 86.2617 115.318 86.2249 115.384 86.1736 c +115.45 86.1223 115.5 86.0619 115.533 85.9922 c +115.566 85.9224 115.582 85.8399 115.582 85.7447 c +115.582 85.6492 115.566 85.565 115.533 85.4916 c +115.5 85.4181 115.454 85.3561 115.395 85.3045 c +115.329 85.2532 115.263 85.2166 115.197 85.1945 c +115.131 85.1727 115.062 85.1616 114.988 85.1616 c +114.915 85.1542 114.842 85.1616 114.768 85.1837 c +114.695 85.2055 114.625 85.2424 114.559 85.2937 c +114.493 85.345 114.446 85.4091 114.416 85.4862 c +114.387 85.563 114.372 85.6492 114.372 85.7447 c +114.372 85.7665 l +closepath +116.792 82.0375 m +116.792 82.4409 116.862 82.804 117.001 83.1266 c +117.14 83.4492 117.346 83.7315 117.617 83.9736 c +117.896 84.2157 118.191 84.3971 118.503 84.5181 c +118.814 84.6392 119.143 84.6996 119.487 84.6996 c +119.502 84.6996 119.518 84.6996 119.537 84.6996 c +119.555 84.6996 119.571 84.6996 119.586 84.6996 c +119.601 84.6922 119.617 84.6885 119.636 84.6885 c +119.654 84.6885 119.674 84.6885 119.696 84.6885 c +119.711 84.6885 119.727 84.6885 119.746 84.6885 c +119.764 84.6885 119.784 84.6885 119.806 84.6885 c +119.821 84.6811 119.837 84.6777 119.856 84.6777 c +119.874 84.6777 119.89 84.6777 119.905 84.6777 c +120.199 84.6335 120.479 84.5473 120.747 84.4192 c +121.014 84.2908 121.273 84.1202 121.522 83.9076 c +121.764 83.6876 121.947 83.4126 122.072 83.0827 c +122.197 82.7527 122.259 82.3675 122.259 81.9276 c +122.259 81.8984 122.259 81.8689 122.259 81.8397 c +122.259 81.8102 122.256 81.7847 122.248 81.7626 c +122.248 81.7331 122.246 81.7039 122.243 81.6747 c +122.239 81.6452 122.237 81.616 122.237 81.5865 c +122.23 81.5279 122.221 81.4692 122.21 81.4105 c +122.199 81.3518 122.186 81.2932 122.171 81.2345 c +122.105 80.9706 122.004 80.7194 121.869 80.481 c +121.733 80.2426 121.559 80.0173 121.346 79.8044 c +121.141 79.5918 120.895 79.4342 120.609 79.3316 c +120.323 79.229 120.004 79.1777 119.652 79.1777 c +119.153 79.1777 118.723 79.2454 118.36 79.3809 c +117.997 79.5167 117.701 79.7239 117.474 80.0025 c +117.247 80.2812 117.076 80.5893 116.962 80.9266 c +116.849 81.264 116.792 81.6268 116.792 82.0154 c +116.792 82.0375 l +closepath +117.837 82.0375 m +117.837 81.9789 117.837 81.9259 117.837 81.878 c +117.837 81.8303 117.841 81.781 117.848 81.7297 c +117.855 81.6781 117.865 81.6288 117.876 81.5812 c +117.887 81.5335 117.896 81.4839 117.903 81.4326 c +117.94 81.2713 117.999 81.1134 118.079 80.9595 c +118.16 80.8056 118.259 80.6588 118.376 80.5196 c +118.501 80.3801 118.655 80.2775 118.838 80.2115 c +119.022 80.1454 119.238 80.1125 119.487 80.1125 c +119.722 80.1125 119.942 80.1454 120.147 80.2115 c +120.352 80.2775 120.54 80.3764 120.708 80.5085 c +120.877 80.6406 121.003 80.8331 121.088 81.086 c +121.172 81.3391 121.214 81.6489 121.214 82.0154 c +121.214 82.2722 121.178 82.505 121.104 82.7142 c +121.031 82.9231 120.921 83.1082 120.774 83.2695 c +120.627 83.4237 120.446 83.541 120.23 83.6215 c +120.013 83.7023 119.766 83.7426 119.487 83.7426 c +119.223 83.7426 118.996 83.7077 118.805 83.638 c +118.615 83.5685 118.457 83.4603 118.332 83.3137 c +118.207 83.1742 118.107 83.024 118.03 82.8627 c +117.953 82.7011 117.899 82.5362 117.87 82.3675 c +117.863 82.3383 117.855 82.3088 117.848 82.2796 c +117.841 82.2501 117.837 82.2209 117.837 82.1915 c +117.837 82.1623 117.837 82.1328 117.837 82.1036 c +117.837 82.0741 117.837 82.0449 117.837 82.0154 c +117.837 82.0375 l +closepath +123.205 82.4667 m +123.205 82.7598 123.257 83.0368 123.359 83.297 c +123.462 83.5575 123.616 83.8013 123.821 84.0286 c +124.034 84.2486 124.283 84.4155 124.569 84.5292 c +124.855 84.6429 125.182 84.6996 125.548 84.6996 c +125.607 84.6996 125.671 84.6959 125.741 84.6885 c +125.811 84.6811 125.886 84.6704 125.966 84.6556 c +126.047 84.6409 126.129 84.6227 126.214 84.6006 c +126.298 84.5785 126.384 84.5493 126.472 84.5125 c +126.626 84.4467 126.773 84.3622 126.912 84.2596 c +127.052 84.157 127.187 84.0323 127.319 83.8857 c +127.451 83.7463 127.55 83.5739 127.616 83.3687 c +127.682 83.1632 127.715 82.9285 127.715 82.6646 c +127.715 82.6572 127.715 82.6481 127.715 82.6371 c +127.715 82.626 127.715 82.6133 127.715 82.5985 c +127.715 82.5911 127.715 82.5821 127.715 82.571 c +127.715 82.56 127.715 82.5472 127.715 82.5325 c +127.715 79.2655 l +126.67 79.2655 l +126.67 82.3786 l +126.67 82.5398 126.646 82.6994 126.599 82.857 c +126.551 83.0146 126.48 83.1632 126.384 83.3026 c +126.289 83.4492 126.164 83.5592 126.01 83.6326 c +125.856 83.706 125.673 83.7426 125.46 83.7426 c +125.262 83.7426 125.088 83.7097 124.938 83.6437 c +124.788 83.5776 124.657 83.4787 124.547 83.3466 c +124.437 83.2145 124.351 83.0733 124.289 82.9231 c +124.227 82.7729 124.184 82.6133 124.162 82.4446 c +124.162 79.2655 l +123.205 79.2655 l +123.205 82.4667 l +closepath +0 0 0 rgb +F +newpath +113.172 76.343 m +113.172 76.6049 113.208 76.8397 113.279 77.0474 c +113.35 77.2549 113.455 77.4355 113.593 77.5889 c +113.736 77.7422 113.883 77.8732 114.037 77.9817 c +114.19 78.0903 114.351 78.1745 114.519 78.2343 c +114.549 78.2456 114.58 78.2558 114.612 78.2652 c +114.644 78.2746 114.676 78.2848 114.71 78.2961 c +114.74 78.3035 114.771 78.3111 114.803 78.3185 c +114.835 78.3259 114.865 78.3315 114.895 78.3352 c +114.959 78.3465 115.02 78.3551 115.078 78.3607 c +115.136 78.3661 115.193 78.3689 115.249 78.3689 c +115.402 78.3689 115.55 78.3539 115.692 78.3242 c +115.835 78.2941 115.969 78.2513 116.096 78.1952 c +116.223 78.1391 116.349 78.0659 116.472 77.9761 c +116.596 77.8865 116.718 77.7816 116.837 77.662 c +116.484 77.2745 l +116.469 77.2821 116.454 77.2915 116.441 77.3026 c +116.428 77.3139 116.414 77.3269 116.4 77.3419 c +116.392 77.3493 116.384 77.357 116.377 77.3643 c +116.369 77.372 116.362 77.3794 116.354 77.3867 c +116.343 77.3944 116.334 77.4018 116.326 77.4094 c +116.319 77.4168 116.311 77.4242 116.304 77.4318 c +116.237 77.4879 116.164 77.5412 116.085 77.5917 c +116.007 77.6421 115.922 77.6917 115.833 77.7405 c +115.743 77.7853 115.649 77.8199 115.552 77.8443 c +115.455 77.8686 115.354 77.8808 115.249 77.8808 c +115.021 77.8808 114.819 77.8479 114.645 77.7825 c +114.472 77.717 114.325 77.6189 114.205 77.4879 c +114.089 77.3607 113.995 77.2252 113.921 77.0809 c +113.849 76.9369 113.799 76.7864 113.773 76.6293 c +113.769 76.603 113.764 76.5777 113.759 76.5534 c +113.753 76.5293 113.75 76.5037 113.75 76.4777 c +113.747 76.4516 113.745 76.4264 113.745 76.402 c +113.745 76.3776 113.745 76.3541 113.745 76.3317 c +113.745 76.1446 113.776 75.964 113.837 75.7903 c +113.899 75.6162 113.992 75.4507 114.115 75.2934 c +114.239 75.1363 114.395 75.0156 114.584 74.9314 c +114.773 74.8472 114.994 74.7996 115.249 74.7885 c +115.253 74.7885 115.255 74.7885 115.257 74.7885 c +115.259 74.7885 115.262 74.7885 115.266 74.7885 c +115.269 74.7885 115.273 74.7885 115.277 74.7885 c +115.281 74.7885 115.284 74.7885 115.288 74.7885 c +115.296 74.7885 115.301 74.7885 115.305 74.7885 c +115.309 74.7885 115.312 74.7885 115.313 74.7885 c +115.315 74.7885 115.318 74.7885 115.322 74.7885 c +115.49 74.7845 115.644 74.8072 115.782 74.8557 c +115.92 74.9044 116.042 74.9793 116.147 75.0802 c +116.255 75.1774 116.346 75.2814 116.419 75.3917 c +116.492 75.502 116.549 75.6171 116.59 75.737 c +116.601 75.7667 116.612 75.7957 116.621 75.8237 c +116.631 75.8518 116.637 75.879 116.641 75.9054 c +116.644 75.9201 116.647 75.9343 116.649 75.9473 c +116.651 75.9603 116.652 75.9745 116.652 75.9895 c +116.656 76.0006 116.659 76.0128 116.66 76.0258 c +116.662 76.0389 116.663 76.053 116.663 76.0681 c +115.294 76.0791 l +115.294 76.6123 l +117.236 76.6123 l +117.236 76.1242 l +117.213 75.8285 117.148 75.5695 117.039 75.3469 c +116.931 75.1241 116.781 74.9342 116.59 74.7772 c +116.396 74.6201 116.187 74.5031 115.964 74.4262 c +115.742 74.3497 115.503 74.3114 115.249 74.3114 c +114.95 74.3114 114.676 74.3571 114.429 74.4489 c +114.183 74.5405 113.964 74.6816 113.773 74.8727 c +113.582 75.0595 113.436 75.2758 113.335 75.5207 c +113.234 75.7659 113.18 76.0363 113.172 76.3317 c +113.172 76.343 l +closepath +117.724 76.2138 m +117.724 76.33 117.746 76.4394 117.791 76.5423 c +117.836 76.6452 117.905 76.7396 117.999 76.8258 c +118.092 76.9117 118.201 76.9763 118.324 77.0194 c +118.448 77.0622 118.586 77.0837 118.74 77.0837 c +118.848 77.0837 118.944 77.0755 119.026 77.0585 c +119.108 77.0418 119.175 77.0182 119.228 76.9885 c +119.28 76.9584 119.329 76.9219 119.374 76.8791 c +119.419 76.836 119.458 76.7864 119.492 76.7302 c +119.525 76.775 119.567 76.8173 119.615 76.8564 c +119.664 76.8958 119.722 76.9341 119.789 76.9715 c +119.857 77.0089 119.931 77.0369 120.014 77.0557 c +120.096 77.0744 120.188 77.0837 120.289 77.0837 c +120.416 77.0837 120.536 77.0661 120.648 77.0304 c +120.76 76.995 120.865 76.9397 120.962 76.8649 c +121.059 76.7937 121.133 76.7124 121.184 76.6208 c +121.234 76.5293 121.261 76.4272 121.265 76.315 c +121.265 76.3113 121.265 76.3084 121.265 76.3065 c +121.265 76.3048 121.265 76.3019 121.265 76.298 c +121.265 76.2943 121.265 76.2914 121.265 76.2897 c +121.265 76.2878 121.265 76.2849 121.265 76.2812 c +121.261 76.2775 121.26 76.2747 121.26 76.2727 c +121.26 76.271 121.26 76.2682 121.26 76.2645 c +121.26 76.2605 121.26 76.258 121.26 76.256 c +121.26 76.254 121.26 76.2512 121.26 76.2475 c +121.26 74.3562 l +120.771 74.3562 l +120.771 76.0791 l +120.771 76.0754 120.771 76.0746 120.771 76.0763 c +120.771 76.0783 120.773 76.0791 120.777 76.0791 c +120.777 76.0828 120.777 76.0856 120.777 76.0876 c +120.777 76.0896 120.777 76.0922 120.777 76.0961 c +120.777 76.1035 120.777 76.11 120.777 76.1157 c +120.777 76.1214 120.777 76.1259 120.777 76.1296 c +120.777 76.1409 120.776 76.1523 120.774 76.1633 c +120.772 76.1746 120.769 76.1877 120.766 76.2027 c +120.762 76.2138 120.759 76.226 120.757 76.2393 c +120.756 76.2523 120.753 76.2662 120.749 76.2812 c +120.734 76.326 120.712 76.3691 120.682 76.4102 c +120.651 76.4516 120.616 76.4907 120.575 76.5281 c +120.534 76.5655 120.489 76.5936 120.44 76.6123 c +120.392 76.631 120.341 76.6404 120.289 76.6404 c +120.221 76.6404 120.159 76.6282 120.101 76.6038 c +120.043 76.5797 119.989 76.5432 119.941 76.4944 c +119.892 76.4459 119.854 76.3943 119.826 76.3402 c +119.798 76.286 119.778 76.2288 119.767 76.169 c +119.763 76.1616 119.76 76.1531 119.758 76.1437 c +119.756 76.1344 119.755 76.1259 119.755 76.1185 c +119.755 76.1072 119.755 76.0978 119.755 76.0905 c +119.755 76.0828 119.755 76.0754 119.755 76.0681 c +119.755 74.3562 l +119.273 74.3562 l +119.273 76.0343 l +119.273 76.1165 119.262 76.1934 119.239 76.2645 c +119.217 76.3354 119.183 76.4008 119.138 76.4609 c +119.093 76.5208 119.037 76.5655 118.97 76.5956 c +118.903 76.6254 118.826 76.6404 118.74 76.6404 c +118.631 76.6293 118.541 76.6049 118.47 76.5675 c +118.399 76.5301 118.347 76.4797 118.313 76.4159 c +118.279 76.3524 118.254 76.2849 118.237 76.2138 c +118.22 76.1429 118.212 76.0698 118.212 75.9949 c +118.212 75.9912 118.212 75.9876 118.212 75.9839 c +118.212 75.9782 l +118.212 74.3562 l +117.724 74.3562 l +117.724 76.2138 l +closepath +122.23 78.2456 m +122.23 75.7256 l +122.23 75.576 122.249 75.4422 122.286 75.3242 c +122.324 75.2066 122.378 75.1026 122.449 75.0127 c +122.524 74.9231 122.613 74.8557 122.716 74.8109 c +122.819 74.7658 122.936 74.7434 123.067 74.7434 c +123.19 74.7434 123.3 74.7613 123.398 74.7967 c +123.495 74.8324 123.579 74.8857 123.65 74.9566 c +123.718 75.0277 123.774 75.1026 123.819 75.1811 c +123.864 75.2599 123.897 75.3401 123.92 75.4226 c +123.927 75.4413 123.932 75.4609 123.934 75.4816 c +123.936 75.502 123.939 75.5235 123.942 75.5459 c +123.946 75.5686 123.949 75.5899 123.95 75.6105 c +123.952 75.6312 123.953 75.6508 123.953 75.6695 c +123.953 75.8192 123.934 75.9501 123.894 76.0624 c +123.855 76.1746 123.798 76.2662 123.723 76.3374 c +123.649 76.4122 123.569 76.4711 123.485 76.5142 c +123.401 76.5573 123.313 76.5843 123.224 76.5956 c +123.213 76.5956 123.202 76.5956 123.193 76.5956 c +123.184 76.5956 123.175 76.5956 123.168 76.5956 c +123.164 76.5956 123.159 76.5956 123.154 76.5956 c +123.148 76.5956 123.143 76.5973 123.14 76.6013 c +123.132 76.6013 123.126 76.6013 123.123 76.6013 c +123.119 76.6013 123.115 76.6013 123.112 76.6013 c +123.056 76.6013 123.003 76.5973 122.954 76.5899 c +122.906 76.5826 122.861 76.5712 122.82 76.5562 c +122.779 76.5412 122.738 76.5253 122.699 76.5086 c +122.66 76.4918 122.62 76.474 122.578 76.4553 c +122.573 76.4496 l +122.567 76.4496 l +122.56 76.4459 122.552 76.4422 122.545 76.4383 c +122.537 76.4346 122.532 76.4329 122.528 76.4329 c +122.52 76.4289 122.514 76.4252 122.508 76.4215 c +122.503 76.4179 122.496 76.4142 122.489 76.4102 c +122.474 76.4065 122.46 76.402 122.446 76.3963 c +122.433 76.3906 122.419 76.3841 122.404 76.3768 c +122.404 76.8762 l +122.446 76.8949 122.486 76.9136 122.525 76.9323 c +122.564 76.9511 122.605 76.9678 122.646 76.9828 c +122.687 76.9978 122.728 77.0109 122.769 77.0222 c +122.81 77.0333 122.853 77.0426 122.898 77.0503 c +122.917 77.054 122.936 77.0568 122.957 77.0585 c +122.978 77.0605 122.999 77.0633 123.022 77.067 c +123.033 77.067 123.043 77.067 123.053 77.067 c +123.062 77.067 123.072 77.069 123.084 77.0727 c +123.091 77.0727 123.1 77.0727 123.112 77.0727 c +123.123 77.0727 123.134 77.0727 123.145 77.0727 c +123.321 77.0727 123.486 77.0435 123.639 76.9856 c +123.793 76.9275 123.937 76.8388 124.071 76.7189 c +124.206 76.603 124.308 76.4646 124.377 76.3036 c +124.446 76.1429 124.481 75.9615 124.481 75.7594 c +124.481 75.5723 124.451 75.3926 124.391 75.2205 c +124.331 75.0484 124.242 74.8838 124.122 74.7267 c +124.006 74.5694 123.859 74.4534 123.681 74.3786 c +123.503 74.3038 123.298 74.2664 123.067 74.2664 c +122.835 74.2664 122.633 74.3029 122.461 74.3758 c +122.288 74.4489 122.146 74.56 122.034 74.7097 c +121.922 74.8633 121.837 75.0269 121.781 75.2009 c +121.725 75.375 121.697 75.5609 121.697 75.7594 c +121.697 78.2456 l +122.23 78.2456 l +closepath +124.969 78.2904 m +125.497 78.2904 l +125.497 76.6965 l +127.181 76.6965 l +127.181 78.2904 l +127.708 78.2904 l +127.708 74.3562 l +127.181 74.3562 l +127.181 76.169 l +125.497 76.169 l +125.497 74.3562 l +124.969 74.3562 l +124.969 78.2904 l +closepath +F +%%PageTrailer +showpage +%%Trailer +end +%%DocumentSuppliedResources: procset Linux-Sketch-Procset 1.0 2 +%%EOF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/admin-manual/installation-admin-manual.tex Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,204 @@ +\documentclass[12pt]{scrartcl} + +%---------------------------------------------- +% Load packages + +\usepackage{a4} +\usepackage{times} +\usepackage[latin1]{inputenc} +\usepackage{fancyhdr} +%\usepackage{german} +%\usepackage[marvosym]{eurofont} +%\usepackage[all, light]{draftcopy} +%\usepackage{supertabular} +%\usepackage{colortbl} +%\usepackage{epsf} +\usepackage{graphicx} +\usepackage{lastpage} +%\usepackage{proposal} +\usepackage{listings} +\usepackage[hyperindex=true, bookmarks=true, breaklinks=true, +colorlinks=true, linkcolor=red,bookmarksopen]{hyperref} + +%---------------------------------------------- +% Document DATE and VERSION +% set these values when releasing a new version + +\newcommand{\documentdate}{April 27th, 2010} +\newcommand{\documentversion}{1.0} +\newcommand{\documentrevision}{FIXME SVN REV} +\newcommand{\documentID}{installation-admin-manual.tex} +%---------------------------------------------- + +%---------------------------------------------- +% Document TITLE +\newcommand{\documenttitle}{Generic Viewer -- Installation and Operations} + + +%---------------------------------------------- +% Some parameters for layouting + +\paperwidth=21cm +\hoffset=-0.54cm +\textwidth=17cm + +\paperheight=29.7cm +\voffset=-1.5cm +\topmargin=0cm +\headheight=1cm +\textheight=24cm + +\setcounter{secnumdepth}{4} +\setcounter{tocdepth}{4} + +%---------------------------------------------- + +\begin{document} + +\lstset{ % +language=sh, +basicstyle=\ttfamily, % the size of the fonts that are used for the code +numbers=left, % where to put the line-numbers +numberstyle=\footnotesize, % the size of the fonts that are used for the line-numbers +numbersep=5pt, % how far the line-numbers are from the code +% backgroundcolor=\color{white}, % choose the background color. You must add \usepackage{color} +showspaces=false, % show spaces adding particular underscores +showstringspaces=false, % underline spaces within strings +showtabs=false, % show tabs within strings adding particular underscores +frame=single, % adds a frame around the code +tabsize=2, % sets default tabsize to 2 spaces +captionpos=b, % sets the caption-position to bottom +breaklines=true, % sets automatic line breaking +breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace +title=\lstname, % show the filename of files included with \lstinputlisting; also try caption instead of title +escapeinside={\%*}{*)} % if you want to add a comment within your code +% morekeywords={*,...} % if you want to add more keywords to the set +} + +%----------------------------------- +% HEADER/FOOTER DEFINITION + +% for some pages latex switches back to pagestyle plain :-( +\fancypagestyle{plain}{% + \fancyhf{} % clear all header and footer fields + \fancyhead[LO,RE]{\footnotesize \documenttitle\\ \leftmark} + \fancyfoot[RO,LE]{\footnotesize Intevation GmbH} % Author + \fancyfoot[CO,CE]{\footnotesize \thepage/\pageref{LastPage}} + \fancyfoot[LO,RE]{\footnotesize \documentdate + \\\documentID} + \renewcommand{\footrulewidth}{0.4pt} +} + +% and now define pagestyle fancy +\fancyhead{} % clear all fields +\fancyhead[LO]{\footnotesize \documenttitle\\ \leftmark} + +\fancyfoot{}% clear all fields +\fancyfoot[RO]{\footnotesize Intevation GmbH} % Author +\fancyfoot[CO]{\footnotesize \thepage/\pageref{LastPage}} +\fancyfoot[LO]{\footnotesize \documentdate +\\\documentID} + +\renewcommand{\footrulewidth}{0.4pt} + +% +% END Header/Footer Definition +%----------------------------------- + +%---------------------------------------------- +% MACRO DEFINITION +% +% \Fig{figure}{lof text}{caption} : +% places 'figure' and +% writes 'caption' at the bottom with leading +% 'Abbildung figno:'. 'lof text' is added to the list of +% figures. +% Example: +% \Fig{\epsfxsize30mm \epsffile{x.eps}}{the x}{the x} +% +% \FigNoEntry{}{} : +% same as above, no entry in figures list +% +% \FigCaption{} : +% line with figure caption, setting figure +% counter and figures list +% +% \Tab{table}{lot text}{caption} : +% places 'table' and writes caption on top of the table +% with leading 'Tabelle tabno:'. 'lot text' is added to +% the list of tables. +%**************************************************************************** +% Figure makro for graphics continously enumerated. +% + +\newcounter{FigCnt} +\newcounter{TabCnt} + +\newcommand{\Fig}[3]% +{ + \refstepcounter{FigCnt} + \addcontentsline{lof}{figure}% + {\protect\numberline{\arabic{FigCnt}}{#2}} + \mbox{#1} + +\nopagebreak + {Abbildung \arabic{FigCnt}: #3} + +} + +\newcommand{\FigNoEntry}[2]% +{ + \refstepcounter{FigCnt} + \mbox{#1} + +\nopagebreak + {Abbildung \arabic{FigCnt}: #2} + +} + +\newcommand{\FigCaption}[1]% +{ + \refstepcounter{FigCnt} + \addcontentsline{lof}{figure}% + {\protect\numberline{\arabic{FigCnt}}{#1}} + + %{Figure \thesection.\arabic{FigCnt}: #1} +} + +\newcommand{\Tab}[3]% +{ + \refstepcounter{TabCnt} + \addcontentsline{lot}{figure}% + {\protect\numberline{\arabic{TabCnt}}{#2}} + {Tabelle \arabic{TabCnt}: #3} +\nopagebreak + #1 + +} + +\hyphenation{Intevation} +% end macro definition + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcounter{schritt} +\renewcommand{\theschritt}{\Roman{schritt}} +%\makeatletter\renewcommand{\p@schritt}{Abschnitt~\thesubsubsection~}\makeatother + +%----------------------------------- +% DOCUMENT SETTINGS +\pagestyle{fancy} +\setlength{\parindent}{0cm} +\setlength{\parskip}{5pt plus 2pt minus 1pt} + +% Start actual content here +\include{title} +\newpage +\tableofcontents +\include{overview} +\include{installation-base} +\include{installation-artifact-server} +\include{installation-webclient} +\include{operating-the-system} + +\end{document}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/admin-manual/installation-artifact-server.tex Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,139 @@ +\subsection{Artifact-Server} +The Artifact-Server contains the entire business logic of the system. +The server provides a RESTful interface with a XML-based protocol to the +webclient. Technically the server is a standalone java process serving the +REST interface. + +\subsubsection*{Installation} +\label{ref:artifact-server-install} + +Running the server with its own user\footnote{Remark: A group with the +same name is created automatically.}: +\begin{lstlisting} + adduser artifacts +\end{lstlisting} + +Setup and configuring logging: +\begin{lstlisting} + cd /var/log + mkdir artifacts + chown -r root:artifacts artifacts + chmod 770 artifacts + chmod g+s artifacts +\end{lstlisting} + +The log level can be adjusted in the file \verb+ conf/log4j.properties+. +Further information can be found there. + +Integrate software of artifact-server into filesystem: +\begin{lstlisting} + cd /opt + tar xfvj /root/artifact-server-$VERSION.tar.bz2 + ln -s artifact-server-$VERSION artifact-server + cd artifact-server +\end{lstlisting} + +Setting the access rights: +\begin{lstlisting} + bin/setup.sh +\end{lstlisting} + +Configure connection to database: +\begin{lstlisting} + cd /opt/artifact-server + vim conf/arcsdeconnectionpool.properties + + # in conf/arcsdeconnectionpool.properties do: + server=xyz.server.com + username=guest + credentials=XYZ + port=5151 + database=esri_sde +\end{lstlisting} + +Configure address for finding the WMS-Server: +\begin{lstlisting} + cd /opt/artifact-server/ + vim conf/conf.xml + # adapt the address in the element + # artifact-database/gnv/mapserver/server. This is + # the string the server uses to provide an address of the mapserver to enduser. + e.g. http://SERVER/cgi-bin/gnv-wms +\end{lstlisting} + +The artifact server can export and import projects of the user's +parameterizations. In order to protect the server against invalid files, +configure a secret for signing artifacts. + +{\em Hint: If the secret is changed, all files that were created before +are not valid anymore.} + +\begin{lstlisting} + # generate a randomized string, e.g. + cd /opt/artifact-server/ + pwgen -s 30 + # populate the tag artifact-database/export-secret +\end{lstlisting} + +Adapt TCP-port of artifact-server, if the default has to be changed +(default:8181): +\begin{lstlisting} + cd /opt/artifact-server + vim conf/conf.xml + + # in conf/conf.xml edit the element artifact-database/rest-server/port +\end{lstlisting} + +Integrate artifact-server in startup-process of operating system: +\begin{lstlisting} + cp -i /opt/artifact-server/install/debian/artifact-server/artifact-server-init-scipt + /etc/init.d/artifact-server + chmod +x /etc/init.d/artifact-server + update-rc.d artifact-server defaults +\end{lstlisting} + +The server can be started and stopped via +\begin{lstlisting} + /etc/init.d/artifact-server {start | stop} +\end{lstlisting} + +The installation of the artifact-server is finished. It can be tested +now. + +\subsubsection*{Test of the Installation} +\label{ref:artifact-server-testing} + Start the server: + \begin{lstlisting} + /etc/init.d/artifact-server start + \end{lstlisting} + + 1. Operating System: Check if the process of the server called "App" + is running: + \begin{lstlisting} + jps + + # Example with list of java processes: + 19252 + 19509 Jps + 19441 App + + cat /var/run/artifact-server.pid + \end{lstlisting} + + Task: Compare the running process numbers. + + 2. Network: Check if the artifact-server opens a TCP-port (default: 8181) + \begin{lstlisting} + netstat -nltp | grep 8181 + + # Check for an entry like: + tcp 0 0 127.0.0.1:8181 0.0.0.0:* LISTEN 18648/java + \end{lstlisting} + + 3. Artifact-Server ready for communication with client? + \begin{lstlisting} + curl "http://localhost:8181/factories" | xmllint --format - + \end{lstlisting} + + Task: Check for a XML-document describing possible expert information + systems (FIS)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/admin-manual/installation-base.tex Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,414 @@ +\section{Installation and Configuration} + +This section describes preconditions for the entire system and an installation +on a Debian 5.0.x (Lenny) for the GNV-System without an running X-Environment. +Mostly, the debian package management\footnote{Further information at +\url{http://www.debian.org/doc/manuals/debian-reference/ch02.en.html}} +using \verb+ aptitude+ is used in this manual. + +If existing configurations have to be changed, the following notation will be +used: \verb|+| for adding a line replacing the marked by \verb|-|. + +\subsection{Preconditions} + +\subsubsection*{System} + +\begin{itemize} + \item Storage for the delivered software: 100 MB + \item Current processor on a 32-bit Architecture (Beginning + 2010)\footnote{Running on a 64-bit system should work out of the box + and improve scalibility issues (not tested yet).} + \item RAM: 1 GB for production as minimum.\footnote{This value depends + mainly on the amount of connected users.} + \item Network access to Database Backend + \item RW-Access to the filesystem for logging, shapefile-export, + caching +\end{itemize} + +\subsubsection*{Database: Software and Data} + +The software has been developed for the following system: + +\begin{itemize} + \item ESRI ArcSDE 9.3.1 on Oracle 10.2\footnote{The development + started in ESRI ArcSDE 9.2. There are known + problems with this version.} + \item ArcMarineBSH, model package "Time Series and Measurements" + \item ArcMarineBSH, model package " MeshFeature" + \item ArcMarineBSH, model package "Marine Feature" + \item ArcS57 -- International Hydrographic Organization (IHO) S-57 for + ENC Data Model. - ESRI Data Models. http://support.esri.com/datamodels + \item CONTIS -- Federal Maritime and Hydrographic Agency (BSH). Continental + Shelf Information System -- \\ + \url{http://www.bsh.de/en/Marine\_uses/Industry/CONTIS\_maps/index.jsp} + \item GNV specific schema MapViewer interface -- Schema for integrating with MapViewer and + their WMS services + \item GNV specific schema for managing the cache -- The central + dataware house is updated regulary. To keep the cache up-to-date, + needs to cleaned after database updates. +\end{itemize} + + +\subsection{Operating System} + +{\em Hint}: Configuring of partitions, firewalls, etc. for the system is out of +the scope of this documentation. + +\subsection{Preparations} + +In some steps it is required to use templates wich are packed in +\verb+ artifact-server-$VERSION.tar.bz2+ to get access to those files. + +Please extract the tar.bz2 file as explained in +Chapter~\ref{ref:artifact-server-install}, + p.~\pageref{ref:artifact-server-install}. + +The complete document use the system-variable \verb+$ARTIFACT_SERVER_HOME+ +to refer the root-directory of the Artifac-Server. +It might be helpful to export this variable using the following command: + +\verb+ export ARTIFACT_SERVER_HOME=/opt/artifact-server+ + +\subsection{Java Environment} + +\subsubsection*{Installation Sun Java 6} + +This GNV-system is developed for Sun Java 6. + +Add non-free packages of the Debian distribution to the system in +\verb+/etc/apt/sources.list+: + +\begin{lstlisting} + [...] + deb http://ftp.de.debian.org/debian/ lenny main non-free + deb-src http://ftp.de.debian.org/debian/ lenny main + + deb http://security.debian.org/ lenny/updates main + deb-src http://security.debian.org/ lenny/updates main + [...] +\end{lstlisting} + + +Install Sun Java 6 and its dependencies by executing the following: + +\begin{lstlisting} + apt-get update + apt-get install sun-java6-jdk +\end{lstlisting} + +\subsubsection*{Install Native Components for Java6 (optional)} + +This step is optional but recommended\footnote{For background +information, c.f. \url{http://tomcat.apache.org/tomcat-5.5-doc/apr.html}}. + +For a better support of the native server technologies, the package +\verb+libtcnative+ can be installed. + +\begin{lstlisting} + apt-get install libtcnative-1 + cd /usr/lib/jvm/java-6-sun/jre/lib/i386/client + ln -s /usr/lib/libtcnative-1.so +\end{lstlisting} + +\subsubsection*{Configuration} + +To ensure that the Apache Tomcat and the GNV Artifact-Server will use +Sun Java 6 exclusively, switch to the default Java version +globally\footnote{This manual assumes that there are no other packages +depending to another Java version.}. + +Use \verb+update-alternatives+ mechanism of the Debian +system\footnote{Background information: {\tt man update-alternatives}}, execute: + +\verb+ update-alternatives --list java+ + +Lists all installed Java-Environments. E.g.: + +\begin{lstlisting} + Auswahl Alternative + ----------------------------------------------- + 1 /usr/bin/gij-4.3 + + 2 /usr/lib/jvm/java-gcj/jre/bin/java + 3 /usr/lib/jvm/java-1.5.0-sun/jre/bin/java + * 4 /usr/lib/jvm/java-6-sun/jre/bin/java +\end{lstlisting} + + +\verb+update-alternatives --config java+ + +Opens a dialog to reconfigure the java version which should be used as default. +Type the Number of the the java which should be used. +For the example above, type "4". + +\subsubsection*{Test of the Installation} + +Execute \verb+ java -version+ + +Check if a version of 1.6.0* has been set. Check: + +\begin{lstlisting} + java version "1.6.0_20-b02" + Java(TM) SE Runtime Environment (build 1.6.0_20-b02) + Java HotSpot(TM) Server VM (build 11.2-b01, mixed mode) +\end{lstlisting} + + +\subsection{Tomcat Application Server} +To run the GNV-System a Apache Tomcat Server Version 5.5 is required. +This section describes the steps for installing and configuring +Apache Tomcat. + +\subsubsection*{Installation} + +To install the Tomcat Application-Server and its dependencies, execute: + +\verb+ apt-get install tomcat5.5+ + +\subsubsection*{Configuration} + +Adapt some run-time specific properties in +\verb+/etc/default/tomcat5.5+: + +\begin{lstlisting} + - #JAVA_HOME="/usr/lib/jvm/java-6-sun/" + + JAVA_HOME="/usr/lib/jvm/java-6-sun/" + + - #JAVA_OPTS="-Djava.awt.headless=true -Xmx128M" + + JAVA_OPTS="-Djava.awt.headless=true -Xmx1024m -server" + + - #TOMCAT5_SECURITY=yes + + TOMCAT5_SECURITY=no +\end{lstlisting} + +{\bf Hint: As there is no Java security policy for the GNV WebClient, +Java Security Management is switched off.} + +The Apache Tomcat is integrate with Apache WebServer just via the Apache +JServ Protocoll (AJP). To secure the connection, just local connections +are allowed for AJP on Tomcat\footnote{For background information, c.f. +\url{http://tomcat.apache.org/tomcat-5.5-doc/connectors.html}}. + +Modify the \verb+ /etc/tomcat5.5/server.xml+: +\begin{lstlisting} + + # Deactivate Standard HTTP Connector: + + +<!-- + <Connector port="8180" maxHttpHeaderSize="8192" address="127.0.0.1" + maxThreads="150" minSpareThreads="25" maxSpareThreads="75" + enableLookups="false" redirectPort="8443" acceptCount="100" + connectionTimeout="20000" disableUploadTimeout="true" /> + +--> + + - <Connector port="8009" + - enableLookups="false" redirectPort="8443" protocol="AJP/1.3" /> + + + <Connector port="8009" + + enableLookups="false" redirectPort="8443" protocol="AJP/1.3" address="127.0.0.1"/> +\end{lstlisting} + +To activate these changes, restart Apache Tomcat: + +\verb+ /etc/init.d/tomcat5.5 restart+ + + \subsubsection*{Test of the Installation} + +Check if the port 8009 is opened via: +\verb+ netstat -nltp | grep 8009+ + +A possible listing looks like this: +\begin{lstlisting} + tcp 0 0 127.0.0.1:8009 0.0.0.0:* LISTEN 19252/jsvc +\end{lstlisting} + +So fare, there is no commandline client for AJP to test the connection. +If there are problems, setup \verb+ mod_jk+ module in Apache WebServer +and check its according log files. + +\subsection{Apache Webserver} +This section describes the required steps for the installation and configuration +of the Apache Webserver Version 2.2. Apache WebServer controls all +HTTP-Connections to the outside of the system. Apache Tomcat is +integrated via mod\_jk. + +\subsubsection*{Installation} + +To install the Apache Webserver you have to execute the following command: + +\verb+ apt-get install apache2+ + +To establish the connection between the Tomcat application server and +Apache Webserver an additional Module "mod\_jk" has to be installed. + +\verb+ apt-get install libapache2-mod-jk+ + +\subsubsection*{Configuring mod\_jk} + +Edit the settings for mod\_jk in +file \verb+ /etc/libapache2-mod-jk/workers.properties+. For further +information, there are comments in the configuration file\footnote{Background +information can be found at \\ +\url{http://tomcat.apache.org/connectors-doc/generic\_howto/workers.html}}. + + +\begin{lstlisting} + - workers.java_home= /usr/lib/jvm/java-gcj/ + + workers.java_home=/usr/lib/jvm/java-6-sun +\end{lstlisting} + +In file \verb+ /etc/apache2/httpd.conf+: + +\begin{lstlisting} + + JkWorkersFile "/etc/libapache2-mod-jk/workers.properties" + + JkLogFile "/var/log/mod_jk.log" +\end{lstlisting} + +After finishing the configuration, enable the module in Apache +WebServer: \verb+ a2enmod jk+ and restart the server +\verb+ /etc/init.d/apache2 restart+. + + +\subsubsection*{Publish the site in Apache WebServer} + +Depending of the existing configuration of Apache WebServer, the +following steps can differ. In this case, a vanilla configuration is +assumed\footnote{Background information about Apache WebServer can +be found at \url{http://httpd.apache.org/docs/2.2/}}. + +Disable default configuration +\verb+ a2dissite default+ + +Adapt eMail-address for configuration in +\verb+ $ARTIFACT_SERVER_HOME/install/debian/apache2/gnv+. + +Enable the specific site (VirtualHost) in Apache WebServer: +\begin{lstlisting} + cp -i $ARTIFACT_SERVER_HOME/install/debian/apache2/gnv to /etc/apache2/sites-available + # Activate site for GNV + a2ensite gnv + /etc/init.d/apache reload +\end{lstlisting} + + +\subsubsection*{Test of the Installation} + +You can test the installation by executing the following url: + +\verb+ curl "http://localhost/gnv/" -o test+ + +After a successful installation, the file {test} will contain HTML describing +the startpage of the GNV WebClient. + + +\subsection{UMN MapServer: Installation and configuration} +The UMN MapServer is part of the artifact server. It is responsible for +rendering shapefiles produced by the artifact-server and publish them as +OGC Web Map Service. + +\subsubsection*{Installation} +It is recommended to use a more recent version than the one in Debian +Lenny. In the installation package, there is a debian package of +MapServer that should be installed. + +In order to verify the integrity of the installation package, it is necessary to import +a GPG-Key which was used to sign the packages: + +\begin{lstlisting} +gpg --keyserver hkp://keys.gnupg.net --recv-keys EC70B1B8 +gpg --export EC70B1B8 | apt-key add - +\end{lstlisting} + +Installing the mapserver-gp and its dependencies, executing the following command: + +\begin{lstlisting} +cd $ARTIFACT_SERVER_HOME/install/debian/umn-mapserver +dpkg -i cgi-mapserver-gp_5.6.3-1~gp+1_i386.deb +\end{lstlisting} + +If there are libraries which are required by the Mapserver but not +installed yet run the following command: +\begin{lstlisting} +apt-get -f install +\end{lstlisting} + + +Provide a possibility to integrate Mapserver properly and transfer +configurations to MapServer during runtime: + +\begin{lstlisting} +cd /usr/lib/cgi-bin +cp -i $ARTIFACT_SERVER_HOME/install/debian/umn-mapserver/gnv-wms . +chmod +x gnv-wms +\end{lstlisting} + +For setting proper contact details in the WMS Capabilities response, +edit the file \verb+ $ARTIFACT_SERVER_HOME/conf/maptemplates/mapfile.vm+ +in the section WEB $\rightarrow$ METADATA. + +The Mapserver will need fonts for rendering lables in the map. +To provide this it is required to install the freefonts. +\begin{lstlisting} +apt-get install ttf-freefont +\end{lstlisting} + + +\subsubsection*{Test of installation} +Check for a sucessful installation via: + +\begin{lstlisting} +cd root +curl \ +"http://localhost/cgi-bin/gnv-wms" \ +-o mapserver +\end{lstlisting} + +For a sucessful configuration, the response document \verb+ mapserver+ +contains a Value which contains the following message of the mapserver. + +TODO: QUERYSTRING WAS EMPTY HINZUFUEGEN + +\subsection{Proxy-Script: Installation and Configuration} +The Proxy-Script is required to allow the Map-Client to request external +services. Security policies forbit and prevent requesting those services - like +a GetFeatureInfo request - directly. + +\subsubsection{Installation} + +First make sure that python is installed on the operating system. +Otherwise install python using the following command: + +\verb+ apt-get install python+ + +Then the script itself must be published on the server by executing the +following steps: + +\begin{lstlisting} +cd /usr/lib/cgi-bin +cp -i $ARTIFACT_SERVER_HOME/install/debian/ol-proxy/proxy.cgi . +\end{lstlisting} + +\subsubsection{Configuration} +The Proxy-Script can only communicate with servers it is allowed to. +To enable the communication to the server where the UMN-Mapserver is hosted +or to other Server it is necessary to edit {\tt allowedHosts} in the +Proxy-Script at line 18. + +There you have to replace the placeholder THISHOSTNAME with the name which +will be used to reach the GNV-Web-Client. + +You can add further servers using the syntax which is given in the script. + +\subsubsection{Test of installation} + +It is possible to test the installation using the following command: + +\begin{lstlisting} +curl http://localhost/cgi-bin/proxy.cgi?url=http%3A%2F%2Flocalhost/cgi-bin/mapserv-gp +\end{lstlisting} + +If localhost is allowed in the proxy-script the result might be this: + +\begin{lstlisting} +TODO: QUERYSTRING WAS EMPTY HINZUFUEGEN +\end{lstlisting} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/admin-manual/installation-webclient.tex Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,52 @@ +\subsection{GNV-WebClient} +The last step of the installationprcess is to install the WebClient called +GNV-Client. The GNV-Client is a web Application ARchive (WAR) which has to be published +via Apache Tomcat. + + +\subsubsection*{Installation} + +Make sure, the Apache Tomcat is stopped. Deploying the +WAR-file\footnote{There are several ways of deployment in Apache Tomcat. +Background information can be found at +\url{http://tomcat.apache.org/tomcat-5.5-doc/deployer-howto.html}}: +\begin{lstlisting} + cp -i gnv-\$VERSION.war /usr/share/tomcat5.5/webapps/gnv.war + # Start Tomcat: + /etc/init.d/tomcat5.5 start +\end{lstlisting} + + +\subsubsection*{Configuration} +\label{ref:webclient-config} + +As default, the GNV-Client looks for an artifact-server running on +\verb+ http://localhost:8181/+. If this address needs not to be changed, +there is nothing to do to considering the execution environment. + +If the address of the artifact-server has been changed (c.f. +chapter~\ref{ref:artifact-server-install}, +p.\pageref{ref:artifact-server-install}), it can be adapted in the file {\tt +WEB-INF/web.xml} for the parameter name +\verb+de.intevation.gnv.artifactdatabase.client.ArtifactDatabase.url.1+. + +As default log information is written into the file +\verb+/usr/share/tomcat5.5/logs/gnv.log+. The log level can be adjusted +in the file \verb+WEB-INF/classes/log4j.properties+. For further +instructions look into the file. + +{\em Hint: The changes need to be done within the compressed +war-file because of the deployment mechanism of Apache Tomcat in case of +a restart. Keep in mind to repackage the war-file for a solution +surveiving a restart of Tomcat.} + + +\subsubsection*{Test of the Installation} + +Testing the installation via Apache WebServer, mod\_jk and Apache Tomcat: +\begin{lstlisting} + curl "http://localhost/gnv/start.do" -o gnv +\end{lstlisting} + +The file \verb+gnv+ includes HTML describing the startpage of the +GNV-WebClient.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/admin-manual/operating-the-system.tex Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,135 @@ +\section{Management of operational processes} + +For running the entire GNV-system the following components have to be +available in the described sequence: +\begin{enumerate} + \item Database server + \item Artifact-server + \item Apache Tomcat running the WebClient + \item Apache WebServer +\end{enumerate} + +During a server startup the installed components get started +automatically. + +\subsection{Managing the Artifact Server} + +\subsubsection*{Starting and Stopping} + +The artifact-server can be restarted without stopping the WebClient. +During the restart-process client accessing the server get an approriate +message. Their session data will not be lost if the artifact database +will remain untouched. + + Stopping artifact-server: + \begin{lstlisting} + /etc/init.d/artifact-server stop + \end{lstlisting} + + Starting artifact server + \begin{lstlisting} + /etc/init.d/artifact-server start + \end{lstlisting} + + Restarting artifact server + \begin{lstlisting} + /etc/init.d/artifact-server restart + \end{lstlisting} + +\subsubsection*{Troubleshooting} + +\paragraph*{Database problems} +For checking problems with the connection to the database server, check +the logfile of the artifact-server (c.f. +Chapter~\ref{ref:artifact-server-install}, +p.~\pageref{ref:artifact-server-install}). + +In most cases, a restart of the artifact-server will help to solve +problems in the artifact-server. If you still encounter problems, check +for the network connection to the database server and the maturity of +the database server. + +\paragraph*{Caching problems} +Inconsistencies between original data and cached data: +The artifact-server stores result sets of the database in a cache and +provides maps via configuration files for MapServer based on shapefiles. +In case of inconsistencies showing up for longer than twice the +maximum of the update cycle of internal ETL processes, do the following +as user \verb+root+: + +\begin{lstlisting} + cd /opt/artifact-server + /etc/init.d/artifact-server stop + rm -ri cache/* + /etc/init.d/artifact-server start +\end{lstlisting} + +\subsection{Managing the GNV-Client} +\subsubsection*{Start Stop Restart} + +The GNV-WebClient can be managed by controlling Apache Tomcat instance: + + Status GNV-WebClient + \begin{lstlisting} + /etc/init.d/tomcat5.5 status + \end{lstlisting} + + Stopping GNV-WebClient + \begin{lstlisting} + /etc/init.d/tomcat5.5 stop + \end{lstlisting} + + Starting GNV-WebClient + \begin{lstlisting} + /etc/init.d/tomcat5.5 start + \end{lstlisting} + + Restarting GNV-WebClient + \begin{lstlisting} + /etc/init.d/tomcat5.5 restart + \end{lstlisting} + +\subsubsection*{Troubleshooting} + +If the GNV-WebClient can not be accessed through the Apache WebServer, do the +following: +\begin{lstlisting} + 1. /etc/init.d/apache2 restart + 2. Check in your browser at http://$SERVERNAME/gnv +\end{lstlisting} + +If you still encounter problems, follow the next these steps: + +{\bf Caution: The entire application will be down until the WebServer is +back up.} +\begin{lstlisting} + /etc/init.d/apache2 stop + /etc/init.d/tomcat5.5 stop + rm -r /usr/share/tomcat5.5/work/Catalina/localhost/gnv/* + /etc/init.d/tomcat5.5 start # wait until tomcat is up + /etc/init.d/apache2 start +\end{lstlisting} + +For further information, you look into the log information during the use of the +GNV WebClient +\begin{lstlisting} + tail -f -n 50 /usr/share/tomcat5.5/logs/gnv.log +\end{lstlisting} + +To get even more logging, do the following: + +{\bf Caution: The entire application will be down until the Apache Tomcat +has been started properly; the higher log-level can affect the +runtime-behaviour of the client. For further instructions, c.f. +Chapter~\ref{ref:webclient-config}, p.~\pageref{ref:webclient-config}.} + +\begin{lstlisting} + /etc/init.d/tomcat5.5 stop + Set logging to DEBUG + vim /usr/share/tomcat5.5/webapps/gnv/WEB-INF/classes/log4j.properties + /etc/init.d/tomcat5.5 start # wait until tomcat is up + tail -f -n 50 /usr/share/tomcat5.5/logs/gnv.log +\end{lstlisting} + +It is recommended to undo the logging configuration, after the relevant +part has been found.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/admin-manual/overview.tex Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,72 @@ +\section{Overview of the GNV-System} + +The GNV systems consists of the mainly 4 components, serving the +following tasks: + +% TODO: Add architecture of the system in english + +\begin{enumerate} +\item Artifact-Server \\ +The Artifact-Server is a middleware component, managing the core tasks: +\begin{itemize} + \item Access to the database backend + \item Providing a RESTful-Interface with a XML-based protocol to serve + the expert information systems (FIS) with their products + \item (diagrams like timeseries, verticalprofile, map layers) to make + them accessable for the GNV-WebClient + \item Processing of data for interpolation, classification and vectorisation + \item Configuration capabilities for FIS and products + \item Caching database result sets + \item Managing the WMS-Server for creating maps dynamically +\end{itemize} + +\item Database Backend \\ +Database schemata like ESRI ArcMarineBSH, ArcS57 and CONTIS can be +served out of a ESRI ArcSDE 9.3.1 database. + +\item WMS-Server \\ +The WMS-Server provides maps via the standardized interface of the OGC +Web Map Service. The configuration is managed through the +artifact-server depending on the parameterization done be the user in +the GNV-WebClient + +\item GNV-WebClient \\ +The GNV-WebClient is a thin webbased client providing a HTML-based user +interface for the user to parameterize the FIS and products via the +XML-based protocol provided by the artifact-server through its +RESTful-interface. Within the client the user can manage these tasks: +\begin{itemize} + \item Select FIS, producs and their parameterisation + \item Visualize different diagrams like timeseries, vertical- and +horizontalprofiles, vertical and horizontal cross-sections and map +layers + \item Calculate and visualize (histograms) statistics + \item Export diagrams for printing in PNG, SVG, vectorized PDFs + \item Export data as in raw formats like CSV, Ocean Data View (ODV) and +ESRI Shapefiles +\end{itemize} + +The GNV-WebClient can be integrated with different MapViewers. The +GNV-WebClients supports a XML-based interface to the MapViewers +describung geometrical data and information about +used layers in order to adapt the selection of FIS and areas of interest +for the parameterization. +\end{enumerate} + +The systems has been designed as a distributed system. This manual +descibes the installation of a centralized system on one server for the +middleware and an existing database server. + +\section{Deliverables} +\begin{enumerate} + \item \verb+ artifact-server-$VERSION.tar.bz2+ -- Artifact-Server of the + GNV-System as package for installation + \item \verb+ gnv-$VERSION.war+ -- Web Application Archive for + deploying in Apache Tomcat + \item \verb| cgi-mapserver-gp_5.6.3-1~gp+1_i386| -- UMN MapServer + 5.6.3 (in Debian Lenny, UMN MapServer 5.0.3) + \item \verb+ installation-admin-manual.pdf+ -- this document + \item \verb+ configuration-manual.pdf+ -- Explaining the configuration + possibilities for the GNV-System in order to adapt FIS and products + (diagrams and maps) according to the database schema +\end{enumerate}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/admin-manual/title.tex Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,51 @@ +%----------------------------------- +% TITLE PAGE + +\begin{figure}[ht] + \begin{minipage}[b]{0.5\linewidth} + \centering + \includegraphics[scale=0.75]{figures/bsh_logo} \\ + {\tt http://www.bsh.de/en}\\[4.0cm] + \end{minipage} + \begin{minipage}[b]{0.5\linewidth} + \centering + \includegraphics[width=0.75\textwidth]{figures/intevation-logo} + {\tt http://intevation.de/geospatial}\\[2.0cm] + \end{minipage} +\end{figure} + + \vspace{4cm} + + { + \sffamily\large + Documentation Generic Viewer + + \vspace{1cm} + { + \bfseries\huge + Installation and Operations + } + + \vspace{1cm} + Version \documentversion~-~Date: \documentdate + + %% Revision \documentrevision + } + + \vspace{4cm} + + \thispagestyle{empty} + + \vfill + + \begin{flushleft} + {\bf Authors}:\\ + Tim Englich$<$tim.englich@intevation.de$>$\\ + Hans Plum $<$hans.plum@intevation.de$>$\\ + Sascha Teichmann $<$sascha.teichmann@intevation.de$>$\\ + {\bf Intevation GmbH},\\ + Neuer Graben 17, 49074 Osnabrück, Germany\\ + Tel: ++49 541 33 50 83 - 0 \\ + \url{http://www.intevation.net/geospatial} + + \end{flushleft}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/config-manual/Makefile Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,3492 @@ +# Copyright 2004 Chris Monson (shiblon@gmail.com) +# Latest version available at http://www.bouncingchairs.net/oss +# +# This file is part of ``Chris Monson's Free Software''. +# +# ``Chris Monson's Free Software'' is free software; you can redistribute it +# and/or modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, Version 2. +# +# ``Chris Monson's Free Software'' is distributed in the hope that it will +# be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with ``Chris Monson's Free Software''; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# It is also available on the web at http://www.gnu.org/copyleft/gpl.html +# +# Note that using this makefile to build your documents does NOT place them +# under the GPL unless you, the author, specifically do so. In other words, +# I, Chris Monson, the copyright holder and author of this makefile, +# consider it impossible to ``link'' to this makefile in any way covered by +# the GPL. +# +# TO OBTAIN INSTRUCTIONS FOR USING THIS FILE, RUN: +# make help +# +fileinfo := LaTeX Makefile +author := Chris Monson +version := 2.2.0-rc1 +# +# Note that the user-global version is imported *after* the source directory, +# so that you can use stuff like ?= to get proper override behavior. +.PHONY: Makefile GNUmakefile Makefile.ini $(HOME)/.latex-makefile/Makefile.ini +-include Makefile.ini +-include $(HOME)/.latex-makefile/Makefile.ini +# +# This can be pdflatex or latex - you can change this by adding the following line to your Makefile.ini: +# BUILD_STRATEGY := latex +BUILD_STRATEGY ?= pdflatex +# +# Sets LC_ALL=C, by default, so that the locale-aware tools, like sort, be +# # immune to changes to the locale in the user environment. +export LC_ALL ?= C +# +# +# If you specify sources here, all other files with the same suffix +# will be treated as if they were _include_ files. +#onlysources.tex ?= main.tex +#onlysources.tex.sh ?= +#onlysources.tex.pl ?= +#onlysources.tex.py ?= +#onlysources.rst ?= +#onlysources.fig ?= +#onlysources.gpi ?= +#onlysources.dot ?= +#onlysources.xvg ?= +#onlysources.svg ?= +#onlysources.eps.gz ?= +#onlysources.eps ?= +# +# If you list files here, they will be treated as _include_ files +#includes.tex ?= file1.tex file2.tex +#includes.tex.sh ?= +#includes.tex.pl ?= +#includes.tex.py ?= +#includes.rst ?= +#includes.fig ?= +#includes.gpi ?= +#includes.dot ?= +#includes.xvg ?= +#includes.svg ?= +#includes.eps.gz ?= +#includes.eps ?= +# +# If you list files or wildcards here, they will *not* be cleaned - default is +# to allow everything to be cleaned. +#neverclean ?= *.pdf +# +# Alternatively (recommended), you can add those lines to a Makefile.ini file +# and it will get picked up automatically without your having to edit this +# Makefile. +# +# KNOWN ISSUES: +# * The following occurs: +# file with: \usepackage{named}\bibliographystyle{named} +# Compile +# change to: \usepackage{apalike}\bibliographystyle{apalike} +# Compile again -- BARF! +# +# The workaround: make clean-nographics; make +# +# Note that we may not be able to fix this. LaTeX itself barfs +# on this, not the makefile. The very first invocation of LaTeX +# (when something like this has happened) reads the existing .aux +# file and discovers invalid commands like \citeauthoryear that +# are only valid in the package that was just removed. It then +# tries to parse them and explodes. It's not at all clear to me +# how to fix this. I tried removing the .aux files on the first +# run of LaTeX, but that necessarily requires more subsequent +# rebuilds on common edits. There does not appear to be a +# graceful solution to this issue. +# +# CHANGES: +# Chris Monson (2010-04-08): +# * Bumped version to 2.2.0-rc1 +# * Added back in the rst_style_file stuff that got broken when switching +# rst -> tex to use the script mechanism +# Chris Monson (2010-03-23): +# * Bumped version to 2.2.0-beta8 +# * Work on issue 76: bad backtick escape for some sed versions, failure +# to clear out the hold buffer when outputting MISSING comment. +# - Backed out 2>&1 to &> (doesn't work in sh) +# - Backed out using . to source variables +# Chris Monson (2010-03-22): +# * Bumped version to 2.2.0-beta7 +# * Issue 72: Fix latex/bibtex invocation order for annotated bib styles +# * Fixed informational output to reflect which LaTeX run we're on +# * Fixed graphic detection to include graphics that are already there in +# .d files +# * Tightened up the .d file output to only make .d depend on graphic +# *source* files. This means that building foo.d no longer +# builds all of the graphics files on which foo.tex depends. +# Had to use .SECONDEXPANSION trickery to make it work. +# * Changed get-graphics to only accept a stem. +# * Fixed build-once logic for scripted .tex to work better +# * Made get-inputs sed script more maintainable. +# * Moved Makefile.ini import up higher. +# * Changed bare stems to not recursively invoke make +# * Updated diff output to be more silent everywhere +# * Added a MISSING comment to the .d file if stuff isn't found - forces +# removal of .1st.make file, which often forces it to try again. +# * Fixed broken graphics-target function +# * Added sleep to .d file generation when stuff is missing - if it +# builds too fast, make doesn't realize it needs to be reloaded, +# and thus never discovers some deeper dependencies (especially +# evident when graphics are included from scripted include +# files). +# Chris Monson (2010-03-17): +# * Bumped version to 2.2.0-beta6 +# * Fixed bareword builds to actually work (requires static patterns) +# * Fixed colorization to work with new paragraph stuff +# Chris Monson (2010-03-17): +# * Bumped version to 2.2.0-beta5 +# * Fixed graphic detection to be much more focused - splits log file +# into paragraphs before doing pattern matching. +# * Fixed make foo to work properly (recursively calls make foo.pdf) +# * Fixed gpi -> pdf generation to not waste time building .eps *after* +# the pdf already exists. +# * Changed log copies to include MAKE_RESTARTS as part of the name. +# * Fixed missing include file detection (also makes use of the paragraph +# stuff) to detect missing scripted include files. +# Chris Monson (2010-03-16): +# * Bumped version to 2.2.0-beta4 +# * issue 70: .pdf not moved out of the way properly on first +# compilation, resulting in early error detection failure. +# * issue 74: fixed broken error on missing .aux files: the +# implementation was masking real errors. +# Chris Monson (2010-03-15): +# * Bumped version to 2.2.0-beta3 +# * issue 71: Made the tput dependency optional +# * issue 73: Made .tex targets not pull in .d files (building them from +# scripts should not require a .d) +# * issue 74: Output a much saner error when a .aux file is not produced +# (e.g., when you are typing "make" without arguments in a +# directory with included .tex files that are not named with +# ._include_.) +# Chris Monson (2010-03-11): +# * Bumped version to 2.2.0-beta2 +# * Fixed clean-graphics to get rid of intermediate .eps files that may +# be hanging around +# * Added an automatic setting to use eps terminals in pdflatex mode for +# gnuplot if it doesn't understand pdf. +# * issue 66: Removed grayscale generation via magic suffix. Grayscale +# generation is now only available via GRAY=1 +# * issue 68: Added explicit handling of LC_ALL for locale-aware tools +# like "sort" +# Chris Monson (2010-03-10): +# * Bumped version to 2.2.0-beta1 +# * Fixed success message to handle output message in different places +# * Added name of produced file to success message +# Chris Monson (2010-03-10): +# * Bumped version to 2.2.0-alpha3 +# * Added meaningful error message for wrong hyperref options +# * Added meaningful error message for incorrect graphics extensions +# Chris Monson (2010-03-09): +# * Bumped version to 2.2.0-alpha2 +# * Updated graphics handling (gnuplot and fig generate pdf natively) +# * Changed xmgrace to output monochrome natively +# Chris Monson (2010-03-09): +# * Bumped version to 2.2.0-alpha1 - major change! +# * Support pdflatex natively and by default (issue 6 - a long time coming) +# * Add ability to have a single $HOME/.latex-makefile/Makefile.ini for +# all invocations +# * Reworked graphic inclusion detection so that extensions need not be +# specified for either build strategy (e.g., +# \includegraphics{test1.eps} -> \includegrahpics{test1}) +# * Changed log format to include filenames and line numbers +# Chris Monson (2010-02-04): +# * Bumped version to 2.1.43 +# * All of the following are for issue 63 (thanks to mojoh81): +# * Added documentation about fixing Makefile.ini default target +# * Added perl and python script targets +# * Fixed run logic to allow included .tex files to be scripted (the +# run-again logic now detects missing .tex files, and the MV +# command has been switched out for a command that only invokes +# MV if the files exist) +# * Changed scripted generation to only run once per make invocation +# * Added dependency on expr +# Chris Monson (2010-01-19): +# * Bumped version to 2.1.42 +# * issue 62: Added .brf extension to cleanable files (backrefs) +# Chris Monson (2010-01-07): +# * Bumped version to 2.1.41 +# * issue 60: bad makeindex runs now error out on subsequent tries +# Chris Monson (2009-12-01): +# * Bumped version to 2.1.40 +# * issue 36: build all indices (for e.g., splitidx usage) +# * issue 59: clean up all generated files (including indices) +# Chris Monson (2009-11-23): +# * Bumped version to 2.1.39 +# * issue 57: change ps2pdf invocations to just use gs directly +# Chris Monson (2009-11-19): +# * Bumped version to 2.1.38 +# * issue 57: Added some limited support for Cygwin (spaces in filenames) +# Chris Monson (2009-11-15): +# * Bumped version to 2.1.37 +# * Removed svninfo, since this is now managed by mercurial +# * Fixed typo in changelist +# * Issue 52: added jpg->eps conversion (thanks to brubakee) +# * Issue 54: fix missing Overfull colorization due to lack of a blank +# line preceding the first error. +# * Issue 51: remove head.tmp and body.tmp in make clean invocation +# * Issue 56: maintain multiple versions of log files (for debugging) +# Chris Monson (2009-11-14): +# * Bumped version to 2.1.36 +# * Issues 53 and 49: added .brf, .mtc, and .maf to the cleanables +# Chris Monson (2009-11-05): +# * Bumped version to 2.1.35 +# * Added nomenclature support (see issue 48) +# Chris Monson (2009-10-29): +# * Bumped version to 2.1.34 +# * Fixed _out_ creation bug introduced in 2.1.33 (it was always created) +# * Fixed erroneous help output for $HOME in BINARY_TARGET_DIR +# * Changed contact email address - bring on the spam! +# Chris Monson (2009-10-21): +# * Bumped version to 2.1.33 +# * Fixed issue 46, adding support for dot2tex (thanks to fdemesmay) +# * Made all_files.* settable in Makefile.ini (using ?= instead of :=) +# * Fixed issue 47, thanks to fdemesmay: add binary copy directory, copy +# dvi, pdf, and ps if it exists +# Chris Monson (2009-09-25): +# * Bumped version to 2.1.32 +# * Fixed so that a changed lol file will cause a rebuild +# * Added .lol files to the cleanable list +# Chris Monson (2009-09-08): +# * Bumped version to 2.1.31 +# * Closed issue 43: evince doesn't notice pdf change w/out touch +# Chris Monson (2009-08-28): +# * Bumped version to 2.1.30 +# * Closed issue 39: Capture multi-line log warnings/errors to output +# Chris Monson (2009-08-26): +# * Bumped version to 2.1.29 +# * Closed issue 42: add svg support using inkscape +# Chris Monson (2009-08-17): +# * Bumped version to 2.1.28 +# * Patch from paul.biggar for issue 38: package warnings are overlooked +# Chris Monson (2009-08-07): +# * Bumped version to 2.1.27 +# * Included patch for issue 37 - removes pdf/ps files before copying, +# allowing some broken viewers to see changes properly. +# Chris Monson (2009-05-15): +# * Bumped version to 2.1.26 +# * Included patch for issue 9 from favonia - detects .fig changes for +# pstex files during regular compilation, so long as the pstex +# has been built at least once with make all-pstex. +# Chris Monson (2009-03-27): +# * Bumped version to 2.1.25 +# * Cleaned up a bunch of variable setting stuff - more stuff is now +# settable from Makefile.ini +# * Cleaned up documentation for various features, especially settable +# variables. +# * issue 28: support for png -> eps conversion (it even looks good!) +# * issue 29: support for "neverclean" files in Makefile.ini +# * issue 30: make ps2pdf14 the default - fall back when not there +# Chris Monson (2009-03-09): +# * Bumped version to 2.1.24 +# * issue 27: xmgrace support (thanks to rolandschulzhd) +# Chris Monson (2008-10-23): +# * Bumped version to 2.1.23 +# * issue 23: fixed _check_programs to not use bash string subs +# Chris Monson (2008-09-02): +# * Bumped version to 2.1.22 +# * Appled patch from Holger <yllohy@googlemail.com> to add include +# sources and some documentation updates. +# * Updated backup_patterns to be a bit more aggressive (also thanks to +# Holger) +# Chris Monson (2008-08-30): +# * Bumped version to 2.1.21 +# * Added ability to specify onlysources.* variables to indicate the only +# files that should *not* be considered includes. Thanks to Holger +# <yllohy@googlemail.com> for this patch. +# * Added an automatic include of Makefile.ini if it exists. Allows +# settings to be made outside of this makefile. +# Chris Monson (2008-05-21): +# * Bumped version to 2.1.20 +# * Added manual pstex compilation support (run make all-pstex first) +# * Removed all automatic pstex support. It was totally breaking +# everything and is very hard to incorporate into the makefile +# concept because it requires LaTeX to *fail* before it can +# determine that it needs the files. +# Chris Monson (2008-04-17): +# * Bumped version to 2.1.19 +# * Changed the pstex build hack to be on by default +# Chris Monson (2008-04-09): +# * Bumped version to 2.1.18 +# * issue 16: fixed pstex build problems, seems nondeterministic. Added +# gratuitious hack for testing: set PSTEX_BUILD_ALL_HACK=1. +# Chris Monson (2008-04-09): +# * Bumped version to 2.1.17 +# * issue 20: fixed accumulation of <pid>*.make files - wildcard was +# refusing to work on files that are very recently created. +# Chris Monson (2008-04-02): +# * Bumped version to 2.1.16 +# * issue 19: Removed the use of "type" to fix broken "echo" settings +# Chris Monson (2008-03-27): +# * Bumped version to 2.1.15 +# * issue 18: Favors binary echo over builtin, as binary understands -n +# * issue 16: Fixed handling of missing pstex_t files in the log +# * issue 9: Added .SECONDARY target for .pstex files +# Chris Monson (2008-03-21): +# * Bumped version to 2.1.14 +# * Fixed broken aux file flattening, which caused included bibs to be +# missed. +# Chris Monson (2008-03-20): +# * Bumped version to 2.1.13 +# * Changed error output colorization to show errors for missing files +# that are not graphics files. +# Chris Monson (2008-03-20): +# * Bumped version to 2.1.12 +# * Fixed a regression introduced in r28 that makes bibtex fail when +# there is no index file present +# Chris Monson (2008-03-03): +# * Bumped version to 2.1.11 +# * Fixed issue 11 (handle index files, reported by abachn) +# * Cleaned up some comments and help text +# Chris Monson (2008-01-24): +# * Bumped version to 2.1.10 +# * Fixed to work when 'sh' is a POSIX shell like 'dash' +# Chris Monson (2007-12-12): +# * Bumped version to 2.1.9 +# * Fixed documentation and dependency graph for pstex files +# Chris Monson (2007-12-12): +# * Bumped version to 2.1.8 +# * Added basic pstex_t support for fig files (Issue 9 by favonia) +# I still suggest that psfrag be used instead. +# Chris Monson (2007-10-16): +# * Bumped version to 2.1.7 +# * Removed todo item: allow other comment directives for rst conversion +# * Added ability to use global rst style file _rststyle_._include_.tex +# * Added help text to that effect +# Chris Monson (2007-05-20): +# * Bumped version to 2.1.6 +# * Changed default paper size for rst files +# * Added todo item: fix paper size for rst files +# * Added todo item: allow other comment directives for rst conversion +# Chris Monson (2007-04-02): +# * Bumped version to 2.1.5 +# * Addressed Issue 7, incorrect .gpi.d generation in subdirectories +# Chris Monson (2007-03-28): +# * Bumped version to 2.1.4 +# * Fixed syntax error in dot output +# Chris Monson (2007-03-01): +# * Bumped version to 2.1.3 +# * Added reST to the included documentation +# * Fixed graphics and script generation to be settable in the +# environment. +# Chris Monson (2007-02-23): +# * Bumped version to 2.1.2 +# * Added the ability to generate .tex files from .rst files +# Chris Monson (2006-10-17): +# * Bumped version to 2.1.1 +# * Fixed includes from subdirectories (sed-to-sed slash escape problem) +# Chris Monson (2006-10-05): +# * Bumped version to 2.1.0 (pretty serious new feature added) +# * New feature: bib files can now be anywhere on the BIBINPUTS path +# * New programs: kpsewhich (with tetex) and xargs (BSD) +# Chris Monson (2006-09-28): +# * Bumped version to 2.0.9 +# * Added ability to parse more than one bibliography +# Chris Monson (2006-06-01): +# * Bumped version to 2.0.8 +# * Added .vrb to the list of cleaned files +# Chris Monson (2006-04-26): +# * Bumped version to 2.0.7 +# * Fixed so that clean-nographics does not remove .gpi.d files +# * Removed jpg -> eps hack (not working properly -- just pre-convert) +# * Fixed so that postscript grayscale can be done with BSD sed +# Chris Monson (2006-04-25): +# * Bumped version to 2.0.6 +# * Fixed so that changed toc, lot, lof, or out causes a rebuild +# Chris Monson (2006-04-17): +# * Bumped version to 2.0.5 +# * Added jpg -> eps conversion target +# Chris Monson (2006-04-12): +# * Bumped version to 2.0.4 +# * Fixed BSD sed invocation to not use \| as a branch delimiter +# * Added a comment section on what is and is not allowed in BSD sed +# * Made paper size handling more robust while I was at it +# * Fixed postscript RGB grayscale to use a weighted average +# * Fixed postscript HSB grayscale to convert to RGB first +# * Fixed a problem with rebuilding .bbl files +# Chris Monson (2006-04-11): +# * Bumped version to 2.0.3 +# * Fixed some BSD sed problems: can't use \n in substitutions +# Chris Monson (2006-04-10): +# * Bumped version to 2.0.2 +# * Once again removed ability to create .tex files from scripts +# * \includeonly works again +# Chris Monson (2006-04-09): +# * Bumped version to 2.0.1 +# * Fixed grayscale postscript handling to be more robust +# * Added ability to generate ._gray_. files from eps and eps.gz +# * Added ability to clean ._gray_.eps files created from .eps files +# Chris Monson (2006-04-07): +# * Bumped version to 2.0.0 +# * Removed clunky ability to create included .tex files from scripts +# * Added note in the help about included tex scripting not working +# * Fixed the .eps generation to delete %.gpihead.make when finished +# * Abandoned designs to use shell variables to create sed scripts +# * Abandoned __default__.tex.sh idea: it causes recursion with %: . +# * Removed web page to-do. All items are now complete. +# * Added better grayscale conversion for dot figures (direct ps fixup). +# * Include files can now be scripted (at the expense of \includeonly). +# * Updated dependency graph to contain better node names. +# Chris Monson (2006-04-06): +# * Bumped version to 2.0b3 +# * Top level includes now fail if there is no rule to build them +# * A helpful message is printed when they do fail +# * Grayscale has been changed to be ._gray_, other phonies use _ now, too +# * Grayscale handling has been completed +# * Changed _include_stems target to _includes target. +# * Fixed _includes target to be useful by itself. +# * Removed the ability to specify clean and build targets at once +# * Verified that epsfig works fine with current code +# * Fixed included scripts so that they are added to the dep files +# * Fixed so that graphics includes don't happen if they aren't for gpi +# * Fixed dot output to allow grayscale. +# Chris Monson (2006-04-05): +# * Bumped version to 2.0b2 +# * Removed automatic -gray output. It needs fixing in a bad way. +# * Revamped dependency creation completely. +# * Fixed conditional inclusion to actually work (test.nobuild.d, test.d). +# * Fixed clean target to remove log targets +# * Added the 'monochrome' word for gray gpi output +# * Added a _check_gpi_files target that checks for common problems +# * Changed the _version target into the version target (no _) +# * Added better handling of grayscale files. Use the .gray.pdf target. +# * Fixed testing for rebuilds +# Chris Monson (2006-04-04): +# * Bumped version to 2.0b1 +# * Changed colorization of output +# * Made .auxbbl and .auxtex .make files secondary targets +# * Shortened and simplified the final latex invocation loop +# * Added version-specific output ($$i vs. $$$$i) in latex loop +# * Added a build message for the first .dvi run (Building .dvi (0)) +# * Removed some build messages that most people don't care about. +# * Simplified procedure for user-set colors -- simple text specification +# * Fixed diff output to...not output. +# * Fixed rerun bug -- detect not only when preceded with LaTeX Warning +# * Sped up gpi plotting +# * Added error handling and colorized output for gpi failure +# * Documented color changing stuff. +# * Now sort the flattened aux file to avoid false recompilation needs +# * Added clean-nographics target +# * Don't remove self.dvi file if self.aux is missing in the log +# * Clarified some code. Did some very minor adjusting. +# Chris Monson (2006-04-03): +# * Bumped version to 2.0a7 +# * Added .dvi and .ps files as secondary files. +# * Fixed handling of multiple run detection when includeonly is in use. +# * Added code to flatten .aux files. +# * Added more files as .SECONDARY prerequisites to avoid recompilation. +# * Fixed the inputs generation to be much simpler and to use pipes. +# * Added the dependency graph directly into the makefile. +# * Changed flatten-aux to remove \@writefile \relax \newlabel, etc. +# * Undid pipe changes with sed usage (BSD sed doesn't know -f-). +# * Added a _check_programs target that tells you what your system has. +# * Fixed an error in colorization that made unnecessary errors appear +# * Added view targets. +# * Updated help text. +# * Augmented cookies so that .aux can trigger .bbl and .dvi rebuilds +# * Added more informative error handling for dvips and ps2pdf +# Chris Monson (2006-04-02): +# * Bumped version to 2.0a6 +# * Added indirection to .bbl dependencies to avoid rebuilding .bbl files +# * Streamlined the diff invocation to eliminate an existence test +# * Removed special shell quote escape variables +# * Moved includes to a more prominent location +# * Fixed .inputs.make to not contain .aux files +# * Fixed embedding to use a file instead of always grepping. +# * Added *.make.temp to the list of cleanable files +# * Fixed Ruby. It should now be supported properly. +# * Now differentiate between all, default, and buildable files. +# * Fixed to bail out on serious errors. +# * Revised the handling of includable files. Still working on it. +# Chris Monson (2006-03-31): +# * Bumped version to 2.0a5 +# * Fixed a bug with LaTeX error detection (there can be spaces) +# * Added .bbl support, simplifying everything and making it more correct +# * Refactored some tests that muddy the code +# * Did a little cleanup of some shell loops that can safely be make loops +# * Added support for graphviz .dot files +# * Made _all_programs output easier to read +# * Added the ruby support that has long been advertised +# * Font embedding was screwed up for PostScript -- now implicit +# * Changed the generation of -gray.gpi files to a single command +# * Changed any make-generated file that is not included from .d to .make +# Chris Monson (2006-03-30): +# * Bumped version to 2.0a4 +# * Fixed a bug with very long graphics file names +# * Added a todo entry for epsfig support +# * Fixed a bug paper size bug: sometimes more than one entry appears +# * Fixed DVI build echoing to display the number instead of process ID +# * DVI files are now removed on first invocation if ANY file is missing +# * Added a simple grayscale approach: if a file ends with -gray.gpi, it +# is created from the corresponding .gpi file with a special +# comment ##GRAY in its header, which causes coloring to be +# turned off. +# * Fixed a bug in the handling of .tex.sh files. For some reason I had +# neglected to define file stems for scripted output. +# * Removed a trailing ; from the %.graphics dependencies +# * Added dvips embedding (I think it works, anyway) +# Chris Monson (2006-03-29): +# * Bumped version to 2.0a3 +# * Fixed error in make 3.79 with MAKEFILE_LIST usage +# * Added the presumed filename to the _version output +# * Added a vim macro for converting sed scripts to make commands +# * Added gpi dependency support (plotting external files and loading gpi) +# * Allow .gpi files to be ignored if called .include.gpi or .nobuild.gpi +# * Fixed sed invocations where \+ was used. BSD sed uses \{1,\}. +# Chris Monson (2006-03-28): +# * Bumped version to 2.0a2 +# * Added SHELL_DEBUG and VERBOSE options +# * Changed the default shell back to /bin/sh (unset, in other words) +# * Moved .PHONY declarations closer to their targets +# * Moved help text into its own define block to obtain better formatting +# * Removed need for double-entry when adding a new program invocation +# * Moved .SECONDARY declaration closer to its relevant occurrence +# * Commented things more heavily +# * Added help text about setting terminal and output in gnuplot +# * Created more fine-grained clean targets +# * Added a %.graphics target that generates all of %'s graphics +# * Killed backward-compatible graphics generation (e.g., eps.gpi=gpi.eps) +# * For now, we're just GPL 2, not 3. Maybe it will change later +# * Made the version and svninfo into variables +# Chris Monson (2006-03-27): +# * Bumped version to 2.0a1 +# * Huge, sweeping changes -- automatic dependencies + +# IMPORTANT! +# +# When adding to the following list, do not introduce any blank lines. The +# list is extracted for documentation using sed and is terminated by a blank +# line. +# +# EXTERNAL PROGRAMS: +# = ESSENTIAL PROGRAMS = +# == Basic Shell Utilities == +CAT ?= cat +CP ?= cp -f +DIFF ?= diff +ECHO ?= echo +EGREP ?= egrep +ENV ?= env +EXPR ?= expr +MV ?= mv -f +SED ?= sed +SORT ?= sort +TOUCH ?= touch +UNIQ ?= uniq +WHICH ?= which +XARGS ?= xargs +SLEEP ?= sleep +# == LaTeX (tetex-provided) == +BIBTEX ?= bibtex +DVIPS ?= dvips +LATEX ?= latex +PDFLATEX ?= pdflatex +EPSTOPDF ?= epstopdf +MAKEINDEX ?= makeindex +KPSEWHICH ?= kpsewhich +GS ?= gs +# = OPTIONAL PROGRAMS = +# == Makefile Color Output == +TPUT ?= tput +# == TeX Generation == +PERL ?= perl +PYTHON ?= python +RST2LATEX ?= rst2latex.py +# == EPS Generation == +CONVERT ?= convert # ImageMagick +DOT ?= dot # GraphViz +DOT2TEX ?= dot2tex # dot2tex - add options (not -o) as needed +FIG2DEV ?= fig2dev # XFig +GNUPLOT ?= gnuplot # GNUplot +INKSCAPE ?= inkscape # Inkscape (svg support) +XMGRACE ?= xmgrace # XMgrace +PNGTOPNM ?= pngtopnm # From NetPBM - step 1 for png -> eps +PPMTOPGM ?= ppmtopgm # From NetPBM - (gray) step 2 for png -> eps +PNMTOPS ?= pnmtops # From NetPBM - step 3 for png -> eps +GUNZIP ?= gunzip # GZipped EPS +# == Beamer Enlarged Output == +PSNUP ?= psnup +# == Viewing Stuff == +VIEW_POSTSCRIPT ?= gv +VIEW_PDF ?= xpdf +VIEW_GRAPHICS ?= display + +# Command options for embedding fonts and postscript->pdf conversion +PS_EMBED_OPTIONS ?= -dPDFSETTINGS=/printer -dEmbedAllFonts=true -dSubsetFonts=true -dMaxSubsetPct=100 +PS_COMPATIBILITY ?= 1.4 + +# Defaults for GPI +DEFAULT_GPI_EPS_FONTSIZE ?= 22 +DEFAULT_GPI_PDF_FONTSIZE ?= 12 + +# Style file for ReST +RST_STYLE_FILE ?= $(wildcard _rststyle_._include_.tex) + +# This ensures that even when echo is a shell builtin, we still use the binary +# (the builtin doesn't always understand -n) +FIXED_ECHO := $(if $(findstring -n,$(shell $(ECHO) -n)),$(shell which echo),$(ECHO)) +ECHO := $(if $(FIXED_ECHO),$(FIXED_ECHO),$(ECHO)) + +define determine-gnuplot-output-extension +$(if $(shell $(WHICH) $(GNUPLOT)), + $(if $(findstring unknown or ambiguous, $(shell $(GNUPLOT) -e "set terminal pdf" 2>&1)), + eps, pdf), + none) +endef + +GNUPLOT_OUTPUT_EXTENSION ?= $(strip $(call determine-gnuplot-output-extension)) + +# Directory into which we place "binaries" if it exists. +# Note that this can be changed on the commandline or in Makefile.ini: +# +# Command line: +# make BINARY_TARGET_DIR=$HOME/pdfs myfile.pdf +# +# Also, you can specify a relative directory (relative to the Makefile): +# make BINARY_TARGET_DIR=pdfs myfile.pdf +# +# Or, you can use Makefile.ini: +# +# BINARY_TARGET_DIR := $(HOME)/bin_out +# +BINARY_TARGET_DIR ?= _out_ + +RESTARTS := $(if $(MAKE_RESTARTS),$(MAKE_RESTARTS),0) +# SH NOTES +# +# On some systems, /bin/sh, which is the default shell, is not linked to +# /bin/bash. While bash is supposed to be sh-compatible when invoked as sh, it +# just isn't. This section details some of the things you have to stay away +# from to remain sh-compatible. +# +# * File pattern expansion does not work for {} +# * [ "$x" = "$y" ] has to be [ x"$x" x"$y" ] +# * &> for stderr redirection doesn't work, use 2>&1 instead +# +# BSD SED NOTES +# +# BSD SED is not very nice compared to GNU sed, but it is the most +# commonly-invoked sed on Macs (being based on BSD), so we have to cater to +# it or require people to install GNU sed. It seems like the GNU +# requirement isn't too bad since this makefile is really a GNU makefile, +# but apparently GNU sed is much less common than GNU make in general, so +# I'm supporting it here. +# +# Sad experience has taught me the following about BSD sed: +# +# * \+ is not understood to mean \{1,\} +# * \| is meaningless (does not branch) +# * \n cannot be used as a substitution character +# * ? does not mean \{0,1\}, but is literal +# * a\ works, but only reliably for a single line if subsequent lines +# have forward slashes in them (as is the case in postscript) +# +# For more info (on the Mac) you can consult +# +# man -M /usr/share/man re_format +# +# And look for the word "Obsolete" near the bottom. + +# +# EXTERNAL PROGRAM DOCUMENTATION SCRIPT +# + +# $(call output-all-programs,[<output file>]) +define output-all-programs + [ -f '$(this_file)' ] && \ + $(SED) \ + -e '/^[[:space:]]*#[[:space:]]*EXTERNAL PROGRAMS:/,/^$$/!d' \ + -e '/EXTERNAL PROGRAMS/d' \ + -e '/^$$/d' \ + -e '/^[[:space:]]*#/i\ '\ + -e 's/^[[:space:]]*#[[:space:]][^=]*//' \ + $(this_file) $(if $1,> '$1',) || \ + $(ECHO) "Cannot determine the name of this makefile." +endef + +# If they misspell gray, it should still work. +GRAY ?= $(call get-default,$(GREY),) + +# +# Utility Functions and Definitions +# + +# While not exactly a make function, this vim macro is useful. It takes a +# verbatim sed script and converts each line to something suitable in a command +# context. Just paste the script's contents into the editor, yank this into a +# register (starting at '0') and run the macro once for each line of the +# original script: +# +# 0i -e :s/\$/$$/eg :s/'/'"'"'/eg ^Ela'A' \:noh j + +# don't call this directly - it is here to avoid calling wildcard more than +# once in remove-files. +remove-files-helper = $(if $1,$(RM) $1,$(sh_true)) + +# $(call remove-files,file1 file2) +remove-files = $(call remove-files-helper,$(wildcard $1)) + +# Removes all cleanable files in the given list +# $(call clean-files,file1 file2 file3 ...) +# Works exactly like remove-files, but filters out files in $(neverclean) +clean-files = \ + $(call remove-files-helper,$(call cleanable-files,$(wildcard $1))) + +# Outputs all generated files to STDOUT, along with some others that are +# created by these (e.g., .idx files end up producing .ilg and .ind files). +# Discovered by reading *.fls OUTPUT lines and producing corresponding .ind +# filenames as needed. +# +# $(call get-generated-names,<source recorder file (*.fls)>) +define get-generated-names +[ -f '$1' ] && \ +$(SED) \ + -e '/^OUTPUT /{' \ + -e ' s///' \ + -e ' p' \ + -e ' s/\.idx/\.ind/p' \ + -e ' s/\.ind/\.ilg/p' \ + -e '}' \ + -e 'd' \ + '$1' \ +| $(SORT) | $(UNIQ) +endef + +# This removes files without checking whether they are there or not. This +# sometimes has to be used when the file is created by a series of shell +# commands, but there ends up being a race condition: make doesn't know about +# the file generation as quickly as the system does, so $(wildcard ...) doesn't +# work right. Blech. +# $(call remove-temporary-files,filenames) +remove-temporary-files = $(if $1,$(RM) $1,:) + +# Create an identifier from a file name +# $(call cleanse-filename,filename) +cleanse-filename = $(subst .,_,$(subst /,__,$1)) + +# Escape dots +# $(call escape-dots,str) +escape-dots = $(subst .,\\.,$1) + +# Test that a file exists +# $(call test-exists,file) +test-exists = [ -e '$1' ] + +# $(call move-files,source,destination) +move-if-exists = $(call test-exists,$1) && $(MV) '$1' '$2' + +# Copy file1 to file2 only if file2 doesn't exist or they are different +# $(call copy-if-different,sfile,dfile) +copy-if-different = $(call test-different,$1,$2) && $(CP) '$1' '$2' +copy-if-exists = $(call test-exists,$1) && $(CP) '$1' '$2' +move-if-different = $(call test-different,$1,$2) && $(MV) '$1' '$2' +replace-if-different-and-remove = \ + $(call test-different,$1,$2) \ + && $(MV) '$1' '$2' \ + || $(call remove-files,'$1') + +# Note that $(DIFF) returns success when the files are the SAME.... +# $(call test-different,sfile,dfile) +test-different = ! $(DIFF) -q '$1' '$2' >/dev/null 2>&1 +test-exists-and-different = \ + $(call test-exists,$2) && $(call test-different,$1,$2) + +# Return value 1, or value 2 if value 1 is empty +# $(call get-default,<possibly empty arg>,<default value if empty>) +get-default = $(if $1,$1,$2) + +# Copy a file and log what's going on +# $(call copy-with-logging,<source>,<target>) +define copy-with-logging +if [ -d '$2/' ]; then \ + if $(CP) '$1' '$2/'; then \ + $(ECHO) "$(C_INFO)Copied '$1' to '$2/'$(C_RESET)"; \ + else \ + $(ECHO) "$(C_ERROR)Failed to copy '$1' to '$2/'$(C_RESET)"; \ + fi; \ +fi +endef + +# Gives a reassuring message about the failure to find include files +# $(call include-message,<list of include files>) +define include-message +$(strip \ +$(if $(filter-out $(wildcard $1),$1),\ + $(shell $(ECHO) \ + "$(C_INFO)NOTE: You may ignore warnings about the"\ + "following files:" >&2;\ + $(ECHO) >&2; \ + $(foreach s,$(filter-out $(wildcard $1),$1),$(ECHO) ' $s' >&2;)\ + $(ECHO) "$(C_RESET)" >&2) +)) +endef +# Characters that are hard to specify in certain places +space := $(empty) $(empty) +colon := \: +comma := , + +# Useful shell definitions +sh_true := : +sh_false := ! : + +# Clear out the standard interfering make suffixes +.SUFFIXES: + +# Turn off forceful rm (RM is usually mapped to rm -f) +ifdef SAFE_RM +RM := rm +endif + +# Turn command echoing back on with VERBOSE=1 +ifndef VERBOSE +QUIET := @ +endif + +# Turn on shell debugging with SHELL_DEBUG=1 +# (EVERYTHING is echoed, even $(shell ...) invocations) +ifdef SHELL_DEBUG +SHELL += -x +endif + +# Get the name of this makefile (always right in 3.80, often right in 3.79) +# This is only really used for documentation, so it isn't too serious. +ifdef MAKEFILE_LIST +this_file := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) +else +this_file := $(wildcard GNUmakefile makefile Makefile) +endif + +# Terminal color definitions + +REAL_TPUT := $(if $(NO_COLOR),,$(shell $(WHICH) $(TPUT))) + +# $(call get-term-code,codeinfo) +# e.g., +# $(call get-term-code,setaf 0) +get-term-code = $(if $(REAL_TPUT),$(shell $(REAL_TPUT) $1),) + +black := $(call get-term-code,setaf 0) +red := $(call get-term-code,setaf 1) +green := $(call get-term-code,setaf 2) +yellow := $(call get-term-code,setaf 3) +blue := $(call get-term-code,setaf 4) +magenta := $(call get-term-code,setaf 5) +cyan := $(call get-term-code,setaf 6) +white := $(call get-term-code,setaf 7) +bold := $(call get-term-code,bold) +uline := $(call get-term-code,smul) +reset := $(call get-term-code,sgr0) + +# +# User-settable definitions +# +LATEX_COLOR_WARNING ?= magenta +LATEX_COLOR_ERROR ?= red +LATEX_COLOR_INFO ?= green +LATEX_COLOR_UNDERFULL ?= magenta +LATEX_COLOR_OVERFULL ?= red bold +LATEX_COLOR_PAGES ?= bold +LATEX_COLOR_BUILD ?= cyan +LATEX_COLOR_GRAPHIC ?= yellow +LATEX_COLOR_DEP ?= green +LATEX_COLOR_SUCCESS ?= green bold +LATEX_COLOR_FAILURE ?= red bold + +# Gets the real color from a simple textual definition like those above +# $(call get-color,ALL_CAPS_COLOR_NAME) +# e.g., $(call get-color,WARNING) +get-color = $(subst $(space),,$(foreach c,$(LATEX_COLOR_$1),$($c))) + +# +# STANDARD COLORS +# +C_WARNING := $(call get-color,WARNING) +C_ERROR := $(call get-color,ERROR) +C_INFO := $(call get-color,INFO) +C_UNDERFULL := $(call get-color,UNDERFULL) +C_OVERFULL := $(call get-color,OVERFULL) +C_PAGES := $(call get-color,PAGES) +C_BUILD := $(call get-color,BUILD) +C_GRAPHIC := $(call get-color,GRAPHIC) +C_DEP := $(call get-color,DEP) +C_SUCCESS := $(call get-color,SUCCESS) +C_FAILURE := $(call get-color,FAILURE) +C_RESET := $(reset) + +# +# PRE-BUILD TESTS +# + +# Check that clean targets are not combined with other targets (weird things +# happen, and it's not easy to fix them) +hascleangoals := $(if $(sort $(filter clean clean-%,$(MAKECMDGOALS))),1) +hasbuildgoals := $(if $(sort $(filter-out clean clean-%,$(MAKECMDGOALS))),1) +ifneq "$(hasbuildgoals)" "" +ifneq "$(hascleangoals)" "" +$(error $(C_ERROR)Clean and build targets specified together$(C_RESET))) +endif +endif + +# +# VARIABLE DECLARATIONS +# + +# Names of sed scripts that morph gnuplot files -- only the first found is used +GNUPLOT_SED := global-gpi.sed gnuplot.sed +GNUPLOT_GLOBAL := global._include_.gpi gnuplot.global + +ifneq "$(strip $(BUILD_STRATEGY))" "pdflatex" +default_graphic_extension ?= eps +latex_build_program ?= $(LATEX) +build_target_extension ?= dvi +hyperref_driver_pattern ?= hdvips +hyperref_driver_error ?= Using dvips: specify ps2pdf in the hyperref options. +else +default_graphic_extension ?= pdf +latex_build_program ?= $(PDFLATEX) +build_target_extension ?= pdf +hyperref_driver_pattern ?= hpdf.* +hyperref_driver_error ?= Using pdflatex: specify pdftex in the hyperref options (or leave it blank). +endif + +# Files of interest +all_files.tex ?= $(wildcard *.tex) +all_files.tex.sh ?= $(wildcard *.tex.sh) +all_files.tex.pl ?= $(wildcard *.tex.pl) +all_files.tex.py ?= $(wildcard *.tex.py) +all_files.rst ?= $(wildcard *.rst) +all_files.fig ?= $(wildcard *.fig) +all_files.gpi ?= $(wildcard *.gpi) +all_files.dot ?= $(wildcard *.dot) +all_files.xvg ?= $(wildcard *.xvg) +all_files.svg ?= $(wildcard *.svg) +all_files.png ?= $(wildcard *.png) +all_files.jpg ?= $(wildcard *.jpg) +all_files.eps.gz ?= $(wildcard *.eps.gz) +all_files.eps ?= $(wildcard *.eps) + +# Utility function for obtaining all files not specified in $(neverclean) +# $(call cleanable-files,file1 file2 file3 ...) +# Returns the list of files that is not in $(wildcard $(neverclean)) +cleanable-files = $(filter-out $(wildcard $(neverclean)), $1) + +# Utility function for getting all .$1 files that are to be ignored +# * files listed in $(includes.$1) +# * files not listed in $(onlysources.$1) if it is defined +ignore_files = \ + $(includes.$1) \ + $(if $(onlysources.$1),$(filter-out $(onlysources.$1), $(all_files.$1))) + +# Patterns to never be allowed as source targets +ignore_patterns := %._include_ + +# Patterns allowed as source targets but not included in 'all' builds +nodefault_patterns := %._nobuild_ $(ignore_patterns) + +# Utility function for getting targets suitable building +# $(call filter-buildable,suffix) +filter-buildable = \ + $(filter-out $(call ignore_files,$1) \ + $(addsuffix .$1,$(ignore_patterns)),$(all_files.$1)) + +# Utility function for getting targets suitable for 'all' builds +# $(call filter-default,suffix) +filter-default = \ + $(filter-out $(call ignore_files,$1) \ + $(addsuffix .$1,$(nodefault_patterns)),$(all_files.$1)) + +# Top level sources that can be built even when they are not by default +files.tex := $(call filter-buildable,tex) +files.tex.sh := $(call filter-buildable,tex.sh) +files.tex.pl := $(call filter-buildable,tex.pl) +files.tex.py := $(call filter-buildable,tex.py) +files.rst := $(call filter-buildable,rst) +files.gpi := $(call filter-buildable,gpi) +files.dot := $(call filter-buildable,dot) +files.fig := $(call filter-buildable,fig) +files.xvg := $(call filter-buildable,xvg) +files.svg := $(call filter-buildable,svg) +files.png := $(call filter-buildable,png) +files.jpg := $(call filter-buildable,jpg) +files.eps.gz := $(call filter-buildable,eps.gz) + +# Make all pstex targets secondary. The pstex_t target requires the pstex +# target, and nothing else really depends on it, so it often gets deleted. +# This avoids that by allowing *all* fig files to be pstex targets, which is +# perfectly valid and causes no problems even if they're going to become eps +# files in the end. +.SECONDARY: $(patsubst %.fig,%.pstex,$(files.fig)) + +# Top level sources that are built by default targets +default_files.tex := $(call filter-default,tex) +default_files.tex.sh := $(call filter-default,tex.sh) +default_files.tex.pl := $(call filter-default,tex.pl) +default_files.tex.py := $(call filter-default,tex.py) +default_files.rst := $(call filter-default,rst) +default_files.gpi := $(call filter-default,gpi) +default_files.dot := $(call filter-default,dot) +default_files.fig := $(call filter-default,fig) +default_files.xvg := $(call filter-default,xvg) +default_files.svg := $(call filter-default,svg) +default_files.png := $(call filter-default,png) +default_files.jpg := $(call filter-default,jpg) +default_files.eps.gz := $(call filter-default,eps.gz) + +# Utility function for creating larger lists of files +# $(call concat-files,suffixes,[prefix]) +concat-files = $(foreach s,$1,$($(if $2,$2_,)files.$s)) + +# Useful file groupings +all_files_source := $(call concat-files,tex,all) +all_files_scripts := $(call concat-files,tex.sh tex.pl tex.py rst,all) + +.PHONY: $(all_files_scripts) + +default_files_source := $(call concat-files,tex,default) +default_files_scripts := $(call concat-files,tex.sh tex.pl tex.py rst,default) + +files_source := $(call concat-files,tex) +files_scripts := $(call concat-files,tex.sh tex.pl tex.py rst) + +# Utility function for obtaining stems +# $(call get-stems,suffix,[prefix]) +get-stems = $(sort $($(if $2,$2_,)files.$1:%.$1=%)) + +# List of all stems (including ._include_ and ._nobuild_ file stems) +all_stems.tex := $(call get-stems,tex,all) +all_stems.tex.sh := $(call get-stems,tex.sh,all) +all_stems.tex.pl := $(call get-stems,tex.pl,all) +all_stems.tex.py := $(call get-stems,tex.py,all) +all_stems.rst := $(call get-stems,rst,all) +all_stems.fig := $(call get-stems,fig,all) +all_stems.gpi := $(call get-stems,gpi,all) +all_stems.dot := $(call get-stems,dot,all) +all_stems.xvg := $(call get-stems,xvg,all) +all_stems.svg := $(call get-stems,svg,all) +all_stems.png := $(call get-stems,png,all) +all_stems.jpg := $(call get-stems,jpg,all) +all_stems.eps.gz := $(call get-stems,eps.gz,all) +all_stems.eps := $(call get-stems,eps,all) + +# List of all default stems (all default PDF targets): +default_stems.tex := $(call get-stems,tex,default) +default_stems.tex.sh := $(call get-stems,tex.sh,default) +default_stems.tex.pl := $(call get-stems,tex.pl,default) +default_stems.tex.py := $(call get-stems,tex.py,default) +default_stems.rst := $(call get-stems,rst,default) +default_stems.fig := $(call get-stems,fig,default) +default_stems.gpi := $(call get-stems,gpi,default) +default_stems.dot := $(call get-stems,dot,default) +default_stems.xvg := $(call get-stems,xvg,default) +default_stems.svg := $(call get-stems,svg,default) +default_stems.png := $(call get-stems,png,default) +default_stems.jpg := $(call get-stems,jpg,default) +default_stems.eps.gz := $(call get-stems,eps.gz,default) + +# List of all stems (all possible bare PDF targets created here): +stems.tex := $(call get-stems,tex) +stems.tex.sh := $(call get-stems,tex.sh) +stems.tex.pl := $(call get-stems,tex.pl) +stems.tex.py := $(call get-stems,tex.py) +stems.rst := $(call get-stems,rst) +stems.fig := $(call get-stems,fig) +stems.gpi := $(call get-stems,gpi) +stems.dot := $(call get-stems,dot) +stems.xvg := $(call get-stems,xvg) +stems.svg := $(call get-stems,svg) +stems.png := $(call get-stems,png) +stems.jpg := $(call get-stems,jpg) +stems.eps.gz := $(call get-stems,eps.gz) + +# Utility function for creating larger lists of stems +# $(call concat-stems,suffixes,[prefix]) +concat-stems = $(sort $(foreach s,$1,$($(if $2,$2_,)stems.$s))) + +# The most likely to be source but not finished product go first +graphic_source_extensions := fig \ + gpi \ + xvg \ + svg \ + dot \ + eps.gz + +ifneq "$(strip $(BUILD_STRATEGY))" "pdflatex" +graphic_source_extensions += png jpg +graphic_target_extensions := eps ps +else +graphic_source_extensions += eps +graphic_target_extensions := pdf png jpg mps tif +endif + +all_stems_source := $(call concat-stems,tex,all) +all_stems_script := $(call concat-stems,tex.sh tex.pl tex.py rst,all) +all_stems_graphic := $(call concat-stems,$(graphic_source_extensions),all) +all_stems_ss := $(sort $(all_stems_source) $(all_stems_script)) +all_stems_sg := $(sort $(all_stems_script)) +all_stems_ssg := $(sort $(all_stems_ss)) + +default_stems_source := $(call concat-stems,tex,default) +default_stems_script := $(call concat-stems,tex.sh tex.pl tex.py rst,default) +default_stems_ss := $(sort $(default_stems_source) $(default_stems_script)) +default_stems_sg := $(sort $(default_stems_script)) +default_stems_ssg := $(sort $(default_stems_ss)) + +stems_source := $(call concat-stems,tex) +stems_script := $(call concat-stems,tex.sh tex.pl tex.py rst) +stems_graphic := $(call concat-stems,$(graphic_source_extensions)) +stems_gg := $(sort $(stems_graphic)) +stems_ss := $(sort $(stems_source) $(stems_script)) +stems_sg := $(sort $(stems_script)) +stems_ssg := $(sort $(stems_ss)) + +# Calculate names that can generate the need for an include file. We can't +# really do this with patterns because it's too easy to screw up, so we create +# an exhaustive list. +allowed_source_suffixes := \ + pdf \ + ps \ + dvi \ + ind \ + nls \ + bbl \ + aux \ + aux.make \ + d \ + auxbbl.make \ + _graphics \ + _show +allowed_source_patterns := $(addprefix %.,$(allowed_source_suffixes)) + +allowed_graphic_suffixes := \ + pdf \ + eps \ + gpihead.make \ + gpi.d +allowed_graphic_patterns := $(addprefix %.,$(allowed_graphic_suffixes)) + +# All targets allowed to build documents +allowed_source_targets := \ + $(foreach suff,$(allowed_source_suffixes),\ + $(addsuffix .$(suff),$(stems_ssg))) + +# All targets allowed to build graphics +allowed_graphic_targets := \ + $(foreach suff,$(allowed_graphic_suffixes),\ + $(addsuffix .$(suff),$(stems_gg))) + +# All targets that build multiple documents (like 'all') +allowed_batch_source_targets := \ + all \ + all-pdf \ + all-ps \ + all-dvi \ + all-bbl \ + all-ind \ + all-gls \ + all-nls \ + show + +# All targets that build multiple graphics (independent of document) +allowed_batch_graphic_targets := \ + all-graphics \ + all-pstex \ + all-dot2tex \ + show-graphics + +# Now we figure out which stuff is available as a make target for THIS RUN. +real_goals := $(call get-default,$(filter-out _includes,$(MAKECMDGOALS)),\ + all) + +specified_source_targets := $(strip \ + $(filter $(allowed_source_targets) $(stems_ssg),$(real_goals)) \ + ) + +specified_batch_source_targets := $(strip \ + $(filter $(allowed_batch_source_targets),$(real_goals)) \ + ) + +specified_graphic_targets := $(strip \ + $(filter $(allowed_graphic_targets),$(real_goals)) \ + ) + +specified_batch_graphic_targets := $(strip \ + $(filter $(allowed_batch_graphic_targets),$(real_goals)) \ + ) + +specified_gpi_targets := $(patsubst %.gpi,%.$(default_graphic_extension),\ + $(filter $(patsubst %.$(default_graphic_extension),%.gpi,$(specified_graphic_targets)),\ + $(all_files.gpi)) \ + ) + +# Determine which .d files need including from the information gained above. +# This is done by first checking whether a batch target exists. If it does, +# then all *default* stems are used to create possible includes (nobuild need +# not apply for batch status). If no batch targets exist, then the individual +# targets are considered and appropriate includes are taken from them. +source_stems_to_include := \ + $(sort\ + $(if $(specified_batch_source_targets),\ + $(default_stems_ss),\ + $(foreach t,$(specified_source_targets),\ + $(foreach p,$(allowed_source_patterns),\ + $(patsubst $p,%,$(filter $p $(stems_ssg),$t)) \ + )) \ + )) + +# Determine which .gpi.d files are needed using the above information. We +# first check whether a batch target is specified, then check individual +# graphics that may have been specified. +graphic_stems_to_include := \ + $(sort\ + $(if $(specified_batch_graphic_targets),\ + $(default_stems.gpi),\ + $(foreach t,$(specified_gpi_targets),\ + $(foreach p,$(allowed_graphic_patterns),\ + $(patsubst $p,%,$(filter $p,$t)) \ + )) \ + )) + +# All dependencies for the 'all' targets +all_pdf_targets := $(addsuffix .pdf,$(stems_ssg)) +all_ps_targets := $(addsuffix .ps,$(stems_ssg)) +all_dvi_targets := $(addsuffix .dvi,$(stems_ssg)) +all_tex_targets := $(addsuffix .tex,$(stems_sg)) +all_d_targets := $(addsuffix .d,$(stems_ssg)) +all_graphics_targets := $(addsuffix .$(default_graphic_extension),$(stems_gg)) +intermediate_graphics_targets := $(if $(filter pdf,$(default_graphic_extension)),$(addsuffix .eps,$(stems_gg)),) +all_pstex_targets := $(addsuffix .pstex_t,$(stems.fig)) +all_dot2tex_targets := $(addsuffix .dot_t,$(stems.dot)) + +all_known_graphics := $(sort $(all_graphics_targets) $(wildcard *.$(default_graphic_extension))) + +default_pdf_targets := $(addsuffix .pdf,$(default_stems_ss)) +ifneq "$(strip $(BUILD_STRATEGY))" "pdflatex" +default_ps_targets := $(addsuffix .ps,$(default_stems_ss)) +default_dvi_targets := $(addsuffix .dvi,$(default_stems_ss)) +pre_pdf_extensions := dvi ps +endif + +# Extensions generated by LaTeX invocation that can be removed when complete +rm_ext := \ + log *.log aux $(pre_pdf_extensions) pdf blg bbl out nav snm toc lof lot lol pfg \ + fls vrb idx ind ilg glg glo gls lox nls nlo nlg brf mtc maf brf +backup_patterns := *~ *.bak *.backup body.tmp head.tmp + +graph_stem := _graph + +# All LaTeX-generated files that can be safely removed + +rm_tex := \ + $(foreach e,$(rm_ext),$(addsuffix .$e,$(all_stems_source))) \ + $(foreach e,$(rm_ext) tex,$(addsuffix .$e,$(all_stems_sg))) \ + $(addsuffix .log,$(all_ps_targets) $(all_pdf_targets)) \ + $(addsuffix .*.log,$(stems_graphic)) + +# These are the files that will affect .gpi transformation for all .gpi files. +# +# Use only the first one found. Backward compatible values are at the end. +# Note that we use foreach, even though wildcard also returns a list, to ensure +# that the order in the uppercase variables is preserved. Directory listings +# provide no such guarantee, so we avoid relying on them. +gpi_sed := $(strip \ + $(firstword $(foreach f,$(GNUPLOT_SED),$(wildcard $f)))) +gpi_global := $(strip \ + $(firstword $(foreach f,$(GNUPLOT_GLOBAL),$(wildcard $f)))) + +# +# Functions used in generating output +# + +# Outputs all source dependencies to stdout. The first argument is the file to +# be parsed, the second is a list of files that will show up as dependencies in +# the new .d file created here. +# +# NOTE: BSD sed does not understand \|, so we have to do something more +# clunky to extract suitable extensions. +# +# Also, we do a little bit of funny rewriting up front (TARGETS=) to make sure +# that we can properly backslash-escape spaces in file names (e.g, on Cygwin +# for tex distributions that have "Program Files" in their name). +# +# $(call get-inputs,<parsed file>,<target files>) +define get-inputs +$(SED) \ +-e '/^INPUT/!d' \ +-e 's!^INPUT \(\./\)\{0,1\}!!' \ +-e 's/[[:space:]]/\\ /g' \ +-e 's/\(.*\)\.aux$$/\1.tex/' \ +-e '/\.tex$$/b addtargets' \ +-e '/\.cls$$/b addtargets' \ +-e '/\.sty$$/b addtargets' \ +-e '/\.pstex_t$$/b addtargets' \ +-e '/\.dot_t$$/b addtargets' \ +-e 'd' \ +-e ':addtargets' \ +-e 's/^/$2: /' \ +$1 | $(SORT) | $(UNIQ) +endef + +# $(call get-missing-inputs,<log file>,<target files>) +define get-missing-inputs +$(SED) \ +-e '$$ b para' \ +-e '/^$$/b para' \ +-e 'H' \ +-e 'd' \ +-e ':para' \ +-e 'x' \ +-e '/^$$/d' \ +-e 's/^\n*//' \ +-e '/^! LaTeX Error: File /{' \ +-e ' s/^/::DOUBLE_PARAGRAPH::/' \ +-e ' h' \ +-e ' d' \ +-e '}' \ +-e 's/^::DOUBLE_PARAGRAPH:://' \ +-e '/Default extension: /!d' \ +-e 's/[[:space:]]\{1,\}/ /g' \ +-e 's/\n\{1,\}/ /g' \ +-e 's/^.*File `//' \ +-e 's/'"'"' not found\..*//' \ +-e '/\.tex/!s/$$/.tex/' \ +-e 's/[[:space:]]/\\ /g' \ +-e 'h' \ +-e 's/.*/# MISSING input "&" - (presence of comment affects build)/' \ +-e 'p' \ +-e 's/.*//' \ +-e 'x' \ +-e 's/^/$2: /' \ +$1 | $(SORT) | $(UNIQ) +endef + +# Get source file for specified graphics stem. +# +# $(call graphics-source,<stem>) +define graphics-source +$(strip $(firstword \ + $(wildcard \ + $(addprefix $1.,\ + $(graphic_source_extensions))) \ + $1 \ +)) +endef + +# Get the target file for the specified graphics file/stem +# +# $(call graphics-target,<stem>) +define graphics-target +$(strip $(if $(filter $(addprefix %.,$(graphic_target_extensions)),$1), $1, + $(firstword $(patsubst $(addprefix %.,$(graphic_source_extensions) $(graphic_target_extensions)), %, $1).$(default_graphic_extension) $1.$(default_graphic_extension)))) +endef + +# Outputs all of the graphical dependencies to stdout. The first argument is +# the stem of the source file being built, the second is a list of suffixes +# that will show up as dependencies in the generated .d file. +# +# Note that we try to escape spaces in filenames where possible. We have to do +# it with three backslashes so that as the name percolates through the makefile +# it eventually ends up with the proper escaping when the build rule is found. +# Ugly, but it appears to work. Note that graphicx doesn't allow filenames +# with spaces, so this could in many ways be moot unless you're using something +# like grffile. +# +# For pdflatex, we really need the missing file to be specified without an +# extension, otherwise compilation barfs on the first missing file. Truly +# annoying, but there you have it. +# +# It turns out that the graphics errors, although they have lines with empty +# space, are only made of two paragraphs. So, we just use some sed magic to +# get everything into paragraphs, detect when it's a paragraph that interests +# us, and double it up. Then we get the filename only if we're missing +# extensions (a sign that it's graphicx complaining). +# +# $(call get-graphics,<target file stem>) +#.log,$(addprefix $*.,d $(build_target_extension) _graphics) +define get-graphics +$(SED) \ +-e '$$ b para' \ +-e '/^$$/b para' \ +-e 'H' \ +-e 'd' \ +-e ':para' \ +-e 'x' \ +-e '/^$$/d' \ +-e 's/^\n*//' \ +-e '/^! LaTeX Error: File `/{' \ +-e ' s/^/::DOUBLE_PARAGRAPH::/' \ +-e ' h' \ +-e ' d' \ +-e '}' \ +-e 's/^::DOUBLE_PARAGRAPH:://' \ +-e '/could not locate the file with any of these extensions:/{' \ +-e ' s/\n\{1,\}/ /g' \ +-e ' s/[[:space:]]\{1,\}/ /g' \ +-e ' s/^.*File `//' \ +-e ' s/'"'"' not found\..*//' \ +-e ' h' \ +-e ' s/.*/# MISSING stem "&" - (presence of comment affects build)/' \ +-e ' p' \ +-e ' g' \ +-e ' b addtargets' \ +-e '}' \ +-e '/.*File: \(.*\) Graphic file (type [^)]*).*/{' \ +-e ' s//\1/' \ +-e ' b addtargets' \ +-e '}' \ +-e 'd' \ +-e ':addtargets' \ +-e 's/[[:space:]]/\\\\\\&/g' \ +-e 'h' \ +-e 's/.*/-include &.gpi.d/' \ +-e 'p' \ +-e 'g' \ +-e 's/.*/$(addprefix $1,.d): $$$$(call graphics-source,&)/' \ +-e 'p' \ +-e 's/.*//' \ +-e 'x' \ +-e 's/.*/$(addprefix $1.,$(build_target_extension) _graphics): $$$$(call graphics-target,&)/' \ +-e 'p' \ +-e 'd' \ +$*.log +endef + +# Checks for build failure due to pstex inclusion, and gives instructions. +# +# $(call die-on-pstexs,<parsed file>) +define die-on-pstexs +if $(EGREP) -q '^! LaTeX Error: File .*\.pstex.* not found' $1; then \ + $(ECHO) "$(C_ERROR)Missing pstex_t file(s)$(C_RESET)"; \ + $(ECHO) "$(C_ERROR)Please run$(C_RESET)"; \ + $(ECHO) "$(C_ERROR) make all-pstex$(C_RESET)"; \ + $(ECHO) "$(C_ERROR)before proceeding.$(C_RESET)"; \ + exit 1; \ +fi +endef + +# Checks for build failure due to dot2tex, and gives instructions. +# +# $(call die-on-dot2tex,<parsed file>) +define die-on-dot2tex +if $(EGREP) -q ' LaTeX Error: File .*\.dot_t.* not found' $1; then \ + $(ECHO) "$(C_ERROR)Missing dot_t file(s)$(C_RESET)"; \ + $(ECHO) "$(C_ERROR)Please run$(C_RESET)"; \ + $(ECHO) "$(C_ERROR) make all-dot2tex$(C_RESET)"; \ + $(ECHO) "$(C_ERROR)before proceeding.$(C_RESET)"; \ + exit 1; \ +fi +endef + +# Checks for the existence of a .aux file, and dies with an error message if it +# isn't there. Note that we pass the file stem in, not the full filename, +# e.g., to check for foo.aux, we call it thus: $(call die-on-no-aux,foo) +# +# $(call die-on-no-aux,<aux stem>) +define die-on-no-aux +if [ ! -e '$1.aux' ]; then \ + $(call colorize-latex-errors,$1.log); \ + exit 1; \ +fi +endef + +# Outputs all index files to stdout. Arg 1 is the source file stem, arg 2 is +# the list of targets for the discovered dependency. +# +# $(call get-log-index,<log file stem>,<target files>) +define get-log-index +$(SED) \ +-e 's/^No file \(.*\.ind\)\.$$/TARGETS=\1/' \ +-e 's/^No file \(.*\.[gn]ls\)\.$$/TARGETS=\1/' \ +-e 's/[[:space:]]/\\&/g' \ +-e '/^TARGETS=/{' \ +-e ' h' \ +-e ' s/^TARGETS=/$2: /p' \ +-e ' g' \ +-e ' s/^TARGETS=\(.*\)/\1: $1.tex/p' \ +-e '}' \ +-e 'd' \ +'$1.log' | $(SORT) | $(UNIQ) +endef + + +# Outputs all bibliography files to stdout. Arg 1 is the source stem, arg 2 is +# a list of targets for each dependency found. +# +# The script kills all lines that do not contain bibdata. Remaining lines have +# the \bibdata macro and delimiters removed to create a dependency list. A +# trailing comma is added, then all adjacent commas are collapsed into a single +# comma. Then commas are replaced with the string .bib[space], and the +# trailing space is killed off. Finally, all filename spaces are escaped. +# This produces a list of space-delimited .bib filenames, which is what the +# make dep file expects to see. +# +# Note that we give kpsewhich a bogus argument so that a failure of sed to +# produce output will not cause an error. +# +# $(call get-bibs,<aux file>,<targets>) +define get-bibs +$(SED) \ +-e '/^\\bibdata/!d' \ +-e 's/\\bibdata{\([^}]*\)}/\1,/' \ +-e 's/,\{2,\}/,/g' \ +-e 's/[[:space:]]/\\&/g' \ +-e 's/,/.bib /g' \ +-e 's/ \{1,\}$$//' \ +$1 | $(XARGS) $(KPSEWHICH) '#######' | \ +$(SED) \ +-e 's/^/$2: /' | \ +\$(SORT) | $(UNIQ) +endef + +# Makes a an aux file that only has stuff relevant to the target in it +# $(call make-auxtarget-file,<flattened-aux>,<new-aux>) +define make-auxtarget-file +$(SED) \ +-e '/^\\newlabel/!d' \ +$1 > $2 +endef + +# Makes an aux file that only has stuff relevant to the bbl in it +# $(call make-auxbbl-file,<flattened-aux>,<new-aux>) +define make-auxbbl-file +$(SED) \ +-e '/^\\newlabel/d' \ +$1 > $2 +endef + +# Makes a .gpi.d file from a .gpi file +# $(call make-gpi-d,<.gpi>,<.gpi.d>) +define make-gpi-d +$(ECHO) '# vim: ft=make' > $2; \ +$(ECHO) 'ifndef INCLUDED_$(call cleanse-filename,$2)' >> $2; \ +$(ECHO) 'INCLUDED_$(call cleanse-filename,$2) := 1' >> $2; \ +$(call get-gpi-deps,$1,$(addprefix $(2:%.gpi.d=%).,$(GNUPLOT_OUTPUT_EXTENSION) gpi.d)) >> $2; \ +$(ECHO) 'endif' >> $2; +endef + +# Parse .gpi files for data and loaded dependencies, output to stdout +# +# The sed script here tries to be clever about obtaining valid +# filenames from the gpi file. It assumes that the plot command starts its own +# line, which is not too difficult a constraint to satisfy. +# +# This command script also generates 'include' directives for every 'load' +# command in the .gpi file. The load command must appear on a line by itself +# and the file it loads must have the suffix .gpi. If you don't want it to be +# compiled when running make graphics, then give it a suffix of ._include_.gpi. +# +# $(call get-gpi-deps,<gpi file>,<targets>) +define get-gpi-deps +$(SED) \ +-e '/^[[:space:]]*s\{0,1\}plot/,/[^\\]$$/{' \ +-e ' H' \ +-e ' /[^\\]$$/{' \ +-e ' s/.*//' \ +-e ' x' \ +-e ' s/\\\{0,1\}\n//g' \ +-e ' s/^[[:space:]]*s\{0,1\}plot[[:space:]]*\(\[[^]]*\][[:space:]]*\)*/,/' \ +-e ' s/[[:space:]]*\(['\''"][^'\''"]*['\''"]\)\{0,1\}[^,]*/\1/g' \ +-e ' s/,['\''"]-\{0,1\}['\''"]//g' \ +-e ' s/[,'\''"]\{1,\}/ /g' \ +-e ' s!.*!$2: &!' \ +-e ' p' \ +-e ' }' \ +-e ' d' \ +-e '}' \ +-e 's/^[[:space:]]*load[[:space:]]*['\''"]\([^'\''"]*\.gpi\)['\''"].*$$/-include \1.d/p' \ +-e 'd' \ +$1 +endef + +# Colorizes real, honest-to-goodness LaTeX errors that can't be overcome with +# recompilation. +# +# Note that we only ignore file not found errors for things that we know how to +# build, like graphics files. +# +# $(call colorize-latex-errors,<log file>) +define colorize-latex-errors +$(SED) \ +-e '$$ b para' \ +-e '/^$$/b para' \ +-e 'H' \ +-e 'd' \ +-e ':para' \ +-e 'x' \ +-e '/^$$/d' \ +-e 's/^\n*//' \ +-e '/^! LaTeX Error: File /{' \ +-e ' s/^/::DOUBLE_PARAGRAPH::/' \ +-e ' h' \ +-e ' d' \ +-e '}' \ +-e 's/^::DOUBLE_PARAGRAPH:://' \ +-e '/could not locate the file with any of these extensions:/d' \ +-e '/Missing .begin.document/{' \ +-e ' h' \ +-e ' s/.*/Are you trying to build an include file?/' \ +-e ' x' \ +-e ' G' \ +-e '}' \ +-e '/ LaTeX Error: Cannot determine size/d' \ +-e 's/.* LaTeX Error .*/$(C_ERROR)&$(C_RESET)/p' \ +-e 's/Error: pdflatex (file .*/$(C_ERROR)& - try specifying it without an extension$(C_RESET)/p' \ +-e '/.*\*hyperref using.*driver \(.*\)\*.*/{' \ +-e ' s//\1/' \ +-e ' /^$(hyperref_driver_pattern)$$/!{' \ +-e ' s/.*//' \ +-e ' p' \ +-e ' s/.*/$(C_ERROR)--- Using incorrect driver for hyperref! ---$(C_RESET)/' \ +-e ' p' \ +-e ' s/.*/$(C_ERROR)$(hyperref_driver_error)$(C_RESET)/' \ +-e ' p' \ +-e ' }' \ +-e ' d' \ +-e '}' \ +-e '/ LaTeX Error: Unknown graphics extension/{' \ +-e ' s/^/ /' \ +-e ' h' \ +-e ' s/.*/--- Graphics extension error:/' \ +-e ' G' \ +-e ' h' \ +-e ' s/.*/--- If you specified the extension explicitly in your .tex file, try removing it./' \ +-e ' H' \ +-e ' g' \ +-e ' s/.*/$(C_ERROR)&$(C_RESET)/' \ +-e ' p' \ +-e ' s/.*//' \ +-e ' h' \ +-e ' b' \ +-e '}' \ +-e 's/.*\(\n\{0,\}! .*\)/$(C_ERROR)\1$(C_RESET)/p' \ +-e 'd' \ +$1 +endef + +# Colorize Makeindex errors +define colorize-makeindex-errors +$(SED) \ +-e '/^!! /{' \ +-e ' N' \ +-e ' s/^.*$$/$(C_ERROR)&$(C_RESET)/' \ +-e ' p' \ +-e '}' \ +-e 'd' \ +$1 +endef + +# Colorize epstopdf errors +# +# $(call colorize-epstopdf-errors,<log file>) +define colorize-epstopdf-errors +$(SED) \ +-e '/^Error:/,/^Execution stack:/{' \ +-e ' /^Execution stack:/d' \ +-e ' s/.*/$(C_ERROR)&$(C_RESET)/' \ +-e ' p' \ +-e '}' \ +-e 'd' \ +$1 +endef + +# Colorize GNUplot errors +# +# $(call colorize-gnuplot-errors,<log file>) +define colorize-gnuplot-errors +$(SED) \ +-e '/, line [0-9]*:/!{' \ +-e ' H' \ +-e ' x' \ +-e ' s/.*\n\(.*\n.*\)$$/\1/' \ +-e ' x' \ +-e '}' \ +-e '/, line [0-9]*:/{' \ +-e ' H' \ +-e ' /unknown.*terminal type/{' \ +-e ' s/.*/--- Try changing the GNUPLOT_OUTPUT_EXTENSION variable to 'eps'./' \ +-e ' H' \ +-e ' }' \ +-e ' /gpihead/{' \ +-e ' s/.*/--- This could be a Makefile bug - contact the maintainer./' \ +-e ' H' \ +-e ' }' \ +-e ' g' \ +-e ' s/.*/$(C_ERROR)&$(C_RESET)/' \ +-e ' p' \ +-e '}' \ +-e '/^gnuplot>/,/^$$/{' \ +-e ' s/^gnuplot.*/$(C_ERROR)&/' \ +-e ' s/^$$/$(C_RESET)/' \ +-e ' p' \ +-e '}' \ +-e 'd' \ +$1 +endef + +# Colorize GraphViz errors +# +# $(call colorize-dot-errors,<log file>) +define colorize-dot-errors +$(SED) \ +-e '/^Error:/,/context:/s/.*/$(C_ERROR)&$(C_RESET)/p' \ +-e 's/^Warning:.*/$(C_WARNING)&$(C_RESET)/p' \ +-e 'd' \ +'$1' +endef + +# Get all important .aux files from the top-level .aux file and merges them all +# into a single file, which it outputs to stdout. +# +# $(call flatten-aux,<toplevel aux>,<output file>) +define flatten-aux +$(SED) \ +-e '/\\@input{\(.*\)}/{' \ +-e 's//\1/' \ +-e 's![.:]!\\&!g' \ +-e 'h' \ +-e 's!.*!\\:\\\\@input{&}:{!' \ +-e 'p' \ +-e 'x' \ +-e 's/\\././g' \ +-e 's/.*/r &/p' \ +-e 's/.*/d/p' \ +-e 's/.*/}/p' \ +-e 'd' \ +-e '}' \ +-e 'd' \ +'$1' > "$1.$$$$.sed.make"; \ +$(SED) -f "$1.$$$$.sed.make" '$1' > "$1.$$$$.make"; \ +$(SED) \ +-e '/^\\relax/d' \ +-e '/^\\bibcite/d' \ +-e 's/^\(\\newlabel{[^}]\{1,\}}\).*/\1/' \ +"$1.$$$$.make" | $(SORT) > '$2'; \ +$(call remove-temporary-files,$1.$$$$.make $1.$$$$.sed.make) +endef + +# Generate pdf from postscript +# +# Note that we don't just call ps2pdf, since there are so many versions of that +# script on various systems. Instead, we call the postscript interpreter +# directly. +# +# $(call ps2pdf,infile,outfile,[embed fonts]) +define ps2pdf + $(GS) \ + -dSAFER -dCompatibilityLevel=$(PS_COMPATIBILITY) \ + $(if $3,$(PS_EMBED_OPTIONS)) \ + -q -dNOPAUSE -dBATCH \ + -sDEVICE=pdfwrite -sstdout=%stderr \ + '-sOutputFile=$2' \ + -dSAFER -dCompatibilityLevel=$(PS_COMPATIBILITY) \ + $(if $3,$(PS_EMBED_OPTIONS)) \ + -c .setpdfwrite \ + -f '$1' +endef + +# Colorize LaTeX output. +# This uses a neat trick from the Sed & Awk Book from O'Reilly: +# 1) If a line has a single ending paren, delete it to make a blank line (so +# that we catch the first error, which is not always preceded by a blank +# line). +# 2) Ensure that the last line of the file gets appended to the hold buffer, +# and blank it out to trigger end-of-paragraph logic below. +# 3) When encountering a blank line (LaTeX output helpfully breaks output on +# newlines) +# a) swap the hold buffer (containing the paragraph) into the pattern buffer (putting a blank line into the hold buffer), +# b) remove the newline at the beginning (don't ask), +# c) apply any colorizing substitutions necessary to ensure happiness. +# d) get the newline out of the hold buffer and append it +# e) profit! (print) +# 4) Anything not colorized is deleted, unless in verbose mode. +color_tex := \ + $(SED) \ + -e '$${' \ + -e ' /^$$/!{' \ + -e ' H' \ + -e ' s/.*//' \ + -e ' }' \ + -e '}' \ + -e '/^$$/!{' \ + -e ' H' \ + -e ' d' \ + -e '}' \ + -e '/^$$/{' \ + -e ' x' \ + -e ' s/^\n//' \ + -e ' /Output written on /{' \ + -e ' s/.*Output written on \([^(]*\) (\([^)]\{1,\}\)).*/Success! Wrote \2 to \1/' \ + -e ' s/[[:digit:]]\{1,\}/$(C_PAGES)&$(C_RESET)/g' \ + -e ' s/Success!/$(C_SUCCESS)&$(C_RESET)/g' \ + -e ' s/to \(.*\)$$/to $(C_SUCCESS)\1$(C_RESET)/' \ + -e ' b end' \ + -e ' }' \ + -e ' / *LaTeX Error:.*/{' \ + -e ' s/.*\( *LaTeX Error:.*\)/$(C_ERROR)\1$(C_RESET)/' \ + -e ' b end' \ + -e ' }' \ + -e ' /.*Warning:.*/{' \ + -e ' s//$(C_WARNING)&$(C_RESET)/' \ + -e ' b end' \ + -e ' }' \ + -e ' /Underfull.*/{' \ + -e ' s/.*\(Underfull.*\)/$(C_UNDERFULL)\1$(C_RESET)/' \ + -e ' b end' \ + -e ' }' \ + -e ' /Overfull.*/{' \ + -e ' s/.*\(Overfull.*\)/$(C_OVERFULL)\1$(C_RESET)/' \ + -e ' b end' \ + -e ' }' \ + $(if $(VERBOSE),,-e ' d') \ + -e ' :end' \ + -e ' G' \ + -e '}' \ + +# Colorize BibTeX output. +color_bib := \ + $(SED) \ + -e 's/^Warning--.*/$(C_WARNING)&$(C_RESET)/' -e 't' \ + -e '/---/,/^.[^:]/{' \ + -e ' H' \ + -e ' /^.[^:]/{' \ + -e ' x' \ + -e ' s/\n\(.*\)/$(C_ERROR)\1$(C_RESET)/' \ + -e ' p' \ + -e ' s/.*//' \ + -e ' h' \ + -e ' d' \ + -e ' }' \ + -e ' d' \ + -e '}' \ + -e '/(.*error.*)/s//$(C_ERROR)&$(C_RESET)/' \ + $(if $(VERBOSE),,-e 'd') + + +# Make beamer output big enough to print on a full page. Landscape doesn't +# seem to work correctly. +enlarge_beamer = $(PSNUP) -l -1 -W128mm -H96mm -pletter + +# $(call test-run-again,<source stem>) +test-run-again = $(EGREP) -q '^(.*Rerun .*|No file $1\.[^.]+\.)$$' $1.log + +# This tests whether the build target commands should be run at all, from +# viewing the log file. +# $(call test-log-for-need-to-run,<source stem>) +define test-log-for-need-to-run +$(SED) \ +-e '/^No file $(call escape-dots,$1)\.aux\./d' \ +$1.log \ +| $(EGREP) -q '^(.*Rerun .*|No file $1\.[^.]+\.|No file .+\.tex\.|LaTeX Warning: File.*)$$' +endef + +# LaTeX invocations +# +# $(call latex,<tex file>,[<extra LaTeX args>]) +run-latex = $(latex_build_program) --interaction=batchmode $(if $2,$2,) $1 > /dev/null + +# $(call latex-color-log,<LaTeX stem>) +latex-color-log = $(color_tex) $1.log + +# $(call run-makeindex,<input>,<output>,<log>,<extra flags>) +define run-makeindex +success=1; \ +if ! $(MAKEINDEX) -q $1 -t $3 -o $2 $4 > /dev/null || $(EGREP) -q '^!!' $3; then \ + $(call colorize-makeindex-errors,$3); \ + $(RM) -f '$2'; \ + success=0; \ +fi; \ +[ "$$success" = "1" ] && $(sh_true) || $(sh_false); +endef + +# This runs the given script to generate output, and it uses MAKE_RESTARTS to +# ensure that it never runs it more than once for a particular root make +# invocation. +# +# $(call run-script,<interpreter>,<input>,<output>) +define run-script +[ ! -e '$2.cookie' ] && $(ECHO) "restarts=$(RESTARTS)" > $2.cookie && $(ECHO) "level=$(MAKELEVEL)" >> $2.cookie; \ +restarts=`$(SED) -n -e 's/^restarts=//p' $2.cookie`; \ +level=`$(SED) -n -e 's/^level=//p' $2.cookie`; \ +if $(EXPR) $(MAKELEVEL) '<=' $$level '&' $(RESTARTS) '<=' $$restarts >/dev/null; then \ + $(call echo-build,$2,$3,$(RESTARTS)-$(MAKELEVEL)); \ + $1 '$2' '$3'; \ + $(ECHO) "restarts=$(RESTARTS)" > '$2.cookie'; \ + $(ECHO) "level=$(MAKELEVEL)" >> '$2.cookie'; \ +fi +endef + +# BibTeX invocations +# +# $(call run-bibtex,<tex stem>) +run-bibtex = $(BIBTEX) $1 | $(color_bib) + + +# $(call convert-eps-to-pdf,<eps file>,<pdf file>,[gray]) +# Note that we don't use the --filter flag because it has trouble with bounding boxes that way. +define convert-eps-to-pdf +$(if $3,$(CAT) '$1' | $(call kill-ps-color) > '$1.cookie',$(CP) '$1' '$1.cookie'); \ +$(EPSTOPDF) '$1.cookie' --outfile='$2' > $1.log; \ +$(call colorize-epstopdf-errors,$1.log); +endef + +# $(call convert-gpi,<gpi file>,<output file>,[gray]) +# +define convert-gpi +$(ECHO) 'set terminal $(if $(filter %.pdf,$2),pdf enhanced,postscript enhanced eps)' \ +$(if $(filter %.pdf,$2),fsize ,)$(call get-default,$(strip \ +$(firstword \ + $(shell \ + $(SED) \ + -e 's/^\#\#FONTSIZE=\([[:digit:]]\{1,\}\)/\1/p' \ + -e 'd' \ + $1 $(strip $(gpi_global)) \ + ) \ +) \ +),$(if $(filter %.pdf,$2),$(DEFAULT_GPI_PDF_FONTSIZE),$(DEFAULT_GPI_EPS_FONTSIZE))) \ +$(strip $(if $3,monochrome,$(if \ +$(shell $(EGREP) '^\#\#[[:space:]]*GRAY[[:space:]]*$$' $< $(gpi_global)),\ +,color))) > $1head.make; \ +$(ECHO) 'set output "$2"' >> $1head.make; \ +$(if $(gpi_global),$(CAT) $(gpi_global) >> $1head.make;,) \ +fnames='$1head.make $1';\ +$(if $(gpi_sed),\ + $(SED) -f '$(gpi_sed)' $$fnames > $1.temp.make; \ + fnames=$1.temp.make;,\ +) \ +success=1; \ +if ! $(GNUPLOT) $$fnames 2>$1.log; then \ + $(call colorize-gnuplot-errors,$1.log); \ + success=0; \ +fi; \ +$(if $(gpi_sed),$(call remove-temporary-files,$1.temp.make);,) \ +$(call remove-temporary-files,$1head.make); \ +[ "$$success" = "1" ] && $(sh_true) || $(sh_false); +endef + +# Creation of .eps files from .png files +# +# The intermediate step of PNM (using NetPBM) produces much nicer output than +# ImageMagick's "convert" binary. I couldn't get the right combination of +# flags to make it look nice, anyway. +# +# To handle gray scale conversion, we pipe things through ppmtopgm in the +# middle. +# +# $(call convert-png,<png file>,<eps file>) +define convert-png +$(PNGTOPNM) "$1" \ + $(if $3,| $(PPMTOPGM),) \ + | $(PNMTOPS) -noturn \ + > "$2" +endef + +# Creation of .eps files from .jpg files +# +# Thanks to brubakee for this solution. +# +# Uses Postscript level 2 to avoid file size bloat +# $(call convert-jpg,<jpg file>,<eps file>) +define convert-jpg +$(CONVERT) $(if $3,-type Grayscale,) '$1' eps2:'$2' +endef + +# Creation of .eps files from .fig files +# $(call convert-fig,<fig file>,<output file>,[gray]) +convert-fig = $(FIG2DEV) -L $(if $(filter %.pdf,$2),pdf,eps) $(if $3,-N,) $1 $2 + +# Creation of .pstex files from .fig files +# $(call convert-fig-pstex,<fig file>,<pstex file>) +convert-fig-pstex = $(FIG2DEV) -L pstex $1 $2 > /dev/null 2>&1 + +# Creation of .pstex_t files from .fig files +# $(call convert-fig-pstex-t,<fig file>,<pstex file>,<pstex_t file>) +convert-fig-pstex-t = $(FIG2DEV) -L pstex_t -p $3 $1 $2 > /dev/null 2>&1 + +# Creation of .dot_t files from .dot files +# #(call convert-dot-tex,<dot file>,<dot_t file>) +convert-dot-tex = $(DOT2TEX) '$1' > '$2' + +# Converts svg files into .eps files +# +# $(call convert-svg,<svg file>,<eps file>,[gray]) +convert-svg = $(INKSCAPE) --export-eps='$2' '$1' + +# Converts xvg files into .eps files +# +# $(call convert-xvg,<xvg file>,<eps file>,[gray]) +convert-xvg = $(XMGRACE) '$1' -printfile - -hardcopy -hdevice $(if $3,-mono,) EPS > '$2' + +# Converts .eps.gz files into .eps files +# +# $(call convert-epsgz,<eps.gz file>,<eps file>,[gray]) +convert-epsgz = $(GUNZIP) -c '$1' $(if $3,| $(call kill-ps-color)) > '$2' + +# Converts .eps files into .eps files (usually a no-op, but can make grayscale) +# +# $(call convert-eps,<in file>,<out file>,[gray]) +convert-eps = $(if $3,$(call kill-ps-color) $1 > $2) + +# The name of the file containing special postscript commands for grayscale +gray_eps_file := gray.eps.make + +# Changes sethsbcolor and setrgbcolor calls in postscript to always produce +# grayscale. In general, this is accomplished by writing new versions of those +# functions into the user dictionary space, which is looked up before the +# global or system dictionaries (userdict is one of the permanent dictionaries +# in postscript and is not read-only like systemdict). +# +# For setrgbcolor, the weighted average of the triple is computed and the +# triple is replaced with three copies of that average before the original +# procedure is called: .299R + .587G + .114B +# +# For sethsbcolor, the color is first converted to RGB, then to grayscale by +# the new setrgbcolor operator as described above. Why is this done? +# Because simply using the value component will tend to make pure colors +# white, a very undesirable thing. Pure blue should not translate to white, +# but to some level of gray. Conversion to RGB does the right thing. It's +# messy, but it works. +# +# From +# http://en.wikipedia.org/wiki/HSV_color_space#Transformation_from_HSV_to_RGB, +# HSB = HSV (Value = Brightness), and the formula used to convert to RGB is +# as follows: +# +# Hi = int(floor(6 * H)) mod 6 +# f = 6 * H - Hi +# p = V(1-S) +# q = V(1-fS) +# t = V(1-(1-f)S) +# if Hi = 0: R G B <-- V t p +# if Hi = 1: R G B <-- q V p +# if Hi = 2: R G B <-- p V t +# if Hi = 3: R G B <-- p q V +# if Hi = 4: R G B <-- t p V +# if Hi = 5: R G B <-- V p q +# +# The messy stack-based implementation is below +# $(call create-gray-eps-file,filename) +define create-gray-eps-file +$(ECHO) -n -e '\ +/OLDRGB /setrgbcolor load def\n\ +/setrgbcolor {\n\ + .114 mul exch\n\ + .587 mul add exch\n\ + .299 mul add\n\ + dup dup\n\ + OLDRGB\n\ +} bind def\n\ +/OLDHSB /sethsbcolor load def\n\ +/sethsbcolor {\n\ + 2 index % H V S H\n\ + 6 mul floor cvi 6 mod % Hi V S H\n\ + 3 index % H Hi V S H\n\ + 6 mul % 6H Hi V S H\n\ + 1 index % Hi 6H Hi V S H\n\ + sub % f Hi V S H\n\ + 2 index 1 % 1 V f Hi V S H\n\ + 4 index % S 1 V f Hi V S H\n\ + sub mul % p f Hi V S H\n\ + 3 index 1 % 1 V p f Hi V S H\n\ + 6 index % S 1 V p f Hi V S H\n\ + 4 index % f S 1 V p f Hi V S H\n\ + mul sub mul % q p f Hi V S H\n\ + 4 index 1 1 % 1 1 V q p f Hi V S H\n\ + 5 index % f 1 1 V q p f Hi V S H\n\ + sub % (1-f) 1 V q p f Hi V S H\n\ + 8 index % S (1-f) 1 V q p f Hi V S H\n\ + mul sub mul % t q p f Hi V S H\n\ + 4 -1 roll pop % t q p Hi V S H\n\ + 7 -2 roll pop pop % t q p Hi V\n\ + 5 -2 roll % Hi V t q p\n\ + dup 0 eq\n\ + {1 index 3 index 6 index}\n\ + {\n\ + dup 1 eq\n\ + {3 index 2 index 6 index}\n\ + {\n\ + dup 2 eq\n\ + {4 index 2 index 4 index}\n\ + {\n\ + dup 3 eq\n\ + {4 index 4 index 3 index}\n\ + {\n\ + dup 4 eq\n\ + {2 index 5 index 3 index}\n\ + {\n\ + dup 5 eq\n\ + {1 index 5 index 5 index}\n\ + {0 0 0}\n\ + ifelse\n\ + }\n\ + ifelse\n\ + }\n\ + ifelse\n\ + }\n\ + ifelse\n\ + }\n\ + ifelse\n\ + }\n\ + ifelse % B G R Hi V t q p\n\ + setrgbcolor\n\ + 5 {pop} repeat\n\ +} bind def\n'\ +> $1 +endef + +# This actually inserts the color-killing code into a postscript file +# $(call kill-ps-color) +define kill-ps-color +$(SED) -e '/%%EndComments/r $(gray_eps_file)' +endef + +# Converts graphviz .dot files into .eps files +# Grayscale is not directly supported by dot, so we pipe it through fig2dev in +# that case. +# $(call convert-dot,<dot file>,<eps file>,<log file>,[gray]) +define convert-dot +$(DOT) -Tps '$1' 2>'$3' $(if $4,| $(call kill-ps-color)) > $2; \ +$(call colorize-dot-errors,$3) +endef + +# Convert DVI to Postscript +# $(call make-ps,<dvi file>,<ps file>,<log file>,[<paper size>]) +make-ps = \ + $(DVIPS) -o '$2' $(if $(filter-out BEAMER,$4),-t$(firstword $4),) '$1' \ + $(if $(filter BEAMER,$4),| $(enlarge_beamer)) > $3 2>&1 + +# Convert Postscript to PDF +# $(call make-pdf,<ps file>,<pdf file>,<log file>,<embed file>) +make-pdf = \ + $(call ps2pdf,$1,$2,$(filter 1,$(shell $(CAT) '$4'))) > '$3' 2>&1 + +# Display information about what is being done +# $(call echo-build,<input file>,<output file>,[<run number>]) +echo-build = $(ECHO) "$(C_BUILD)= $1 --> $2$(if $3, ($3),) =$(C_RESET)" +echo-graphic = $(ECHO) "$(C_GRAPHIC)= $1 --> $2 =$(C_RESET)" +echo-dep = $(ECHO) "$(C_DEP)= $1 --> $2 =$(C_RESET)" + +# Display a list of something +# $(call echo-list,<values>) +echo-list = for x in $1; do $(ECHO) "$$x"; done + +# +# DEFAULT TARGET +# + +.PHONY: all +all: $(default_pdf_targets) ; + +.PHONY: all-pdf +all-pdf: $(default_pdf_targets) ; + +ifneq "$(strip $(BUILD_STRATEGY))" "pdflatex" +.PHONY: all-ps +all-ps: $(default_ps_targets) ; + +.PHONY: all-dvi +all-dvi: $(default_dvi_targets) ; +endif + +# +# VIEWING TARGET +# +.PHONY: show +show: all + $(QUIET)for x in $(default_pdf_targets); do \ + [ -e "$$x" ] && $(VIEW_PDF) $$x & \ + done + +# +# INCLUDES +# +source_includes := $(addsuffix .d,$(source_stems_to_include)) +graphic_includes := $(addsuffix .gpi.d,$(graphic_stems_to_include)) + +# Include only the dependencies used +ifneq "" "$(source_includes)" +include $(source_includes)$(call include-message,$(source_includes)) +endif +ifneq "" "$(graphic_includes)" +include $(graphic_includes)$(call include-message,$(graphic_includes)) +endif + +# +# MAIN TARGETS +# + +# Note that we don't just say %: %.pdf here - this can tend to mess up our +# includes, which detect what kind of file we are asking for. For example, +# asking to build foo.pdf is much different than asking to build foo when +# foo.gpi exists, because we look through all of the goals for *.pdf that +# matches *.gpi, then use that to determine which include files we need to +# build. +# +# Thus, we invoke make recursively with better arugments instead, restarting +# all of the appropriate machinery. +.PHONY: $(default_stems_ss) +$(default_stems_ss): %: %.pdf ; + +# This builds and displays the wanted file. +.PHONY: $(addsuffix ._show,$(stems_ssg)) +%._show: %.pdf + $(QUIET)$(VIEW_PDF) $< & + +ifneq "$(strip $(BUILD_STRATEGY))" "pdflatex" +.SECONDARY: $(all_pdf_targets) +%.pdf: %.ps %.embed.make + $(QUIET)$(call echo-build,$<,$@) + $(QUIET)$(call make-pdf,$<,$@.temp,$@.log,$*.embed.make); \ + if [ x"$$?" = x"0" ]; then \ + $(if $(VERBOSE),$(CAT) $@.log,:); \ + $(RM) -f '$@'; \ + $(MV) '$@.temp' '$@'; \ + $(TOUCH) '$@'; \ + $(call copy-with-logging,$@,$(BINARY_TARGET_DIR)); \ + else \ + $(CAT) $@.log; \ + $(call remove-temporary-files,'$@.temp'); \ + $(sh_false); \ + fi + +.SECONDARY: $(all_ps_targets) +%.ps: %.dvi %.paper.make + $(QUIET)$(call echo-build,$<,$@) + $(QUIET)$(call make-ps,$<,$@.temp,$@.log,\ + $(firstword $(shell $(CAT) $*.paper.make))); \ + if [ x"$$?" = x"0" ]; then \ + $(if $(VERBOSE),$(CAT) $@.log,:); \ + $(RM) -f '$@'; \ + $(MV) '$@.temp' '$@'; \ + $(TOUCH) '$@'; \ + $(call copy-with-logging,$@,$(BINARY_TARGET_DIR)); \ + else \ + $(CAT) $@.log; \ + $(call remove-temporary-files,'$@.temp'); \ + $(sh_false); \ + fi +endif + +# Build the final target (dvi or pdf) file. This is a very tricky rule because +# of the way that latex runs multiple times, needs graphics after the first run +# (or maybe already has them), and relies on bibliographies or indices that may +# not exist. +# +# Check the log for fatal errors. If they exist, colorize and bail. +# +# Create the .auxtarget.cookie file. (Needed for next time if not present) +# +# If any of the following are true, we must rebuild at least one time: +# +# * the .bbl was recently rebuilt +# +# check a cookie, then delete it +# +# * any of several output files was created or changed: +# +# check $*.run.cookie, then delete it +# +# * the .aux file changed in a way that necessitates attention +# +# Note that if the .auxtarget.make file doesn't exist, this means +# that we are doing a clean build, so it doesn't figure into the +# test for running again. +# +# compare against .auxtarget.make +# +# move if different, remove if not +# +# * the .log file has errors or warnings requiring at least one more run +# +# We use a loop over a single item to simplify the process of breaking +# out when we find one of the conditions to be true. +# +# If we do NOT need to run latex here, then we move the $@.1st.make file +# over to $@ because the target file has already been built by the first +# dependency run and is valid. +# +# If we do, we delete that cookie file and do the normal multiple-runs +# routine. +# +ifneq "$(strip $(BUILD_STRATEGY))" "pdflatex" +.SECONDARY: $(all_dvi_targets) +endif +%.$(build_target_extension): %.bbl %.aux %.$(build_target_extension).1st.make + $(QUIET)\ + fatal=`$(call colorize-latex-errors,$*.log)`; \ + if [ x"$$fatal" != x"" ]; then \ + $(ECHO) "$$fatal"; \ + exit 1; \ + fi; \ + $(call make-auxtarget-file,$*.aux.make,$*.auxtarget.cookie); \ + run=0; \ + for i in 1; do \ + if $(call test-exists,$*.bbl.cookie); then \ + run=1; \ + break; \ + fi; \ + if $(call test-exists,$*.run.cookie); then \ + run=1; \ + break; \ + fi; \ + if $(call \ + test-exists-and-different,$*.auxtarget.cookie,$*.auxtarget.make);\ + then \ + run=1; \ + break; \ + fi; \ + if $(call test-log-for-need-to-run,$*); then \ + run=1; \ + break; \ + fi; \ + done; \ + $(call remove-temporary-files,$*.bbl.cookie $*.run.cookie); \ + $(MV) $*.auxtarget.cookie $*.auxtarget.make; \ + if [ x"$$run" = x"1" ]; then \ + $(call remove-files,$@.1st.make); \ + for i in 2 3 4 5; do \ + $(if $(findstring 3.79,$(MAKE_VERSION)),\ + $(call echo-build,$*.tex,$@,$(RESTARTS)-$$$$i),\ + $(call echo-build,$*.tex,$@,$(RESTARTS)-$$i)\ + ); \ + $(call run-latex,$*); \ + $(CP) '$*.log' '$*.'$(RESTARTS)-$$i'.log'; \ + $(call test-run-again,$*) || break; \ + done; \ + else \ + $(MV) '$@.1st.make' '$@'; \ + fi; \ + $(call copy-with-logging,$@,$(BINARY_TARGET_DIR)); \ + $(call latex-color-log,$*) + +# Build the .bbl file. When dependencies are included, this will (or will +# not!) depend on something.bib, which we detect, acting accordingly. The +# dependency creation also produces the %.auxbbl.make file. BibTeX is a bit +# finicky about what you call the actual files, but we can rest assured that if +# a .auxbbl.make file exists, then the .aux file does, as well. The +# .auxbbl.make file is a cookie indicating whether the .bbl needs to be +# rewritten. It only changes if the .aux file changes in ways relevant to .bbl +# creation. +# +# Note that we do NOT touch the .bbl file if there is no need to +# create/recreate it. We would like to leave existing files alone if they +# don't need to be changed, thus possibly avoiding a rebuild trigger. +%.bbl: %.auxbbl.make + $(QUIET)\ + $(if $(filter %.bib,$^),\ + $(call echo-build,$(filter %.bib,$?) $*.aux,$@); \ + $(call run-bibtex,$*); \ + $(TOUCH) $@.cookie; \ + ) \ + if $(EGREP) -q 'bibstyle.(apacann|chcagoa|[^}]*annot)' '$*.aux'; then \ + $(call echo-build,** annotated extra latex **,output ignored,$(RESTARTS)-1); \ + $(call run-latex,$*); \ + $(CP) '$*.log' '$*.$(RESTARTS)-annotated.log'; \ + $(if $(filter %.bib,$^),\ + $(call echo-build,** annotated extra bibtex ** $(filter %.bib,$?) $*.aux,$@); \ + $(call run-bibtex,$*); \ + $(TOUCH) $@.cookie; \ + ) \ + $(call echo-build,** annotated extra latex **,output ignored,$(RESTARTS)-2); \ + $(call run-latex,$*); \ + fi + +# Create the index file - note that we do *not* depend on %.tex here, since +# that unnecessarily restricts the kinds of indices that we can build to those +# with exactly the same stem as the source file. Things like splitidx create +# idx files with other names. +# +# Therefore, we add the .tex dependency in the sourcestem.d file in the call to +# get index file dependencies from the logs. +%.ind: %.idx + $(QUIET)$(call echo-build,$<,$@) + $(QUIET)$(call run-makeindex,$<,$@,$*.ilg) + +# Create the glossary file +%.gls: %.glo %.tex + $(QUIET)$(call echo-build,$<,$@) + $(QUIET)$(call run-makeindex,$<,$@,$*.glg,-s nomencl.ist) + +# Create the nomenclature file +%.nls: %.nlo %.tex + $(QUIET)$(call echo-build,$<,$@) + $(QUIET)$(call run-makeindex,$<,$@,$*.nlg,-s nomencl.ist) + +# SCRIPTED LaTeX TARGETS +# +# Keep the generated .tex files around for debugging if needed. +.SECONDARY: $(all_tex_targets) + +%.tex:: %.tex.sh + $(QUIET)$(call run-script,$(SHELL),$<,$@) + +%.tex:: %.tex.py + $(QUIET)$(call run-script,$(PYTHON),$<,$@) + +%.tex:: %.tex.pl + $(QUIET)$(call run-script,$(PERL),$<,$@) + +%.tex:: %.rst $(RST_STYLE_FILE) + $(QUIET)\ + $(call run-script,$(RST2LATEX)\ + --documentoptions=letterpaper\ + $(if $(RST_STYLE_FILE),--stylesheet=$(RST_STYLE_FILE),),$<,$@) + +# +# GRAPHICS TARGETS +# +.PHONY: all-graphics +all-graphics: $(all_graphics_targets); + +ifneq "$(strip $(BUILD_STRATEGY))" "pdflatex" +.PHONY: all-pstex +all-pstex: $(all_pstex_targets); +endif + +.PHONY: all-dot2tex +all-dot2tex: $(all_dot2tex_targets); + +.PHONY: show-graphics +show-graphics: all-graphics + $(VIEW_GRAPHICS) $(all_known_graphics) + +$(gray_eps_file): + $(QUIET)$(call echo-build,$^,$@) + $(QUIET)$(call create-gray-eps-file,$@) + +ifeq "$(strip $(BUILD_STRATEGY))" "pdflatex" +%.pdf: %.eps $(if $(GRAY),$(gray_eps_file)) + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-eps-to-pdf,$<,$@,$(GRAY)) + +ifeq "$(strip $(GNUPLOT_OUTPUT_EXTENSION))" "pdf" +%.pdf: %.gpi %.gpi.d $(gpi_sed) + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-gpi,$<,$@,$(GRAY)) +endif + +%.pdf: %.fig + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-fig,$<,$@,$(GRAY)) + +endif + +%.eps: %.gpi %.gpi.d $(gpi_sed) + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-gpi,$<,$@,$(GRAY)) + +%.eps: %.fig + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-fig,$<,$@,$(GRAY)) + +%.eps: %.dot $(if $(GRAY),$(gray_eps_file)) + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-dot,$<,$@,$<.log,$(GRAY)) + +%.eps: %.xvg $(if $(GRAY),$(gray_eps_file)) + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-xvg,$<,$@,$(GRAY)) + +%.eps: %.svg $(if $(GRAY),$(gray_eps_file)) + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-svg,$<,$@,$(GRAY)) + +%.eps: %.jpg $(if $(GRAY),$(gray_eps_file)) + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-jpg,$<,$@,$(GRAY)) + +%.eps: %.png $(if $(GRAY),$(gray_eps_file)) + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-png,$<,$@,$(GRAY)) + +%.eps: %.eps.gz $(if $(GRAY),$(gray_eps_file)) + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-epsgz,$<,$@,$(GRAY)) + +%.pstex: %.fig + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-fig-pstex,$<,$@,$(GRAY)) + +%.pstex_t: %.fig %.pstex + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-fig-pstex-t,$<,$@,$*.pstex,$(GRAY)) + +%.dot_t: %.dot + $(QUIET)$(call echo-graphic,$^,$@) + $(QUIET)$(call convert-dot-tex,$<,$@) + +# +# DEPENDENCY-RELATED TARGETS. +# + +# Generate all of the information needed to get dependencies +# As a side effect, this creates a .dvi or .pdf file (depending on the build +# strategy). We need to be sure to remove it if there are errors. Errors can +# take several forms and all of them are found within the log file: +# * There was a LaTeX error +# * A needed file was not found +# * Cross references need adjustment +# +# Behavior: +# This rule is responsible for generating the following: +# %.aux +# %.d +# %.aux.make +# %.(pdf|dvi).1st.make (the .pdf or .dvi output file, moved) +# +# Steps: +# +# Run latex +# Move .pdf or .dvi somewhere else (make no judgements about success) +# Flatten the .aux file into another file +# Add source dependencies +# Add graphic dependencies +# Add bib dependencies +# +# Create cookies for various suffixes that may represent files that +# need to be read by LaTeX in order for it to function properly. +# +# Note that if some of the dependencies are discovered because they turn +# up missing in the log file, we really need the .d file to be reloaded. +# Adding a sleep command helps with this. Otherwise make is extremely +# nondeterministic, sometimes working, sometimes not. +# +# Usually we can force this by simply removing the generated pdf file and +# not creating a .1st.make file.. +# +%.$(build_target_extension).1st.make %.d %.aux %.aux.make %.fls: %.tex + $(QUIET)$(call echo-build,$<,$*.d $*.$(build_target_extension).1st.make,$(RESTARTS)-1) + $(QUIET)\ + $(call run-latex,$<,--recorder) || $(sh_true); \ + $(CP) '$*.log' '$*.$(RESTARTS)-1.log'; \ + $(call die-on-dot2tex,$*.log); \ + $(call die-on-no-aux,$*); \ + $(call flatten-aux,$*.aux,$*.aux.make); \ + $(ECHO) "# vim: ft=make" > $*.d; \ + $(ECHO) ".PHONY: $*._graphics" >> $*.d; \ + $(call get-inputs,$*.fls,$(addprefix $*.,aux aux.make d $(build_target_extension))) >> $*.d; \ + $(call get-missing-inputs,$*.log,$(addprefix $*.,aux aux.make d $(build_target_extension))) >> $*.d; \ + $(ECHO) ".SECONDEXPANSION:" >> $*.d; \ + $(call get-graphics,$*) >> $*.d; \ + $(call get-log-index,$*,$(addprefix $*.,d aux aux.make)) >> $*.d; \ + $(call get-bibs,$*.aux.make,$(addprefix $*.,bbl aux aux.make)) >> $*.d; \ + $(EGREP) -q "# MISSING" $*.d && $(SLEEP) 1 && $(RM) $*.pdf; \ + $(call move-if-exists,$*.$(build_target_extension),$*.$(build_target_extension).1st.make); \ + for s in toc out lot lof lol nav; do \ + if [ -e "$*.$$s" ]; then \ + if ! $(DIFF) -q $*.$$s $*.$$s.make >/dev/null 2>&1; then \ + $(TOUCH) $*.run.cookie; \ + fi; \ + $(CP) $*.$$s $*.$$s.make; \ + fi; \ + done + +# This is a cookie that is updated if the flattened aux file has changed in a +# way that affects the bibliography generation. +.SECONDARY: $(addsuffix .auxbbl.make,$(stems_ssg)) +%.auxbbl.make: %.aux.make + $(QUIET)\ + $(call make-auxbbl-file,$<,$@.temp); \ + $(call replace-if-different-and-remove,$@.temp,$@) + +# Build a dependency file for .gpi files. These often plot data files that +# also reside in the directory, so if a data file changes, it's nice to know +# about it. This also handles loaded .gpi files, whose filename should have +# _include_. in it. +%.gpi.d: %.gpi + $(QUIET)$(call echo-build,$<,$@) + $(QUIET)$(call make-gpi-d,$<,$@) + +# Store the paper size for this document -- note that if beamer is used we set +# it to the special BEAMER paper size. We only do this, however, if the +# special comment exists, in which case we enlarge the output with psnup. +# +# The paper size is extracted from a documentclass attribute. +%.paper.make: %.tex + $(QUIET)$(SED) \ + -e '/\\documentclass/,/}/{' \ + -e ' s/%.*//' \ + -e ' H' \ + -e ' /}/{' \ + -e ' s/.*//' \ + -e ' x' \ + -e ' /\\documentclass/!d' \ + -e ' s/[\n[:space:]]*//g' \ + -e ' s/\([,{[]\)\([[:alnum:]]\{1,\}\)paper\([],}]\)/\1%-\2-%\3/g' \ + -e ' s/\([,{[]\)\(landscape\)\([],}]\)/\1%-\2-%\3/g' \ + -e ' s/^[^%]*%-//' \ + -e ' s/-%[^%]*$$//' \ + -e ' s/-%[^%]%-/ /g' \ + -e ' p' \ + -e ' }' \ + -e ' d' \ + -e '}' \ + -e 'd' \ + $< > $@; \ + $(EGREP) -q '^[^%]*\\documentclass[^{]*{beamer}' $< && \ + (\ + $(EGREP) -q '^%%[[:space:]]*BEAMER[[:space:]]*LARGE$$' $< && \ + $(ECHO) "BEAMER" > $@ || \ + : > $@ \ + ) || $(sh_true) + +# Store embedding instructions for this document using a special comment +%.embed.make: %.tex + $(QUIET)$(EGREP) '^%%[[:space:]]*NO[[:space:]]*EMBED[[:space:]]*$$' $< \ + && $(ECHO) '' > $@ \ + || $(ECHO) '1' > $@; + +# +# HELPFUL PHONY TARGETS +# + +.PHONY: _all_programs +_all_programs: + $(QUIET)$(ECHO) "== All External Programs Used ==" + $(QUIET)$(call output-all-programs) + +.PHONY: _check_programs +_check_programs: + $(QUIET)$(ECHO) "== Checking Makefile Dependencies =="; $(ECHO) + $(QUIET) \ + $(ECHO) hi; \ + allprogs=`\ + ($(call output-all-programs)) | \ + $(SED) \ + -e 's/^[[:space:]]*//' \ + -e '/^#/d' \ + -e 's/[[:space:]]*#.*//' \ + -e '/^=/s/[[:space:]]/_/g' \ + -e '/^[[:space:]]*$$/d' \ + -e 's/^[^=].*=[[:space:]]*\([^[:space:]]\{1,\}\).*$$/\\1/' \ + `; \ + spaces=' '; \ + for p in $${allprogs}; do \ + case $$p in \ + =*) $(ECHO); $(ECHO) "$$p";; \ + *) \ + $(ECHO) -n "$$p:$$spaces" | $(SED) -e 's/^\(.\{0,20\}\).*$$/\1/'; \ + loc=`$(WHICH) $$p`; \ + if [ x"$$?" = x"0" ]; then \ + $(ECHO) "$(C_SUCCESS)Found:$(C_RESET) $$loc"; \ + else \ + $(ECHO) "$(C_FAILURE)Not Found$(C_RESET)"; \ + fi; \ + ;; \ + esac; \ + done + +.PHONY: _check_gpi_files +_check_gpi_files: + $(QUIET)$(ECHO) "== Checking all .gpi files for common errors =="; \ + $(ECHO); \ + for f in $(files.gpi); do \ + result=`$(EGREP) '^([^#]*set terminal |set output )' $$f`; \ + $(ECHO) -n "$$f: "; \ + if [ x"$$result" = x"" ]; then \ + $(ECHO) "$(C_SUCCESS)Okay$(C_RESET)"; \ + else \ + $(ECHO) "$(C_FAILURE)Warning: Problematic commands:$(C_RESET)";\ + $(ECHO) "$(C_ERROR)$$result$(C_RESET)"; \ + fi; \ + done; \ + $(ECHO) + +.PHONY: _all_stems +_all_stems: + $(QUIET)$(ECHO) "== All Stems ==" + $(QUIET)$(call echo-list,$(sort $(default_stems_ss))) + +.PHONY: _includes +_includes: + $(QUIET)$(ECHO) "== Include Stems ==" + $(QUIET)$(ECHO) "=== Sources ===" + $(QUIET)$(call echo-list,$(sort $(source_includes))) + $(QUIET)$(ECHO) "=== Graphics ===" + $(QUIET)$(call echo-list,$(sort $(graphic_includes))) + +.PHONY: _all_sources +_all_sources: + $(QUIET)$(ECHO) "== All Sources ==" + $(QUIET)$(call echo-list,$(sort $(all_files.tex))) + +.PHONY: _dependency_graph +_dependency_graph: + $(QUIET)$(ECHO) "/* LaTeX Dependency Graph */" + $(QUIET)$(call output-dependency-graph) + +.PHONY: _show_dependency_graph +_show_dependency_graph: + $(QUIET)$(call output-dependency-graph,$(graph_stem).dot) + $(QUIET)$(DOT) -Tps -o $(graph_stem).eps $(graph_stem).dot + $(QUIET)$(VIEW_POSTSCRIPT) $(graph_stem).eps + $(QUIET)$(call remove-temporary-files,$(graph_stem).*) + +.PHONY: _sources +_sources: + $(QUIET)$(ECHO) "== Sources ==" + $(QUIET)$(call echo-list,$(sort $(files.tex))) + +.PHONY: _scripts +_scripts: + $(QUIET)$(ECHO) "== Scripts ==" + $(QUIET)$(call echo-list,$(sort $(files_scripts))) + +.PHONY: _graphic_outputs +_graphic_outputs: + $(QUIET)$(ECHO) "== Graphic Outputs ==" + $(QUIET)$(call echo-list,$(sort $(all_graphics_targets))) + +.PHONY: _env +_env: +ifdef .VARIABLES + $(QUIET)$(ECHO) "== MAKE VARIABLES ==" + $(QUIET)$(call echo-list,$(foreach var,$(sort $(.VARIABLES)),'$(var)')) +endif + $(QUIET)$(ECHO) "== ENVIRONMENT ==" + $(QUIET)$(ENV) + +# +# CLEAN TARGETS +# +# clean-generated is somewhat unique - it relies on the .fls file being +# properly built so that it can determine which of the files was generated, and +# which was not. Expect it to silently fail if the .fls file is missing. +# +# This is used to, e.g., clean up index files that are generated by the LaTeX. +.PHONY: clean-generated +clean-generated: + $(QUIET)$(call clean-files,$(foreach e,$(addsuffix .fls,$(all_stems_source)),\ + $(shell $(call get-generated-names,$e)))) + +.PHONY: clean-deps +clean-deps: + $(QUIET)$(call clean-files,$(all_d_targets) *.make *.make.temp *.cookie) + +.PHONY: clean-tex +clean-tex: clean-deps + $(QUIET)$(call clean-files,$(rm_tex)) + +.PHONY: clean-graphics +# TODO: This *always* deletes pstex files, even if they were not generated by +# anything.... In other words, if you create a pstex and pstex_t pair by hand +# an drop them in here without the generating fig file, they will be deleted +# and you won't get them back. It's a hack put in here because I'm not sure we +# even want to keep pstex functionality, so my motivation is not terribly high +# for doing it right. +clean-graphics: + $(QUIET)$(call clean-files,$(all_graphics_targets) $(intermediate_graphics_targets) *.gpi.d *.pstex *.pstex_t *.dot_t) + +.PHONY: clean-backups +clean-backups: + $(QUIET)$(call clean-files,$(backup_patterns) *.temp) + +.PHONY: clean-auxiliary +clean-auxiliary: + $(QUIET)$(call clean-files,$(graph_stem).*) + +.PHONY: clean-nographics +clean-nographics: clean-tex clean-deps clean-backups clean-auxiliary ; + +.PHONY: clean +clean: clean-generated clean-tex clean-graphics clean-deps clean-backups clean-auxiliary + +# +# HELP TARGETS +# + +.PHONY: help +help: + $(help_text) + +.PHONY: version +version: + $(QUIET)\ + $(ECHO) "$(fileinfo) Version $(version)"; \ + $(ECHO) "by $(author)"; \ + +# +# HELP TEXT +# + +define help_text +# $(fileinfo) Version $(version) +# +# by $(author) +# +# Generates a number of possible output files from a LaTeX document and its +# various dependencies. Handles .bib files, \include and \input, and .eps +# graphics. All dependencies are handled automatically by running LaTeX over +# the source. +# +# USAGE: +# +# make [GRAY=1] [VERBOSE=1] [SHELL_DEBUG=1] <target(s)> +# +# STANDARD OPTIONS: +# GRAY: +# Setting this variable forces all recompiled graphics to be grayscale. +# It is useful when creating a document for printing. The default is +# to allow colors. Note that it only changes graphics that need to be +# rebuilt! It is usually a good idea to do a 'make clean' first. +# +# VERBOSE: +# This turns off all @ prefixes for commands invoked by make. Thus, +# you get to see all of the gory details of what is going on. +# +# SHELL_DEBUG: +# This enables the -x option for sh, meaning that everything it does is +# echoed to stderr. This is particularly useful for debugging +# what is going on in $$(shell ...) invocations. One of my favorite +# debugging tricks is to do this: +# +# make -d SHELL_DEBUG=1 VERBOSE=1 2>&1 | less +# +# STANDARD AUXILIARY FILES: +# +# Makefile.ini +# +# This file can contain variable declarations that override various +# aspects of the makefile. For example, one might specify +# +# neverclean := *.pdf *.ps +# onlysources.tex := main.tex +# LATEX_COLOR_WARNING := 'bold red uline' +# +# And this would override the neverclean setting to ensure that pdf +# and ps files always remain behind, set the makefile to treat all +# .tex files that are not "main.tex" as includes (and therefore not +# default targets). It also changes the LaTeX warning output to be +# red, bold, and underlined. +# +# There are numerous variables in this file that can be overridden in +# this way. Search for '?=' to find them all. +# +# Also, you can put arbitrary targets into it if, for example, you +# want your source built from something else, e.g.: +# +# generated.tex: generating_script.weird_lang depA depB +# ./generating_script.weird_lang > $$@ +# +# Note that if you are not careful, you can override the default +# target (what happens when you type "make" without arguments), so if +# you do use Makefile.ini, you probably want to start it with +# something like the following line: +# +# default: all +# +# Since the first target in any makefile is automatically the default, +# and the makefile already has a sensible "all" target, this will do +# what you want. +# +# The Makefile.ini is imported before *anything else* is done, so go +# wild with your ideas for changes to this makefile in there. It +# makes it easy to test them before submitting patches. +# +# STANDARD ENVIRONMENT VARIABLES: +# +# LATEX_COLOR_WARNING '$(LATEX_COLOR_WARNING)' +# LATEX_COLOR_ERROR '$(LATEX_COLOR_ERROR)' +# LATEX_COLOR_UNDERFULL '$(LATEX_COLOR_UNDERFULL)' +# LATEX_COLOR_OVERFULL '$(LATEX_COLOR_OVERFULL)' +# LATEX_COLOR_PAGES '$(LATEX_COLOR_PAGES)' +# LATEX_COLOR_BUILD '$(LATEX_COLOR_BUILD)' +# LATEX_COLOR_GRAPHIC '$(LATEX_COLOR_GRAPHIC)' +# LATEX_COLOR_DEP '$(LATEX_COLOR_DEP)' +# LATEX_COLOR_SUCCESS '$(LATEX_COLOR_SUCCESS)' +# LATEX_COLOR_FAILURE '$(LATEX_COLOR_FAILURE)' +# +# These may be redefined in your environment to be any of the following: +# +# black +# red +# green +# yellow +# blue +# magenta +# cyan +# white +# +# Bold or underline may be used, as well, either alone or in combination +# with colors: +# +# bold +# uline +# +# Order is not important. You may want, for example, to specify: +# +# export LATEX_COLOR_SUCCESS='bold blue uline' +# +# in your .bashrc file. I don't know why, but you may want to. +# +# STANDARD TARGETS: +# +# all: +# Make all possible documents in this directory. The documents are +# determined by scanning for .tex and .tex.sh (described in more detail +# later) and omitting any file that ends in ._include_.tex or +# ._nobuild_.tex. The output is a set of .pdf files. +# +# If you wish to omit files without naming them with the special +# underscore names, set the following near the top of the Makefile, +# or (this is recommended) within a Makefile.ini in the same directory: +# +# includes.tex := file1.tex file2.tex +# +# This will cause the files listed to be considered as include files. +# +# If you have only few source files, you can set +# +# onlysources.tex := main.tex +# +# This will cause only the source files listed to be considered in +# dependency detection. All other .tex files will be considered as +# include files. Note that these options work for *any* source type, +# so you could do something similar with includes.gpi, for example. +# Note that this works for *any valid source* target. All of the +# onlysources.* variables are commented out in the shipping version of +# this file, so it does the right thing when they simply don't exist. +# The comments are purely documentation. If you know, for example, that +# file.mycoolformat is supported by this Makefile, but don't see the +# "onlysources.mycoolformat" declared in the comments, that doesn't mean +# you can't use it. Go ahead and set "onlysources.mycoolformat" and it +# should do the right thing. +# +# show: +# Builds and displays all documents in this directory. It uses the +# environment-overridable value of VIEW_PDF (currently $(VIEW_PDF)) to +# do its work. +# +# all-graphics: +# Make all of the graphics in this directory. +# +# all-pstex (only for BUILD_STRATEGY=latex): +# Build all fig files into pstex and pstex_t files. Gray DOES NOT WORK. +# +# all-gray-pstex (only for BUILD_STRATEGY=latex): +# Build all fig files into grayscale pstex and pstex_t files. +# +# all-dot2tex: +# Build all dot files into tex files. +# +# show-graphics: +# Builds and displays all graphics in this directory. Uses the +# environment-overridable value of VIEW_GRAPHICS (currently +# $(VIEW_GRAPHICS)) to do its work. +# +# clean: +# Remove ALL generated files, leaving only source intact. +# This will *always* skip files mentioned in the "neverclean" variable, +# either in this file or specified in Makefile.ini: +# +# neverclean := *.pdf *.ps +# +# The neverclean variable works on all "clean" targets below, as well. +# +# clean-graphics: +# Remove all generated graphics files. +# +# clean-backups: +# Remove all backup files: $(backup_patterns) +# (XFig and other editors have a nasty habit of leaving them around) +# Also removes Makefile-generated .temp files +# +# clean-tex: +# Remove all files generated from LaTeX invocations except dependency +# information. Leaves graphics alone. +# +# clean-deps: +# Removes all auto-generated dependency information. +# +# clean-auxiliary: +# Removes extra files created by various targets (like the dependency +# graph output). +# +# clean-nographics: +# Cleans everything *except* the graphics files. +# +# help: +# This help text. +# +# version: +# Version information about this LaTeX makefile. +# +# DEBUG TARGETS: +# +# _all_programs: +# A list of the programs used by this makefile. +# +# _check_programs: +# Checks your system for the needed software and reports what it finds. +# +# _check_gpi_files: +# Checks the .gpi files in the current directory for common errors, such +# as specification of the terminal or output file inside of the gpi file +# itself. +# +# _dependency_graph: +# Outputs a .dot file to stdout that represents a graph of LaTeX +# dependencies. To see it, use the _show_dependency_graph target or +# direct the output to a file, run dot on it, and view the output, e.g.: +# +# make _dependency_graph > graph.dot +# dot -T ps -o graph.eps graph.dot +# gv graph.eps +# +# _show_dependency_graph: +# Makes viewing the graph simple: extracts, builds and displays the +# dependency graph given in the _dependency_graph target using the value +# of the environment-overridable VIEW_POSTSCRIPT variable (currently set +# to $(VIEW_POSTSCRIPT)). The postscript viewer is used because it +# makes it easier to zoom in on the graph, a critical ability for +# something so dense and mysterious. +# +# _all_sources: +# List all .tex files in this directory. +# +# _sources: +# Print out a list of all compilable sources in this directory. This is +# useful for determining what make thinks it will be using as the +# primary source for 'make all'. +# +# _scripts: +# Print out a list of scripts that make knows can be used to generate +# .tex files (described later). +# +# _all_stems: +# Print a list of stems. These represent bare targets that can be +# executed. Listing <stem> as a bare target will produce <stem>.pdf. +# +# _includes: +# A list of .d files that would be included in this run if _includes +# weren't specified. This target may be used alone or in conjunction +# with other targets. +# +# _graphic_outputs: +# A list of all generated .eps files +# +# _env: +# A list of environment variables and their values. If supported by +# your version of make, also a list of variables known to make. +# +# FILE TARGETS: +# +# %, %.pdf: +# Build a PDF file from the corresponding %.tex file. +# +# If BUILD_STRATEGY=pdflatex, then this builds the pdf directly. +# Otherwise, it uses this old-school but effective approach: +# +# latex -> dvips -> ps2pdf +# +# The BUILD_STRATEGY can be overridden in Makefile.ini in the same +# directory. The default is pdflatex. +# +# Reasons for using latex -> dvips include the "psfrag" package, and the +# generation of postscript instead of PDF. Arguments for using pdflatex +# include "new and shiny" and "better supported." I can't argue with +# either of those, and supporting them both didn't turn out to be that +# difficult, so there you have it. Choices. +# +# %._show: +# A phony target that builds the pdf file and then displays it using the +# environment-overridable value of VIEW_PDF ($(VIEW_PDF)). +# +# %._graphics: +# A phony target that generates all graphics on which %.pdf (or %.dvi) +# depends. +# +# %.ps (only for BUILD_STRATEGY=latex): +# Build a Postscript file from the corresponding %.tex file. +# This is done using dvips. Paper size is automatically +# extracted from the declaration +# +# \documentclass[<something>paper] +# +# or it is the system default. +# +# If using beamer (an excellent presentation class), the paper +# size is ignored. More on this later. +# +# %.dvi (only for BUILD_STRATEGY=latex): +# Build the DVI file from the corresponding %.tex file. +# +# %.ind: +# Build the index for this %.tex file. +# +# %.gls: +# Build the nomenclature glossary for this %.tex file. +# +# %.nls: +# Build the (newer) nomenclature file for this %.tex file. +# +# %.eps: +# Build an eps file from one of the following file types: +# +# .dot : graphviz +# .gpi : gnuplot +# .fig : xfig +# .xvg : xmgrace +# .svg : scalable vector graphics (goes through inkscape) +# .png : png (goes through NetPBM) +# .jpg : jpeg (goes through ImageMagick) +# .eps.gz : gzipped eps +# +# The behavior of this makefile with each type is described in +# its own section below. +# +# %.pstex{,_t} (only for BUILD_STRATEGY=latex): +# Build a .pstex_t file from a .fig file. +# +# FEATURES: +# +# Optional Binary Directory: +# If you create the _out_ directory in the same place as the makefile, +# it will automatically be used as a dumping ground for .pdf (or .dvi, +# .ps, and .pdf) output files. +# +# Alternatively, you can set the BINARY_TARGET_DIR variable, either as a +# make argument or in Makefile.ini, to point to your directory of +# choice. Note that no pathname wildcard expansion is done in the +# makefile, so make sure that the path is complete before going in +# there. E.g., if you want to specify something in your home directory, +# use $$HOME/ instead of ~/ so that the shell expands it before it gets +# to the makefile. +# +# External Program Dependencies: +# Every external program used by the makefile is represented by an +# ALLCAPS variable at the top of this file. This should allow you to +# make judgments about whether your system supports the use of this +# makefile. The list is available in the ALL_PROGRAMS variable and, +# provided that you are using GNU make 3.80 or later (or you haven't +# renamed this file to something weird like "mylatexmakefile" and like +# invoking it with make -f) can be viewed using +# +# make _all_programs +# +# Additionally, the availability of these programs can be checked +# automatically for you by running +# +# make _check_programs +# +# The programs are categorized according to how important they are and +# what function they perform to help you decide which ones you really +# need. +# +# Colorized Output: +# The output of commands is colorized to highlight things that are often +# important to developers. This includes {underfull,overfull} +# {h,v}boxes, general LaTeX Errors, each stage of document building, and +# the number of pages in the final document. The colors are obtained +# using 'tput', so colorization should work pretty well on any terminal. +# +# The colors can be customized very simply by setting any of the +# LATEX_COLOR_<CONTEXT> variables in your environment (see above). +# +# Predecessors to TeX Files: +# Given a target <target>, if no <target>.tex file exists but a +# corresponding script or predecessor file exists, then appropriate +# action will be taken to generate the tex file. +# +# Currently supported script or predecessor languages are: +# +# sh: %.tex.sh +# perl: %.tex.pl +# python: %.tex.py +# +# Calls the script using the appropriate interpreter, assuming that +# its output is a .tex file. +# +# The script is called thus: +# +# <interpreter> <script file name> <target tex file> +# +# and therefore sees exactly one parameter: the name of the .tex +# file that it is to create. +# +# Why does this feature exist? I ran into this while working on +# my paper dissertation. I wrote a huge bash script that used a +# lot of sed to bring together existing papers in LaTeX. It +# would have been nice had I had something like this to make my +# life easier, since as it stands I have to run the script and +# then build the document with make. This feature provides hooks +# for complicated stuff that you may want to do, but that I have +# not considered. It should work fine with included dependencies, +# too. +# +# Scripts are run every time make is invoked. Some trickery is +# employed to make sure that multiple restarts of make don't cause +# them to be run again. +# +# reST: %.rst +# +# Runs the reST to LaTeX converter to generate a .tex file +# If it finds a file names _rststyle_._include_.tex, uses it as +# the "stylesheet" option to rst2latex. +# +# Note that this does not track sub-dependencies in rst files. It +# assumes that the top-level rst file will change if you want a +# rebuild. +# +# Dependencies: +# +# In general, dependencies are extracted directly from LaTeX output on +# your document. This includes +# +# * Bibliography information +# * \include or \input files (honoring \includeonly, too) +# * Graphics files inserted by the graphicx package +# +# Where possible, all of these are built correctly and automatically. +# In the case of graphics files, these are generated from the following +# file types: +# +# GraphViz: .dot +# GNUPlot: .gpi +# XFig: .fig +# XMgrace: .xvg +# SVG: .svg +# PNG: .png +# JPEG: .jpg +# GZipped EPS: .eps.gz +# +# If the file exists as a .eps already, it is merely used (and will not +# be deleted by 'clean'!). +# +# LaTeX and BibTeX are invoked correctly and the "Rerun to get +# cross-references right" warning is heeded a reasonable number of +# times. In my experience this is enough for even the most troublesome +# documents, but it can be easily changed (if LaTeX has to be run after +# BibTeX more than three times, it is likely that something is moving +# back and forth between pages, and no amount of LaTeXing will fix +# that). +# +# \includeonly is honored by this system, so files that are not +# specified there will not trigger a rebuild when changed. +# +# Beamer: +# A special TeX source comment is recognized by this makefile (only when +# BUILD_STRATEGY=latex, since this invokes psnup): +# +# %%[[:space:]]*BEAMER[[:space:]]*LARGE +# +# The presence of this comment forces the output of dvips through psnup +# to enlarge beamer slides to take up an entire letter-sized page. This +# is particularly useful when printing transparencies or paper versions +# of the slides. For some reason landscape orientation doesn't appear +# to work, though. +# +# If you want to put multiple slides on a page, use this option and then +# print using mpage, a2ps, or psnup to consolidate slides. My personal +# favorite is a2ps, but your mileage may vary. +# +# When beamer is the document class, dvips does NOT receive a paper size +# command line attribute, since beamer does special things with sizes. +# +# GNUPlot Graphics: +# When creating a .gpi file, DO NOT INCLUDE the "set terminal" or "set +# output" commands! The makefile will include terminal information for +# you. Besides being unnecessary and potentially harmful, including the +# terminal definition in the .gpi file makes it harder for you, the one +# writing the document, to preview your graphics, e.g., with +# +# gnuplot -persist myfile.gpi +# +# so don't do specify a terminal or an output file in your .gpi files. +# +# When building a gpi file into an eps file, there are several features +# available to the document designer: +# +# Global Header: +# The makefile searches for the files in the variable GNUPLOT_GLOBAL +# in order: +# +# ($(GNUPLOT_GLOBAL)) +# +# Only the first found is used. All .gpi files in the directory are +# treated as though the contents of GNUPLOT_GLOBAL were directly +# included at the top of the file. +# +# NOTE: This includes special comments! (see below) +# +# Font Size: +# A special comment in a .gpi file (or a globally included file) of +# the form +# +# ## FONTSIZE=<number> +# +# will change the font size of the GPI output. If font size is +# specified in both the global file and the GPI file, the +# specification in the individual GPI file is used. +# +# Grayscale Output: +# GNUplot files also support a special comment to force them to be +# output in grayscale *no matter what*: +# +# ## GRAY +# +# This is not generally advisable, since you can always create a +# grayscale document using the forms mentioned above. But, if your +# plot simply must be grayscale even in a document that allows +# colors, this is how you do it. +# +# XFig Graphics: +# No special handling is done with XFig, except when a global +# grayscale method is used, e.g. +# +# make GRAY=1 document +# +# In these cases the .eps files is created using the -N switch to +# fig2dev to turn off color output. (Only works with eps, not pstex +# output) +# +# GraphVis Graphics: +# Color settings are simply ignored here. The 'dot' program is used +# to transform a .dot file into a .eps file. +# +# If you want, you can use the dot2tex program to convert dot files +# to tex graphics. The default is to just call dot2tex with no +# arguments, but you can change the DOT2TEX definition to include +# options as needed (in your Makefile.ini). +# +# Note that, as with pstex, the makefile cannot use latex's own +# output to discover all missing dot_t (output) files, since anytime +# TeX includes TeX, it has to bail when it can't find the include +# file. It can therefore only stop on the first missing file it +# discovers, and we can't get a large list of them out easily. +# +# So, the makefile errors out if it's missing an included dot_t +# file, then prompts the user to run this command manually: +# +# make all-dot2tex +# +# GZipped EPS Graphics: +# +# A .eps.gz file is sometimes a nice thing to have. EPS files can get +# very large, especially when created from bitmaps (don't do this if you +# don't have to). This makefile will unzip them (not in place) to +# create the appropriate EPS file. +# +endef + +# +# DEPENDENCY CHART: +# +#digraph "g" { +# rankdir=TB +# size="9,9" +# edge [fontsize=12 weight=10] +# node [shape=box fontsize=14 style=rounded] +# +# eps [ +# shape=Mrecord +# label="{{<gpi> GNUplot|<epsgz> GZip|<dot> Dot|<fig> XFig}|<eps> eps}" +# ] +# pstex [label="%.pstex"] +# pstex_t [label="%.pstex_t"] +# tex_outputs [shape=point] +# extra_tex_files [shape=point] +# gpi_data [label="<data>"] +# gpi_includes [label="_include_.gpi"] +# aux [label="%.aux"] +# fls [label="%.fls"] +# idx [label="%.idx"] +# glo [label="%.glo"] +# ind [label="%.ind"] +# log [label="%.log"] +# tex_sh [label="%.tex.sh"] +# rst [label="%.rst"] +# tex [ +# shape=record +# label="<tex> %.tex|<include> _include_.tex" +# ] +# include_aux [label="_include_.aux"] +# file_bib [label=".bib"] +# bbl [label="%.bbl"] +# dvi [label="%.dvi"] +# ps [label="%.ps"] +# pdf [label="%.pdf"] +# fig [label=".fig"] +# dot [label=".dot"] +# gpi [label=".gpi"] +# eps_gz [label=".eps.gz"] +# +# gpi_files [shape=point] +# +# rst -> tex:tex [label="reST"] +# tex_sh -> tex:tex [label="sh"] +# tex_pl -> tex:tex [label="perl"] +# tex_py -> tex:tex [label="python"] +# tex -> tex_outputs [label="latex"] +# tex_outputs -> dvi +# tex_outputs -> aux +# tex_outputs -> log +# tex_outputs -> fls +# tex_outputs -> idx +# tex_outputs -> include_aux +# aux -> bbl [label="bibtex"] +# file_bib -> bbl [label="bibtex"] +# idx -> ind [label="makeindex"] +# glo -> gls [label="makeindex"] +# nlo -> nls [label="makeindex"] +# gls -> extra_tex_files +# nls -> extra_tex_files +# ind -> extra_tex_files +# bbl -> extra_tex_files +# eps -> extra_tex_files +# extra_tex_files -> dvi [label="latex"] +# gpi_files -> eps:gpi [label="gnuplot"] +# gpi -> gpi_files +# gpi_data -> gpi_files +# gpi_includes -> gpi_files +# eps_gz -> eps:epsgz [label="gunzip"] +# fig -> eps:fig [label="fig2dev"] +# fig -> pstex [label="fig2dev"] +# fig -> pstex_t [label="fig2dev"] +# pstex -> pstex_t [label="fig2dev"] +# dot -> eps:dot [label="dot"] +# dvi -> ps [label="dvips"] +# include_aux -> bbl [label="bibtex"] +# ps -> pdf [label="ps2pdf"] +# +# edge [ color=blue label="" style=dotted weight=1 fontcolor=blue] +# fls -> tex:include [label="INPUT: *.tex"] +# fls -> file_bib [label="INPUT: *.aux"] +# aux -> file_bib [label="\\bibdata{...}"] +# include_aux -> file_bib [label="\\bibdata{...}"] +# log -> gpi [label="Graphic file"] +# log -> fig [label="Graphic file"] +# log -> eps_gz [label="Graphic file"] +# log -> dot [label="Graphic file"] +# log -> idx [label="No file *.ind"] +# log -> glo [label="No file *.gls"] +# log -> nlo [label="No file *.nls"] +# gpi -> gpi_data [label="plot '...'"] +# gpi -> gpi_includes [label="load '...'"] +# tex:tex -> ps [label="paper"] +# tex:tex -> pdf [label="embedding"] +#} + +# +# DEPENDENCY CHART SCRIPT +# +# $(call output_dependency_graph,[<output file>]) +define output-dependency-graph + if [ -f '$(this_file)' ]; then \ + $(SED) \ + -e '/^[[:space:]]*#[[:space:]]*DEPENDENCY CHART:/,/^$$/!d' \ + -e '/DEPENDENCY CHART/d' \ + -e '/^$$/d' \ + -e 's/^[[:space:]]*#//' \ + $(this_file) $(if $1,> '$1',); \ + else \ + $(ECHO) "Cannot determine the name of this makefile."; \ + fi +endef +# vim: noet sts=0 sw=8 ts=8
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/config-manual/adding_new_languages.tex Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,23 @@ +\subsection{Adding new Languages} +The GNV-Server has the possibility to handle different languages. It is +necessary to configure those. + +The configuration is divided into three steps: + +\begin{enumerate} + \item Adding the required resource-file to the GNV-Server + \\{\tt /gnv-artifacts/src/main/resources/lang } + \item Adding the required resource-file to the GNV-Web-Client + {\tt /gnv/src/main/resources} + \item Publishing the new language to the GNV-Server by adding the + language-code to the file + \\{\tt /gnv-artifacts/src/main/resources/lang/lang.conf} +\end{enumerate} + +To generate the resource-files it might be helpful to copy an existing one and +translate its content into the desired language. + +Please note that you have to re-package the modules gnv and gnv-artifacts to +enable the new languages - currently, only german and english are provided. +If you want to provide further languages you have to change the toggle-mechanism +for switching the language in the web-client.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/config-manual/administering_artifact-server.tex Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,103 @@ +\subsection{Configuring and Running the Artifact-Server} + +This section describes the possibilities to configure the +artifact-server. The following properties do affect mostly technical +funtions of the server. + +This section describes the possibilities in a kind of a reference +manual. Information for the process of installing and integration can be +found in the Administration Manual of the GNV-System. +The following elements are covered here: + +\begin{lstlisting} +artifact-database +|-- geo-backend # pointing to database connection, SQL configuration +|-- rest-server # port, listen addresses +|-- database # internal database storing artifacts +|-- ehcache # pointing to cache configuration +|-- cleaner # time of cleanups FIXME +`-- export-secret # signing project files +\end{lstlisting} + +\paragraph*{geo-backend} +{\em Function}: The geo-backend encapsulates the logic for accessing the +database backend. At this time, the use of ESRI ArcSDE 9.3.1 is supported. + +At least, the following options for configuring the element {\tt +geo-backend} are required: + +\begin{itemize} + \item {\tt backend-configuration}: path to the file defining the + connection properties to the database backend, preconfigured to {\tt + arcsdeconnection.properties}. Normally, just the + connection parameters have to de adapted. Further information can be + found in the file itself. + + \item {\tt query-configuration}: path to the file listing a SQL statements,\\ + preconfigured to \texttt{queries.properties}. Further information can be + found at chapter~\ref{ref:queries.properties}, + p.~\ref{ref:queries.properties} +\end{itemize} + + +\paragraph*{rest-server} +{\em Function}: The REST-Server needs a HTTP binding configured via: + +\begin{itemize} + \item {\tt port}: port the server should listen on. Preconfigured on + 8181. + \item {\tt listen}: for security reason the accessibility can be + limited. The parameter needs an IP-address or a hostname. + Accessibility to the entire network can be done by + removing/commenting out of the element. +\end{itemize} + + +\paragraph*{database} +{\em Function}: The internal database of the system for storing +artifacts representing a parameterisation of a client session. So fare, +the filebased database H2 is supported. Connecting to other backends can +be provided. + +\begin{itemize} + \item {\tt user}: database user for connecting to the + artifact-database. In new installations "SA" is used. + \item {\tt password}: password of the database user for + authentification. + \item {\tt url}: Connection URL to the database-files. + In the preconfiguration, they are written to \\ + \verb| ${artifacts.config.dir}/../artifactdb| +\end{itemize} + + +\paragraph*{ehcache} +{\em Function}: The cache for storing result sets of the database. The +configuration in {\tt ehcache.xml} should not been adapted. Changing has +at least consequence to the system requirements. + +\begin{itemize} + \item {\tt configuration}: the path to the configuration file. \\ + Preconfigured: \verb+${artifacts.config.dir}/ehcache.xml+ +\end{itemize} + + +\paragraph*{cleaner} +{\em Function}: Process for cleaning up the artifact-database. Artifacts +have a time-to-life. Died artifacts need to be removed. Changing the +interval has consequences to the size of the database. + +\begin{itemize} + \item {\tt sleep-time}: Time interval in milliseconds between 2 + checks. Preconfigured: 60000 (1 minute) +\end{itemize} + + +\paragraph*{export-secret} +{\em Function}: Signature for signing project files that were created by +the artifact-server instance. Before reading a projectfile the server +checks the file against that signature/check sum. + +{\bf Be aware, changing the signature of updating the source code of +artifacts will prevent of using existing project-files.} + +For setting up the secret, c.f. the tips in the admin manual.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/config-manual/config-manual.tex Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,206 @@ +\documentclass[12pt]{scrartcl} + +%---------------------------------------------- +% Load packages + +\usepackage{a4} +\usepackage{times} +\usepackage[latin1]{inputenc} +\usepackage{fancyhdr} +%\usepackage{german} +%\usepackage[marvosym]{eurofont} +%\usepackage[all, light]{draftcopy} +%\usepackage{supertabular} +%\usepackage{colortbl} +%\usepackage{epsf} +\usepackage{graphicx} +\usepackage{lastpage} +%\usepackage{proposal} +\usepackage{listings} +\usepackage[hyperindex=true, bookmarks=true, breaklinks=true, +colorlinks=true, linkcolor=red,bookmarksopen]{hyperref} + +%---------------------------------------------- +% Document DATE and VERSION +% set these values when releasing a new version + +\newcommand{\documentdate}{May 12th, 2010} +\newcommand{\documentversion}{1.0} +\newcommand{\documentrevision}{FIXME SVN REV} +\newcommand{\documentID}{config-manual.tex} +%---------------------------------------------- + +%---------------------------------------------- +% Document TITLE +\newcommand{\documenttitle}{Generic Viewer -- Reference and Configuration} + + +%---------------------------------------------- +% Some parameters for layouting + +\paperwidth=21cm +\hoffset=-0.54cm +\textwidth=17cm + +\paperheight=29.7cm +\voffset=-1.5cm +\topmargin=0cm +\headheight=1cm +\textheight=24cm + +\setcounter{secnumdepth}{4} +\setcounter{tocdepth}{4} + +%---------------------------------------------- + +\begin{document} + +\lstset{ % +language=sh, +basicstyle=\ttfamily, % the size of the fonts that are used for the code +numbers=left, % where to put the line-numbers +numberstyle=\footnotesize, % the size of the fonts that are used for the line-numbers +numbersep=5pt, % how far the line-numbers are from the code +% backgroundcolor=\color{white}, % choose the background color. You must add \usepackage{color} +showspaces=false, % show spaces adding particular underscores +showstringspaces=false, % underline spaces within strings +showtabs=false, % show tabs within strings adding particular underscores +frame=single, % adds a frame around the code +tabsize=2, % sets default tabsize to 2 spaces +captionpos=b, % sets the caption-position to bottom +breaklines=true, % sets automatic line breaking +breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace +title=\lstname, % show the filename of files included with \lstinputlisting; also try caption instead of title +escapeinside={\%*}{*)} % if you want to add a comment within your code +% morekeywords={*,...} % if you want to add more keywords to the set +} + +%----------------------------------- +% HEADER/FOOTER DEFINITION + +% for some pages latex switches back to pagestyle plain :-( +\fancypagestyle{plain}{% + \fancyhf{} % clear all header and footer fields + \fancyhead[LO,RE]{\footnotesize \documenttitle\\ \leftmark} + \fancyfoot[RO,LE]{\footnotesize Intevation GmbH} % Author + \fancyfoot[CO,CE]{\footnotesize \thepage/\pageref{LastPage}} + \fancyfoot[LO,RE]{\footnotesize \documentdate + \\\documentID} + \renewcommand{\footrulewidth}{0.4pt} +} + +% and now define pagestyle fancy +\fancyhead{} % clear all fields +\fancyhead[LO]{\footnotesize \documenttitle\\ \leftmark} + +\fancyfoot{}% clear all fields +\fancyfoot[RO]{\footnotesize Intevation GmbH} % Author +\fancyfoot[CO]{\footnotesize \thepage/\pageref{LastPage}} +\fancyfoot[LO]{\footnotesize \documentdate +\\\documentID} + +\renewcommand{\footrulewidth}{0.4pt} + +% +% END Header/Footer Definition +%----------------------------------- + +%---------------------------------------------- +% MACRO DEFINITION +% +% \Fig{figure}{lof text}{caption} : +% places 'figure' and +% writes 'caption' at the bottom with leading +% 'Abbildung figno:'. 'lof text' is added to the list of +% figures. +% Example: +% \Fig{\epsfxsize30mm \epsffile{x.eps}}{the x}{the x} +% +% \FigNoEntry{}{} : +% same as above, no entry in figures list +% +% \FigCaption{} : +% line with figure caption, setting figure +% counter and figures list +% +% \Tab{table}{lot text}{caption} : +% places 'table' and writes caption on top of the table +% with leading 'Tabelle tabno:'. 'lot text' is added to +% the list of tables. +%**************************************************************************** +% Figure makro for graphics continously enumerated. +% + +\newcounter{FigCnt} +\newcounter{TabCnt} + +\newcommand{\Fig}[3]% +{ + \refstepcounter{FigCnt} + \addcontentsline{lof}{figure}% + {\protect\numberline{\arabic{FigCnt}}{#2}} + \mbox{#1} + +\nopagebreak + {Abbildung \arabic{FigCnt}: #3} + +} + +\newcommand{\FigNoEntry}[2]% +{ + \refstepcounter{FigCnt} + \mbox{#1} + +\nopagebreak + {Abbildung \arabic{FigCnt}: #2} + +} + +\newcommand{\FigCaption}[1]% +{ + \refstepcounter{FigCnt} + \addcontentsline{lof}{figure}% + {\protect\numberline{\arabic{FigCnt}}{#1}} + + %{Figure \thesection.\arabic{FigCnt}: #1} +} + +\newcommand{\Tab}[3]% +{ + \refstepcounter{TabCnt} + \addcontentsline{lot}{figure}% + {\protect\numberline{\arabic{TabCnt}}{#2}} + {Tabelle \arabic{TabCnt}: #3} +\nopagebreak + #1 + +} + +\hyphenation{Intevation} +% end macro definition + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcounter{schritt} +\renewcommand{\theschritt}{\Roman{schritt}} +%\makeatletter\renewcommand{\p@schritt}{Abschnitt~\thesubsubsection~}\makeatother + +%----------------------------------- +% DOCUMENT SETTINGS +\pagestyle{fancy} +\setlength{\parindent}{0cm} +\setlength{\parskip}{5pt plus 2pt minus 1pt} + +% Start actual content here +\include{title} +\newpage +\tableofcontents +\include{overview} +\include{general_settings} +\include{administering_artifact-server} +\include{generating_charts} +\include{generating_maps} +\include{adding_new_languages} +\include{model_of_transitions} +\include{miscellanea} +\end{document}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/config-manual/config-manual.txt Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,59 @@ +Configuration of the GNV Artifact Server + +1. Overview of Artifact Server + +artifact-server +|-- artifactdb +|-- bin +| `-- lib +|-- cache +|-- conf +| |-- maptemplates +| |-- palette +| `-- products +|-- install +| `-- debian +|-- mapfiles +`-- shapefiles + +2. General settings +- structure of conf.xml +- Port +- Logging +- ... + + +3. Model of transitions + General principle of model of transitions + - FIS -> product -> transitions in data model + + Adding a new FIS and product + - One short example: using timeseries on ArcMarineBSH TimeSeries + + SQL: + Clarify the special mechanism of the internal functions + ST_ASTEXT(SHAPE) + ST_ASTEXT(RASTER) + + +4. Configuring diagrams + Global template + Configuring 2D-diagrams + - matching mechanism + + +5. Map Generator + General functionality + Configuring new maps + Self generated layers: Cross Sections + - matching mechanism + Complex data models from central datawarehouse + - matching mechanism!!!!! + +4. Other configurations +- gap detection: +%% FIXME HP: Meaning of keys time gap defintions (time_gap def.xml) +%% Gaps are defined in WIKI of BSH. mediawiki/index.php/MEDIAN_Coded_Value_Domains#TSIntervalTypes +%% FIXME HP: Gaps in verticalprofiles? configurable? +- cache cleaner +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/config-manual/figures/intevation-logo.eps Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,1222 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%For: Frank Koormann,,, +%%CreationDate: Thu Mar 29 14:37:25 2001 +%%Title: intevation_logo-thin.eps +%%Creator: Sketch 0.6.8 +%%Pages: 1 +%%BoundingBox: 78 68 132 94 +%%Extensions: CMYK +%%DocumentSuppliedResources: (atend) +%%EndComments + +%%BeginProlog +%%BeginResource: procset Linux-Sketch-Procset 1.0 2 +/SketchDict 100 dict def +SketchDict begin +/bd { bind def } bind def +/x { exch } bd +/xd { exch def } bd +/PI 3.14159265358979323846264338327 def +/radgrad { 180 mul PI div } bd +/skstartmatrix matrix currentmatrix def +/tmpmat matrix def +/ISOLatin1Encoding dup where +{ pop pop } +{ [/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand +/quoteright /parenleft /parenright /asterisk /plus /comma /minus /period +/slash /zero /one /two /three /four /five /six /seven /eight /nine /colon +/semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J +/K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash +/bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i +/j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright +/asciitilde /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /dotlessi /grave /acute /circumflex /tilde /macron /breve +/dotaccent /dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek +/caron /space /exclamdown /cent /sterling /currency /yen /brokenbar /section +/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen +/registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu +/paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright +/onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex +/Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex +/Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve +/Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute +/Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute +/acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute +/ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde +/ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave +/uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] def +} +ifelse +/arct dup where +{pop pop} +{ +/arct {arcto pop pop pop pop} bd +} +ifelse +/size 0 def +/fontname 0 def +/newfont 0 def +/sf { +/size xd +/fontname xd +fontname findfont +dup /Encoding get StandardEncoding eq +{ +dup +length dict /newfont xd +{ +1 index +/FID ne +{ newfont 3 1 roll put } +{ pop pop } +ifelse +} forall +newfont /Encoding ISOLatin1Encoding put +fontname newfont definefont +} +if +size scalefont setfont +} bd +/pusht {matrix currentmatrix} bd +/popt {setmatrix} bd +/pushc {gsave} bd +/popc {grestore} bd +/rgb {setrgbcolor} bd +/w { setlinewidth } bd +/j { setlinejoin } bd +/J { setlinecap } bd +/d { setdash } bd +/F { eofill } bd +/f { closepath F } bd +/S { +pusht +skstartmatrix setmatrix stroke +popt +} bd +/s { closepath S } bd +/m { moveto } bd +/l { lineto } bd +/c { curveto } bd +/txt { +/tmpmat tmpmat currentmatrix def +dup type /arraytype eq {concat} {translate} ifelse +0 0 m +tmpmat +} bd +/T {txt x show popt} bd +/P {txt x true charpath popt} bd +/TP {txt x dup show 0 0 m true charpath popt} bd +/C {newpath 0 360 arc} bd +/R { +2 copy m +x 2 index l +x 2 index x l +l +closepath +} bd +/ellipse { +dup type /arraytype eq +{ +pusht x concat +0 0 1.0 C +popt +} +{ +pusht 5 1 roll +4 -1 roll concat +newpath +dup 2 eq { +0 0 m +} if +3 1 roll +radgrad x +radgrad x +0 0 1 5 -2 roll +arc +0 ne { closepath } if +popt +} +ifelse +} bd +/radius1 0 def +/radius2 0 def +/factor 0 def +/rect { +dup type /arraytype eq +{ +pusht x concat +0 0 m 1 0 l 1 1 l 0 1 l closepath +popt +} +{ +/radius2 xd +/radius1 xd +pusht x concat +radius1 radius2 div 1 scale +0 radius2 m +0 1 radius2 1 radius2 arct +radius2 radius1 div +dup 1 1 index 0 radius2 arct +0 0 0 radius2 arct +0 0 0 1 radius2 arct +closepath +popt +} +ifelse +} bd +/buf 0 def +/width 0 def +/height 0 def +/skcimg { +/tmpmat tmpmat currentmatrix def +{ concat } if +/height xd +/width xd +/buf width 3 mul string def +width height scale +width height 8 +[width 0 0 height neg 0 height] +{ currentfile buf readhexstring pop } bind +false 3 colorimage +tmpmat setmatrix +} bd +/skgimg { +/tmpmat tmpmat currentmatrix def +{ concat } if +/height xd +/width xd +/buf width string def +width height scale +width height 8 +[width 0 0 height neg 0 height] +{ currentfile buf readhexstring pop } bind +image +tmpmat setmatrix +} bd +/rclip { +4 2 roll m +dup 0 x rlineto +x 0 rlineto +neg 0 x rlineto +closepath +clip +} bd +/skeps { +10 dict begin +/sk_state save def +concat +3 index neg 3 index neg translate +rclip +0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin +10 setmiterlimit [ ] 0 setdash +newpath +/sk_dict_count countdictstack def +/sk_count count 1 sub def +userdict begin +/showpage { } def +/languagelevel where +{ +pop +languagelevel 1 ne +{ +false setstrokeadjust +false setoverprint +} if +} if +} bd +/skepsend { +count sk_count sub { pop } repeat +countdictstack sk_dict_count sub { end } repeat +sk_state restore +end +} bd +/gradidx 0 def +/gradient { +3 mul array +/gradidx 0 def +} bd +/$ { +3 index gradidx 5 -1 roll put +2 index gradidx 1 add 4 -1 roll put +1 index gradidx 2 add 3 -1 roll put +/gradidx gradidx 3 add def +} bd +/! { +3 +{ +dup dup gradidx dup 3 1 roll 3 sub get put +/gradidx gradidx 1 add def +} +repeat +} bd +/gradcolor { +3 mul dup 2 add 1 exch % idx 1 idx+2 +{ +1 index exch % array array i +get % array component +exch % component array +} +for +4 1 roll +} bd +/x0 0 def /y0 0 def /x1 0 def /y1 0 def +/left 0 def /right 0 def /top 0 def /bottom 0 def +/numcolors 0 def +/axial { +/y1 xd /x1 xd /y0 xd /x0 xd +dup length 3 idiv /numcolors xd +pusht exch % ctm array +x0 x1 ne y0 y1 ne or +{ +x0 y0 translate +[x1 x0 sub y1 y0 sub dup neg 2 index 0 0] concat +clippath flattenpath pathbbox +/top xd /right xd /bottom xd /left xd +newpath +0 gradcolor rgb clippath f +0 1 numcolors 1 sub +{ +dup numcolors div +3 1 roll +gradcolor rgb +exch +bottom right top R f +} +for +} +if +pop +popt +} bd +/r0 0 def /r1 0 def /dr 0 def +/radial { +/r1 xd /r0 xd /y0 xd /x0 xd +/dr r1 r0 sub def +dup length 3 idiv /numcolors xd +pusht exch % ctm array +r0 r1 ne +{ +x0 y0 translate +clippath flattenpath pathbbox +/top xd /right xd /bottom xd /left xd +newpath +dr 0 gt {numcolors 1 sub}{0} ifelse gradcolor rgb +clippath f +dr 0 gt {numcolors 1 sub -1 0} { 0 1 numcolors 1 sub} ifelse +{ +dup numcolors div dr mul r0 add +3 1 roll +gradcolor rgb +exch +0 0 3 -1 roll C f +} +for +} +if +pop +popt +} bd +/max { +2 copy lt {exch} if pop +} bd +/conical { +pusht 5 1 roll +3 1 roll /y0 xd /x0 xd +x0 y0 translate +radgrad rotate +dup length 3 idiv /numcolors xd +clippath flattenpath pathbbox newpath +4 { abs 4 1 roll} repeat +3 { max } repeat +2 mul +dup scale +0 gradcolor rgb +0 0 1 0 360 arc f +1 1 numcolors 1 sub +{ +dup numcolors div 180 mul +3 1 roll +gradcolor rgb +exch +0 0 moveto +0 0 1 4 -1 roll dup neg arc +closepath f +} +for +pop +popt +} bd +/XStep 0 def /YStep 0 def /imagedata 0 def /components 0 def +/tileimage2 { +exch 4 2 roll +/height xd +/width xd +mark +/components 2 index +/PatternType 1 +/PaintType 1 +/TilingType 1 +/BBox [0 0 width height] +/XStep width +/YStep height +/PaintProc { +begin +XStep YStep 8 +matrix +imagedata +false +components +colorimage +end +} +counttomark 2 div cvi dup dict begin +{ def } repeat +pop currentdict end +dup +/imagedata +4 -1 roll +width height mul mul string +currentfile exch readhexstring pop +put +exch +makepattern +setpattern +clippath +eofill +} bd +/tileimage1 { +concat +/components xd +/height xd +/width xd +/imagedata +currentfile +width height mul components mul string +readhexstring pop +def +clippath flattenpath pathbbox +/top xd /right xd /bottom xd /left xd +left width div floor width mul +bottom height div floor height mul +translate +top bottom sub height div ceiling cvi +{ +gsave +right left sub width div ceiling cvi +{ +width height 8 matrix +components 1 eq +{ +{ imagedata } +image +} +{ +imagedata +false components +colorimage +} +ifelse +width 0 translate +} +repeat +grestore +0 height translate +} +repeat +} bd +/makepattern where +{ +pop +/tileimage /tileimage2 load def +} +{ +/tileimage /tileimage1 load def +} +ifelse +end +%%EndResource +%%EndProlog + +%%BeginSetup + +10.433 setmiterlimit +%%EndSetup + +%%Page: 1 1 +SketchDict begin +newpath +81.1479 90.3363 m +83.1262 89.4518 85.8962 89.4399 87.7755 90.732 c +88.4885 91.2221 89.1744 91.8548 89.1744 92.7451 c +89.3805 92.7446 89.5146 92.3854 89.7059 92.4617 c +90.3588 92.7216 91.0745 92.5334 91.5725 92.3012 c +91.8169 92.1873 92.0442 92.7366 92.3141 92.7358 c +92.4246 92.4106 93.2359 91.4866 93.2359 91.4372 c +95.3948 89.4748 99.2768 88.555 102.019 89.186 c +102.881 89.3844 110.268 92.0436 110.268 92.7837 c +110.735 92.6454 111.042 92.3763 111.801 92.3588 c +113.208 92.7366 l +114.425 92.9532 114.356 92.6862 114.93 92.6609 c +114.93 90.5837 114.005 87.8389 114.95 85.8136 c +115.043 85.6129 115.327 85.1931 115.474 85.044 c +119.365 81.1112 125.41 82.6691 129.868 84.5493 c +129.868 84.4181 130.124 84.2636 130.124 84.1323 c +130.124 83.9504 129.868 83.7916 129.868 83.6096 c +129.521 83.6096 129.294 83.4821 129.005 83.2726 c +126.771 81.6517 123.827 80.5003 121.756 78.5645 c +121.551 78.3735 121.558 78.1688 121.558 77.872 c +121.756 77.6246 122.036 77.2541 122.315 77.061 c +122.399 77.0029 122.564 76.8961 124.449 75.877 c +126.015 75.0309 127.68 74.6575 129.194 74.6604 c +129.194 74.475 129.046 74.2851 129.051 74.0807 c +129.052 74.0297 129.066 73.9744 129.086 73.9171 c +129.106 73.8599 129.132 73.8003 129.158 73.7411 c +129.183 73.6819 129.209 73.6226 129.227 73.5659 c +129.245 73.5087 129.255 73.4539 129.252 73.4038 c +129.238 73.1617 129.151 72.9814 129.076 72.7773 c +126.75 73.9407 124.211 75.0082 121.611 75.7449 c +120.232 76.1358 118.876 76.4938 117.501 76.7872 c +116.305 77.0426 113.981 77.2912 113.298 75.7452 c +112.578 74.1158 113.329 72.4451 113.544 70.8622 c +113.245 70.9989 113.04 71.6163 112.826 71.3291 c +112.556 70.799 l +112.21 71.5408 111.908 72.5375 111.698 73.3754 c +111.413 74.5161 110.852 75.2644 109.473 75.4597 c +107.323 75.7648 107.541 75.5249 106.808 75.0986 c +105.489 74.3316 104.447 72.6469 104.427 70.7633 c +104.103 70.8166 104.04 71.1029 103.715 71.1562 c +103.661 71.1361 103.594 71.1001 103.521 71.0624 c +103.448 71.0247 103.368 70.985 103.288 70.9575 c +103.209 70.9303 103.129 70.9147 103.056 70.9254 c +102.983 70.9359 102.916 70.9725 102.862 71.049 c +102.814 71.2619 102.513 71.4476 102.165 71.1947 c +101.229 70.799 l +101.108 71.1117 100.582 71.3382 100.316 71.5037 c +99.0659 72.2807 97.0528 71.5295 96.2781 70.5102 c +96.093 70.57 95.9079 70.6298 95.7225 70.6896 c +95.5289 70.7905 95.2567 70.9099 94.8114 70.6321 c +94.4917 70.5802 l +94.4917 70.8373 94.9407 70.8557 95.0994 71.1094 c +95.4787 71.7155 95.856 72.5599 96.434 73.236 c +97.4233 74.3934 98.3768 75.7545 97.6356 77.2578 c +97.415 77.7045 97.576 77.5078 96.6749 78.2941 c +96.1414 78.7598 95.3594 79.3486 94.7173 79.6468 c +91.9201 80.9465 88.4556 81.0936 85.1714 80.6681 c +83.4604 80.4467 81.7831 80.1902 80.3068 79.6031 c +80.2609 79.585 80.3031 79.5122 80.2535 79.5122 c +80.306 79.6936 80.6359 79.9461 80.4556 80.0496 c +80.2343 80.1389 80.2481 80.2886 80.2552 80.4833 c +80.2731 80.7971 l +80.4213 80.7971 80.3077 80.824 80.4554 80.8396 c +82.6332 81.0712 84.5517 81.7552 86.5887 82.4718 c +87.2231 82.6952 87.987 83.0019 88.527 83.452 c +88.8771 83.744 89.3216 84.2214 89.3216 84.6667 c +89.3216 85.0624 88.8949 85.959 88.6166 86.1815 c +86.4209 87.9381 80.8845 88.8736 80.8346 88.9422 c +80.7828 89.0136 l +80.7856 89.1103 81.0512 89.1729 81.1198 89.3575 c +81.1731 89.5006 81.0506 89.7858 81.1017 89.9232 c +81.1924 90.1679 81.2247 90.3363 81.1479 90.3363 c +closepath +gsave +0.9 0.9 0.9 rgb +F +grestore +0.9 0.9 0.9 rgb +0.215433 w +0 j +0 J +[] 0 d +S +newpath +108.203 84.2032 m +107.659 84.1536 106.67 83.9557 106.373 83.5107 c +106.324 83.5107 106.274 83.4611 106.274 83.4118 c +106.126 83.3622 106.027 82.9665 105.829 82.8675 c +105.829 82.1257 105.533 81.4828 106.126 80.8396 c +106.225 80.7407 l +106.423 80.6914 l +107.907 79.8999 109.341 79.9989 110.726 80.8892 c +110.776 80.9882 l +110.875 81.0375 111.072 81.3343 111.27 81.3343 c +111.27 81.8782 111.765 82.4225 111.418 83.115 c +111.32 83.3129 110.825 83.4611 110.825 83.659 c +110.726 83.659 110.132 84.0054 110.132 84.0547 c +109.935 84.0547 l +109.737 84.2525 108.401 84.2525 108.203 84.2032 c +closepath +gsave +0.8 0.8 0.8 rgb +F +grestore +0.7 0.7 0.7 rgb +0.566929 w +0 j +0 J +[] 0 d +S +newpath +129.218 74.6074 m +126.745 74.9042 123.636 75.6956 121.805 77.5256 c +121.657 77.6742 121.459 78.0203 121.459 78.2677 c +121.558 78.3171 l +121.558 78.3667 121.757 78.5634 121.805 78.6139 c +123.135 79.9966 125.128 80.6576 126.673 81.7561 c +128.047 82.7323 129.427 83.5107 129.67 83.5107 c +129.775 83.5629 130.033 83.615 130.115 83.659 c +129.109 72.8173 m +127.427 73.3119 125.912 74.363 124.229 74.9042 c +121.542 75.7684 l +120.528 76.0947 119.51 76.4014 118.523 76.5599 c +116.741 76.8465 115.229 77.6229 113.743 76.2892 c +112.805 75.4467 113.006 74.657 113.006 73.4205 c +113.121 72.9094 113.569 71.2846 113.569 70.7888 c +112.54 70.8024 m +111.897 72.0885 111.86 74.2406 110.585 75.1462 c +109.981 75.576 107.912 75.6808 107.214 75.4484 c +106.724 75.2851 106.373 74.7559 106.027 74.4095 c +105.087 73.4698 104.431 72.0363 104.431 70.7009 c +101.387 70.7216 m +100.435 71.9918 98.2462 72.4301 97.0247 71.1409 c +96.8801 71.0068 96.6052 70.7772 96.0915 70.388 c +94.588 70.6593 m +95.3302 71.0054 95.6213 71.8212 95.9603 72.5171 c +96.561 73.7499 98.571 75.6363 97.6602 77.1169 c +97.3518 77.6183 l +97.063 78.124 95.8361 79.0019 95.7069 79.1312 c +95.509 79.329 94.9892 79.5357 94.7496 79.6525 c +90.7346 81.6135 86.2429 80.9354 82.0379 80.1471 c +81.4945 80.0454 80.7354 79.496 80.1915 79.496 c +80.855 88.9875 m +81.4486 88.839 81.943 88.619 82.5326 88.4566 c +83.9216 88.0751 85.6935 87.8542 86.9841 87.1708 c +87.3753 86.9639 87.8251 86.5772 88.2209 86.3794 c +88.9627 86.0333 89.3091 85.2418 89.2595 84.4008 c +89.2595 84.2032 88.8592 83.7624 88.7155 83.6096 c +88.0678 82.9214 86.6839 82.482 85.7972 82.175 c +84.1118 81.5919 82.1369 80.7407 80.3068 80.7407 c +80.2575 80.6914 l +81.2564 90.302 m +81.7865 90.031 81.8707 90.1115 82.3007 89.9334 c +83.7949 89.3152 85.8009 89.932 87.1823 90.5344 c +88.1222 90.944 89.2116 91.7442 89.2116 92.8407 c +92.2753 92.7032 m +92.9678 91.6646 93.7564 90.8221 94.8982 90.2869 c +95.3392 90.0803 95.9901 89.7098 96.481 89.5944 c +98.5129 89.1165 100.233 88.7908 102.318 89.1987 c +102.511 89.2367 102.58 89.2282 103.109 89.3966 c +105.253 90.0783 107.678 91.2292 109.638 92.3148 c +109.697 92.3474 110.336 92.8129 110.352 92.8129 c +114.93 92.7352 m +114.815 91.7541 114.609 90.9627 114.61 90.427 c +114.611 88.8645 114.327 87.8086 114.634 86.6268 c +115.198 84.4504 118.458 82.8638 119.975 82.7193 c +123.178 82.4137 126.158 83.2958 129.076 84.3515 c +129.123 84.3682 129.274 84.4008 129.373 84.4008 c +129.423 84.4997 129.818 84.6483 129.967 84.6483 c +0.8 0.8 0.8 rgb +1 j +1 J +S +newpath +81.6246 86.9766 m +82.6698 86.9766 l +82.6698 79.2655 l +81.6246 79.2655 l +81.6246 86.9766 l +closepath +84.0446 82.4667 m +84.0446 82.7598 84.0959 83.0368 84.1988 83.297 c +84.3014 83.5575 84.4553 83.8013 84.6606 84.0286 c +84.8734 84.2486 85.1226 84.4155 85.4086 84.5292 c +85.6946 84.6429 86.0209 84.6996 86.3877 84.6996 c +86.4464 84.6996 86.5104 84.6959 86.5802 84.6885 c +86.6499 84.6811 86.725 84.6704 86.8058 84.6556 c +86.8863 84.6409 86.9688 84.6227 87.0533 84.6006 c +87.1375 84.5785 87.2236 84.5493 87.3118 84.5125 c +87.4657 84.4467 87.6123 84.3622 87.7517 84.2596 c +87.8909 84.157 88.0267 84.0323 88.1588 83.8857 c +88.2906 83.7463 88.3898 83.5739 88.4559 83.3687 c +88.5216 83.1632 88.5548 82.9285 88.5548 82.6646 c +88.5548 82.6572 88.5548 82.6481 88.5548 82.6371 c +88.5548 82.626 88.5548 82.6133 88.5548 82.5985 c +88.5548 82.5911 88.5548 82.5821 88.5548 82.571 c +88.5548 82.56 88.5548 82.5472 88.5548 82.5325 c +88.5548 79.2655 l +87.5097 79.2655 l +87.5097 82.3786 l +87.5097 82.5398 87.4858 82.6994 87.4382 82.857 c +87.3906 83.0146 87.3192 83.1632 87.2236 83.3026 c +87.1284 83.4492 87.0037 83.5592 86.8497 83.6326 c +86.6958 83.706 86.5124 83.7426 86.2998 83.7426 c +86.1017 83.7426 85.9276 83.7097 85.7771 83.6437 c +85.6269 83.5776 85.4968 83.4787 85.3868 83.3466 c +85.2768 83.2145 85.1906 83.0733 85.1283 82.9231 c +85.0659 82.7729 85.0237 82.6133 85.0016 82.4446 c +85.0016 79.2655 l +84.0446 79.2655 l +84.0446 82.4667 l +closepath +89.6767 85.8436 m +90.7108 85.8436 l +90.7108 84.5456 l +92.7126 84.5456 l +92.7126 83.5997 l +90.7108 83.5997 l +90.7108 80.9156 l +90.7108 80.813 90.7179 80.7211 90.7326 80.6406 c +90.7474 80.5598 90.7695 80.483 90.7987 80.4096 c +90.8279 80.3362 90.8922 80.2832 90.9912 80.25 c +91.0901 80.2171 91.2276 80.2007 91.4036 80.2007 c +92.6248 80.2225 l +92.6248 79.2655 l +91.3268 79.2655 l +91.3194 79.2655 91.312 79.2655 91.3047 79.2655 c +91.2973 79.2655 91.2899 79.2655 91.2826 79.2655 c +91.2755 79.2655 91.2698 79.2655 91.2661 79.2655 c +91.2624 79.2655 91.2571 79.2619 91.2497 79.2545 c +91.2423 79.2545 91.2349 79.2545 91.2276 79.2545 c +91.2205 79.2545 91.2131 79.2545 91.2057 79.2545 c +91.1984 79.2545 91.193 79.2545 91.1893 79.2545 c +91.1856 79.2545 91.18 79.2545 91.1726 79.2545 c +90.9234 79.2545 90.7071 79.2913 90.5237 79.3645 c +90.3403 79.4379 90.1901 79.5516 90.0727 79.7055 c +89.9554 79.8597 89.8655 80.0247 89.8032 80.2007 c +89.7408 80.3764 89.7023 80.5598 89.6878 80.7506 c +89.6804 80.7654 89.6767 80.7818 89.6767 80.7999 c +89.6767 80.8184 89.6767 80.8385 89.6767 80.8606 c +89.6767 80.8753 89.6767 80.8918 89.6767 80.9099 c +89.6767 80.9283 89.6767 80.9485 89.6767 80.9706 c +89.6767 80.9927 l +89.6767 85.8436 l +closepath +96.7829 83.1595 m +96.7682 83.1669 96.7534 83.1762 96.7387 83.187 c +96.7242 83.198 96.7095 83.2145 96.6948 83.2366 c +96.68 83.2513 96.6636 83.2695 96.6454 83.2916 c +96.627 83.3137 96.6069 83.3355 96.5848 83.3576 c +96.5629 83.3724 96.5388 83.3888 96.5133 83.407 c +96.4875 83.4254 96.4637 83.4455 96.4419 83.4676 c +96.4124 83.4824 96.3832 83.4988 96.3537 83.5172 c +96.3246 83.5354 96.2914 83.5518 96.2548 83.5666 c +96.1814 83.6031 96.0952 83.6289 95.9963 83.6437 c +95.8974 83.6584 95.7854 83.6655 95.6607 83.6655 c +95.3747 83.6655 95.1235 83.6142 94.9072 83.5116 c +94.6909 83.4089 94.5095 83.2587 94.3627 83.0606 c +94.2161 82.8627 94.1062 82.6535 94.0327 82.4335 c +93.9593 82.2136 93.9228 81.9862 93.9228 81.7515 c +93.9228 81.7442 93.9228 81.7368 93.9228 81.7297 c +93.9228 81.7186 l +93.9228 81.5058 93.9613 81.3025 94.0384 81.1081 c +94.1152 80.9136 94.2272 80.7285 94.3737 80.5525 c +94.5206 80.3764 94.702 80.2446 94.9183 80.1565 c +95.1346 80.0686 95.382 80.0247 95.6607 80.0247 c +95.9614 80.0247 96.2126 80.0592 96.4144 80.129 c +96.616 80.1987 96.7682 80.3033 96.8708 80.4425 c +96.9734 80.5893 97.0669 80.7617 97.1514 80.9595 c +97.2356 81.1577 97.3107 81.3813 97.3768 81.6305 c +97.3768 81.6415 l +97.3878 81.6526 l +97.3878 81.6637 l +98.3448 81.6087 l +98.3448 81.5939 98.3448 81.5812 98.3448 81.5701 c +98.3448 81.5591 98.3485 81.55 98.3559 81.5426 c +98.3559 81.5279 98.3559 81.5168 98.3559 81.5094 c +98.3559 81.5024 98.3559 81.4913 98.3559 81.4766 c +98.3559 81.4692 98.3559 81.4601 98.3559 81.4491 c +98.3559 81.438 98.3595 81.4289 98.3669 81.4216 c +98.3669 81.4068 98.3669 81.3958 98.3669 81.3887 c +98.3669 81.3813 98.3669 81.374 98.3669 81.3666 c +98.3669 81.3079 98.3632 81.2475 98.3559 81.1852 c +98.3485 81.1228 98.3374 81.0585 98.323 80.9927 c +98.3156 80.9632 98.3063 80.9303 98.2952 80.8935 c +98.2844 80.8569 98.2751 80.824 98.2677 80.7946 c +98.2532 80.758 98.2402 80.7231 98.2294 80.69 c +98.2184 80.6571 98.2056 80.6222 98.1909 80.5856 c +98.1027 80.4022 97.9854 80.2225 97.8388 80.0465 c +97.6923 79.8705 97.5126 79.7055 97.3 79.5516 c +97.0944 79.3976 96.8543 79.282 96.5794 79.2052 c +96.3044 79.1281 95.9983 79.0895 95.6607 79.0895 c +95.272 79.0895 94.9129 79.1502 94.5827 79.2709 c +94.2527 79.392 93.9559 79.5774 93.6917 79.8265 c +93.4205 80.0833 93.2189 80.3711 93.0868 80.69 c +92.9547 81.0091 92.8887 81.3629 92.8887 81.7515 c +92.8887 82.1623 92.9437 82.5254 93.0536 82.8406 c +93.1636 83.1558 93.3289 83.4274 93.5489 83.6547 c +93.7688 83.882 93.9999 84.0688 94.2417 84.2157 c +94.4837 84.3622 94.7369 84.4685 95.0008 84.5346 c +95.0303 84.542 95.0577 84.5473 95.0833 84.551 c +95.1091 84.5547 95.1366 84.5604 95.1657 84.5675 c +95.1952 84.5675 95.2227 84.5695 95.2482 84.5731 c +95.274 84.5768 95.3015 84.5822 95.3307 84.5896 c +95.3894 84.5969 95.4464 84.6023 95.5014 84.606 c +95.5564 84.6097 95.6094 84.6117 95.6607 84.6117 c +95.9614 84.6117 96.2421 84.5695 96.5023 84.485 c +96.7628 84.4008 97.0029 84.2744 97.2229 84.1057 c +97.4354 83.937 97.6279 83.75 97.8003 83.5447 c +97.9726 83.3392 98.1248 83.1192 98.2569 82.8845 c +94.6158 80.9156 l +94.1867 81.6855 l +96.7829 83.1595 l +closepath +99.6431 84.5456 m +101.282 80.3875 l +102.756 84.5456 l +103.889 84.5456 l +102.063 79.7826 l +102.019 79.6726 101.969 79.5791 101.914 79.502 c +101.859 79.4251 101.799 79.3608 101.733 79.3095 c +101.667 79.2655 101.599 79.229 101.53 79.1995 c +101.46 79.1703 101.385 79.1519 101.304 79.1445 c +101.297 79.1445 101.291 79.1445 101.287 79.1445 c +101.284 79.1445 101.278 79.1445 101.271 79.1445 c +101.264 79.1445 101.256 79.1445 101.249 79.1445 c +101.168 79.1445 101.09 79.1556 101.012 79.1777 c +100.935 79.1995 100.857 79.2327 100.776 79.2766 c +100.703 79.3353 100.637 79.403 100.578 79.4801 c +100.519 79.5569 100.468 79.6505 100.424 79.7605 c +98.5101 84.5456 l +99.6431 84.5456 l +closepath +108.388 82.3015 m +108.388 82.463 108.357 82.6223 108.294 82.7802 c +108.232 82.9378 108.139 83.0864 108.014 83.2255 c +107.889 83.3724 107.713 83.4824 107.486 83.5555 c +107.259 83.6289 106.984 83.6655 106.661 83.6655 c +106.609 83.6655 106.556 83.6618 106.501 83.6547 c +106.447 83.6473 106.386 83.6363 106.32 83.6215 c +106.254 83.6142 106.188 83.5997 106.122 83.5776 c +106.056 83.5555 105.99 83.5263 105.924 83.4897 c +105.807 83.4381 105.693 83.3667 105.583 83.2751 c +105.473 83.1833 105.367 83.0753 105.264 82.9506 c +105.169 82.8332 105.092 82.6884 105.033 82.516 c +104.974 82.3437 104.938 82.1475 104.923 81.9276 c +104.923 81.6342 104.963 81.3793 105.044 81.1631 c +105.125 80.9468 105.245 80.7654 105.407 80.6185 c +105.576 80.4793 105.75 80.3674 105.929 80.2832 c +106.109 80.1987 106.298 80.1454 106.496 80.1236 c +106.503 80.1236 106.513 80.1236 106.523 80.1236 c +106.534 80.1236 106.544 80.1236 106.551 80.1236 c +106.566 80.1162 106.578 80.1125 106.589 80.1125 c +106.6 80.1125 106.609 80.1125 106.617 80.1125 c +106.632 80.1125 106.643 80.1125 106.65 80.1125 c +106.657 80.1125 106.668 80.1125 106.683 80.1125 c +106.69 80.1125 106.699 80.1125 106.71 80.1125 c +106.721 80.1125 106.731 80.1125 106.738 80.1125 c +106.826 80.1125 106.909 80.1179 106.985 80.129 c +107.062 80.14 107.138 80.1602 107.211 80.1896 c +107.248 80.2041 107.282 80.2188 107.315 80.2336 c +107.348 80.2483 107.383 80.2628 107.42 80.2775 c +107.449 80.2996 107.482 80.3214 107.519 80.3436 c +107.556 80.3657 107.589 80.3912 107.618 80.4207 c +107.655 80.4425 107.689 80.47 107.722 80.5032 c +107.756 80.536 107.79 80.5672 107.827 80.5967 c +107.864 80.6333 107.9 80.6681 107.937 80.701 c +107.974 80.7342 108.01 80.7688 108.047 80.8056 c +108.047 79.6066 l +108.04 79.5918 108.032 79.5808 108.025 79.5737 c +108.025 79.5626 l +107.937 79.5039 107.845 79.4506 107.75 79.403 c +107.655 79.3554 107.556 79.3132 107.453 79.2766 c +107.35 79.2471 107.225 79.2233 107.079 79.2052 c +106.932 79.1867 106.764 79.1777 106.573 79.1777 c +106.566 79.1777 106.56 79.1777 106.556 79.1777 c +106.553 79.1777 106.547 79.1777 106.54 79.1777 c +106.533 79.1777 106.522 79.1777 106.507 79.1777 c +106.5 79.1777 106.492 79.1777 106.485 79.1777 c +106.478 79.1777 106.47 79.1777 106.463 79.1777 c +106.456 79.1777 106.45 79.1777 106.447 79.1777 c +106.443 79.1777 106.437 79.1777 106.43 79.1777 c +106.092 79.1777 105.779 79.238 105.49 79.3591 c +105.2 79.4801 104.934 79.6652 104.692 79.9147 c +104.45 80.1712 104.268 80.4663 104.147 80.7999 c +104.026 81.1339 103.966 81.5094 103.966 81.9276 c +103.966 82.2944 104.025 82.6354 104.142 82.9506 c +104.259 83.2658 104.435 83.5555 104.67 83.8197 c +104.904 84.0836 105.194 84.2817 105.539 84.4135 c +105.884 84.5456 106.283 84.6117 106.738 84.6117 c +107.17 84.6117 107.556 84.553 107.893 84.4357 c +108.23 84.3183 108.513 84.1423 108.74 83.9076 c +108.975 83.6729 109.149 83.4254 109.262 83.1652 c +109.376 82.9047 109.433 82.6354 109.433 82.3564 c +109.433 79.2655 l +108.388 79.2655 l +108.388 82.3015 l +closepath +110.467 85.8436 m +111.501 85.8436 l +111.501 84.5456 l +113.503 84.5456 l +113.503 83.5997 l +111.501 83.5997 l +111.501 80.9156 l +111.501 80.813 111.508 80.7211 111.523 80.6406 c +111.538 80.5598 111.56 80.483 111.589 80.4096 c +111.618 80.3362 111.683 80.2832 111.782 80.25 c +111.881 80.2171 112.018 80.2007 112.194 80.2007 c +113.415 80.2225 l +113.415 79.2655 l +112.117 79.2655 l +112.11 79.2655 112.102 79.2655 112.095 79.2655 c +112.088 79.2655 112.08 79.2655 112.073 79.2655 c +112.066 79.2655 112.06 79.2655 112.057 79.2655 c +112.053 79.2655 112.047 79.2619 112.04 79.2545 c +112.033 79.2545 112.025 79.2545 112.018 79.2545 c +112.011 79.2545 112.004 79.2545 111.996 79.2545 c +111.989 79.2545 111.983 79.2545 111.98 79.2545 c +111.976 79.2545 111.97 79.2545 111.963 79.2545 c +111.714 79.2545 111.498 79.2913 111.314 79.3645 c +111.131 79.4379 110.981 79.5516 110.863 79.7055 c +110.746 79.8597 110.656 80.0247 110.594 80.2007 c +110.531 80.3764 110.493 80.5598 110.478 80.7506 c +110.471 80.7654 110.467 80.7818 110.467 80.7999 c +110.467 80.8184 110.467 80.8385 110.467 80.8606 c +110.467 80.8753 110.467 80.8918 110.467 80.9099 c +110.467 80.9283 110.467 80.9485 110.467 80.9706 c +110.467 80.9927 l +110.467 85.8436 l +closepath +114.449 84.5456 m +115.406 84.5456 l +115.406 79.2655 l +114.449 79.2655 l +114.449 84.5456 l +closepath +114.372 85.7665 m +114.372 85.8473 114.387 85.9224 114.416 85.9922 c +114.446 86.0619 114.493 86.1223 114.559 86.1736 c +114.618 86.2175 114.682 86.2524 114.752 86.2782 c +114.821 86.3037 114.893 86.3167 114.966 86.3167 c +115.047 86.3167 115.12 86.3057 115.186 86.2836 c +115.252 86.2617 115.318 86.2249 115.384 86.1736 c +115.45 86.1223 115.5 86.0619 115.533 85.9922 c +115.566 85.9224 115.582 85.8399 115.582 85.7447 c +115.582 85.6492 115.566 85.565 115.533 85.4916 c +115.5 85.4181 115.454 85.3561 115.395 85.3045 c +115.329 85.2532 115.263 85.2166 115.197 85.1945 c +115.131 85.1727 115.062 85.1616 114.988 85.1616 c +114.915 85.1542 114.842 85.1616 114.768 85.1837 c +114.695 85.2055 114.625 85.2424 114.559 85.2937 c +114.493 85.345 114.446 85.4091 114.416 85.4862 c +114.387 85.563 114.372 85.6492 114.372 85.7447 c +114.372 85.7665 l +closepath +116.792 82.0375 m +116.792 82.4409 116.862 82.804 117.001 83.1266 c +117.14 83.4492 117.346 83.7315 117.617 83.9736 c +117.896 84.2157 118.191 84.3971 118.503 84.5181 c +118.814 84.6392 119.143 84.6996 119.487 84.6996 c +119.502 84.6996 119.518 84.6996 119.537 84.6996 c +119.555 84.6996 119.571 84.6996 119.586 84.6996 c +119.601 84.6922 119.617 84.6885 119.636 84.6885 c +119.654 84.6885 119.674 84.6885 119.696 84.6885 c +119.711 84.6885 119.727 84.6885 119.746 84.6885 c +119.764 84.6885 119.784 84.6885 119.806 84.6885 c +119.821 84.6811 119.837 84.6777 119.856 84.6777 c +119.874 84.6777 119.89 84.6777 119.905 84.6777 c +120.199 84.6335 120.479 84.5473 120.747 84.4192 c +121.014 84.2908 121.273 84.1202 121.522 83.9076 c +121.764 83.6876 121.947 83.4126 122.072 83.0827 c +122.197 82.7527 122.259 82.3675 122.259 81.9276 c +122.259 81.8984 122.259 81.8689 122.259 81.8397 c +122.259 81.8102 122.256 81.7847 122.248 81.7626 c +122.248 81.7331 122.246 81.7039 122.243 81.6747 c +122.239 81.6452 122.237 81.616 122.237 81.5865 c +122.23 81.5279 122.221 81.4692 122.21 81.4105 c +122.199 81.3518 122.186 81.2932 122.171 81.2345 c +122.105 80.9706 122.004 80.7194 121.869 80.481 c +121.733 80.2426 121.559 80.0173 121.346 79.8044 c +121.141 79.5918 120.895 79.4342 120.609 79.3316 c +120.323 79.229 120.004 79.1777 119.652 79.1777 c +119.153 79.1777 118.723 79.2454 118.36 79.3809 c +117.997 79.5167 117.701 79.7239 117.474 80.0025 c +117.247 80.2812 117.076 80.5893 116.962 80.9266 c +116.849 81.264 116.792 81.6268 116.792 82.0154 c +116.792 82.0375 l +closepath +117.837 82.0375 m +117.837 81.9789 117.837 81.9259 117.837 81.878 c +117.837 81.8303 117.841 81.781 117.848 81.7297 c +117.855 81.6781 117.865 81.6288 117.876 81.5812 c +117.887 81.5335 117.896 81.4839 117.903 81.4326 c +117.94 81.2713 117.999 81.1134 118.079 80.9595 c +118.16 80.8056 118.259 80.6588 118.376 80.5196 c +118.501 80.3801 118.655 80.2775 118.838 80.2115 c +119.022 80.1454 119.238 80.1125 119.487 80.1125 c +119.722 80.1125 119.942 80.1454 120.147 80.2115 c +120.352 80.2775 120.54 80.3764 120.708 80.5085 c +120.877 80.6406 121.003 80.8331 121.088 81.086 c +121.172 81.3391 121.214 81.6489 121.214 82.0154 c +121.214 82.2722 121.178 82.505 121.104 82.7142 c +121.031 82.9231 120.921 83.1082 120.774 83.2695 c +120.627 83.4237 120.446 83.541 120.23 83.6215 c +120.013 83.7023 119.766 83.7426 119.487 83.7426 c +119.223 83.7426 118.996 83.7077 118.805 83.638 c +118.615 83.5685 118.457 83.4603 118.332 83.3137 c +118.207 83.1742 118.107 83.024 118.03 82.8627 c +117.953 82.7011 117.899 82.5362 117.87 82.3675 c +117.863 82.3383 117.855 82.3088 117.848 82.2796 c +117.841 82.2501 117.837 82.2209 117.837 82.1915 c +117.837 82.1623 117.837 82.1328 117.837 82.1036 c +117.837 82.0741 117.837 82.0449 117.837 82.0154 c +117.837 82.0375 l +closepath +123.205 82.4667 m +123.205 82.7598 123.257 83.0368 123.359 83.297 c +123.462 83.5575 123.616 83.8013 123.821 84.0286 c +124.034 84.2486 124.283 84.4155 124.569 84.5292 c +124.855 84.6429 125.182 84.6996 125.548 84.6996 c +125.607 84.6996 125.671 84.6959 125.741 84.6885 c +125.811 84.6811 125.886 84.6704 125.966 84.6556 c +126.047 84.6409 126.129 84.6227 126.214 84.6006 c +126.298 84.5785 126.384 84.5493 126.472 84.5125 c +126.626 84.4467 126.773 84.3622 126.912 84.2596 c +127.052 84.157 127.187 84.0323 127.319 83.8857 c +127.451 83.7463 127.55 83.5739 127.616 83.3687 c +127.682 83.1632 127.715 82.9285 127.715 82.6646 c +127.715 82.6572 127.715 82.6481 127.715 82.6371 c +127.715 82.626 127.715 82.6133 127.715 82.5985 c +127.715 82.5911 127.715 82.5821 127.715 82.571 c +127.715 82.56 127.715 82.5472 127.715 82.5325 c +127.715 79.2655 l +126.67 79.2655 l +126.67 82.3786 l +126.67 82.5398 126.646 82.6994 126.599 82.857 c +126.551 83.0146 126.48 83.1632 126.384 83.3026 c +126.289 83.4492 126.164 83.5592 126.01 83.6326 c +125.856 83.706 125.673 83.7426 125.46 83.7426 c +125.262 83.7426 125.088 83.7097 124.938 83.6437 c +124.788 83.5776 124.657 83.4787 124.547 83.3466 c +124.437 83.2145 124.351 83.0733 124.289 82.9231 c +124.227 82.7729 124.184 82.6133 124.162 82.4446 c +124.162 79.2655 l +123.205 79.2655 l +123.205 82.4667 l +closepath +0 0 0 rgb +F +newpath +113.172 76.343 m +113.172 76.6049 113.208 76.8397 113.279 77.0474 c +113.35 77.2549 113.455 77.4355 113.593 77.5889 c +113.736 77.7422 113.883 77.8732 114.037 77.9817 c +114.19 78.0903 114.351 78.1745 114.519 78.2343 c +114.549 78.2456 114.58 78.2558 114.612 78.2652 c +114.644 78.2746 114.676 78.2848 114.71 78.2961 c +114.74 78.3035 114.771 78.3111 114.803 78.3185 c +114.835 78.3259 114.865 78.3315 114.895 78.3352 c +114.959 78.3465 115.02 78.3551 115.078 78.3607 c +115.136 78.3661 115.193 78.3689 115.249 78.3689 c +115.402 78.3689 115.55 78.3539 115.692 78.3242 c +115.835 78.2941 115.969 78.2513 116.096 78.1952 c +116.223 78.1391 116.349 78.0659 116.472 77.9761 c +116.596 77.8865 116.718 77.7816 116.837 77.662 c +116.484 77.2745 l +116.469 77.2821 116.454 77.2915 116.441 77.3026 c +116.428 77.3139 116.414 77.3269 116.4 77.3419 c +116.392 77.3493 116.384 77.357 116.377 77.3643 c +116.369 77.372 116.362 77.3794 116.354 77.3867 c +116.343 77.3944 116.334 77.4018 116.326 77.4094 c +116.319 77.4168 116.311 77.4242 116.304 77.4318 c +116.237 77.4879 116.164 77.5412 116.085 77.5917 c +116.007 77.6421 115.922 77.6917 115.833 77.7405 c +115.743 77.7853 115.649 77.8199 115.552 77.8443 c +115.455 77.8686 115.354 77.8808 115.249 77.8808 c +115.021 77.8808 114.819 77.8479 114.645 77.7825 c +114.472 77.717 114.325 77.6189 114.205 77.4879 c +114.089 77.3607 113.995 77.2252 113.921 77.0809 c +113.849 76.9369 113.799 76.7864 113.773 76.6293 c +113.769 76.603 113.764 76.5777 113.759 76.5534 c +113.753 76.5293 113.75 76.5037 113.75 76.4777 c +113.747 76.4516 113.745 76.4264 113.745 76.402 c +113.745 76.3776 113.745 76.3541 113.745 76.3317 c +113.745 76.1446 113.776 75.964 113.837 75.7903 c +113.899 75.6162 113.992 75.4507 114.115 75.2934 c +114.239 75.1363 114.395 75.0156 114.584 74.9314 c +114.773 74.8472 114.994 74.7996 115.249 74.7885 c +115.253 74.7885 115.255 74.7885 115.257 74.7885 c +115.259 74.7885 115.262 74.7885 115.266 74.7885 c +115.269 74.7885 115.273 74.7885 115.277 74.7885 c +115.281 74.7885 115.284 74.7885 115.288 74.7885 c +115.296 74.7885 115.301 74.7885 115.305 74.7885 c +115.309 74.7885 115.312 74.7885 115.313 74.7885 c +115.315 74.7885 115.318 74.7885 115.322 74.7885 c +115.49 74.7845 115.644 74.8072 115.782 74.8557 c +115.92 74.9044 116.042 74.9793 116.147 75.0802 c +116.255 75.1774 116.346 75.2814 116.419 75.3917 c +116.492 75.502 116.549 75.6171 116.59 75.737 c +116.601 75.7667 116.612 75.7957 116.621 75.8237 c +116.631 75.8518 116.637 75.879 116.641 75.9054 c +116.644 75.9201 116.647 75.9343 116.649 75.9473 c +116.651 75.9603 116.652 75.9745 116.652 75.9895 c +116.656 76.0006 116.659 76.0128 116.66 76.0258 c +116.662 76.0389 116.663 76.053 116.663 76.0681 c +115.294 76.0791 l +115.294 76.6123 l +117.236 76.6123 l +117.236 76.1242 l +117.213 75.8285 117.148 75.5695 117.039 75.3469 c +116.931 75.1241 116.781 74.9342 116.59 74.7772 c +116.396 74.6201 116.187 74.5031 115.964 74.4262 c +115.742 74.3497 115.503 74.3114 115.249 74.3114 c +114.95 74.3114 114.676 74.3571 114.429 74.4489 c +114.183 74.5405 113.964 74.6816 113.773 74.8727 c +113.582 75.0595 113.436 75.2758 113.335 75.5207 c +113.234 75.7659 113.18 76.0363 113.172 76.3317 c +113.172 76.343 l +closepath +117.724 76.2138 m +117.724 76.33 117.746 76.4394 117.791 76.5423 c +117.836 76.6452 117.905 76.7396 117.999 76.8258 c +118.092 76.9117 118.201 76.9763 118.324 77.0194 c +118.448 77.0622 118.586 77.0837 118.74 77.0837 c +118.848 77.0837 118.944 77.0755 119.026 77.0585 c +119.108 77.0418 119.175 77.0182 119.228 76.9885 c +119.28 76.9584 119.329 76.9219 119.374 76.8791 c +119.419 76.836 119.458 76.7864 119.492 76.7302 c +119.525 76.775 119.567 76.8173 119.615 76.8564 c +119.664 76.8958 119.722 76.9341 119.789 76.9715 c +119.857 77.0089 119.931 77.0369 120.014 77.0557 c +120.096 77.0744 120.188 77.0837 120.289 77.0837 c +120.416 77.0837 120.536 77.0661 120.648 77.0304 c +120.76 76.995 120.865 76.9397 120.962 76.8649 c +121.059 76.7937 121.133 76.7124 121.184 76.6208 c +121.234 76.5293 121.261 76.4272 121.265 76.315 c +121.265 76.3113 121.265 76.3084 121.265 76.3065 c +121.265 76.3048 121.265 76.3019 121.265 76.298 c +121.265 76.2943 121.265 76.2914 121.265 76.2897 c +121.265 76.2878 121.265 76.2849 121.265 76.2812 c +121.261 76.2775 121.26 76.2747 121.26 76.2727 c +121.26 76.271 121.26 76.2682 121.26 76.2645 c +121.26 76.2605 121.26 76.258 121.26 76.256 c +121.26 76.254 121.26 76.2512 121.26 76.2475 c +121.26 74.3562 l +120.771 74.3562 l +120.771 76.0791 l +120.771 76.0754 120.771 76.0746 120.771 76.0763 c +120.771 76.0783 120.773 76.0791 120.777 76.0791 c +120.777 76.0828 120.777 76.0856 120.777 76.0876 c +120.777 76.0896 120.777 76.0922 120.777 76.0961 c +120.777 76.1035 120.777 76.11 120.777 76.1157 c +120.777 76.1214 120.777 76.1259 120.777 76.1296 c +120.777 76.1409 120.776 76.1523 120.774 76.1633 c +120.772 76.1746 120.769 76.1877 120.766 76.2027 c +120.762 76.2138 120.759 76.226 120.757 76.2393 c +120.756 76.2523 120.753 76.2662 120.749 76.2812 c +120.734 76.326 120.712 76.3691 120.682 76.4102 c +120.651 76.4516 120.616 76.4907 120.575 76.5281 c +120.534 76.5655 120.489 76.5936 120.44 76.6123 c +120.392 76.631 120.341 76.6404 120.289 76.6404 c +120.221 76.6404 120.159 76.6282 120.101 76.6038 c +120.043 76.5797 119.989 76.5432 119.941 76.4944 c +119.892 76.4459 119.854 76.3943 119.826 76.3402 c +119.798 76.286 119.778 76.2288 119.767 76.169 c +119.763 76.1616 119.76 76.1531 119.758 76.1437 c +119.756 76.1344 119.755 76.1259 119.755 76.1185 c +119.755 76.1072 119.755 76.0978 119.755 76.0905 c +119.755 76.0828 119.755 76.0754 119.755 76.0681 c +119.755 74.3562 l +119.273 74.3562 l +119.273 76.0343 l +119.273 76.1165 119.262 76.1934 119.239 76.2645 c +119.217 76.3354 119.183 76.4008 119.138 76.4609 c +119.093 76.5208 119.037 76.5655 118.97 76.5956 c +118.903 76.6254 118.826 76.6404 118.74 76.6404 c +118.631 76.6293 118.541 76.6049 118.47 76.5675 c +118.399 76.5301 118.347 76.4797 118.313 76.4159 c +118.279 76.3524 118.254 76.2849 118.237 76.2138 c +118.22 76.1429 118.212 76.0698 118.212 75.9949 c +118.212 75.9912 118.212 75.9876 118.212 75.9839 c +118.212 75.9782 l +118.212 74.3562 l +117.724 74.3562 l +117.724 76.2138 l +closepath +122.23 78.2456 m +122.23 75.7256 l +122.23 75.576 122.249 75.4422 122.286 75.3242 c +122.324 75.2066 122.378 75.1026 122.449 75.0127 c +122.524 74.9231 122.613 74.8557 122.716 74.8109 c +122.819 74.7658 122.936 74.7434 123.067 74.7434 c +123.19 74.7434 123.3 74.7613 123.398 74.7967 c +123.495 74.8324 123.579 74.8857 123.65 74.9566 c +123.718 75.0277 123.774 75.1026 123.819 75.1811 c +123.864 75.2599 123.897 75.3401 123.92 75.4226 c +123.927 75.4413 123.932 75.4609 123.934 75.4816 c +123.936 75.502 123.939 75.5235 123.942 75.5459 c +123.946 75.5686 123.949 75.5899 123.95 75.6105 c +123.952 75.6312 123.953 75.6508 123.953 75.6695 c +123.953 75.8192 123.934 75.9501 123.894 76.0624 c +123.855 76.1746 123.798 76.2662 123.723 76.3374 c +123.649 76.4122 123.569 76.4711 123.485 76.5142 c +123.401 76.5573 123.313 76.5843 123.224 76.5956 c +123.213 76.5956 123.202 76.5956 123.193 76.5956 c +123.184 76.5956 123.175 76.5956 123.168 76.5956 c +123.164 76.5956 123.159 76.5956 123.154 76.5956 c +123.148 76.5956 123.143 76.5973 123.14 76.6013 c +123.132 76.6013 123.126 76.6013 123.123 76.6013 c +123.119 76.6013 123.115 76.6013 123.112 76.6013 c +123.056 76.6013 123.003 76.5973 122.954 76.5899 c +122.906 76.5826 122.861 76.5712 122.82 76.5562 c +122.779 76.5412 122.738 76.5253 122.699 76.5086 c +122.66 76.4918 122.62 76.474 122.578 76.4553 c +122.573 76.4496 l +122.567 76.4496 l +122.56 76.4459 122.552 76.4422 122.545 76.4383 c +122.537 76.4346 122.532 76.4329 122.528 76.4329 c +122.52 76.4289 122.514 76.4252 122.508 76.4215 c +122.503 76.4179 122.496 76.4142 122.489 76.4102 c +122.474 76.4065 122.46 76.402 122.446 76.3963 c +122.433 76.3906 122.419 76.3841 122.404 76.3768 c +122.404 76.8762 l +122.446 76.8949 122.486 76.9136 122.525 76.9323 c +122.564 76.9511 122.605 76.9678 122.646 76.9828 c +122.687 76.9978 122.728 77.0109 122.769 77.0222 c +122.81 77.0333 122.853 77.0426 122.898 77.0503 c +122.917 77.054 122.936 77.0568 122.957 77.0585 c +122.978 77.0605 122.999 77.0633 123.022 77.067 c +123.033 77.067 123.043 77.067 123.053 77.067 c +123.062 77.067 123.072 77.069 123.084 77.0727 c +123.091 77.0727 123.1 77.0727 123.112 77.0727 c +123.123 77.0727 123.134 77.0727 123.145 77.0727 c +123.321 77.0727 123.486 77.0435 123.639 76.9856 c +123.793 76.9275 123.937 76.8388 124.071 76.7189 c +124.206 76.603 124.308 76.4646 124.377 76.3036 c +124.446 76.1429 124.481 75.9615 124.481 75.7594 c +124.481 75.5723 124.451 75.3926 124.391 75.2205 c +124.331 75.0484 124.242 74.8838 124.122 74.7267 c +124.006 74.5694 123.859 74.4534 123.681 74.3786 c +123.503 74.3038 123.298 74.2664 123.067 74.2664 c +122.835 74.2664 122.633 74.3029 122.461 74.3758 c +122.288 74.4489 122.146 74.56 122.034 74.7097 c +121.922 74.8633 121.837 75.0269 121.781 75.2009 c +121.725 75.375 121.697 75.5609 121.697 75.7594 c +121.697 78.2456 l +122.23 78.2456 l +closepath +124.969 78.2904 m +125.497 78.2904 l +125.497 76.6965 l +127.181 76.6965 l +127.181 78.2904 l +127.708 78.2904 l +127.708 74.3562 l +127.181 74.3562 l +127.181 76.169 l +125.497 76.169 l +125.497 74.3562 l +124.969 74.3562 l +124.969 78.2904 l +closepath +F +%%PageTrailer +showpage +%%Trailer +end +%%DocumentSuppliedResources: procset Linux-Sketch-Procset 1.0 2 +%%EOF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/config-manual/general_settings.tex Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,80 @@ +\section{Configuring the GNV-Server} + +The configuration of the artifact- and mapserver is been done in the +central configuration directory at {\tt artifact-server/conf/}. The +central entry point is the file {\tt conf.xml}. All components of the +configuration are linked from this document. + +{\bf Within the configuration the key +{\verb+${artifacts.config.dir}+} can be used to reference the central +configuration directory of the artifact-server instance, e.g. +\texttt{/opt/artifact-server/conf}.} + +The following structure gives an overview of the entire structure +starting from {\tt conf/}: + +%% tree /opt/artifact-server/ +\begin{lstlisting} +conf/ +|-- arcsdeconnectionpool.properties # database connection +|-- charttemplate.xml # general properties for chart generation +|-- conf.xml # central configuration +|-- ehcache.xml # configuration of caching system +|-- log4j.properties # logging of server +|-- maptemplates # style defintions for rendering maps +| `-- *.vm +|-- meshwidth.xml # buffer-size for querying different FIS on + # meshes +|-- palette # styling for 2D charts +| `-- *.xml +|-- products # configuration of steps in workflows +| |-- horizontalcrosssection +| | `-- *.xml +| |-- horizontalprofile +| | `-- *.xml +| |-- layer +| | `-- *.xml +| |-- timeseries +| | |-- *.xml +| | `-- timegap_definition.xml # definition of a gaps as defines in MEDIAN Coded Value Domains section TSIntervalTypes. The meaning of the defined gaps are detailed explained in the file itself. +| |-- verticalcrosssection +| | `-- *.xml +| `-- verticalprofile +| `-- *.xml +`-- queries.properties # SQL configuration according to products +\end{lstlisting} + + +The central config-file {\tt conf/conf.xml} is XML-based and contains the +following main elements: + +\begin{lstlisting} +artifact-database +|-- geo-backend # pointing to database connection, SQL configuration +|-- rest-server # port, listen addresses +|-- database # internal database storing artifacts +|-- ehcache # pointing to cache configuration +|-- cleaner # time of cleanups FIXME +|-- export-secret # signing project files +|-- factories # list of expert information systems +|-- artifacts # list of products +|-- gnv # charts, palettes, interpolation parameters +|-- mapserver # integration of mapserver +`-- velocity # templating language used in maptemplates +\end{lstlisting} + +The documentation of the configuration will be split up in 4 sections +addressing different tasks: +\begin{enumerate} + \item "Configuring and Running Artifact-Server" covering the main elements + \texttt{ +geo-backend, rest-server, database, ehcache, cleaner, export-secret} + \item "Generating Charts -- Background and Configuration" covering + the main element {\tt gnv} + \item "Generating Maps -- Background and Configuration" covering the + main elements {\tt mapserver, velocity} + \item "Configuring FIS, Products, States, Transitions and + SQL-Statements" covering the main elements {\tt factories, + artifacts} +\end{enumerate} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/config-manual/generating_charts.tex Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,84 @@ +\subsection{Generating Charts -- Background Information and Configuration} + +The artifact-server is able to render different types of charts like 1D +(timeseries, vertical- and horizontalprofiles, horizontal-cross-section +profiles (a special case of the horizontalprofiles) and histograms) and 2D-diagrams +(vertical-cross section profiles). This section describes the +possibilities to configure different aspects for interpolating of data and +visualising them in charts. + +\begin{lstlisting} +artifact-database +`-- gnv # charts, palettes, interpolation parameters + |-- charttemplate + |-- palettes + |-- horizontal-cross-section-profile + `-- vertical-cross-section +\end{lstlisting} + +\paragraph*{charttemplate} +{\em Function}: The chart template is a global template for setting the +visualization of charts globally like font styles, background, title, +subtitle, etc. Further information can be found in the configuration +file referenced via the attribute {\tt configuration}. + +\begin{itemize} + \item {\tt configuration}: path to the configuration XML-file. +\end{itemize} + + +\paragraph*{palettes} +{\em Function}: This section lists the available palettes used for rendering +vertical-cross-section charts (2D). Each {\tt palette}-element contains +the following attributes: + +\begin{itemize} + \item {\tt name}: a descriptive name. + \item {\tt parameter-ids}: identifier used as keys for matching + between data (from the database) and palette. {\bf The {\tt + parameter-ids} have to been in sync with the database parameters + (normally in {\tt MEDIAN.Parameter})} + \item {\tt description}: a description. + \item {\tt file}: reference to the defintion of the palette. +\end{itemize} + +For defining ranges for a palette, a range is definied by: + +\begin{itemize} + \item {\tt index}: Index for accessing the explicit range from the + program logic. + \item {\tt from}: lower limit of a range. + \item {\tt to}: upper limit of a range + \item {\tt rgb}: Red-Green-Blue (RGB) value for rendering the range + \item {\tt description}: description for rendering the legend. For + special characters use HTML-encoded values like {\tt \<} for $<$ + or {\tt \>} for $>$. +\end{itemize} + + +\paragraph*{horizontal-cross-section-profile} + +{\em Function}: Parameterization for the interpolation algorithm for +horizontal-cross-section-profile calculating the interpolated value +along the distance. + +\begin{itemize} + \item {\tt samples}: Number of samples calculated for a + interpolation along the passed geometric line. +\end{itemize} + + +\paragraph*{vertical-cross-section} +{\em Function}: Parameterization for the interpolation algorithm for +vertical-cross-sections (2D-charts). + +\begin{itemize} + \item {\tt samples}: Parameters for defining the interpolation grid. + {\tt width} for horizontal distances; {\tt height} for the vertical + distance. + \item {\tt ground}: {\tt interpolation} method for calculating the + interpolation from the last measured value against the seafloor. + Available methods are {\tt nearest-neighbor | bilinear | bicubic}.\\ + {\tt fill-color}: setting the file color for the seafloor in the + diagram. +\end{itemize}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/config-manual/generating_maps.tex Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,149 @@ +\subsection{Generating Maps-- Background Information and Configuration} + +The artifact-server is able to process geographic data and provide them +for a WMS service rendering maps via a HTTP-based interface. The +following process chains are covered. For generating horizontal-cross sections, +the following steps have to be processed: + +\begin{enumerate} +%% FIXME: When do we clip? Sequence will influence the interpolation + \item Selecting the data from datawarehouse + \item Clipping the datasets along the passed polygon + \item Calculating interpolation in the plane + \item Generating contour lines + \item Matching processed parameter data to the corresponding style + \item Rendering requested map +\end{enumerate} + +For generating maps from object-based datamodels like CONTIS, NAUTHIS +and Marine Features, just the following steps are needed: + +\begin{enumerate} + \item Selecting the data from datawarehouse + \item Clipping the datasets along the passed polygon + \item Matching processed object data to the corresponding style + \item Rendering requested map +\end{enumerate} + +In order to understand the configuration facilities for generating maps +in more detail, the internal +interaction of the artifact-server and the mapserver is described below +for the use case when a user parameterizes a horizontal-cross-section +profile and visualizes it as a map (without regarding the caching +facilities) + +\begin{enumerate} + \item After finishing the parameterization, the artifact-server + requests the data from the database-backend and processes the data + (see above). + + \item By requesting a map in the GNV-WebClient, the artifact-server writes + a ESRI shapefile with (clipped) geometries, attribute data, projection + information and a special file storing meta information (\texttt{meta.xml}) + for this artifact in the a corresponding directory in the + \texttt{shapefile-directory}. + + \item After that the so called \texttt{map-generator} is triggered. The + map-generator searches the \texttt{shape-directory} and its subfolders with + all existing \texttt{meta.xml} files and generates a central configuration + file for the mapserver at \texttt{ map-generator/mapfile@path}. Each + shapefile will be published as a WMS layer. \\ + The generated mapfile is constructed out of a base template from \texttt{ + map-generator/templates/maptemplate} and a parameter-/layer-specific part + generated from \texttt{map-generator/templates/path}. The selection of the + correct file-based templates is extracted out of the + \texttt{meta.xml}-file. + + \item The matching between the generated geograpic data and the + corresponding style files is been done by the artifact-server, constructing + filenames of maptemplates out of parameter-information. For + horizontal-cross-sections the schema looks like this \texttt{ + horizontalcrosssection\_\$NAME-OF-PARAMETER}; for layer-orientated FIS like + e.g. NAUTHIS and CONTIS like this \texttt{ + layer\_\$ID\_MAPSERVICE\_\$ID\_LAYER} e.g. + \texttt{layer\_BSH\_IMS\_CONTIS\_Resources\_2}. + %% FIXME@TE: Marine Feature? Name of WMS? + In order to set at least title, geometry-type and path to the + corresponding shapefile dynamically a templating language, called + \texttt{velocity} is used. + + \item The corresponding subfolder of an artifact in \texttt{ + shape-directory} with their shapefiles + and \texttt{meta.xml}-document will be deleted after the time of + expiry. By triggering the \texttt{map-generator} the next time, the + geographic data and the central configuration of the mapserver will + be updated. + +\end{enumerate} + +The coupling of the artifact-server and mapserver is free of +maintenance. The artifact-server as master cares about deleting and +updating the configuration of the mapserver. + +\begin{lstlisting} +artifact-database +|-- gnv # charts, palettes, interpolation parameters +| |-- map-generator +| |-- shapefile-directory +| `-- horizontal-cross-section +|-- mapserver +`-- velocity +\end{lstlisting} + +\paragraph*{mapserver} +{\em Function}: URL of the mapserver where request can be send to. The +URL will be used for displaying the location e.g. in the GNV-WebClient and in +the {\tt meta.xml}-file. + +\begin{itemize} + \item {\tt server}: URL of the mapserver where request can send to. +\end{itemize} + +\paragraph*{velocity} +{\em Function}: Templating language used in the maptemplates at +\texttt{map-generator/templates/path} for accessing the parameters from +dynamically generated \texttt{meta.xml}-configuration of artifacts. + +\begin{itemize} + \item {\tt logfile}: Setting the path to write log files. \\ + Preconfigured to \texttt{/var/log/artifacts/velocity.log}. + {\bf Just + absolute pathes are allowed here!} +\end{itemize} + +\paragraph*{map-generator} +{\em Function}: Mechanism for generating configuration for the {\tt +mapserver} dynamically. For background information about the interaction +between artifact-server and mapserver, see above. + +\begin{itemize} + \item {\tt mapfile}: path to the mapfile accessed by the WMS wrapper + {\tt gnv-wms} + \item {\tt templates}: \\ {\tt path} to the directory where + parameter-specific mapconfiguartions (as *.vm) are stored. + \\ {\tt + maptemplate} containing the WMS instance-specific configurations and + metadata, like overall boundingbox, spatial reference systems and + contact data. + \end{itemize} + +\paragraph*{shapefile-directory} +{\em Function}: Pointer where shapefiles for map-generation are stored + +\begin{itemize} + \item {\tt path}: path to the directory where shapefiles are stored + and accessed by {\tt mapserver} +\end{itemize} + +\paragraph*{horizontal-cross-section} +{\em Function}: Parameterization for the interpolation algorithm for +horizontal-cross-sections (maps). + + +\begin{itemize} + \item {\tt sample}: The attribute {\tt number} sets the number of + steps for the interpolation grid. + \item {\tt ground}: {\tt interpolation} method for calculating the + interpolation from the last measured value in meshes against the seafloor. + Available methods are {\tt nearest-neighbor | bilinear | bicubic}. +\end{itemize}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/config-manual/miscellanea.tex Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,14 @@ +\section{Miscellanea} + +This section describes some additional possibilities to affect the +behaviour of the GNV-server. They should only be used if the +consequences for the system are known: + +\begin{itemize} + \item artifact.database.dir The folder where the configuration of + the artifact-server is located. + \item caching.cleaner.interval: The Interval in seconds the caches should be + cleaned compared to updates in the database. + \item chart.gap.percentage: gap-size in percent for evaluating gaps + in in the products timeseries, vertical- and horizontal-profile. +\end{itemize}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/config-manual/model_of_transitions.tex Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,860 @@ +\section{Model of transitions} +\subsection{Overview of Subject-Specific Configuration: From FIS, Products, States, +Transitions and SQL-statements} + +The GNV-system provides several expert information systems (FIS). Within a FIS +users can select products for analysing and visualising different +subject-specific issues like timeseries diagrams and different types of +profiles. In order to generate these products, different kind of data out of the +dataware house is needed. + +The configuration is mainly split up into two steps\footnote{Except for +integrating the MapViewer. There is a third step necessary by configuring +additional tables in the datawarehouse}: +\begin{enumerate} + \item FIS and their according products (Metainformation) + \item Products with their states, transitions, outputs and SQL-statements + (Implementation) +\end{enumerate} + +%% TODO to improve: Add a Screenshot of the GNV WebClient marking GUI elements for FIS, +%% product, states and transitions + +Main entry point for the configuration also is the file {\tt conf/conf.xml } +defining the list of FIS and the according products based on the different +datamodels in the datawarehouse. + +The provided datamodels are: + +\begin{enumerate} + \item ESRI ArcMarineBSH with following subtypes + \begin{enumerate} + \item TimeSeriesPoints + \item MeshFeatures + \item Measurements/InstantaneousPoints + \item Marine Features + \end{enumerate} + \item ESRI ArcS57, + \item CONTIS +\end{enumerate} + +Each product configuration consists of a datamodel specific configuration +organized in a product specific folder in {\tt conf/products} \footnote{The +special case of a {\tt Horizontales Schnittprofil} is configured in +{\tt conf/horizontalprofile/conf\_mesh\_cross.xml} }. The directory layout looks +like this: + +\begin{verbatim} +products/ +|-- horizontalcrosssection +| `-- conf_mesh.xml +|-- horizontalprofile +| |-- conf_instantaneouspoint.xml +| |-- conf_mesh.xml +| `-- conf_mesh_cross.xml +|-- layer +| `-- conf.xml +|-- timeseries +| |-- conf_mesh.xml +| |-- conf_timeseriespoint.xml +| `-- timegap_definition.xml +|-- verticalcrosssection +| `-- conf_mesh.xml +`-- verticalprofile + |-- conf_instantaneouspoint.xml + |-- conf_mesh.xml + `-- conf_timeseriespoint.xml +\end{verbatim} + +The subtypes of the ArcMarineBSH based datamodel are configured in the files below: +\begin{itemize} + \item TimeSeriesPoints: {\tt conf\_timeseriespoint.xml} + \item Mesh: {\tt conf\_mesh.xml} + \item InstantaneousPoints: {\tt conf\_instantaneouspoint.xml} +\end{itemize} + +Within each of these files, the steps for gathering the values for the +parameterisation are configured by defining states, transitions and outputs +(c.f. \ref{ref:config-a-product}). The definition of states, transitions and +outputs reference the actual SQL-statements via an identifier. The SQL-statements +are gathered in the file {\tt conf/queries.properties}. + + +\subsection{Background information of the XML configuration} + +It is possible to configure the GNV in many ways. +It is possible to add or remove FIS, add or remove products from a FIS or +to manipulate the steps which must be prepared until products like +a diagram or CSV-export can be generated. + +The configuration of the provided FIS are divided in three main parts. + +\begin{itemize} + \item Configuration of the list of FIS via {\tt artifact-factories} + \item Configuration of main {\tt artifacts} which will be instantiated if an + {\tt artifact-factory} was called. + \item Configuration of the different {\tt artifacts} which provides products which can be + served by the FIS. +\end{itemize} + +\subsubsection{Configuration of a FIS} +The point of entry into the system is to configure an {\tt artifact-factory}. +Each artifact-factory represents one FIS. +It is possible to configure several {\tt artifact-factories}, which +represent the list of FIS in GUI. +The {\tt artifact-factories} will be configured in the section +\texttt{/artifact-database/artifact-factories} of the configuration-file. + +\begin{lstlisting} +<artifact-factory name='fis_NEWFISNAME' + description='Factory to create an artifact to be used with the FIS NEWFISNAME' + ttl='3600000' + artifact='de.intevation.artifactdatabase.ProxyArtifact'> + de.intevation.gnv.artifacts.GNVProductArtifactFactory +</artifact-factory> +\end{lstlisting} + +At this moment the following attributes of an {\tt artifact-factory} are +configurable: +\begin{itemize} + \item {\tt name}: The name of the {\tt artifact}. Must be unique in one {\tt artifact-server} + \item {\tt description}: Short description which job the {\tt artifact-factory} has to do. + \item {\tt ttl}: The time to live: The time using milliseconds an + {\tt artifact}, created using this factory, can live without any + user-interaction. + \item {\tt artifact}: The name of the class of the {\tt artifact} which should be created. +\end{itemize} + +The next listing shows the dependencies between the FIS and the name +of the {\tt artifact-factory} which belongs to it. + +\begin{itemize} + \item Marnet: {\tt fis\_marnet} + \item IMIS: {\tt fis\_imis} + \item STAUN: {\tt fis\_staun} + \item Modeldata {\tt fis\_modeldata} + \item Iceclimatology: {\tt fis\_eisklimatologie} + \item Ice Station Report: {\tt fis\_icestations} + \item SST: {\tt fis\_sst} + \item Delphin: {\tt fis\_delphin} + \item Thermosalinograph: {\tt fis\_thermosalinograph} + \item Chemusurvey: {\tt fis\_chemusurvey} + \item GTS: {\tt fis\_gts} + \item CTD: {\tt fis\_bsh\_ctd} + \item XBT: {\tt fis\_bsh\_xbt} + \item SeaCat: {\tt fis\_seacat} + \item Sea State: {\tt fis\_seastate} + \item Current Meter: {\tt fis\_currentmeter} + \item Nauthis: {\tt fis\_nauthis} + \item Contis: {\tt fis\_contis} + \item Marine Features: {\tt fis\_marinefeatures} +\end{itemize} + +\subsubsection{Configuration of main Artifact} +For each {\tt artifact-factory} it is necessary to configure one {\tt artifact} which will be +created using the factory. +This {\tt artifact} is the representation of the specific FIS. +It contains the configuration which products will be served for this FIS. + +The {\tt artifacts} are configured in the section {\tt /artifact-database/artifacts} of +the configurationfile. + +\begin{lstlisting} +<artifact name='fis_NEWFISNAME'> + <products> + ... + </products> +</artifact> +\end{lstlisting} + +The key is to use the same name for the {\tt artifact} as used for the {\tt artifact-factory}. +The name has to be unique. +In the section {\tt /artifact/products} it is possible to define several products as +explained in the next section. + +\subsection{Products to an FIS} +One FIS can provide several products. +To do this it is required to configure them as shown below in the section +{\tt /artifact/products} + +\begin{lstlisting} +<product name= "timeSeries"> + <artifact-factory name="timeSeries" + description="Artiefactfactory for Instantiating the Artifact for TimeSeries on TimeSeriesPoints" + ttl="300000" + artifact="de.intevation.gnv.timeseries.TimeSeriesArtifact"> + de.intevation.gnv.artifacts.GNVArtifactFactory + </artifact-factory> + <parameters> + <parameter name="sourceid" + value="4"/> + <parameter name="fisname" + value="fis\_marnet"/> + </parameters> + </product> + \end{lstlisting} + +Each {\tt product} is also represented by an {\tt artifact}. In order to +create this {\tt artifact}, the {\tt artifact-factory} has to be used. +It is configured in each product +({\tt /product/artifact-factory}). + +Each product can have several parameters ({\tt +/product/parameters/parameters}). The {\tt parameter} named {\tt +sourceid} and {\tt fisname} are required parameters. + +The parameter {\tt fisname} contains the key to the name of the FIS. The +key must be unique. The parameter {\tt sourceid} contains the key to +identify the FIS in the datawarehouse. ({\tt MEDIAN.SOURCEINFO}) + + +\subsubsection{Configuration of an Product} +\label{ref:config-a-product} +The {\tt products} of the different FIS are also modeled as artifact-objects. +The different products which are currently available are stored in separate +files in the folder {\tt project}. + +In those files the workflow of each product is configured. Each step which is +required to model a new diagram is represented using a {\tt state} in the +configuration-file. + +%% FIXME: fix wording +To move between those {\tt states} it is required to model {\tt transitions} which define +between which states it is possible to move and which conditions must be +fulfilled. + +The last step is called {\tt output-state}. This state is responsible to generate the +output for the different formats which can be served from the product ({\tt Diagram, +CSV, ODV, WMS,..}.). + +\paragraph{States} +A {\tt state} is one step which is required to fetch the data for generating e.g. an +diagram. + +For example in each product it is possible to choose one or more parameters. + +To configure a state you have to use a XML-fragment as shown below: + +\begin{lstlisting} +<state id="timeseries_parameter" description="timeseries_parameter" state="de.intevation.gnv.state.DefaultState"> + <queryID>timeseries_parameter</queryID> + <dataname>parameterid</dataname> + <data-multiselect>true</data-multiselect> + <inputvalues> + ... + </inputvalues> +</state> +\end{lstlisting} + +At this moment the following attributes of an {\tt state} are configurable. +\begin{itemize} + \item {\tt id}: The name of the artifact. Must be unique in one artifact-server + \item {\tt description}: Short description which job the artifact-factory has to do. + \item {\tt queryID}: The id of the query which should be used to fetch the data + displayed in this state. All queries are defined in the file + conf/queries.properties + \item {\tt dataname}: The id of the data which will be displayed in this state. + The id will be use to localize the description of the data. + The localization is located in module gnv-artifacts in folder + src/main/resources. + \item {\tt data-multiselect}: {\tt true} it is possible to select 1 or more items. + {\tt false} it is possible to select only one item. + \item {\tt inputvalues}: The values which can be "feed" to this state and which + will be used as values in SQL-statements. +\end{itemize} + +\paragraph{Input Values of a State} +At section {\tt /state/inputvalues} it is possible to add definitions for inputvalues. +Those values have two meanings for the {\tt state}. + +\begin{itemize} + \item They were used to fill the SQL-statements to fetch the data. + (Each entry replace one ore more "?" ) + \item They were used to validate the inputdata which is "feed" to + the FIS in the current state. +\end{itemize} + +{\bf WARNING: The order of the input-values is significant at which position the value will +be put into the SQL-statement!} + +It is possible to add one inputvalue twice or more often to put its value at +different positions of the SQL-statement. + +\begin{lstlisting} +<inputvalues> + <inputvalue name="featureid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="0"/> +</inputvalues> +\end{lstlisting} + +\begin{itemize} + \item {\tt name}: Name of the value that could be feed or should be used in SQL-statment. + The name must fit to one dataname configured in this state or one other + state which was visited before. + \item {\tt type}: The type of the value. This is required for the validation + of the value. + This might be String, Integer, Double, Date, Point, LineString, + Polygon, Coordinate, Geometry and AttributeName. \\ + Coordinate is a format which accepts geographical coordinates in + the following Syntax: 56n30 6e20 \\ + AttributeName marks a stringvalue which will be used in + SQL-statement without surrounding with "'" in the statement. + Usage is e.g. for determining the Axis (i or j) in the workflow + of Horizontalprofiles. + \item {\tt multiselect}: true if more than on value can be feed or put into the SQL-statement. + false if one on value will be accepted. + \item {\tt usedinquery}: Number how often the value should be put into the SQL-statement: + 0: Value will not out into the statement. + 1: Value will put once into the statement, + 2 or more: Value will be put as often as configured + into the SQL-statement (this is useful if + inner-selects are used) +\end{itemize} + +The next part will explain the usage of inputvalues. + +This SQL-statement is configured to use in the state above, which will fetch +all parameter-ids with the according german name which are reffered to the given +TimeSeriesPoint (e.g.Arkona Basin Buoy FeatureID = 100011 ) + + +\begin{lstlisting} +SELECT DISTINCT + p.PARAMETERID KEY, + p.GERMANNAME || ' ['|| p.UNIT ||']' VALUE, + p.GERMANNAME +FROM MEDIAN.PARAMETER P, + MEDIAN.TIMESERIES TS, + MEDIAN.TIMESERIESVALUE TSV, + MEDIAN.MEASUREMENT M, + MEDIAN.TIMESERIESPOINT TSP +WHERE M.FEATUREID = TSP.FEATUREID AND + M.MEASUREMENTID = TSV.MEASUREMENTID AND + TS.TIMESERIESID = TSV.TIMESERIESID AND + P.PARAMETERID = TS.PARAMETERID AND + TSP.FEATUREID = ? +ORDER BY P.GERMANNAME +\end{lstlisting} + +Including inputvalues, the example for choosing the FIS ({\tt fisname}) +and the Station 342 ({\tt featureid}: Arkona Basin Buoy) will look like +this: +\begin{itemize} + \item {\tt featureid}: 100011 (Marnet $\rightarrow$ Arkona Basin Buoy) + \item {\tt fisname}: fis\_marnet + \item {\tt parameterid}: not set because it's the value that should be + chosen in this state. +\end{itemize} + +\begin{lstlisting} +SELECT DISTINCT + p.PARAMETERID KEY, + p.GERMANNAME || ' ['|| p.UNIT ||']' VALUE, + p.GERMANNAME +FROM MEDIAN.PARAMETER P, + MEDIAN.TIMESERIES TS, + MEDIAN.TIMESERIESVALUE TSV, + MEDIAN.MEASUREMENT M, + MEDIAN.TIMESERIESPOINT TSP +WHERE M.FEATUREID = TSP.FEATUREID AND + M.MEASUREMENTID = TSV.MEASUREMENTID AND + TS.TIMESERIESID = TSV.TIMESERIESID AND + P.PARAMETERID = TS.PARAMETERID AND + TSP.FEATUREID = 100011 +ORDER BY P.GERMANNAME +\end{lstlisting} + +The value of {\tt featureid} will be inserted into the query because +the attribute {\tt usedinquery} is set to "1". + +The values of the inputvalues {\tt fisname} and {\tt parameterid} will be +excluded because the attribute {\tt usedinquery} is set to "0" + + +If the attribute {\tt usedinquery} of the inputvalue {\tt featureid} is set to "2" +this might happen. + +\begin{lstlisting} +<inputvalues> + <inputvalue name="featureid" type="Integer" multiselect="false" usedinquery="2"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="0"/> +</inputvalues> +\end{lstlisting} + +\begin{lstlisting} +SELECT DISTINCT + ... + TSP.FEATUREID = ? AND + TSP.FEATUREID = ? + ORDER BY P.GERMANNAME +\end{lstlisting} + +This SQL-statement will be modified to + +\begin{lstlisting} +SELECT DISTINCT + ... + TSP.FEATUREID = 100011 AND + TSP.FEATUREID = 100011 +ORDER BY P.GERMANNAME +\end{lstlisting} + + +At the next step of the workflow it is nessesary to determine all depths where +the choosen parameters are measured. +To do this we might have the following inputvalues: + +\begin{lstlisting} +<inputvalues> + <inputvalue name="featureid" type="Integer" multiselect="false" usedinquery="2"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="1"/> + <inputvalue name="measurementid" type="Integer" multiselect="true" usedinquery="0"/> +</inputvalues> +\end{lstlisting} + +\begin{itemize} + \item {\tt featureid}: 100011 (Marnet $\rightarrow$ Arkona Basin Buoy) + \item {\tt fisname}: fis\_marnet + \item {\tt parameterid}: 2 (Salzgehalt [pSal]) + \item {\tt measurementid}: not set because it's the value that should be + chosen in this state. +\end{itemize} + +\begin{lstlisting} +SELECT DISTINCT + M.MEASUREMENTID KEY, + M.ZLOCATION VALUE, + P.PARAMETERID PARAMETERID +FROM MEDIAN.MEASUREMENT M, + MEDIAN.TIMESERIESVALUE TSV, + MEDIAN.TIMESERIES T, + MEDIAN.PARAMETER P +WHERE M.MEASUREMENTID = TSV.MEASUREMENTID AND + TSV.TIMESERIESID = T.TIMESERIESID AND + T.PARAMETERID = P.PARAMETERID AND + M.FEATUREID = ? AND + M.FEATUREID = ? AND + P.PARAMETERID IN (?) +ORDER BY m.ZLOCATION DESC +\end{lstlisting} + +This SQL-statement will be modified to + +\begin{lstlisting} +SELECT DISTINCT + M.MEASUREMENTID KEY, + M.ZLOCATION VALUE, + P.PARAMETERID PARAMETERID +FROM MEDIAN.MEASUREMENT M, + MEDIAN.TIMESERIESVALUE TSV, + MEDIAN.TIMESERIES T, + MEDIAN.PARAMETER P +WHERE M.MEASUREMENTID = TSV.MEASUREMENTID AND + TSV.TIMESERIESID = T.TIMESERIESID AND + T.PARAMETERID = P.PARAMETERID AND + M.FEATUREID = 100011 AND + M.FEATUREID = 100011 AND + P.PARAMETERID IN (2) +ORDER BY m.ZLOCATION DESC +\end{lstlisting} + +The queries which are shown above are configurable. +Configuring takes place in the \\ file \texttt{queries.properties } which will +be explained in the next paragraph. + +\paragraph{Query-configuration (queries.properties)} +\label{ref:queries.properties} + +This file contains key-value-pairs to define SQL-statements. +All queries will be handle using the prepared-statement-syntax using "?" +to define a place where an dynamic value should be placed into the statement. + +There is one special implementation to support spatial access to the +{\tt ESRI ArcSDE}-database. This mechanism is used to realize the access to spatial- +objects. + +All queries containing the following literals will be handled separatly +using the ESRI ArcSDE-API. + +\begin{itemize} + \item {\tt ST\_ASTEXT(SHAPE)}: Will return the geometry as an WellKnowText (WKT) + \item {\tt ST\_ASTEXT(RASTER)}: Will return the raster in an readable way. + \item {\tt INTERSECTS(SHAPE,"?")}: Will only return the elements which geometry + intersects the given geometry ("?" will be + replace with an WKT) +\end{itemize} + + +\paragraph{Transitions} + +To move between two states it is necessary to configure dependencies +between the different states. This dependencies are called {\tt +transitions}. + +There are different kinds of {\tt transitions} which can be used. +\begin{itemize} + \item Transitions which only link two states + \item Transition which link two states with a additional condition. + (e.g. If a region was selected in the Regionfilter or not ) +\end{itemize} + +The listing below shows a transition with an additional condition. +\begin{lstlisting} +<transition transition="de.intevation.gnv.transition.ValueCompareTransition"> + <from state="timeseries_area"/> + <to state="timeseries_without_geom"/> + <condition inputvalue="areaid" value="n/n" operator="equal"/> +</transition> +\end{lstlisting} + +\begin{itemize} + \item {\tt from}: The {\tt id} of the {\tt state} which you have to come from + \item {\tt to}: The {\tt id} of the {\tt state} which can be reached. + \item {\tt condition}: The condition which have to be fulfilled. +\end{itemize} + +At this moment only {\tt EQUAL} and {\tt NOTEQUAL} are supported as +{\tt condition} for an {\tt ValueCompare\-Transition}. + +\paragraph{Outputstate} + +The {\tt outputstate} is a special {\tt state} which was created to define +the different possibilities of outputs for each product. +An {\tt outputstate} is handled as a {\tt state} which is described above. +Additionally you are able to configure which kind of outputs should +be provided. + +There are several {\tt outputstates}. Each one is designed to create +the output for one special product. + +\begin{itemize} + \item TimeSeries: {\tt TimeSeriesOutputState} + \item Horizontalprofile: {\tt HorizontalProfileOutputState} + \item Horizontalprofile on Meshes: {\tt HorizontalProfileMeshOutputState} + \item Verticalcrosssection: {\tt VerticalCrossSectionOutputState} + \item Verticalprofiles: {\tt VerticalProfileOutputState} + \item Horizontalcrosssections: {\tt HorizontalCrossSectionMeshOutputState} + \item Layer: {\tt LayerOutputState} +\end{itemize} + +All these outputstates are implemented in {\tt package de.intevation.gnv.state} +and its {\tt sub\-packages}. + +The fullqualified name of the {\tt outputstate} to the attribute +{\tt state} is shown below. + +An example for an {\tt outputstate}: + +\begin{lstlisting} +<state id="timeseries_calculate_results" description="timeseries_interval" state="de.intevation.gnv.state.timeseries.TimeSeriesOutputState"> + <queryID>timeseries_chart_data</queryID> + ... + <outputsModes> + <outputsMode name="chart" description="Chartrepresentation of the Values" mime-type="image/png"> + ... + </outputsMode> + </outputsModes> + </state> +\end{lstlisting} + +At section {\tt /state/outputsModes} it is possible to add one ore more +{\tt outputmodes} to one state as shown in the next paragraph. + +\paragraph{OutputModes} + +It is possible to configure several {\tt outputmodes} in one {\tt outputstate}. +Inserting or deleting the configuration of a special +{\tt outputmode} will control if an item in the GUI will be displayed. + +{\bf +WARNING: IT MIGHT BE POSSIBLE THAT ONE OR MORE OUTPUTMODES ARE NOT + SUPPORTED BY AN PRODUCT. IN THAT CASE IT IS NECESSARY TO + IMPLEMENT THE REQUIRED FUNCTIONALITY BEFORE IT IS POSSIBLE + TO OFFER THIS OUTPUTMODE. +} + +Currently the following {\tt outputmodes} are supported: + +\begin{itemize} + \item {\tt chart} + \item {\tt histogram} + \item {\tt csv} + \item {\tt odv} + \item {\tt statistics} + \item {\tt wms} + \item {\tt shapefile} +\end{itemize} + +The following example shows how to configure an {\tt outputmode chart}: + +\begin{lstlisting} +<outputsMode name="chart" description="Chartrepresentation of the Values" mime-type="image/png"> + <parameters> + <inputvalue name="width" type="Integer" value="600"/> + <inputvalue name="height" type="Integer" value="400"/> + <inputvalue name="points" type="Boolean" value="false"/> + </parameters> + <exportModes> + <export name="img" description="IMG-Export der Daten" mime-type="image/png" /> + <export name="pdf" description="PDF-Export der Daten" mime-type="application/pdf" /> + <export name="svg" description="SVG-Export der Daten" mime-type="image/svg+xml" /> + </exportModes> +</outputsMode> +\end{lstlisting} + + +\begin{itemize} + \item {\tt name}: The name of the mode. This must not be changed because it + is used by the program. + \item {\tt description}: a short description of this outputmode. + \item {\tt parameters}: one ore more parameters which will be shown in the + GUI e.g. for changing the size of an chart. + \item {\tt exportModes} : one or more formats which can be served. +\end{itemize} + + +\section{Adding a new FIS} +In this section it will be explained which steps have to be done to integrate a +new FIS into the {\tt artifact-server}. This will be done using the configuration for +a FIS which uses data from the table {\tt MEDIAN.TIMESERIES} section of +the datawarehouse (e.g. MARNET or STAUN). + +For publishing the changes to the {\tt artifact-server}, it needs to be +restarted. + +\subsection{Adding a new Artifact-factory} +First step is to add a new {\tt artifact-factory} to the configuration conf/conf.xml +To do this you have to add a new XML-fragment into the section +/factories/artifact-factories which look like that: + +\begin{lstlisting} +<artifact-factory name='fis_NEWFISNAME' + description='Factory to create an artifact to be used with the FIS NEWFISNAME' + ttl='3600000' + artifact='de.intevation.artifactdatabase.ProxyArtifact'> + de.intevation.gnv.artifacts.GNVProductArtifactFactory +</artifact-factory> +\end{lstlisting} + +In this XML-fragment you only have to replace the placeholder {\tt NEWFISNAME} +with a unique short name for the new FIS. + +\paragraph*{Example} +This example shows how to add a FIS and illustrates the effect on the +artifact-server's output. + +First , the following {\tt artifact-factory} has to be added into the file +{\tt conf/conf.xml} in section {\tt /artifact-database/artifact-factories} +adding a new FIS called {\tt justanewfis} to the server: + +\begin{lstlisting} +<artifact-factory name='fis_justanewfis' + description='Factory to create an artifact to be used with the FIS NEWFISNAME' + ttl='3600000' + artifact='de.intevation.artifactdatabase.ProxyArtifact'> + de.intevation.gnv.artifacts.GNVProductArtifactFactory +</artifact-factory> +\end{lstlisting} + +Restart the {\tt artifact-database} executing: + +\begin{lstlisting} +/etc/init.d/artifact-server restart +\end{lstlisting} + +Checking if the new FIS is served by the REST-Server +calling the following command: + +\begin{lstlisting} +curl http://localhost:8181/factories | xmllint --format - | grep fis_justanewfis +\end{lstlisting} + +If the FIS was added, the new {\tt artifact-factory} will be found in the generated +XML-output. Otherwise no XML-output will be shown. + +\subsection{Adding a new Artifact for Artifact-factory} +The next step is to define the artifact itself. +For this it is necessary to add an XML-fragment into the section +{\tt /artifacts} of the main configurationfile {\tt /conf/conf.xml}. + +\begin{lstlisting} +<artifact name='fis_NEWFISNAME'> + <products> + ... + </products> +</artifact> +\end{lstlisting} + +In this XML-fragment it is also required to replace the placeholder {\tt NEWFISNAME} +with the name which was used to configure the {\tt artifact-factory}. + +Now the {\tt artifact-server} can handle an additional FIS without any products yet. + +To prevent needless configuration-work, it is a useful way to clone an +existing artifact handling the same kind of work. + + +\paragraph*{Example} +Now will an artifact to the FIS {\tt fis\_justanewfis}, will be configured. + +The following XML-fragment has to be added to the file +{\tt conf/conf.xml} in section {\tt /artifact-database/artifacts}: + +\begin{lstlisting} +<artifact name='fis_justanewfis'> + <products> + </products> +</artifact> +\end{lstlisting} + +Restart the artifact-server + +\begin{lstlisting} +/etc/init.d/artifact-server restart +\end{lstlisting} + +Now it should be possible to choose the artifact. + +The listbox in the GUI would be empty. +\begin{lstlisting} +curl -d "@sample-documents/create-artifact.xml" http://localhost:8181/create | xmllint --format - +\end{lstlisting} + +\subsection{Adding/Removing Products to the Specific Artifact} +Next step is, to configure the different products which the FIS should +be able to provide. To do this it is necessary to copy the +XML-fragments of the products into the XML-element {\tt products} of the +previously integrated artifact. + +\begin{lstlisting} +<artifact name='fis_NEWFISNAME'> + <products> + <product name= "timeSeries"> + <artifact-factory name="timeSeries" + description="Artifactfactory for instantiating the artifact for TimeSeries on TimeSeriesPoints" + ttl="300000" + artifact="de.intevation.gnv.timeseries.TimeSeriesArtifact"> + de.intevation.gnv.artifacts.GNVArtifactFactory + </artifact-factory> + <parameters> + <parameter name="sourceid" + value="VALUEOFSOURCEID"/> + <parameter name="fisname" + value="fis\_NEWFISNAME"/> + </parameters> + </product> + <product name= "verticalProfile"> + <artifact-factory name="verticalProfile" + description="Artifactfactory for instantiating the artifact for Verticalprofiles on TimeSeriesPoints" + ttl="300000" + artifact="de.intevation.gnv.profile.vertical.VerticalProfileArtifact"> + de.intevation.gnv.artifacts.GNVArtifactFactory + </artifact-factory> + <parameters> + <parameter name="sourceid" + value="VALUEOFSOURCEID"/> + <parameter name="fisname" + value="fis\_NEWFISNAME"/> + </parameters> + </product> + </products> +</artifact> +\end{lstlisting} + +In this XML-fragment the placeholders {\tt NEWFISNAME} have to be +replaced. The source-id \texttt{VALUEOFSOURCEID} with the value for the new +FIS as defined in the table {\tt MEDIAN.SOURCEINFO} needs to be added. + +\paragraph*{Example} +Adding a product to the new FIS, choosing sourceid of an existing FIS +(e.g 4 $\rightarrow$ Marnet). + +Add the following XML-fragment to the new artifact. +\begin{lstlisting} +<product name= "timeSeries"> + <artifact-factory name="timeSeries" + description="Artifactfactory for instantiating the artifact for TimeSeries on TimeSeriesPoints" + ttl="300000" + artifact="de.intevation.gnv.timeseries.TimeSeriesArtifact"> + de.intevation.gnv.artifacts.GNVArtifactFactory + </artifact-factory> + <parameters> + <parameter name="sourceid" + value="4"/> + <parameter name="fisname" + value="fis\_justanewfis"/> + </parameters> +</product> +\end{lstlisting} + +Restart the artifact-server + +\begin{lstlisting} +/etc/init.d/artifact-server restart +\end{lstlisting} + +If +\begin{lstlisting} +curl -d "@sample-documents/create-artifact.xml" http://localhost:8181/create | xmllint --format - +\end{lstlisting} + +is called, the product {\tt timeSeries} should be available for the FIS {\tt justanewfis}. + +Now, it should be able to choose the product. +This product including the definied outputformats should be available in +the GUI. + +\subsection{Adding a new Product} +To add a new product to the system it is necessary that the required +artifact representation is implemented in the {\tt sourcecode}. +Without doing that step it is not possible to create a new product. + +All products are configured in separated files that will be included into the +main configuration using Xlink-references. + +First step is to create a new file in the folder {\tt products} and in the +sub-folder where the product belongs to ({\tt timeseries,verticalprofile, +horizontalprofile,horizontal\-crosssection,layer,...}) + +Then the new product can be referenced in the file {\tt /conf/conf.xml} in the +section {\tt/artifacts} using the following XML-fragment. + +\begin{lstlisting} +<artifact name="timeSeries" + xmlns:xlink="http://www.w3.org/1999/xlink" + xlink:href="${artifacts.config.dir}/products/PATHTOFILE" /> +\end{lstlisting} + +The placeholder {\tt PATHTOFILE} has to be replaced with the relative path and +the name of the file starting in the folder products. + +Then it is possible to add the product to a FIS as explained in the next section. +Please note that the defined name of the {\tt artifact-factory} has to match to the +name of the added products which is also designed as an artifact. + +\subsection{Adding an additional Product to a FIS} +To add an additional product to a FIS the XML-fragment which +represents the product to the artifact-configuration of the FIS in section +{\tt /artifacts/artifact/products} needs to be added. + +\begin{lstlisting} + <product name= "timeSeries"> + <artifact-factory name="timeSeries" + description="Artifactfactory for instantiating the artifact for TimeSeries on TimeSeriesPoints" + ttl="300000" + artifact="de.intevation.gnv.timeseries.TimeSeriesArtifact"> + de.intevation.gnv.artifacts.GNVArtifactFactory + </artifact-factory> + <parameters> + <parameter name="sourceid" + value="VALUEOFSOURCEID"/> + <parameter name="fisname" + value="fis\_NEWFISNAME"/> + </parameters> + </product> + \end{lstlisting} + +Please note that the placeholders have to be explained above.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/config-manual/overview.tex Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,88 @@ +\section{Overview of the GNV-Server} + +\subsection{Tasks and Components of the GNV-Server} + +The GNV-server is a middleware-component and consists of two functional +components: +\begin{enumerate} + \item artifact-server -- providing access to the database and + managing the users' workflow to the GNV-WebClient + \item mapserver -- providing user-generated maps. Mapserver is + controlled by the artifact-server. +\end{enumerate} + +%% TODO includegraphics + +The central concept of the artifact-server is to model the workflow of +users by the following steps: +\begin{enumerate} + \item selection of data (parameterization) + \item processing of result sets (interpolation, clipping) + \item exporting processed result sets (charts, statistics, raw data) +\end{enumerate} + +Within the artifact-server, these steps are supported by the following +core components for the entire GNV-system. The naming refers to +components used in the configuration. In order to simplify a first +orientation in the configuration and this manual, the XML-tags/words in +the central configuration file at {\tt conf/conf.xml} are used. They are +marked in {\tt typewriter} style: + +\begin{itemize} + \item {\tt geo-backend} -- access to the database backend + \item {\tt rest-server} -- providing a RESTful-Interface with a + XML-based protocol to serve the expert information systems (FIS) with + their products to different clients, e.g. GNV WebClient + \item {\tt factories/*}, {\tt artifacts/*} -- managing the steps and + operations of users' workflow for all expert information + systems (FIS) + \item {\tt gnv} -- processing pipeline providing results of the + products with the following subtasks: + \begin{itemize} + \item processing of result sets like interpolation, clipping + \item visualization of charts and maps + \item exporting selected raw data + \end{itemize} + \item {\tt mapserver} -- managing the Web Map Service for creating maps + dynamically +\end{itemize} + +Each component has a specific configuration for its functionality and +subsystems. + +\subsection{Internal Structure of the GNV-Server} + +\subsubsection{Internal Structure of Artifact-Server} +Per default the artifact-server can be found at {\tt +/opt/artifact-server}\footnote{Information about installation and +operation can be found in the admin-manual.}. The internal directory +structure of the artifact-server looks like this: + +%% tree /opt -d -L1 +\begin{lstlisting} +artifact-server +|-- artifactdb # storing artifacts in a database +|-- bin # binaries including all libraries +|-- cache # storage for cached data (e.g. result sets) +|-- conf # central configuration of artifact-server +|-- install # files for system integration (just for setup) +|-- mapfiles # generated configurations for map-server (done by + # map-generator) +`-- shapefiles # raw data for map generating (done by map-generator) +\end{lstlisting} + + +\subsubsection{Internal Structure of Mapserver} +Per default the mapserver can be found at {\tt +/usr/lib/cgi-bin}.\footnote{Information about installation and +operation can be found in the admin-manual.} The internal structure of +the mapserver looks like this: + +%% tree /usr/lib/ +\begin{lstlisting} +cgi-bin/ +|-- gnv-wms # wrapper pointing to the configuration (default: + # artifact-server/mapfiles/mapfile.map), invoked by + # webserver +`-- mapserv-gp # binary of mapserver, invoked by wrapper +\end{lstlisting}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/config-manual/sample-documents/create-artifact.xml Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,1 @@ +<?xml version="1.0" encoding="UTF-8"?><art:action xmlns:art="http://www.intevation.de/2009/artifacts"><art:type name="create"/><art:factory name="fis_justanewfis"/></art:action>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/config-manual/title.tex Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,52 @@ +%----------------------------------- +% TITLE PAGE + +% FIXME BSH Logo + +\begin{figure}[ht] + \begin{minipage}[b]{0.5\linewidth} + \centering + \includegraphics[scale=0.75]{figures/bsh_logo} \\ + {\tt http://www.bsh.de/en}\\[4.0cm] + \end{minipage} + \begin{minipage}[b]{0.5\linewidth} + \centering + \includegraphics[width=0.75\textwidth]{figures/intevation-logo} + {\tt http://intevation.de/geospatial}\\[2.0cm] + \end{minipage} +\end{figure} + + \vspace{4cm} + + { + \sffamily\large + Documentation Generic Viewer + + \vspace{1cm} + { + \bfseries\huge + Configuration and Reference + } + + \vspace{1cm} + Version \documentversion~-~Date: \documentdate + +% Revision \documentrevision + } + + \vspace{4cm} + + \thispagestyle{empty} + + \vfill + + \begin{flushleft} + Authors:\\ + Tim Englich$<$tim.englich@intevation.de$>$\\ + Hans Plum $<$hans.plum@intevation.de$>$\\ + {\bf Intevation GmbH},\\ + Neuer Graben 17, 49074 Osnabrück, Germany\\ + Tel: ++49 541 33 50 83 - 0 \\ + http://www.intevation.net/geospatial + + \end{flushleft}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/licenses/overview.txt Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,225 @@ +=============================================================================== +Primärabhängigkeiten: + * junit-3.8.1.jar (gnv + gnv-artifacts + geo-backend) + - Common Public License Version 1.0 + - http://www.opensource.org/licenses/cpl1.0.txt + + * log4j-1.2.14.jar (gnv + gnv-artifacts + geo-backend) + - Apache License Version 2.0 + + * jfreechart-1.0.13.jar (gnv-artifacts) + - LGPL v2.1 or later + + * batik-dom-1.7.jar (gnv-artifacts) + - Apache License Version 2.0 + + * batik-svggen-1.7.jar (gnv-artifacts) + - Apache License Version 2.0 + + * velocity-1.6.1.jar (gnv-artifacts) + - Apache License 2.0 + + * itext-2.1.7.jar (gnv-artifacts) + - Mozilla Public License 1.1 + + * opencsv-2.0.jar (gnv-artifacts) + - Apache License Version 2.0 + + * commons-math-2.0.jar (gnv-artifacts + geo-backend) + - Apache License Version 2.0) + + * ehcache-1.6.2.jar (gnv-artifacts + geo-backend) + - Apache License Version 2.0 + + * commons-validator-1.3.1.jar (gnv + gnv-artifacts) + - Apache License Version 2.0 + + * oro-2.0.8.jar (gnv-artifacts) + - Apache License 1.1 + + * gt-epsg-wkt-2.5.8.jar (gnv-artifacts) + - LGPL v2 or later + + * gt-shapefile-2.5.8.jar (gnv-artifact) + - LGPL v2 or later + + * jts-1.9.jar (gnv-artifacts + geo-backend) + - LGPL v2.1 or later) + + * trove-2.1.1.jar (gnv-artifacts) + - LGPL v2.1 or later + + * commons-fileupload-1.2.1.jar (gnv) + - Apache License Version 2.0 + + * commons-pool-1.3.jar (artifact-database + gnv-artifacts + geo-backend) + - Apache License Version 2.0) + + * org.restlet-2.0-SNAPSHOT.jar (artifact-database + gnv + gnv-artifacts) + - LGPL V3.0 or LGPL V2.1 or CDDL V1.0 or EPL V1.0) + + * org.restlet.ext.xml-2.0-SNAPSHOT.jar (artifact-database + gnv + gnv-artifacts) + - LGPL V3.0 or LGPL V2.1 or CDDL V1.0 or EPL V1.0 + + * servlet-api-5.5.15.jar (gnv) + - Apache License 2.0 + + * struts-1.2.9.jar (gnv) + - Apache License 2.0 + + * struts-el-1.2.9.jar (gnv) + - Apache License 2.0 + + * h2-1.1.117.jar (artifact-database + gnv-artifacts) + - Dual licensed: + - MPL 1.1 + - http://www.mozilla.org/MPL + - EPL 1.0 + - http://opensource.org/licenses/eclipse-1.0.php + + * postgresql-8.3-603.jdbc4.jar (artifact-database + gnv-artifacts) + - BSD License + + * commons-codec-1.4.jar (artifact-database + gnv-artifacts) + - Apache License Version 2.0 + + * jul-to-slf4j-1.5.11.jar (artifact-database + gnv-artifacts) + - MIT License + + * slf4j-log4j12-1.5.11.jar (artifact-database + gnv-artifacts) + - MIT License + +=============================================================================== +Sekundärabhängigkeiten: + * antlr-2.7.2.jar (gnv) + - ANTLR 3 License + - http://www.antlr.org/license.html + + * batik-awt-util-1.7.jar (gnv-artifacts) + - Apache License Version 2.0 + + * batik-css-1.7.jar (gnv-artifacts) + - Apache License Version 2.0 + + * batik-ext-1.7.jar (gnv-artifacts) + - Apache License Version 2.0 + + * batik-util-1.7.jar (gnv-artifacts) + - Apache License Version 2.0 + + * batik-xml-1.7.jar (gnv-artifacts) + - Apache License Version 2.0 + + * bcmail-jdk14-1.38.jar (gnv-artifacts) + - Bouncy Castle Licence (Adaption der Apache License) + - http://www.bouncycastle.org/licence.html + + * bcprov-jdk14-1.38.jar (gnv-artifacts) + - Bouncy Castle Licence (Adaption der Apache License) + - http://www.bouncycastle.org/licence.html + + * bctsp-jdk14-1.38.jar (gnv-artifacts) + - Bouncy Castle Licence (Adaption der Apache License) + - http://www.bouncycastle.org/licence.html + + * commons-beanutils-1.7.0.jar (gnv + gnv-artifacts) + - Apache License Version 2.0 + + * commons-collections-3.2.1.jar (gnv + gnv-artifacts) + - Apache License Version 2.0 + + * commons-dbcp-1.2.2.jar (artifact-database + gnv-artifacts) + - Apache License Version 2.0 + + * commons-digester-1.6.jar (gnv + gnv-artifacts) + - Apache License Version 2.0 + + * commons-lang-2.4.jar (gnv-artifacts) + - Apache License Version 2.0 + + * commons-logging-1.0.4.jar (gnv + gnv-artifacts) + - Apache License Version 2.0 + + * geoapi-2.2.0.jar (gnv-artifacts) + - eine OGC License + - http://www.opengeospatial.org/ogc/legal + + * gt-api-2.5.8.jar (gnv-artifacts) + - LGPL v2 or later + + * gt-main-2.5.8.jar (gnv-artifacts) + - LGPL v2 or later + + * gt-metadata-2.5.8.jar (gnv-artifacts) + - LGPL v2 or later + + * gt-referencing-2.5.8.jar (gnv-artifacts) + - LGPL v2 or later + + * jcommon-1.0.13.jar (gnv-artifacts) + - LGPL v2.1 or later + + * jdom-1.0.jar (gnv-artifacts) + - eigene Lizenz + - (siehe ./licenses/JDOM-LICENSE.txt) + + * jsr-275-1.0-beta-2.jar (gnv-artifacts) + - BSD License + - http://jscience.org/doc/license.txt + + * jstl-1.0.6.jar (gnv) + - Apache License 2.0 + + * oro-2.0.7.jar (gnv) + - Apache License 1.1 + + * osgi_R4_core-1.0.jar (artifact-database + gnv + gnv-artifacts) + - EPL 1.0 + + * slf4j-api-1.5.11.jar (artifact-database + gnv-artifacts) + - MIT License + + * standard-1.0.6.jar (gnv) + - Apache License 2.0 + + * velocity-1.4.jar (gnv-artifacts) + - Apache License 2.0 + + * velocity-dep-1.4.jar (gnv-artifacts) + - Apache License 2.0 + + * xalan-2.6.0.jar (gnv-artifacts) + - Apache License 2.0 + + * xalan-2.5.1.jar (gnv) + - Apache License 2.0 + + * xml-apis-1.0.b2.jar (gnv) + - Apache License 2.0 + - W3C License (siehe ./licenses/XML-APIS-DOM-LICENSE.txt) + + * xml-apis-1.3.04.jar (gnv-artifacts) + - Apache License 2.0 and W3C License + - (siehe ./licenses/XML-APIS-DOM-LICENSE.txt) + + * xml-apis-ext-1.3.04.jar (gnv-artifacts) + - Apache License 2.0 and W3C License + - (siehe ./licenses/XML-APIS-DOM-LICENSE.txt) + +=============================================================================== +Proprietäre Bibliotheken: + * jpe_sdkres-9.3.jar (gnv-artifacts + geo-backend) + + * jsde_sdk-9.3.jar (gnv-artifacts + geo-backend) + + * jpe_sdk-9.3.jar (gnv-artifacts + geo-backend) + +=============================================================================== +Bibliotheken mit unklarer Lizenz: + * icu4j-3.2.jar (gnv-artifacts + geo-backend) + - ICU License + - http://source.icu-project.org/repos/icu/icu/trunk/license.html + + * vecmath-1.3.1.jar (gnv-artifacts) + - JRL + - (siehe ./licenses/JRL.txt)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/test-guideline/README Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,5 @@ +This directory contains a test guideline for the GNV-system. +So fare, it is just a guideline and not a entire test protocol. +Therefore, static test data sets are needed. + +For an entry goto "gnv-test-guideline.txt"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/test-guideline/gnv-framework.txt Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,9 @@ +GNV Framework + +- Behaviour + - when Server is down: Parameter, Loading of an artifact + - when a process hangs + - when a user switches the language + +- Different instances in the same browser +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/test-guideline/gnv-horizontal-cross-section.txt Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,57 @@ +6. Horizontal cross-section + +6.1 Horizontal cross-section@Modeldata (ArcMarineBSH MeshFeature) + +# General Szenario +- No multiple selections available for one of the list of parameters + +a. fill paramterization + +Data set: Modeldata +Product: Horizontal cross-section + +Area: No Selection + +Mesh: Tagesmittel Nord- und Ostseemodell + +Area (WKT) +POLYGON ((-1.5763 58.3616, 0.7526 53.8428, 4.2686 53.1972, 7.9217 54.1441, 7.6020 56.2959, 11.5747 57.2857, 10.4788 58.4908, 4.2686 58.8996, 0.0219 58.5768, -1.5763 58.3616)) + +Layer and Depth range [m] +Layer + +Parameter +Temperatur [degC] + +Year +2010 + +Measurement date +2010.04.26 12:00:00 + +b. draw map + + +# Reactions: Elements to check +# General (static) +metainformation + - URL + - Name + - TTL +shapes + - color palette +curves/isolines + - range + - colors + - with points +legend + - entries + - labeling + - title + + + +c. save as project +e. reload project +f. change WMS options +k. export as raw data (Shapefile)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/test-guideline/gnv-horizontales-schnittprofil.txt Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,43 @@ +4. Horizontales Schnittprofil + +4.1 Horizontales Schnittprofil@Modeldata (ArcMarineBSH MeshFeatures) + +# Scenario + +Parameter: 1 + +Depth: 1 + +a. fill paramterization + +Data set: Modeldata +Product: Horizontales Schnittprofil +Area: No Selection +Mesh: Tagesmittel Nord- und Ostseemodell + +Line (WKT) +LINESTRING (0.4911 56.2489, 10.4464 58.1608, 12.2321 56.4127, 13.1250 54.8832, 15.4018 54.5008, 19.6875 56.4127, 20.6250 59.0349, 28.1250 60.2640) + +Parameter +Temperatur [degC] + +Layer and Depth range [m] +Layer 1: 0 - 8 + +Year +2010 + +Measurement date +2010.04.26 12:00:00 + +b. draw diagram +f. change diagram options +g. export diagram as file (PNG, PDF, SVG) +h. calculate statistics +i. draw histogram +j. change histogram options +k. export as raw data (CSV, ODV, Shapefile) + + +Notices: +- Check ODV with several parameters and depths
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/test-guideline/gnv-horizontalprofile.txt Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,158 @@ +3. Horizontalprofile + +3.1 Horizontalprofile@Modeldata (ArcMarineBSH MeshFeatures) + +# General Data Range +Sample: +Modeldata +Tagesmittel Nord- und Ostseemodell +# for gap detection +<- Janckes Test +# One arbitary point of time +2010.04.25 12:00:00 + +# Scenario for a parameters that can be used out of a list: +# Vary one parameter of each testcase +Depth: 1 Layer + 0-8 + +Depth: 2 Layers + 0-8 + depthest layer (with data?) + + +a. fill parameterization +# ~ Depth +# Aim: One depth as status for 2 layers + + + +b. draw diagram +# Reactions: Elements to check +# General (static) +y-axis + - range + - labeling + - units +x-axis + - range + - labeling + - units +helperlines + - direction +curves + - colors + - with points +legend + - entries + - labeling + +# Dynamic part +titel + - content +y-axis + - rang + - labeling + - units +x-axis + - range + - labeling + - units +legend + - entries + - labeling + +c. save as project +e. reload project +f. change diagram options +g. export diagram as file (PNG, PDF, SVG) +h. calculate statistics +i. draw histogram +j. change histogram options +k. export as raw data (CSV, ODV, Shapefile) + + +# ~ Number of Parameters +a. fill paramterization + +Parameter: + 1 Parameter + +Parameter: + 2 Parameters with different units + + +# Reactions: Elements to check +# General (static) + +nothing so fare + + +# Dynamic part +titel + - content +y-axis + - rang + - labeling + - units +x-axis + - range + - labeling + - units +legend + - entries + - labeling +helperline + - directions +curves + - colors + +b. draw diagram +g. export diagram as file (PNG, PDF, SVG) +h. calculate statistics +i. draw histogram +j. change histogram options +k. export as raw data (CSV, ODV, Shapefile) + + + +a. fill paramterization + +Axis: + East-West + +Axis: + North-South + +b. draw diagram + +# Dynamic part +title + - content - Does it have to change? + +k. export as raw data (CSV, ODV, Shapefile) + + +3.2. Horitontalprofile@Thermosalinograph (ArcMarineBSH Measurements) + +a. fill paramterization + +Ship: FS Gauss +Cruise: FS Gauss 412 TSG +Track: 28.01.2004 06:33 - 03.02.2004 15:42 - FS Gauss 412 TSG +Survey Info: 28.01.2004 06:33 - 03.02.2004 15:42 - FS Gauss 412 TSG + +# ~ Parameters + +Parameter: + 1 (Salzgehalt) + +Parameters: + 2 (Salzgehalt, Temperatur) + +# ~ Depth +# so fare just one deepth for Thermosalinograph + + +b. draw diagram +k. export as raw data (CSV, ODV, Shapefile)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/test-guideline/gnv-layer.txt Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,26 @@ +7. User-generated Layers from object-oriented data models + +7.1 Layers@NAUTHIS (ArcS57) + + + +FIS: NAUTHIS +Product: Layer + + +a. fill paramterization + +# Aim: Select relevant data within the selected area +# Scenarios: +# ~ Area +# ~ Subtype + +Area: No selection +Area: A clipping polygon + +Subtype: Using one with a join + +b. draw a map +c. save as project +e. reload project +k. export as raw data (Shapefile)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/test-guideline/gnv-test-guideline.txt Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,85 @@ +Guideline for testing the GNV-System + +This guideline can be used for testing the entire GNV-system based on +features of the specification. From the perspective of the database +schemas and procucts, there are 11 unique combinations. + +Testing matrix of products to database schemata: +Testing products on the following FIS should test all functionality in +the sense of different types of data models + + - TimeSeries: Marnet, Modeldata + - Verticalprofile: Marnet, Modeldata, CTD + - Horizontalprofile: Modeldata, Thermosalinograph + - ("Horizontales Schnittprofil"): Modeldata + - Vertical Cross-Section: Modeldata + - Horizontal Cross-Section: Modeldata + - Layer: NAUTHIS, CONTIS + + +Test procedures: +Environment for the client +Browser: Firefox 3.6.3 and Internet Explorer 8.0.6 +Resolution: 1024x768 +Language: English + +Environment for the server +Operating System: Debian GNU/Linux 5.0.x (Lenny) + +a. fill paramterization +b. draw diagram +c. save as project +e. reload project +f. change diagram options +g. export diagram as file (PNG, PDF, SVG) +h. calculate statistics +i. draw histogram +j. change histogram options +k. export as raw data (CSV, ODV, Shapefile) + +For each product, there is a guideline testing the product against the +different database schemata: + +- gnv-timerseries.txt +- gnv-verticalprofile.txt +- gnv-horizontalprofile.txt +- gnv-horizontales-schnittprofil.txt +- gnv-vertical-cross-section.txt +- gnv-horizontal-cross-section.txt +- gnv-layer.txt +- gnv-framework.txt + +Notes for the matrix: +- Relationship between Products and and different Datamodels + - ArcMarineBSH TimeSeries + - ArcMarineBSH Measurements + - ArcMarineBSH MeshFeatures + - ArcS57 + - CONTIS + + +- All products can be tested based on minimal amount of the following + FIS using different data models: + - Marnet (ArcMarineBSH TimeSeries): + - TimeSeries, + - Verticalprofile + + - Modeldata (ArcMarineBSH MeshFeatures): + - TimeSeries, + - Verticalprofile, + - Horizontalprofile, + - ("Horizontales Schnittprofil"), + - Vertical Cross-Section, + - Horizontal Cross-Section + + - Thermosalinograph (ArcMarineBSH Measurements): + - Horizontalprofile + + - CTD (ArcMarineBSH Measurements): + - Verticalprofile + + - NAUTHIS (ArcS57): + - Layer + + - CONTIS (CONTIS): + - Layer
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/test-guideline/gnv-timerseries.txt Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,182 @@ +1. Timeseries +1.1 Timeseries on Marnet (ArcMarineBSH TimeSeries) + +# General Data Range +Sample: +MARNET +FINO1 +Salzgehalt +# for gap detection +6m 25m (?) +# 1.5 years with change of year +2005.08.21 12:15:00 +2007.01.21 12:15:00 + +a. fill parameterization +# ~ Time +# Aim: Check for labeling of axis +# Aim: General check for all elements +Time: 1 Day + 2006.12.31 12:15:00 + 2007.01.01 12:15:00 + +Time: 1 Month + 2006.12.21 12:15:00 + 2007.01.21 12:15:00 + +Time: 1 Year + 2006.01.21 12:15:00 + 2007.01.21 12:15:00 + +Time: Max + +b. draw diagram +# Reactions: Elements to check +# General (static) +titel + - content +y-axis + - rang + - labeling + - units +x-axis + - range + - labeling + - units +helperlines + - direction +curves + - colors + - with points +legend + - entries + - labeling + +# Dynamic part +titel + - content +y-axis + - rang + - labeling + - units +x-axis + - range + - labeling + - units +legend + - entries + - labeling + +c. save as project +e. reload project +f. change diagram options +g. export diagram as file (PNG, PDF, SVG) +h. calculate statistics +i. draw histogram +j. change histogram options +k. export as raw data (CSV, ODV) + +a. fill parameterization +# ~Depth +# Aim: Check for labeling of legend +# Aim: Check for different curves with same axis +Time: 1 Month + 2006.12.21 12:15:00 + 2007.01.21 12:15:00 + +Depth: 1 + +Depth: 2 + +(Depth: 3) + +b. draw diagram +# Reactions: Elements to check +# Dynamic part +y-axis + - rang + - labeling + - units +curves + - colors + - with points +legend + - entries + - labeling + +h. calculate statistics +i. draw histogram +k. export as raw data (CSV, ODV) + + +a. fill parameterization +# ~ Parameter: 1 and more +# Aim: Check for axis with different units and ranges +Time: 1 Year + 2006.01.21 12:15:00 + 2007.01.21 12:15:00 + +Parameters: 2 parameters with same unit but different name: +Temperatur [degC] and Lufttemperatur [degC] + +Parameters: 4 different parameters (to get 2 axis at each side): +Temperatur [degC], Lufttemperatur [degC], Salzgehalt [] and Luftdruck[hPa] + +b. draw diagram +# Reactions: Elements to check +# Dynamic part +y-axis + - amount of axis + - range + - units +x-axis + - range +helperlines + - direction: 1 (without horizontal lines) +curves + - colors + +k. export as raw data (CSV, ODV) + + +a. fill parameterization +# ~ Area +# Aim: Check for Selection of Stations: One and Many +# Fehler in Abb 3.19: Verbindung von Line zu einem Punkt? Soll dies ein +Korridor sein? + +Area: Point (with Buffer) + +[Line: Line with Buffer] + +Area: Polygon + +# Reactions: List of Selections or direct + +# Dynamic part +Station: + - One result + - List of Results + +c. save as project +e. reload project + + + + +1.2 Timeseries on Modeldata (ArcMarineBSH MeshFeatures) + +# Task: What's the difference between TimeSeriesPoint and +MeshPoint/-Feature? + +? Wenn die Daten als Key-Value angeliefert werden, sollten die Code-Pfade ab +da gleich sein. Richtig? + +Sample: +Modeldata +Tagesmittel Nord- und Ostseemodell +Layer 0-8 +Temperatur +youngest date + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/test-guideline/gnv-vertical-cross-section.txt Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,46 @@ +5. Vertical Cross-Section Profile + +5.1 Vertical Cross-Section Profile@Modeldata (ArcMarineBSH MeshFeatures) + +a. fill paramterization + +# just one Tupel is allowed +# no list of any parameter + +Data set: Modeldata +Product: Vertical cross-section +Area: No Selection +Mesh: Tagesmittel Nord- und Ostseemodell +Line (WKT) +LINESTRING (0.4911 56.2489, 10.4464 58.1608, 12.2321 56.4127, 13.1250 54.8832, 15.4018 54.5008, 19.6875 56.4127, 20.6250 59.0349, 28.1250 60.2640) +Parameter +Salzgehalt [pSal] + +Measurement date +2010.04.26 12:00:00 + +# Reactions: Elements to check +# General (static) +titel + - content +y-axis + - rang + - labeling + - units +x-axis + - range + - labeling + - units +curves/isolines + - colors + - with points +legend + - entries + - labeling + +b. draw diagram + +f. change diagram options +g. export diagram as file (PNG, PDF, SVG) +k. export as raw data (ODV) +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/test-guideline/gnv-verticalprofile.txt Fri Sep 28 12:14:02 2012 +0200 @@ -0,0 +1,240 @@ +2. Verticalprofile: + +2.1 Verticalprofile@MARNET (ArcMarineBSH TimeSeriesPoint) + +# General Data Range +Sample: +MARNET +FINO1 +Salzgehalt +# for gap detection +??? - c.f. specification +# Just one arbitrary point of time +2007.01.21 12:15:00 + +a. fill parameterization +# ~ Range of Depth +# Aim: Check for drawing of curve +# Aim: General check for all elements + +# General Case +Depth: End-Start= Max + +# Clipping one Point of Measurement +Depth: End-Start= Max-1 + +# None Range +Depth: End=Start + +# Out of Range +Depth: End-Start<0 + +b. draw diagram +# Reactions: Elements to check +# General (static) +titel + - content +y-axis + - rang + - labeling + - units +x-axis + - range + - labeling + - units +helperlines + - direction +curves + - colors + - with points +legend + - entries + - labeling + +# Dynamic part +titel + - content +y-axis + - rang + - labeling + - units +x-axis + - range + - labeling + - units +legend + - entries + - labeling + +c. save as project +e. reload project +f. change diagram options +g. export diagram as file (PNG, PDF, SVG) +h. calculate statistics +i. draw histogram +j. change histogram options +k. export as raw data (CSV, ODV) + + +a. fill parameterization +# ~Depth +# Aim: Check for labeling of legend +# Aim: Check for different curves with same axis +Time: 1 Month + 2006.12.21 12:15:00 + 2007.01.21 12:15:00 + +Number of Depth: 1 + +Number of Depth: 2 + +(Number of Depth: 3) + +b. draw diagram +# Reactions: Elements to check +# Dynamic part +y-axis + - rang + - labeling + - units +curves + - colors + - with points +legend + - entries + - labeling + + + +2.2 Verticalprofile@Modeldata (ArcMarineBSH MeshFeatures) + +# General Data Range +Sample: +Modeldata +56n30 6e20 +56°N 33,000' 06°O 15,000' + +# for gap detection +??? - specified? +# Just one arbitrary point of time +2010.03.13 12:00:00 + +a. fill parameterization +# ~ Range of Depth +# Aim: Check for drawing of curve +# Aim: General check for all elements + +# Further need for this cases? Difference between TimeSeriesPoint +and Modeldata? +# General Case +Depth: End-Start= Max + +# Clipping one Point of Measurement +Depth: End-Start= Max-1 + +# None Range +Depth: End=Start + +# Out of Range +Depth: End-Start<0 + +b. draw diagram +# Reactions: Elements to check +# General (static) +titel + - content +y-axis + - rang + - labeling + - units +x-axis + - range + - labeling + - units +helperlines + - number of directions (1|2) +curves + - colors + - with points +legend + - entries + - labeling + +# Dynamic part +titel + - content +y-axis + - rang + - labeling + - units +x-axis + - range + - labeling + - units +legend + - entries + - labeling + + +h. calculate statistics +i. draw histogram +k. export as raw data (CSV, ODV, Shapefile) + + +2.3 Verticalprofile@CTD (ArcMarineBSH Measurements) + + +# General Data Range +Sample: +CTD +Area: No Selection +Series: FS Alkor 292 +23.01.2007 10:17 - 54°N 1,960' 08°O 12,550' + + +# for gap detection +??? - specified? +# Just one arbitrary point of time +23.01.2007 10:17 + +a. fill parameterization +# ~ Range of Depth +# Aim: Check for drawing of curve +# Aim: General check for all elements + +# General Case +Depth: End-Start= Max + +b. draw diagram +# Reactions: Elements to check +# General (static) +titel + - content +helperlines + - number of directions (1|2) +curves + - colors + - with points +legend + - entries + - labeling + +# Dynamic part +titel + - content +y-axis + - rang + - labeling + - units +x-axis + - range + - labeling + - units +legend + - entries + - labeling + + +h. calculate statistics +i. draw histogram +k. export as raw data (CSV, ODV, Shapefile)