Merge branch 'master' into spirit-x3
This commit is contained in:
commit
7e52000c11
261 changed files with 3227 additions and 4830 deletions
|
@ -29,7 +29,7 @@ matrix:
|
|||
addons:
|
||||
apt:
|
||||
sources: [ 'ubuntu-toolchain-r-test']
|
||||
packages: [ 'libstdc++6', 'libstdc++-5-dev']
|
||||
packages: [ 'libstdc++-5-dev', 'xutils']
|
||||
- os: linux
|
||||
sudo: false
|
||||
compiler: ": clang-coverage"
|
||||
|
@ -37,7 +37,7 @@ matrix:
|
|||
addons:
|
||||
apt:
|
||||
sources: [ 'ubuntu-toolchain-r-test']
|
||||
packages: [ 'libstdc++6','libstdc++-5-dev' ]
|
||||
packages: ['libstdc++-5-dev', 'xutils' ]
|
||||
- os: osx
|
||||
compiler: ": clang-osx"
|
||||
# https://docs.travis-ci.com/user/languages/objective-c/#Supported-OS-X-iOS-SDK-versions
|
||||
|
|
65
CHANGELOG.md
65
CHANGELOG.md
|
@ -6,9 +6,40 @@ Developers: Please commit along with changes.
|
|||
|
||||
For a complete change history, see the git log.
|
||||
|
||||
## 3.0.12
|
||||
|
||||
Released: xx-xx-xx
|
||||
|
||||
(Packaged from xxxxxx)
|
||||
|
||||
#### Summary
|
||||
|
||||
- Ensured gdal.input is registered once (refs #3093 #3339 #3340)
|
||||
- Fixed `mapnik::util::is_clockwise` implementation to use coordinates relative to the origin and avoid numeric precision issues
|
||||
- `mapnik-index` is updated to fail on first error in input (csv)
|
||||
- Added `guard` to `get_object_severity` method (ref #3322)
|
||||
- Improved `hash` calculation for `mapnik::value` (ref #3406)
|
||||
- AGG - made cover `unsigned` to avoid left shift of negative values (ref #3406)
|
||||
- Fixed using `scale_factor` in `evaluate_transform(..)`
|
||||
- Fixed line spacing logic by applying `scale factor`
|
||||
- ~~Fixed `stringify_object/stringify_array` implementations by disabling white space skipping (ref #3419)~~
|
||||
- Added geojson unit test for property types/values
|
||||
- JSON - added support for object and array type in `json_value` and update `stringifier`
|
||||
- GDAL.input - fallback to using `overviews` if present (8e8482803bb435726534c3b686a56037b7d3e8ad)
|
||||
- TopoJSON.input - improved and simplified grammer/parser implementation (https://github.com/mapnik/mapnik/pull/3429)
|
||||
- GDAL.input - Added support for non-alpha mask band
|
||||
- TopoJSON.input - fixed order of ellements limitation (ref #3434)
|
||||
- Fixed stroke-width size not included in markers ellipse bounding box (ref #3445)
|
||||
- Implemented `char_array_buffer` and removed `boost::iostreams` dependency (2e8c0d36c2237f2815d8004c1b96bad909056eb9)
|
||||
- JSON.input - `extract_bounding_box_grammar` - make features optional (ref #3463)
|
||||
- Ensure input plugins return `empty_featureset` rather than `nullptr` (feature_ptr())
|
||||
- Added support for quantising small (less than 3 pixel) images (ref #3466)
|
||||
- Added support for natural logarithm function in expressions (ref #3475)
|
||||
- Improved logic determining if certain compiler features are available e.g `inheriting constructors` (MSVC)
|
||||
|
||||
## 3.0.11
|
||||
|
||||
Released:
|
||||
Released: April 1, 2016
|
||||
|
||||
(Packaged from 8d9dc27)
|
||||
|
||||
|
@ -19,7 +50,7 @@ Released:
|
|||
- [TWKB](https://github.com/TWKB/) support via https://github.com/mapnik/mapnik/pull/3356 (#3355)
|
||||
- Visual test runner can render SVG, PDF and Postscript with Cairo renderer (https://github.com/mapnik/mapnik/pull/3418)
|
||||
- Scale factor is now applied also to `text-line-spacing` and transforms (https://github.com/mapnik/mapnik/pull/3416)
|
||||
|
||||
|
||||
## 3.0.10
|
||||
|
||||
Released: February 25, 2016
|
||||
|
@ -544,8 +575,8 @@ Summary: The 2.2.0 release is primarily a performance and stability release. The
|
|||
|
||||
- Enabled default input plugin directory and fonts path to be set inherited from environment settings in
|
||||
python bindings to make it easier to run tests locally (#1594). New environment settings are:
|
||||
- MAPNIK_INPUT_PLUGINS_DIRECTORY
|
||||
- MAPNIK_FONT_DIRECTORY
|
||||
- MAPNIK_INPUT_PLUGINS_DIRECTORY
|
||||
- MAPNIK_FONT_DIRECTORY
|
||||
|
||||
- Added support for controlling rendering behavior of markers on multi-geometries `marker-multi-policy` (#1555,#1573)
|
||||
|
||||
|
@ -937,7 +968,7 @@ Released January, 19 2010
|
|||
|
||||
- Gdal Plugin: Added support for Gdal overviews, enabling fast loading of > 1GB rasters (#54)
|
||||
|
||||
* Use the gdaladdo utility to add overviews to existing GDAL datasets
|
||||
* Use the gdaladdo utility to add overviews to existing GDAL datasets
|
||||
|
||||
- PostGIS: Added an optional `geometry_table` parameter. The `geometry_table` used by Mapnik to look up
|
||||
metadata in the geometry_columns and calculate extents (when the `geometry_field` and `srid` parameters
|
||||
|
@ -962,23 +993,23 @@ Released January, 19 2010
|
|||
complex queries that may aggregate geometries to be kept fast by allowing proper placement of the bbox
|
||||
query to be used by indexes. (#415)
|
||||
|
||||
* Pass the bbox token inside a subquery like: !bbox!
|
||||
* Pass the bbox token inside a subquery like: !bbox!
|
||||
|
||||
* Valid Usages include:
|
||||
* Valid Usages include:
|
||||
|
||||
<Parameter name="table">
|
||||
(Select ST_Union(geom) as geom from table where ST_Intersects(geometry,!bbox!)) as map
|
||||
</Parameter>
|
||||
<Parameter name="table">
|
||||
(Select ST_Union(geom) as geom from table where ST_Intersects(geometry,!bbox!)) as map
|
||||
</Parameter>
|
||||
|
||||
<Parameter name="table">
|
||||
(Select * from table where geom && !bbox!) as map
|
||||
</Parameter>
|
||||
<Parameter name="table">
|
||||
(Select * from table where geom && !bbox!) as map
|
||||
</Parameter>
|
||||
|
||||
- PostGIS Plugin: Added `scale_denominator` substitution ability in sql query string (#415/#465)
|
||||
|
||||
* Pass the scale_denominator token inside a subquery like: !scale_denominator!
|
||||
* Pass the scale_denominator token inside a subquery like: !scale_denominator!
|
||||
|
||||
* e.g. (Select * from table where field_value > !scale_denominator!) as map
|
||||
* e.g. (Select * from table where field_value > !scale_denominator!) as map
|
||||
|
||||
- PostGIS Plugin: Added support for quoted table names (r1454) (#393)
|
||||
|
||||
|
@ -1010,14 +1041,14 @@ Released January, 19 2010
|
|||
- TextSymbolizer: Large set of new attributes: `text_transform`, `line_spacing`, `character_spacing`,
|
||||
`wrap_character`, `wrap_before`, `horizontal_alignment`, `justify_alignment`, and `opacity`.
|
||||
|
||||
* More details at changesets: r1254 and r1341
|
||||
* More details at changesets: r1254 and r1341
|
||||
|
||||
- SheildSymbolizer: Added special new attributes: `unlock_image`, `VERTEX` placement, `no_text` and many
|
||||
attributes previously only supported in the TextSymbolizer: `allow_overlap`, `vertical_alignment`,
|
||||
`horizontal_alignment`, `justify_alignment`, `wrap_width`, `wrap_character`, `wrap_before`, `text_transform`,
|
||||
`line_spacing`, `character_spacing`, and `opacity`.
|
||||
|
||||
* More details at changeset r1341
|
||||
* More details at changeset r1341
|
||||
|
||||
- XML: Added support for using CDATA with libxml2 parser (r1364)
|
||||
|
||||
|
|
29
bootstrap.sh
29
bootstrap.sh
|
@ -1,6 +1,7 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
#set -eu
|
||||
set -eu
|
||||
set -o pipefail
|
||||
|
||||
: '
|
||||
|
||||
|
@ -10,7 +11,7 @@ todo
|
|||
- shrink icu data
|
||||
'
|
||||
|
||||
MASON_VERSION="b709931"
|
||||
MASON_VERSION="7ed8931"
|
||||
|
||||
function setup_mason() {
|
||||
if [[ ! -d ./.mason ]]; then
|
||||
|
@ -33,7 +34,7 @@ function install() {
|
|||
if [[ ${3:-false} != false ]]; then
|
||||
LA_FILE=$(mason prefix $1 $2)/lib/$3.la
|
||||
if [[ -f ${LA_FILE} ]]; then
|
||||
perl -i -p -e 's:\Q$ENV{HOME}/build/mapbox/mason\E:$ENV{PWD}:g' ${LA_FILE}
|
||||
perl -i -p -e 's:\Q$ENV{HOME}/build/mapbox/mason\E:$ENV{PWD}:g' ${LA_FILE}
|
||||
else
|
||||
echo "$LA_FILE not found"
|
||||
fi
|
||||
|
@ -44,6 +45,7 @@ function install() {
|
|||
ICU_VERSION="55.1"
|
||||
|
||||
function install_mason_deps() {
|
||||
FAIL=0
|
||||
install ccache 3.2.4 &
|
||||
install jpeg_turbo 1.4.0 libjpeg &
|
||||
install libpng 1.6.20 libpng &
|
||||
|
@ -51,7 +53,6 @@ function install_mason_deps() {
|
|||
install libpq 9.4.1 &
|
||||
install sqlite 3.8.8.3 libsqlite3 &
|
||||
install expat 2.1.0 libexpat &
|
||||
wait
|
||||
install icu ${ICU_VERSION} &
|
||||
install proj 4.8.0 libproj &
|
||||
install pixman 0.32.6 libpixman-1 &
|
||||
|
@ -59,17 +60,26 @@ function install_mason_deps() {
|
|||
install protobuf 2.6.1 &
|
||||
# technically protobuf is not a mapnik core dep, but installing
|
||||
# here by default helps make mapnik-vector-tile builds easier
|
||||
wait
|
||||
install webp 0.4.2 libwebp &
|
||||
install gdal 1.11.2 libgdal &
|
||||
install boost 1.61.0 &
|
||||
install boost_libsystem 1.61.0 &
|
||||
install boost_libfilesystem 1.61.0 &
|
||||
install boost_libprogram_options 1.61.0 &
|
||||
install boost_libregex 1.61.0 &
|
||||
install boost_libregex_icu 1.61.0 &
|
||||
# technically boost thread and python are not a core dep, but installing
|
||||
# here by default helps make python-mapnik builds easier
|
||||
install boost_libthread 1.61.0 &
|
||||
install boost_libpython 1.61.0 &
|
||||
install freetype 2.6 libfreetype &
|
||||
install harfbuzz 0.9.41 libharfbuzz &
|
||||
wait
|
||||
for job in $(jobs -p)
|
||||
do
|
||||
wait $job || let "FAIL+=1"
|
||||
done
|
||||
if [[ "$FAIL" != "0" ]]; then
|
||||
exit ${FAIL}
|
||||
fi
|
||||
}
|
||||
|
||||
MASON_LINKED_ABS=$(pwd)/mason_packages/.link
|
||||
|
@ -140,3 +150,8 @@ function main() {
|
|||
}
|
||||
|
||||
main
|
||||
|
||||
# allow sourcing of script without
|
||||
# causing the terminal to bail on error
|
||||
set +eu
|
||||
set +o pipefail
|
||||
|
|
|
@ -21,13 +21,13 @@ dependencies:
|
|||
cache_directories:
|
||||
- "~/.ccache"
|
||||
- "~/.apt-cache"
|
||||
- "mason_packages"
|
||||
pre:
|
||||
# https://discuss.circleci.com/t/add-ability-to-cache-apt-get-programs/598/3
|
||||
- sudo rm -rf /var/cache/apt/archives && sudo ln -s ~/.apt-cache /var/cache/apt/archives && mkdir -p ~/.apt-cache/partial
|
||||
- sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
|
||||
override:
|
||||
- sudo apt-get update -y
|
||||
- sudo apt-get install -y libstdc++-5-dev xutils
|
||||
|
||||
database:
|
||||
pre:
|
||||
|
|
2
deps/mapbox/variant
vendored
2
deps/mapbox/variant
vendored
|
@ -1 +1 @@
|
|||
Subproject commit 388376ac9f0102feba2d2122873b08e15a66a879
|
||||
Subproject commit 8e2f6964157885f1655c1673d65f3aea9b90fe18
|
Binary file not shown.
|
@ -21,7 +21,7 @@ James Cloos
|
|||
James Crippen
|
||||
John Karp
|
||||
Keenan Pepper
|
||||
Lars Naesbye Christensen
|
||||
Lars Næsbye Christensen
|
||||
Lior Halphon
|
||||
MaEr
|
||||
Mashrab Kuvatov
|
||||
|
@ -33,6 +33,7 @@ Misu Moldovan
|
|||
Nguyen Thai Ngoc Duy
|
||||
Nicolas Mailhot
|
||||
Norayr Chilingarian
|
||||
Olleg Samoylov
|
||||
Ognyan Kulev
|
||||
Ondrej Koala Vacha
|
||||
Peter Cernak
|
||||
|
@ -53,4 +54,4 @@ Vasek Stodulka
|
|||
Wesley Transue
|
||||
Yoshiki Ohshima
|
||||
|
||||
$Id: AUTHORS 2593 2015-05-17 07:47:39Z ben_laenen $
|
||||
$Id$
|
|
@ -1,3 +1,3 @@
|
|||
See http://dejavu.sourceforge.net/wiki/index.php/Bugs
|
||||
|
||||
$Id: BUGS 80 2004-11-13 13:12:02Z src $
|
||||
$Id$
|
|
@ -1,6 +1,7 @@
|
|||
Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
|
||||
Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)
|
||||
|
||||
|
||||
Bitstream Vera Fonts Copyright
|
||||
------------------------------
|
||||
|
||||
|
@ -46,7 +47,7 @@ Foundation, and Bitstream Inc., shall not be used in advertising or
|
|||
otherwise to promote the sale, use or other dealings in this Font Software
|
||||
without prior written authorization from the Gnome Foundation or Bitstream
|
||||
Inc., respectively. For further information, contact: fonts at gnome dot
|
||||
org.
|
||||
org.
|
||||
|
||||
Arev Fonts Copyright
|
||||
------------------------------
|
||||
|
@ -96,4 +97,91 @@ dealings in this Font Software without prior written authorization
|
|||
from Tavmjong Bah. For further information, contact: tavmjong @ free
|
||||
. fr.
|
||||
|
||||
$Id: LICENSE 2133 2007-11-28 02:46:28Z lechimp $
|
||||
TeX Gyre DJV Math
|
||||
-----------------
|
||||
Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
|
||||
|
||||
Math extensions done by B. Jackowski, P. Strzelczyk and P. Pianowski
|
||||
(on behalf of TeX users groups) are in public domain.
|
||||
|
||||
Letters imported from Euler Fraktur from AMSfonts are (c) American
|
||||
Mathematical Society (see below).
|
||||
Bitstream Vera Fonts Copyright
|
||||
Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera
|
||||
is a trademark of Bitstream, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of the fonts accompanying this license (“Fonts”) and associated
|
||||
documentation
|
||||
files (the “Font Software”), to reproduce and distribute the Font Software,
|
||||
including without limitation the rights to use, copy, merge, publish,
|
||||
distribute,
|
||||
and/or sell copies of the Font Software, and to permit persons to whom
|
||||
the Font Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright and trademark notices and this permission notice
|
||||
shall be
|
||||
included in all copies of one or more of the Font Software typefaces.
|
||||
|
||||
The Font Software may be modified, altered, or added to, and in particular
|
||||
the designs of glyphs or characters in the Fonts may be modified and
|
||||
additional
|
||||
glyphs or characters may be added to the Fonts, only if the fonts are
|
||||
renamed
|
||||
to names not containing either the words “Bitstream” or the word “Vera”.
|
||||
|
||||
This License becomes null and void to the extent applicable to Fonts or
|
||||
Font Software
|
||||
that has been modified and is distributed under the “Bitstream Vera”
|
||||
names.
|
||||
|
||||
The Font Software may be sold as part of a larger software package but
|
||||
no copy
|
||||
of one or more of the Font Software typefaces may be sold by itself.
|
||||
|
||||
THE FONT SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
|
||||
TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
|
||||
FOUNDATION
|
||||
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL,
|
||||
SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN
|
||||
ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR
|
||||
INABILITY TO USE
|
||||
THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
Except as contained in this notice, the names of GNOME, the GNOME
|
||||
Foundation,
|
||||
and Bitstream Inc., shall not be used in advertising or otherwise to promote
|
||||
the sale, use or other dealings in this Font Software without prior written
|
||||
authorization from the GNOME Foundation or Bitstream Inc., respectively.
|
||||
For further information, contact: fonts at gnome dot org.
|
||||
|
||||
AMSFonts (v. 2.2) copyright
|
||||
|
||||
The PostScript Type 1 implementation of the AMSFonts produced by and
|
||||
previously distributed by Blue Sky Research and Y&Y, Inc. are now freely
|
||||
available for general use. This has been accomplished through the
|
||||
cooperation
|
||||
of a consortium of scientific publishers with Blue Sky Research and Y&Y.
|
||||
Members of this consortium include:
|
||||
|
||||
Elsevier Science IBM Corporation Society for Industrial and Applied
|
||||
Mathematics (SIAM) Springer-Verlag American Mathematical Society (AMS)
|
||||
|
||||
In order to assure the authenticity of these fonts, copyright will be
|
||||
held by
|
||||
the American Mathematical Society. This is not meant to restrict in any way
|
||||
the legitimate use of the fonts, such as (but not limited to) electronic
|
||||
distribution of documents containing these fonts, inclusion of these fonts
|
||||
into other public domain or commercial font collections or computer
|
||||
applications, use of the outline data to create derivative fonts and/or
|
||||
faces, etc. However, the AMS does require that the AMS copyright notice be
|
||||
removed from any derivative versions of the fonts which have been altered in
|
||||
any way. In addition, to ensure the fidelity of TeX documents using Computer
|
||||
Modern fonts, Professor Donald Knuth, creator of the Computer Modern faces,
|
||||
has requested that any alterations which yield different font metrics be
|
||||
given a different name.
|
||||
|
||||
$Id$
|
|
@ -1,3 +1,29 @@
|
|||
Changes from 2.35 to 2.36
|
||||
|
||||
* Fix issue with empty glyphs in condensed typefaces in the released source files.
|
||||
|
||||
Changes from 2.35 to 2.36
|
||||
|
||||
* Math: added DejaVu Math Tex Gyre by B. Jackowski, P. Strzelczyk and
|
||||
P. Pianowski (on behalf of TeX users groups)
|
||||
* Sans: removed dot of U+06BA in all forms
|
||||
* Sans: fixed position of three dots of U+06BD in init and medi forms (by
|
||||
Denis Jacquerye)
|
||||
* Sans: corrected direction of contours in U+05E7 (by Lior Halphon)
|
||||
* Sans: added U+1F643 (by Olleg Samoylov)
|
||||
* Serif: moved up U+0360-0361 (by Gee Fung Sit 薛至峰)
|
||||
* Serif: increased spacing of Roman numerals U+2161-2163, U+2165-2168,
|
||||
U+216A-216B (by Gee Fung Sit 薛至峰)
|
||||
* Serif: fixed anchor position of U+00E6 (by Gee Fung Sit 薛至峰)
|
||||
* Sans: fixed vertical position of U+20BA (by Gee Fung Sit 薛至峰)
|
||||
* Sans, Serif: fixed glyph height of Block Elements (by Gee Fung Sit 薛至峰)
|
||||
* Sans, Serif: added U+A698-A699 (by Gee Fung Sit 薛至峰)
|
||||
* Sans, Mono, Serif: added U+037F (by Gee Fung Sit 薛至峰)
|
||||
* Mono: added U+0376-0377, U+037B-037D (by Gee Fung Sit 薛至峰)
|
||||
* Serif: removed duplicate point from U+1D05 (by Gee Fung Sit 薛至峰)
|
||||
* Mono: added U+20BA, U+20BD (by Gee Fung Sit 薛至峰)
|
||||
* Sans: added moon symbols U+1F311-1F318 (by Ben Laenen)
|
||||
|
||||
Changes from 2.34 to 2.35
|
||||
|
||||
* Sans, SansMono, Serif: added U+0E3F, U+A7F8-U+A7F9 (by Gee Fung Sit 薛至峰)
|
||||
|
@ -51,7 +77,7 @@ Changes from 2.34 to 2.35
|
|||
U+234E-U+234F, U+2351, U+2355-U+2356, U+235D, U+2361-U+2362, U+2366-U+2367,
|
||||
U+236A, U+2371-U+2372 (by Sami Tarazi)
|
||||
* Serif: added U+20BA (by Gee Fung Sit 薛至峰)
|
||||
* Sans, Serif: added U+20BD (by Gee Fung Sit 薛至峰)
|
||||
* Sans, Serif: added U+20BD (by Gee Fung Sit 薛至峰)
|
||||
|
||||
Changes from 2.33 to 2.34
|
||||
|
||||
|
@ -82,7 +108,7 @@ Changes from 2.33 to 2.34
|
|||
* Sans: adjusted ogonek reference in U+0172, U+01EA, U+01EB
|
||||
(by Denis Jacquerye)
|
||||
* Sans: added anchors to U+0104, U+0105 (by Denis Jacquerye)
|
||||
* Sans: added U+1F600, U+1F611, U+1F615, U+1F617, U+1F619, U+1F61B, U+1F61F,
|
||||
* Sans: added U+1F600, U+1F611, U+1F615, U+1F617, U+1F619, U+1F61B, U+1F61F,
|
||||
U+1F626-U+1F627, U+1F62E-U+1F62F, U+1F634 (by Gee Fung Sit 薛至峰)
|
||||
* Sans: replaced U+27A1 with mirror image of U+2B05 for consistency
|
||||
(by Gee Fung Sit 薛至峰)
|
||||
|
@ -114,46 +140,46 @@ Changes from 2.33 to 2.34
|
|||
|
||||
Changes from 2.32 to 2.33
|
||||
|
||||
* added Old Italic block to Sans (by MaEr)
|
||||
* added U+051E, U+051F to Sans (by MaEr)
|
||||
* added Old Italic block to Sans (by MaEr)
|
||||
* added U+051E, U+051F to Sans (by MaEr)
|
||||
* added U+01BA, U+0372-U+0373, U+0376-U+0377, U+03CF, U+1D00-U+1D01,
|
||||
U+1D03-U+1D07, U+1D0A-U+1D13, U+1D15, U+1D18-U+1D1C, U+1D20-U+1D2B,
|
||||
U+1D2F, U+1D3D, U+1D5C-U+1D61, U+1D66-U+1D6B, U+1DB8, U+1E9C-U+1E9D,
|
||||
U+1EFA-U+1EFB, U+2C60-U+2C61, U+2C63, U+A726-U+A73C, U+A73E-U+A73F,
|
||||
U+A746-U+A747, U+A74A-U+A74B, U+A74E+U+A74F, U+A768-U+A769, U+A77B-U+A77C,
|
||||
U+A780-U+A787, U+A790-U+A791, U+A7FA-U+A7FF to Serif (by Gee Fung Sit 薛至峰)
|
||||
* added alternate forms to U+014A and U+01B7 in Serif (by Gee Fung Sit 薛至峰)
|
||||
U+A780-U+A787, U+A790-U+A791, U+A7FA-U+A7FF to Serif (by Gee Fung Sit 薛至峰)
|
||||
* added alternate forms to U+014A and U+01B7 in Serif (by Gee Fung Sit 薛至峰)
|
||||
* typographical improvements to U+0166-U+0167, U+0197, U+01B5-U+01B6, U+01BB,
|
||||
U+0222-U+0223, U+023D, U+0250-U+0252, U+026E, U+0274, U+028F, U+029F,
|
||||
U+02A3-U+02A5, U+02AB, U+03FE-U+03FF, U+1D02, U+1D14, U+1D1D-U+1D1F, U+1D3B,
|
||||
U+1D43-U+1D46, U+1D59, U+1D9B, U+2C71, U+2C73 in Serif (by Gee Fung Sit 薛至峰)
|
||||
U+1D43-U+1D46, U+1D59, U+1D9B, U+2C71, U+2C73 in Serif (by Gee Fung Sit 薛至峰)
|
||||
* fixed bugs #31762 and #34700 plus other small fixes (wrong direction,
|
||||
duplicate points, etc.) for Sans and Serif (by Gee Fung Sit 薛至峰)
|
||||
* added U+204B to Mono (by Gee Fung Sit 薛至峰)
|
||||
* added U+26E2 to Sans (by Gee Fung Sit 薛至峰)
|
||||
* added Playing Cards block (U+1F0A0-U+1F0DF) to Sans (by Gee Fung Sit 薛至峰)
|
||||
duplicate points, etc.) for Sans and Serif (by Gee Fung Sit 薛至峰)
|
||||
* added U+204B to Mono (by Gee Fung Sit 薛至峰)
|
||||
* added U+26E2 to Sans (by Gee Fung Sit 薛至峰)
|
||||
* added Playing Cards block (U+1F0A0-U+1F0DF) to Sans (by Gee Fung Sit 薛至峰)
|
||||
* emoticons in Sans: replace U+2639-U+263B with better versions, add
|
||||
U+1F601-U+1F610, U+1F612-U+1F614, U+1F616, U+1F618, U+1F61A, U+1F61C-U+1F61E,
|
||||
U+1F620-U+1F624, U+1F625, U+1F628-U+1F62B, U+1F62D, U+1F630-U+1F633,
|
||||
U+1F635-U+1F640 (by Ben Laenen and Denis Jacquerye)
|
||||
* added U+A78E, U+A790-U+A791 to Sans and Mono (by Denis Jacquerye)
|
||||
* added U+A7FA to Sans (by Denis Jacquerye)
|
||||
U+1F635-U+1F640 (by Ben Laenen and Denis Jacquerye)
|
||||
* added U+A78E, U+A790-U+A791 to Sans and Mono (by Denis Jacquerye)
|
||||
* added U+A7FA to Sans (by Denis Jacquerye)
|
||||
* subscripts: added U+2095-U+209C to Sans, Serif and Mono, adjusted
|
||||
U+1D49-U+1D4A in Sans and Mono (by Denis Jacquerye)
|
||||
* added U+0243 to Mono (by Denis Jacquerye)
|
||||
U+1D49-U+1D4A in Sans and Mono (by Denis Jacquerye)
|
||||
* added U+0243 to Mono (by Denis Jacquerye)
|
||||
* adjusted U+0307 to match dot of i, replaced dotaccent U+02D9 with U+0307 in
|
||||
most dependencies in Sans (by Denis Jacquerye)
|
||||
* adjusted anchors of f and added them to long s in Sans (by Denis Jacquerye)
|
||||
* added anchors to precomposed dependencies of D and d (by Denis Jacquerye)
|
||||
most dependencies in Sans (by Denis Jacquerye)
|
||||
* adjusted anchors of f and added them to long s in Sans (by Denis Jacquerye)
|
||||
* added anchors to precomposed dependencies of D and d (by Denis Jacquerye)
|
||||
* added debug glyphs U+F002 and U+F003 which will show current point size (by
|
||||
Ben Laenen)
|
||||
* use correct version for Serbian italic be (by Eugeniy Meshcheryakov)
|
||||
* added pictograms U+1F42D-U+1F42E, U+1F431, U+1F435 (by Denis Jacquerye)
|
||||
* improved Hebrew in Sans (by Lior Halphon)
|
||||
Ben Laenen)
|
||||
* use correct version for Serbian italic be (by Eugeniy Meshcheryakov)
|
||||
* added pictograms U+1F42D-U+1F42E, U+1F431, U+1F435 (by Denis Jacquerye)
|
||||
* improved Hebrew in Sans (by Lior Halphon)
|
||||
* improved Armenian in Sans, and added Armenian in Serif and Mono (by Rouben
|
||||
Hakobian (Tarumian), Aleksey Chalabyan and Norayr Chilingarian)
|
||||
Hakobian (Tarumian), Aleksey Chalabyan and Norayr Chilingarian)
|
||||
* remove "locl" feature for Romanian for S/T/s/t with cedilla/comma accent (by
|
||||
Ben Laenen)
|
||||
Ben Laenen)
|
||||
* replace wrong "dflt" script tag in Mono with "DFLT" (by Ben Laenen)
|
||||
|
||||
Changes from 2.31 to 2.32
|
||||
|
@ -210,26 +236,26 @@ Changes from 2.30 to 2.31
|
|||
U+06AA-U+06AE, U+06B0-U+06B4, U+06B6-U+06B9, U+06BB-U+06BE and their
|
||||
contextual forms to Sans (by MihailJP)
|
||||
* added U+A78D LATIN CAPITAL LETTER TURNED H for coming Unicode 6.0 (by Denis
|
||||
Jacquerye)
|
||||
Jacquerye)
|
||||
|
||||
Changes from 2.29 to 2.30
|
||||
|
||||
* added U+0462-U+0463 to Mono (by Denis Jacquerye)
|
||||
* corrected U+1E53 in Serif (by Gee Fung Sit)
|
||||
* added U+1E4C-U+1E4D to Mono and Serif (by Gee Fung Sit)
|
||||
* added U+1E78-U+1E79 to Mono (by Gee Fung Sit)
|
||||
* added U+0462-U+0463 to Mono (by Denis Jacquerye)
|
||||
* corrected U+1E53 in Serif (by Gee Fung Sit)
|
||||
* added U+1E4C-U+1E4D to Mono and Serif (by Gee Fung Sit)
|
||||
* added U+1E78-U+1E79 to Mono (by Gee Fung Sit)
|
||||
* fixed missing diacritics in Latin Extended Additional in Sans ExtraLight
|
||||
(moved stacked diacritics out of PUA in the process) (by Gee Fung Sit)
|
||||
* fixed anchors on U+1E78 in Serif (by Gee Fung Sit)
|
||||
* added U+1DC4-U+1DC9 to Serif (by Denis Jacquerye)
|
||||
* renamed above-mark to above-mark in Serif-Italic (by Denis Jacquerye)
|
||||
(moved stacked diacritics out of PUA in the process) (by Gee Fung Sit)
|
||||
* fixed anchors on U+1E78 in Serif (by Gee Fung Sit)
|
||||
* added U+1DC4-U+1DC9 to Serif (by Denis Jacquerye)
|
||||
* renamed above-mark to above-mark in Serif-Italic (by Denis Jacquerye)
|
||||
* added U+1DC4-U+1DC9 to context class for dotless substitution (by Denis
|
||||
Jacquerye)
|
||||
* changed Doubleacute to Doublegrave in Sans ExtraLight (by Gee Fung Sit)
|
||||
* removed redundant reference in U+01FB in Sans Oblique (by Gee Fung Sit)
|
||||
* added U+A726-U+A727 to Mono (Denis Jacquerye)
|
||||
Jacquerye)
|
||||
* changed Doubleacute to Doublegrave in Sans ExtraLight (by Gee Fung Sit)
|
||||
* removed redundant reference in U+01FB in Sans Oblique (by Gee Fung Sit)
|
||||
* added U+A726-U+A727 to Mono (Denis Jacquerye)
|
||||
* changed U+04BE and U+04BF according to recommedations of Sasha Ankwab in Sans
|
||||
(by Andrey V. Panov)
|
||||
(by Andrey V. Panov)
|
||||
* remove "Symbol Charset" from set of codepages in Sans (by Eugeniy
|
||||
Meshcheryakov)
|
||||
|
||||
|
@ -249,7 +275,7 @@ Changes from 2.28 to 2.29
|
|||
* Remove 'cmap' mappings for U+066E, U+066F, U+067C, U+067D, U+0681, U+0682,
|
||||
U+0685, U+0692, U+06A1, U+06B5, U+06BA, U+06C6, U+06CE, and U+06D5
|
||||
in Sans Mono (bug 20323) (by Roozbeh Pournader)
|
||||
* add half brackets (U+2E22 - U+2E25, by Steve Tinney)
|
||||
* add half brackets (U+2E22 - U+2E25, by Steve Tinney)
|
||||
|
||||
Changes from 2.27 to 2.28
|
||||
|
||||
|
@ -319,7 +345,7 @@ Changes from 2.26 to 2.27
|
|||
* rounded U+2C77 at the bottom in Serif (by Gee Fung Sit)
|
||||
* added joining behavior for tone letters (U+02E5-U+02E9) in Sans (bug #15669)
|
||||
(by Gee Fung Sit)
|
||||
* fixed outline of y.alt in Sans Regular (by Denis Jacquerye)
|
||||
* fixed outline of y.alt in Sans Regular (by Denis Jacquerye)
|
||||
* changed references of U+1D5A8, U+1D5C5, U+1D5DC, U+1D5F9, U+1D610, U+1D62D,
|
||||
U+1D644 and U+1D661 to stylistic alternates to have a better distinction (by
|
||||
Gee Fung Sit)
|
||||
|
@ -333,41 +359,41 @@ Changes from 2.26 to 2.27
|
|||
|
||||
Changes from 2.25 to 2.26
|
||||
|
||||
- added glyphs for Cyrillic-B to Sans (by Wesley Transue)
|
||||
- added U+0370-U+0371 to Sans (by Wesley Transue)
|
||||
- added glyphs for Cyrillic-B to Sans (by Wesley Transue)
|
||||
- added U+0370-U+0371 to Sans (by Wesley Transue)
|
||||
- added U+019C, U+01A2-U+01A3, U+01A6, U+01E4-U+01E5, U+024C-U+024D, U+0285,
|
||||
U+0290, U+02A0, U+0370-U+0371, U+03F1, U+03FC to Sans ExtraLight (by Wesley
|
||||
Transue)
|
||||
Transue)
|
||||
- added U+20A0-U+20A5, U+20A7-U+20B3, U+2105, U+210D, U+210F, U+2115, U+2117,
|
||||
U+2119-U+211A, U+211D, U+2124, U+212E, U+2200-U+2204 to Mono (by Heikki
|
||||
Lindroos)
|
||||
- added U+01BA and U+01BF to Mono (by Heikki Lindroos)
|
||||
- merged OpenType "aalt" feature in Latin in Sans (by Denis Jacquerye)
|
||||
- added alternative shape for y in Sans (by Denis Jacquerye)
|
||||
- added saltillo (U+A78B-U+A78C) to all faces (by James Cloos)
|
||||
Lindroos)
|
||||
- added U+01BA and U+01BF to Mono (by Heikki Lindroos)
|
||||
- merged OpenType "aalt" feature in Latin in Sans (by Denis Jacquerye)
|
||||
- added alternative shape for y in Sans (by Denis Jacquerye)
|
||||
- added saltillo (U+A78B-U+A78C) to all faces (by James Cloos)
|
||||
- changed U+047C-U+047D to references instead of outlines in Sans (by Wesley
|
||||
Transue)
|
||||
- added Latin letter tresillo U+A72A-U+A72B to Sans (by Wesley Transue)
|
||||
- added U+A734-U+A737 to Sans (by Wesley Transue)
|
||||
- added U+2053 to Serif and fixed it bug:9425 in Sans (by Gee Fung Sit)
|
||||
- removed problematic hints for U+0423 bug:10025 (by Gee Fung Sit)
|
||||
- added U+27C5-U+27C6 bug:10255 to all faces (by Gee Fung Sit)
|
||||
- fixed width of U+2016 in Sans Oblique (by Gee Fung Sit)
|
||||
Transue)
|
||||
- added Latin letter tresillo U+A72A-U+A72B to Sans (by Wesley Transue)
|
||||
- added U+A734-U+A737 to Sans (by Wesley Transue)
|
||||
- added U+2053 to Serif and fixed it bug:9425 in Sans (by Gee Fung Sit)
|
||||
- removed problematic hints for U+0423 bug:10025 (by Gee Fung Sit)
|
||||
- added U+27C5-U+27C6 bug:10255 to all faces (by Gee Fung Sit)
|
||||
- fixed width of U+2016 in Sans Oblique (by Gee Fung Sit)
|
||||
- added U+2016, U+2032-U+2038, U+2042, U+2045-U+2046, U+204B-U+204F,
|
||||
U+2051-U+2052, U+2057 to Serif (by Gee Fung Sit)
|
||||
- made U+2140 bigger to match other n-ary operators (by Gee Fung Sit)
|
||||
- added U+0606-U+0607, U+0609-U+060A to Sans (by Gee Fung Sit)
|
||||
- added U+221B-U+221C to Mono (by Gee Fung Sit)
|
||||
- small adjustments to U+221B-U+221C in Sans and Serif (by Gee Fung Sit)
|
||||
- update U+04B4-U+04B5 in Serif (by Andrey V. Panov)
|
||||
- increased max-storage value from maxp table to 153 (by Andrey V. Panov)
|
||||
U+2051-U+2052, U+2057 to Serif (by Gee Fung Sit)
|
||||
- made U+2140 bigger to match other n-ary operators (by Gee Fung Sit)
|
||||
- added U+0606-U+0607, U+0609-U+060A to Sans (by Gee Fung Sit)
|
||||
- added U+221B-U+221C to Mono (by Gee Fung Sit)
|
||||
- small adjustments to U+221B-U+221C in Sans and Serif (by Gee Fung Sit)
|
||||
- update U+04B4-U+04B5 in Serif (by Andrey V. Panov)
|
||||
- increased max-storage value from maxp table to 153 (by Andrey V. Panov)
|
||||
- added U+0472-U+0473, U+0510-U+0511, U+051A-U+051D, U+0606-U+0607,
|
||||
U+0609-U+060A, U+1E26-U+1E27, U+1E54-U+1E55, U+1E7C-U+1E7D, U+1E8C-U+1E8D,
|
||||
U+1E90-U+1E91, U+1E97-U+1E99, U+1E9F, U+1EAC-U+1EAD, U+1EB6-U+1EB7,
|
||||
U+1EC6-U+1EC7, U+1ED8-U+1EDD, U+1EE0-U+1EE3, U+1EE8-U+1EEB, U+1EEE-U+1EF1 to
|
||||
Mono (by Gee Fung Sit)
|
||||
Mono (by Gee Fung Sit)
|
||||
- added locl rules for S/T cedilla for Romanian and Moldavian so they get
|
||||
rendered as S/T with comma accent (see Redhat bug #455981) (by Ben Laenen)
|
||||
rendered as S/T with comma accent (see Redhat bug #455981) (by Ben Laenen)
|
||||
- removed ligature rule from Armenian U+0587 bug:16113 (by Gee Fung Sit)
|
||||
|
||||
Changes from 2.24 to 2.25
|
||||
|
@ -395,33 +421,33 @@ Changes from 2.24 to 2.25
|
|||
- added a bunch of glyphs+small corrections to Sans Light (by Gee Fung Sit)
|
||||
- added U+0496, U+0497, U+04B0, U+04B1 (by Andrey V. Panov)
|
||||
- updated U+0493, U+049B, U+04B3, U+04B7, U+04F7 (by Andrey V. Panov)
|
||||
- further improvements in extended Cyrillic (by Andrey V. Panov)
|
||||
- further improvements in extended Cyrillic (by Andrey V. Panov)
|
||||
|
||||
Changes from 2.23 to 2.24
|
||||
|
||||
- instructions for U+05C0 ׀, U+05C3 ׃, U+05F3 ׳, and U+05F4 ״ in DejaVu
|
||||
- instructions for U+05C0 ׀, U+05C3 ׃, U+05F3 ׳, and U+05F4 ״ in DejaVu
|
||||
Sans. (by Wesley Transue)
|
||||
- instructions for U+2116 in Sans (by Andrey V. Panov)
|
||||
- Unicode 5.1 update: moved U+F208 to U+2C6D, U+F25F to U+2C71, added
|
||||
U+2C6E-U+2C6F, U+2C72-U+2C73, updated outline of U+2C71 in Sans. (by
|
||||
- Unicode 5.1 update: moved U+F208 to U+2C6D, U+F25F to U+2C71, added
|
||||
U+2C6E-U+2C6F, U+2C72-U+2C73, updated outline of U+2C71 in Sans. (by
|
||||
Denis Jacquerye)
|
||||
- updated and instructed U+0401 in Sans (by Andrey V. Panov)
|
||||
- fixed the bug in Sans faces where U+02EC ˬ faced the wrong direction.
|
||||
- fixed the bug in Sans faces where U+02EC ˬ faced the wrong direction.
|
||||
Also, added a few more glyph instructions. (by Wesley Transue)
|
||||
- removed OS2Sub and OS2Strike that weren't intentional in Sans
|
||||
- removed OS2Sub and OS2Strike that weren't intentional in Sans
|
||||
ExtraLight. (by Denis Jacquerye)
|
||||
- updated instructions for U+401, U+44F in Serif Book. (by Andrey V.
|
||||
- updated instructions for U+401, U+44F in Serif Book. (by Andrey V.
|
||||
Panov)
|
||||
- instructions for U+02C4 ˄, U+02C5 ˅, U+03D8 Ϙ, U+03D9 ϙ, U+0494 Ҕ, and
|
||||
- instructions for U+02C4 ˄, U+02C5 ˅, U+03D8 Ϙ, U+03D9 ϙ, U+0494 Ҕ, and
|
||||
U+0495 ҕ in Sans Book. (by Wesley Transue)
|
||||
- instructions for U+01A6 Ʀ, U+0238 ȸ, U+0239 ȹ, U+02EC ˬ, and U+05C6 ׆
|
||||
- instructions for U+01A6 Ʀ, U+0238 ȸ, U+0239 ȹ, U+02EC ˬ, and U+05C6 ׆
|
||||
in Sans Book. (by Wesley Transue)
|
||||
- DejaVuSans.sfd DejaVuSerif.sfd: updated instructions for U+447 and
|
||||
- DejaVuSans.sfd DejaVuSerif.sfd: updated instructions for U+447 and
|
||||
U+451 using code generated with xgridfit (by Andrey V. Panov)
|
||||
- instructions for a few glyphs in the Latin Extended-B Block, Greek
|
||||
- instructions for a few glyphs in the Latin Extended-B Block, Greek
|
||||
Block, Cyrillic Block, and N'Ko block. (by Wesley Transue)
|
||||
- updated sfdnormalize.pl, and SFD files to new SFD format with empty
|
||||
lines. (by Denis Jacquerye)
|
||||
- updated sfdnormalize.pl, and SFD files to new SFD format with empty
|
||||
lines. (by Denis Jacquerye)
|
||||
|
||||
Changes from 2.22 to 2.23
|
||||
|
||||
|
@ -436,7 +462,7 @@ Changes from 2.22 to 2.23
|
|||
Wesley Transue)
|
||||
- added mathematical alphanumeric symbols to all styles (by Max Berger)
|
||||
- added Unicode 5.1 U+2E18 as U+2E18.u51 (not yet usable) to Sans (by Roozbeh
|
||||
Pournader)
|
||||
Pournader)
|
||||
- dereferenced all glyphs with mixed references and outlines (by Denis
|
||||
Jacquerye)
|
||||
- removed non-zero width from U+0344 in Sans (by Denis Jacquerye)
|
||||
|
@ -519,7 +545,7 @@ Changes from 2.19 to 2.20
|
|||
|
||||
Changes from 2.18 to 2.19
|
||||
|
||||
- fixed misplaced symbols (U+2325,2326) in Sans Oblique (by John Karp)
|
||||
- fixed misplaced symbols (U+2325,2326) in Sans Oblique (by John Karp)
|
||||
- added Mark to Base anchors: 'cedilla' for combining cedilla and
|
||||
'above-legacy' for stacking above precomposed glyphs (just a,e,i,o,u with
|
||||
macron for now) in Sans (by Denis Jacquerye).
|
||||
|
@ -599,25 +625,25 @@ Changes from 2.15 to 2.16
|
|||
- adjusted dot and dieresis below and above in Serif fonts (by Denis Jacquerye)
|
||||
- added U+1E1C-U+1E1D to Serif fonts (by Denis Jacquerye)
|
||||
- added U+22BE, U+22BF (by Wesley Transue)
|
||||
- added U+2324; modified U+2325: more standard proportions, and matches U+2324
|
||||
and U+2387; added U+2387 : flipped U+2325 with standard arrowhead
|
||||
- added U+2324; modified U+2325: more standard proportions, and matches U+2324
|
||||
and U+2387; added U+2387 : flipped U+2325 with standard arrowhead
|
||||
(by John Karp)
|
||||
- added Lao digits U+0ED0-0ED7, U+0ED9 (by Remy Oudompheng)
|
||||
- added to Mono in Arabic block : U+060C, U+0615, U+061B, U+061F,
|
||||
U+0621-U+063A, U+0640-0655, U+065A, U+0660-066F, U+0674, U+0679-0687, U+0691,
|
||||
U+0692, U+0698, U+06A1, U+06A4, U+06A9, U+06AF, U+06B5, U+06BA, U+06BE,
|
||||
- added to Mono in Arabic block : U+060C, U+0615, U+061B, U+061F,
|
||||
U+0621-U+063A, U+0640-0655, U+065A, U+0660-066F, U+0674, U+0679-0687, U+0691,
|
||||
U+0692, U+0698, U+06A1, U+06A4, U+06A9, U+06AF, U+06B5, U+06BA, U+06BE,
|
||||
U+06C6, U+06CC, U+06CE, U+06D5, U+06F0-06F9 (by Remy Oudompheng)
|
||||
- added to Mono in Arabic Presentations Forms-A : U+FB52-FB81, U+FB8A-FB95,
|
||||
- added to Mono in Arabic Presentations Forms-A : U+FB52-FB81, U+FB8A-FB95,
|
||||
U+FB9E, U+FB9F, U+FBAA-FBAD, U+FBE8, U+FBE9, U+FBFC-FBFF (by Remy Oudompheng)
|
||||
- added to Mono in Arabic Presentations Forms-B : U+FE70-FE74, U+FE76-FEFC,
|
||||
- added to Mono in Arabic Presentations Forms-B : U+FE70-FE74, U+FE76-FEFC,
|
||||
U+FEFF (by Remy Oudompheng)
|
||||
- added U+05BA, U+05BE, U+05F3, U+05F4, U+FB1E, U+FB21-U+FB28, U+FB4F to Sans
|
||||
- added U+05BA, U+05BE, U+05F3, U+05F4, U+FB1E, U+FB21-U+FB28, U+FB4F to Sans
|
||||
(by Eugeniy Meshcheryakov)
|
||||
- added U+2102 to Mono (by Eugeniy Meshcheryakov)
|
||||
- added U+2983-U+2984 to Sans (by Gee Fung Sit)
|
||||
- added U+2A2F to Sans, Serif and Mono (by Gee Fung Sit)
|
||||
- added U+2373-2375, U+237A to Sans (by John Karp)
|
||||
- converted kern pairs to kern classes with Tavmjong Bah's scripts
|
||||
- converted kern pairs to kern classes with Tavmjong Bah's scripts
|
||||
(by Denis Jacquerye)
|
||||
- set ScriptLang of kerning classes to just latn because of Pango bug
|
||||
(by Denis Jacquerye)
|
||||
|
@ -629,7 +655,7 @@ Changes from 2.15 to 2.16
|
|||
(by Denis Jacquerye)
|
||||
- added bearings to en dash U+2013, em dash U+2014 and figure dash U+2012
|
||||
by making dashes shorter, preserving character width (by Denis Jacquerye)
|
||||
- reduced U+031C, U+0325 (ring below), U+0339 to be entirely visible;
|
||||
- reduced U+031C, U+0325 (ring below), U+0339 to be entirely visible;
|
||||
added instructions in Sans Book; changed U+1e00-U+1e01 to use new ring below
|
||||
(by Denis Jacquerye)
|
||||
- adjusted circumflex below on U+1E12-U+1E13, U+1E18-U+1E19, U+1E3C-U+1E3D,
|
||||
|
@ -662,96 +688,96 @@ Changes from 2.14 to 2.15
|
|||
Changes from 2.13 to 2.14
|
||||
|
||||
- added Philippine peso glyph U+20B1 (by Clayborne Arevalo)
|
||||
- made U+2012 have the same width as digits, according to Unicode 5.0,
|
||||
- made U+2012 have the same width as digits, according to Unicode 5.0,
|
||||
page 206 (by Roozbeh Pournader)
|
||||
- made all of the "above" combining characters remove the dot of "i",
|
||||
"j", etc (Soft_Dotted characters), according to Unicode 5.0,
|
||||
- made all of the "above" combining characters remove the dot of "i",
|
||||
"j", etc (Soft_Dotted characters), according to Unicode 5.0,
|
||||
page 228 (by Roozbeh Pournader)
|
||||
- made U+012F, U+03F3, U+0456, U+0458, U+1E2D, and U+1ECB (all fonts
|
||||
except Mono), U+0249, U+2148, and U+2149 (Sans and Sans Condensed),
|
||||
U+0268 (Sans ExtraLight, Serif and Serif Condensed), and U+029D (Serif
|
||||
and Serif Condensed) respect the Soft_Dotted property (by Roozbeh
|
||||
- made U+012F, U+03F3, U+0456, U+0458, U+1E2D, and U+1ECB (all fonts
|
||||
except Mono), U+0249, U+2148, and U+2149 (Sans and Sans Condensed),
|
||||
U+0268 (Sans ExtraLight, Serif and Serif Condensed), and U+029D (Serif
|
||||
and Serif Condensed) respect the Soft_Dotted property (by Roozbeh
|
||||
Pournader)
|
||||
- added U+223E, U+223F, U+2240, U+22C2, U+22C3 to Sans (by Remy Oudompheng)
|
||||
- added U+203D to Serif (by Gee Fung Sit)
|
||||
- added zero-width glyphs for U+2061-U+2063 to Sans and Serif (by Gee
|
||||
- added zero-width glyphs for U+2061-U+2063 to Sans and Serif (by Gee
|
||||
Fung Sit)
|
||||
- changed isolated forms of Arabic waw (U+0648, U+0624 and U+06C6) (bug #9432)
|
||||
- changed isolated forms of Arabic waw (U+0648, U+0624 and U+06C6) (bug #9432)
|
||||
(by Ben Laenen)
|
||||
- added Lao consonants U+0E81, U+0E82, U+0E84, U+0E87, U+0E88, U+0E8A,
|
||||
U+0E8D, U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA,
|
||||
- added Lao consonants U+0E81, U+0E82, U+0E84, U+0E87, U+0E88, U+0E8A,
|
||||
U+0E8D, U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA,
|
||||
U+0EAB, U+0EAD-0EAF to Sans Mono (by Remy Oudompheng)
|
||||
- added U+0200-U+0217, U+0226-U+0229, U+02F3, U+1E00-U+1E07,
|
||||
U+1E0A-U+1E0B, U+1E18-U+1E1F, U+1E22-U+1E23, U+1E28-U+1E2D,
|
||||
U+1E3A-U+1E3B, U+1E40, U+1E48-U+1E49, U+1E56, U+1E58-U+1E59,
|
||||
U+1E5E-U+1E5F, U+1E60, U+1E68-U+1E6B, U+1E6E-U+1E6F, U+1E72-U+1E77,
|
||||
U+1E86-U+1E8B, U+1E92-U+1E96, U+1EA0-U+1EA1, U+1EF4-U+1EF5 to Mono
|
||||
- added U+0200-U+0217, U+0226-U+0229, U+02F3, U+1E00-U+1E07,
|
||||
U+1E0A-U+1E0B, U+1E18-U+1E1F, U+1E22-U+1E23, U+1E28-U+1E2D,
|
||||
U+1E3A-U+1E3B, U+1E40, U+1E48-U+1E49, U+1E56, U+1E58-U+1E59,
|
||||
U+1E5E-U+1E5F, U+1E60, U+1E68-U+1E6B, U+1E6E-U+1E6F, U+1E72-U+1E77,
|
||||
U+1E86-U+1E8B, U+1E92-U+1E96, U+1EA0-U+1EA1, U+1EF4-U+1EF5 to Mono
|
||||
(by Ben Laenen)
|
||||
- renamed uppercase variants of diacritics (macron, breve, double grave,
|
||||
double acute, inverted breve, dot above) to "uni03XX.case" in Mono
|
||||
- renamed uppercase variants of diacritics (macron, breve, double grave,
|
||||
double acute, inverted breve, dot above) to "uni03XX.case" in Mono
|
||||
(by Ben Laenen)
|
||||
- moved uppercase variants of diacritics up in Mono so they properly
|
||||
- moved uppercase variants of diacritics up in Mono so they properly
|
||||
vertically align on capitals (by Ben Laenen)
|
||||
- precomposed glyphs with macron, breve, double grave, double acute,
|
||||
inverted breve, dot above, macron below, breve below, inverted breve
|
||||
below, dot below, cedilla, caron below, circumflex below, diaeresis
|
||||
below, tilde below now reference to combining diacritics instead of
|
||||
- precomposed glyphs with macron, breve, double grave, double acute,
|
||||
inverted breve, dot above, macron below, breve below, inverted breve
|
||||
below, dot below, cedilla, caron below, circumflex below, diaeresis
|
||||
below, tilde below now reference to combining diacritics instead of
|
||||
space modifiers in Mono (by Ben Laenen)
|
||||
- made ring below (U+0325), and half rings below (U+031C and U+0339)
|
||||
- made ring below (U+0325), and half rings below (U+031C and U+0339)
|
||||
smaller in Mono (by Ben Laenen)
|
||||
- added U+205F to all fonts (by Roozbeh Pournader)
|
||||
- added U+035E-U+035F to Sans (by Roozbeh Pournader)
|
||||
- added empty glyphs for U+034F, U+202A-U+202E, U+2060, U+206A-206F,
|
||||
- added empty glyphs for U+034F, U+202A-U+202E, U+2060, U+206A-206F,
|
||||
U+FE00-U+FE0F to non-Mono fonts (by Roozbeh Pournader)
|
||||
- added U+2101, U+2107-U+2108, U+210B, U+210C, U+2110, U+2112, U+211B,
|
||||
U+211F, U+2123, U+2125, U+2128-U+2129, U+212C-U+212D, U+212F,
|
||||
U+2130-U+2131, U+2133, U+2136-U+213A, U+2141-U+2144, U+2B00-U+2B11,
|
||||
- added U+2101, U+2107-U+2108, U+210B, U+210C, U+2110, U+2112, U+211B,
|
||||
U+211F, U+2123, U+2125, U+2128-U+2129, U+212C-U+212D, U+212F,
|
||||
U+2130-U+2131, U+2133, U+2136-U+213A, U+2141-U+2144, U+2B00-U+2B11,
|
||||
U+2B20-U+2B23 to Sans (by John Karp)
|
||||
- reshaped omega (U+03C9) in Mono (by Ben Laenen)
|
||||
- added U+2205, U+22C6, U+2300-U+2301, U+2303-U+2306, U+230C-U+230F,
|
||||
U+2312-U+2315, U+231C-U+231F, U+2335, U+2337-U+233E, U+2341-U+2344,
|
||||
U+2347-U+2348, U+234B-U+234D, U+2349-U+2350, U+2352-U+2354,
|
||||
U+2357-U+2359, U+235A-U+235C, U+235E-U+2360, U+2363-U+2365,
|
||||
U+2368-U+2369, U+236B-U+2370, U+2373-U+237A, U+2380-U+2383,
|
||||
- added U+2205, U+22C6, U+2300-U+2301, U+2303-U+2306, U+230C-U+230F,
|
||||
U+2312-U+2315, U+231C-U+231F, U+2335, U+2337-U+233E, U+2341-U+2344,
|
||||
U+2347-U+2348, U+234B-U+234D, U+2349-U+2350, U+2352-U+2354,
|
||||
U+2357-U+2359, U+235A-U+235C, U+235E-U+2360, U+2363-U+2365,
|
||||
U+2368-U+2369, U+236B-U+2370, U+2373-U+237A, U+2380-U+2383,
|
||||
U+2388-U+238B, U+2395 in Mono (by Ben Laenen)
|
||||
|
||||
Changes from 2.12 to 2.13
|
||||
|
||||
- adjusted U+0198B, U+01B3-U+01B4 in Sans, hinted U+01B4 in Sans Book
|
||||
- adjusted U+0198B, U+01B3-U+01B4 in Sans, hinted U+01B4 in Sans Book
|
||||
(by Denis Jacquerye)
|
||||
- added U+27F0-U+27FF, U+2906-U+2907, U+290A-U+290B, U+2940-U+2941 to Sans
|
||||
- added U+27F0-U+27FF, U+2906-U+2907, U+290A-U+290B, U+2940-U+2941 to Sans
|
||||
(by Denis Jacquerye)
|
||||
- added U+01E6-U+01E9, U+01EE-U+01EF, U+01F4-U+01F5, U+01FC-U+01FF,
|
||||
- added U+01E6-U+01E9, U+01EE-U+01EF, U+01F4-U+01F5, U+01FC-U+01FF,
|
||||
U+021E-U+021F, U+0245, U+02BD, U+02C9, U+1E9B, U+2045-U+2046, U+2213, U+22C5,
|
||||
U+22EF to Sans Mono (by Roozbeh Pournader)
|
||||
- added U+04FA-U+04FD to Sans (by Michael Everson)
|
||||
- removed U+2329 and U+232A because of their CJK properties, added U+27E8
|
||||
- removed U+2329 and U+232A because of their CJK properties, added U+27E8
|
||||
and U+27E9 in their stead, fixing part of bug #9038 (by Roozbeh Pournader)
|
||||
- corrected and improvised U+0466-U+0469, U+046E-U+0471, U+047C-U+047D, U+0482,
|
||||
U+0484-U+0486, U+0492-U+0493, U+04B0-U+04B1, U+050C-U+050D, and U+204A
|
||||
- corrected and improvised U+0466-U+0469, U+046E-U+0471, U+047C-U+047D, U+0482,
|
||||
U+0484-U+0486, U+0492-U+0493, U+04B0-U+04B1, U+050C-U+050D, and U+204A
|
||||
in Sans (by Michael Everson)
|
||||
- added instructions for U+0402, U+0409, U+040A, U+040B, U+044D, U+040F,
|
||||
- added instructions for U+0402, U+0409, U+040A, U+040B, U+044D, U+040F,
|
||||
U+0452, U+0459-U+045B, U+045F to Sans Book (by Eugeniy Meshcheryakov)
|
||||
- made italic shape for U+431, U+432, U+437, U+43B, U+43C, U+43D, U+444, U+447,
|
||||
U+44D, U+44F, U+459, U+45A in SerifOblique and SerifBoldOblique
|
||||
- made italic shape for U+431, U+432, U+437, U+43B, U+43C, U+43D, U+444, U+447,
|
||||
U+44D, U+44F, U+459, U+45A in SerifOblique and SerifBoldOblique
|
||||
(by Andrey V. Panov)
|
||||
- modified U+024C to match glyph in Unicode chart, fixing bug #9039
|
||||
- modified U+024C to match glyph in Unicode chart, fixing bug #9039
|
||||
(by Denis Jacquerye)
|
||||
- made some canonically equivalent characters share the same glyph:
|
||||
U+02B9 = U+0374, U+0343 = U+0313, and U+0387 = U+00B7 also adjusting U+02BA
|
||||
- made some canonically equivalent characters share the same glyph:
|
||||
U+02B9 = U+0374, U+0343 = U+0313, and U+0387 = U+00B7 also adjusting U+02BA
|
||||
to look like double U+02B9, fixing parts of bug #9038 (by Roozbeh Pournader)
|
||||
- changed shapes for U+0478 and U+0479 in Sans to those in the Unicode charts,
|
||||
based on a recent decision by Unicode Technical Committee to only use
|
||||
- changed shapes for U+0478 and U+0479 in Sans to those in the Unicode charts,
|
||||
based on a recent decision by Unicode Technical Committee to only use
|
||||
the digraph form (by Michael Everson)
|
||||
- adjusted width of NBSP U+00A0 and NNBSP U+202F, fixing bug #8401
|
||||
- adjusted width of NBSP U+00A0 and NNBSP U+202F, fixing bug #8401
|
||||
(by Denis Jacquerye)
|
||||
- fixed several contours to not intersect, use horizontal or vertical tangents,
|
||||
- fixed several contours to not intersect, use horizontal or vertical tangents,
|
||||
use integer coordinates, etc (by Roozbeh Pournader and Denis Jacquerye)
|
||||
- added U+1402, U+1430, U+144D, U+146C, U+148A, U+14A4, U+14C1, U+14D4, U+14EE,
|
||||
- added U+1402, U+1430, U+144D, U+146C, U+148A, U+14A4, U+14C1, U+14D4, U+14EE,
|
||||
U+1527, U+1545, U+157E, U+158E, U+15AF to Sans (by Eugeniy Meshcheryakov)
|
||||
- enlarged width of U+459 and U+45A in Serif (by Andrey V. Panov)
|
||||
- made traditional shape for U+452, U+45B (by Andrey V. Panov)
|
||||
- added euro sign U+20AC to Sans ExtraLight, making fontconfig recognize
|
||||
- added euro sign U+20AC to Sans ExtraLight, making fontconfig recognize
|
||||
the font as supporting English (by Denis Jacquerye)
|
||||
|
||||
Changes from 2.11 to 2.12
|
||||
|
@ -820,47 +846,47 @@ Changes from 2.10 to 2.11
|
|||
|
||||
Changes from 2.9 to 2.10:
|
||||
|
||||
- added U+0242, U+024A-U+024B, U+024E-U+024F, U+037C-U+037D, U+0E3F,
|
||||
U+1D2C-U+1D2E, U+1D30-U+1D42, U+1D5D-U+1D6A, U+1D78, U+1DB8,
|
||||
U+2090-U+2094, U+20D0-U+20D1, U+2C60-U+2C66, U+2C6B-U+2C6C, U+2C74 and
|
||||
- added U+0242, U+024A-U+024B, U+024E-U+024F, U+037C-U+037D, U+0E3F,
|
||||
U+1D2C-U+1D2E, U+1D30-U+1D42, U+1D5D-U+1D6A, U+1D78, U+1DB8,
|
||||
U+2090-U+2094, U+20D0-U+20D1, U+2C60-U+2C66, U+2C6B-U+2C6C, U+2C74 and
|
||||
U+FB29 to Sans (by Gee Fung Sit)
|
||||
- added Lao glyphs : U+0E81-0E82, U+E084, U+0E87-0E88, U+0E8A, U+0E8D,
|
||||
U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA-0EAB,
|
||||
U+0EAD-0EB9, U+0EBB-0EBD, U+0EC0-0EC4, U+0EC6, U+0EC8-0ECD, U+0EDC-0EDD
|
||||
- added Lao glyphs : U+0E81-0E82, U+E084, U+0E87-0E88, U+0E8A, U+0E8D,
|
||||
U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA-0EAB,
|
||||
U+0EAD-0EB9, U+0EBB-0EBD, U+0EC0-0EC4, U+0EC6, U+0EC8-0ECD, U+0EDC-0EDD
|
||||
(by Remy Oudompheng)
|
||||
- fixed U+0193 not showing in Windows (bug #7897) (by Ben Laenen)
|
||||
- changes to U+222B-222D in Sans Mono (by Remy Oudompheng)
|
||||
- ported the three remaining currency symbols from Arev (U+20B0,
|
||||
U+20B2-U+20B3), and replaced one (U+20AF) in Sans (by Lars Naesbye
|
||||
- ported the three remaining currency symbols from Arev (U+20B0,
|
||||
U+20B2-U+20B3), and replaced one (U+20AF) in Sans (by Lars Naesbye
|
||||
Christensen)
|
||||
- corrected U+20A5 in Sans (by Gee Fung Sit)
|
||||
- merged Double-Struck Letters from Arev: U+2102, U+210D, U+2115,
|
||||
- merged Double-Struck Letters from Arev: U+2102, U+210D, U+2115,
|
||||
U+2119-U+211A, U+2124, U+213C-U+2140 (by Gee Fung Sit)
|
||||
- added U+2308-U+230B and U+2329-U+232A to Sans Mono and Serif faces,
|
||||
fixed incorrect direction of U+2329 in Sans faces, and improved
|
||||
U+2308-U+230B in Sans faces per Ben Laenen's suggestions (by David
|
||||
- added U+2308-U+230B and U+2329-U+232A to Sans Mono and Serif faces,
|
||||
fixed incorrect direction of U+2329 in Sans faces, and improved
|
||||
U+2308-U+230B in Sans faces per Ben Laenen's suggestions (by David
|
||||
Lawrence Ramsey)
|
||||
- added U+06D5 and final form of it (needed for Kurdish) (by Ben Laenen)
|
||||
- added two special glyphs U+F000 and U+F001 in Sans Book that show the
|
||||
- added two special glyphs U+F000 and U+F001 in Sans Book that show the
|
||||
current ppem size (horizontal and vertical) (by Ben Laenen)
|
||||
- added U+2318 and U+2325 to Sans Mono faces, based on the Sans versions
|
||||
- added U+2318 and U+2325 to Sans Mono faces, based on the Sans versions
|
||||
(by David Lawrence Ramsey)
|
||||
- added U+2B14-U+2B1A to all faces except Sans ExtraLight (by David
|
||||
- added U+2B14-U+2B1A to all faces except Sans ExtraLight (by David
|
||||
Lawrence Ramsey)
|
||||
- respaced all Geometric Shapes characters in Serif faces to match those
|
||||
in Sans faces again, respaced U+23CF in Sans, Sans ExtraLight, and
|
||||
Serif faces to match U+25A0 (or Sans in Sans ExtraLight's case) again,
|
||||
and respaced U+2B12-U+2B13 in Sans and Serif faces to match U+25A1
|
||||
- respaced all Geometric Shapes characters in Serif faces to match those
|
||||
in Sans faces again, respaced U+23CF in Sans, Sans ExtraLight, and
|
||||
Serif faces to match U+25A0 (or Sans in Sans ExtraLight's case) again,
|
||||
and respaced U+2B12-U+2B13 in Sans and Serif faces to match U+25A1
|
||||
again (by David Lawrence Ramsey)
|
||||
- corrected width of Modifier Small Letters U+1D43-1D5B in Sans Oblique
|
||||
- corrected width of Modifier Small Letters U+1D43-1D5B in Sans Oblique
|
||||
and U+1D9B-U+1DBF in Sans Oblique and Sans Bold Oblique (by Gee Fung Sit)
|
||||
- added a bunch of glyphs to Sans ExtraLight (see SVN for details) (by
|
||||
- added a bunch of glyphs to Sans ExtraLight (see SVN for details) (by
|
||||
Gee Fung Sit)
|
||||
- adjusted Cyrillic descenders in Sans ExtraLight to sync with Sans (by
|
||||
- adjusted Cyrillic descenders in Sans ExtraLight to sync with Sans (by
|
||||
Gee Fung Sit)
|
||||
- added U+0242, U+0245 to Serif (by Gee Fung Sit)
|
||||
- replaced the SHPIX routines which gave them bad spacing at certain
|
||||
sizes in FreeType for A, V, Z, v and z in Sans Bold (by Ben Laenen)
|
||||
- replaced the SHPIX routines which gave them bad spacing at certain
|
||||
sizes in FreeType for A, V, Z, v and z in Sans Bold (by Ben Laenen)
|
||||
|
||||
Changes from 2.8 to 2.9:
|
||||
|
||||
|
@ -1097,7 +1123,7 @@ Changes from 2.3 to 2.4:
|
|||
- added DejaVu Sans Extra Light (by Denis Jacquerye)
|
||||
- Adjusted underline position for (hopefully) improved legibility in
|
||||
Sans, Serif, Mono (Tim May)
|
||||
- added auto-generated DejaVu LGC (by Stepan Roh)
|
||||
- added auto-generated DejaVu LGC (by Stepan Roh)
|
||||
|
||||
Changes from 2.2 to 2.3:
|
||||
|
||||
|
@ -1159,7 +1185,7 @@ Changes from 2.2 to 2.3:
|
|||
- added U+0181, U+0187-U+0188, U+018A, U+018D, U+018F, U+0191, U+0193,
|
||||
U+0195-U+019F, U+01A4-01A5, U+01AC-01AD, U+01B5-U+01B6, U+1BB, U+01F6,
|
||||
U+01D7-U+01DC, U+0238-U+0239, U+0241 to Mono (by Denis Jacquerye)
|
||||
- added to Mono and Serif (by Denis Jacquerye)
|
||||
- added to Mono and Serif (by Denis Jacquerye)
|
||||
|
||||
Changes from 2.1 to 2.2:
|
||||
|
||||
|
@ -1203,7 +1229,7 @@ Changes from 2.1 to 2.2:
|
|||
- completed basic Greek alphabet: added U+0374-U+0375, U+037A, U+037E,
|
||||
U+0384-U+038A, U+038C, U+038E-U+0390, U+03AC-U+03BF, U+03C1-U+03CE (by Ben
|
||||
Laenen)
|
||||
- added U+2070 and U+2074-U+2079 (by Mederic Boquien)
|
||||
- added U+2070 and U+2074-U+2079 (by Mederic Boquien)
|
||||
|
||||
Changes from 2.0 to 2.1:
|
||||
|
||||
|
@ -1238,7 +1264,7 @@ Changes from 2.0 to 2.1:
|
|||
Lawrence Ramsey)
|
||||
- new logo (by Gee Fung Sit)
|
||||
- added U+0180, U+018E, U+201F, U+2024, U+2025, U+203D, U+2200, U+2203,
|
||||
U+2213, U+222C, U+222D, U+2263 to Sans (by Gee Fung Sit)
|
||||
U+2213, U+222C, U+222D, U+2263 to Sans (by Gee Fung Sit)
|
||||
|
||||
Changes from 1.15 to 2.0:
|
||||
|
||||
|
@ -1426,4 +1452,4 @@ Changes from 0.9 to 0.9.1:
|
|||
- proper caron shape for dcaron and tcaron
|
||||
- minor visual changes
|
||||
|
||||
$Id: NEWS 2594 2015-05-17 07:54:48Z ben_laenen $
|
||||
$Id$
|
|
@ -1,4 +1,6 @@
|
|||
DejaVu fonts 2.35 (c)2004-2015 DejaVu fonts team
|
||||
[![Build Status](https://travis-ci.org/dejavu-fonts/dejavu-fonts.svg)](https://travis-ci.org/dejavu-fonts/dejavu-fonts)
|
||||
|
||||
DejaVu fonts 2.37 (c)2004-2016 DejaVu fonts team
|
||||
------------------------------------------------
|
||||
|
||||
The DejaVu fonts are a font family based on the Bitstream Vera Fonts
|
||||
|
@ -31,6 +33,7 @@ DejaVu Serif Condensed (experimental)
|
|||
DejaVu Serif Condensed Bold (experimental)
|
||||
DejaVu Serif Condensed Bold Italic (experimental)
|
||||
DejaVu Serif Condensed Italic (experimental)
|
||||
DejaVu Math TeX Gyre
|
||||
|
||||
All fonts are also available as derivative called DejaVu LGC with support
|
||||
only for Latin, Greek and Cyrillic scripts.
|
||||
|
@ -56,4 +59,9 @@ U+213C-U+2140, U+2295-U+2298, U+2308-U+230B, U+26A2-U+26B1, U+2701-U+2704,
|
|||
U+2706-U+2709, U+270C-U+274B, U+2758-U+275A, U+2761-U+2775, U+2780-U+2794,
|
||||
U+2798-U+27AF, U+27B1-U+27BE, U+FB05-U+FB06
|
||||
|
||||
$Id: README 2595 2015-05-17 07:57:27Z ben_laenen $
|
||||
DejaVu Math TeX Gyre
|
||||
--------------------
|
||||
TeX Gyre DJV Math by B. Jackowski, P. Strzelczyk and P. Pianowski
|
||||
(on behalf of TeX users groups).
|
||||
|
||||
$Id$
|
File diff suppressed because it is too large
Load diff
BIN
fonts/dejavu-fonts-ttf-2.37/ttf/DejaVuMathTeXGyre.ttf
Normal file
BIN
fonts/dejavu-fonts-ttf-2.37/ttf/DejaVuMathTeXGyre.ttf
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
fonts/dejavu-fonts-ttf-2.37/ttf/DejaVuSans-ExtraLight.ttf
Normal file
BIN
fonts/dejavu-fonts-ttf-2.37/ttf/DejaVuSans-ExtraLight.ttf
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -11,7 +11,7 @@ U+0180 Latin Extended-B 100% (208/208) 100% (208/208
|
|||
U+0250 IPA Extensions 100% (96/96) 100% (96/96) 100% (96/96)
|
||||
U+02b0 Spacing Modifier Letters 78% (63/80) 73% (59/80) 62% (50/80)
|
||||
U+0300 Combining Diacritical Marks 83% (93/112) 61% (69/112) 59% (67/112)
|
||||
U+0370 Greek and Coptic 99% (134/135) 88% (120/135) 81% (110/135)
|
||||
U+0370 Greek and Coptic 100% (135/135) 89% (121/135) 85% (116/135)
|
||||
U+0400 Cyrillic 100% (256/256) 79% (204/256) 70% (180/256)
|
||||
U+0500 Cyrillic Supplement 79% (38/48) 20% (10/48) 12% (6/48)
|
||||
U+0530 Armenian 96% (86/89) 96% (86/89) 96% (86/89)
|
||||
|
@ -23,16 +23,16 @@ U+0780 Thaana (0/50) (0/50)
|
|||
U+07c0 NKo 91% (54/59) (0/59) (0/59)
|
||||
U+0800 Samaritan (0/61) (0/61) (0/61)
|
||||
U+0840 Mandaic (0/29) (0/29) (0/29)
|
||||
U+08a0 Arabic Extended-A (0/47) (0/47) (0/47)
|
||||
U+08a0 Arabic Extended-A (0/73) (0/73) (0/73)
|
||||
U+0900 Devanagari (0/128) (0/128) (0/128)
|
||||
U+0980 Bengali (0/93) (0/93) (0/93)
|
||||
U+0a00 Gurmukhi (0/79) (0/79) (0/79)
|
||||
U+0a80 Gujarati (0/84) (0/84) (0/84)
|
||||
U+0a80 Gujarati (0/85) (0/85) (0/85)
|
||||
U+0b00 Oriya (0/90) (0/90) (0/90)
|
||||
U+0b80 Tamil (0/72) (0/72) (0/72)
|
||||
U+0c00 Telugu (0/95) (0/95) (0/95)
|
||||
U+0c80 Kannada (0/87) (0/87) (0/87)
|
||||
U+0d00 Malayalam (0/99) (0/99) (0/99)
|
||||
U+0c00 Telugu (0/96) (0/96) (0/96)
|
||||
U+0c80 Kannada (0/88) (0/88) (0/88)
|
||||
U+0d00 Malayalam (0/114) (0/114) (0/114)
|
||||
U+0d80 Sinhala (0/90) (0/90) (0/90)
|
||||
U+0e00 Thai 1% (1/87) 1% (1/87) 1% (1/87)
|
||||
U+0e80 Lao 97% (65/67) (0/67) 68% (46/67)
|
||||
|
@ -42,7 +42,7 @@ U+10a0 Georgian 94% (83/88) 94% (83/88)
|
|||
U+1100 Hangul Jamo (0/256) (0/256) (0/256)
|
||||
U+1200 Ethiopic (0/358) (0/358) (0/358)
|
||||
U+1380 Ethiopic Supplement (0/26) (0/26) (0/26)
|
||||
U+13a0 Cherokee (0/85) (0/85) (0/85)
|
||||
U+13a0 Cherokee (0/92) (0/92) (0/92)
|
||||
U+1400 Unified Canadian Aboriginal Syllabics 63% (404/640) (0/640) (0/640)
|
||||
U+1680 Ogham 100% (29/29) (0/29) (0/29)
|
||||
U+16a0 Runic (0/89) (0/89) (0/89)
|
||||
|
@ -65,22 +65,23 @@ U+1b80 Sundanese (0/64) (0/64)
|
|||
U+1bc0 Batak (0/56) (0/56) (0/56)
|
||||
U+1c00 Lepcha (0/74) (0/74) (0/74)
|
||||
U+1c50 Ol Chiki (0/48) (0/48) (0/48)
|
||||
U+1c80 Cyrillic Extended-C (0/9) (0/9) (0/9)
|
||||
U+1cc0 Sundanese Supplement (0/8) (0/8) (0/8)
|
||||
U+1cd0 Vedic Extensions (0/41) (0/41) (0/41)
|
||||
U+1d00 Phonetic Extensions 82% (106/128) 89% (115/128) 48% (62/128)
|
||||
U+1d80 Phonetic Extensions Supplement 59% (38/64) 59% (38/64) 57% (37/64)
|
||||
U+1dc0 Combining Diacritical Marks Supplement 10% (6/58) 10% (6/58) (0/58)
|
||||
U+1dc0 Combining Diacritical Marks Supplement 10% (6/59) 10% (6/59) (0/59)
|
||||
U+1e00 Latin Extended Additional 98% (252/256) 98% (252/256) 71% (182/256)
|
||||
U+1f00 Greek Extended 100% (233/233) 100% (233/233) 100% (233/233)
|
||||
U+2000 General Punctuation 96% (107/111) 78% (87/111) 48% (54/111)
|
||||
U+2070 Superscripts and Subscripts 100% (42/42) 100% (42/42) 100% (42/42)
|
||||
U+20a0 Currency Symbols 86% (26/30) 33% (10/30) 80% (24/30)
|
||||
U+20a0 Currency Symbols 83% (26/31) 32% (10/31) 83% (26/31)
|
||||
U+20d0 Combining Diacritical Marks for Symbols 21% (7/33) (0/33) (0/33)
|
||||
U+2100 Letterlike Symbols 93% (75/80) 42% (34/80) 22% (18/80)
|
||||
U+2150 Number Forms 94% (55/58) 94% (55/58) 27% (16/58)
|
||||
U+2150 Number Forms 91% (55/60) 91% (55/60) 26% (16/60)
|
||||
U+2190 Arrows 100% (112/112) 100% (112/112) 100% (112/112)
|
||||
U+2200 Mathematical Operators 100% (256/256) 39% (101/256) 69% (178/256)
|
||||
U+2300 Miscellaneous Technical 25% (65/251) 14% (36/251) 54% (136/251)
|
||||
U+2300 Miscellaneous Technical 25% (65/255) 14% (36/255) 53% (136/255)
|
||||
U+2400 Control Pictures 5% (2/39) 2% (1/39) 2% (1/39)
|
||||
U+2440 Optical Character Recognition (0/11) (0/11) (0/11)
|
||||
U+2460 Enclosed Alphanumerics 6% (10/160) (0/160) (0/160)
|
||||
|
@ -95,7 +96,7 @@ U+2800 Braille Patterns 100% (256/256) 100% (256/256
|
|||
U+2900 Supplemental Arrows-B 4% (6/128) 100% (128/128) (0/128)
|
||||
U+2980 Miscellaneous Mathematical Symbols-B 10% (13/128) 0% (1/128) 5% (7/128)
|
||||
U+2a00 Supplemental Mathematical Operators 28% (74/256) 2% (6/256) 1% (4/256)
|
||||
U+2b00 Miscellaneous Symbols and Arrows 17% (35/202) 13% (27/202) 8% (18/202)
|
||||
U+2b00 Miscellaneous Symbols and Arrows 16% (35/206) 13% (27/206) 8% (18/206)
|
||||
U+2c00 Glagolitic (0/94) (0/94) (0/94)
|
||||
U+2c60 Latin Extended-C 96% (31/32) 84% (27/32) 43% (14/32)
|
||||
U+2c80 Coptic (0/123) (0/123) (0/123)
|
||||
|
@ -103,7 +104,7 @@ U+2d00 Georgian Supplement 95% (38/40) 95% (38/40)
|
|||
U+2d30 Tifinagh 93% (55/59) (0/59) (0/59)
|
||||
U+2d80 Ethiopic Extended (0/79) (0/79) (0/79)
|
||||
U+2de0 Cyrillic Extended-A (0/32) (0/32) (0/32)
|
||||
U+2e00 Supplemental Punctuation 10% (7/67) 10% (7/67) 10% (7/67)
|
||||
U+2e00 Supplemental Punctuation 10% (7/69) 10% (7/69) 10% (7/69)
|
||||
U+2e80 CJK Radicals Supplement (0/115) (0/115) (0/115)
|
||||
U+2f00 Kangxi Radicals (0/214) (0/214) (0/214)
|
||||
U+2ff0 Ideographic Description Characters (0/12) (0/12) (0/12)
|
||||
|
@ -125,15 +126,15 @@ U+a000 Yi Syllables (0/1165) (0/1165)
|
|||
U+a490 Yi Radicals (0/55) (0/55) (0/55)
|
||||
U+a4d0 Lisu 100% (48/48) (0/48) (0/48)
|
||||
U+a500 Vai (0/300) (0/300) (0/300)
|
||||
U+a640 Cyrillic Extended-B 32% (31/95) 10% (10/95) (0/95)
|
||||
U+a640 Cyrillic Extended-B 34% (33/96) 12% (12/96) (0/96)
|
||||
U+a6a0 Bamum (0/88) (0/88) (0/88)
|
||||
U+a700 Modifier Tone Letters 62% (20/32) 62% (20/32) 62% (20/32)
|
||||
U+a720 Latin Extended-D 50% (77/152) 39% (60/152) 11% (17/152)
|
||||
U+a720 Latin Extended-D 48% (77/160) 37% (60/160) 10% (17/160)
|
||||
U+a800 Syloti Nagri (0/44) (0/44) (0/44)
|
||||
U+a830 Common Indic Number Forms (0/10) (0/10) (0/10)
|
||||
U+a840 Phags-pa (0/56) (0/56) (0/56)
|
||||
U+a880 Saurashtra (0/81) (0/81) (0/81)
|
||||
U+a8e0 Devanagari Extended (0/28) (0/28) (0/28)
|
||||
U+a880 Saurashtra (0/82) (0/82) (0/82)
|
||||
U+a8e0 Devanagari Extended (0/30) (0/30) (0/30)
|
||||
U+a900 Kayah Li (0/48) (0/48) (0/48)
|
||||
U+a930 Rejang (0/37) (0/37) (0/37)
|
||||
U+a960 Hangul Jamo Extended-A (0/29) (0/29) (0/29)
|
||||
|
@ -144,7 +145,8 @@ U+aa60 Myanmar Extended-A (0/32) (0/32)
|
|||
U+aa80 Tai Viet (0/72) (0/72) (0/72)
|
||||
U+aae0 Meetei Mayek Extensions (0/23) (0/23) (0/23)
|
||||
U+ab00 Ethiopic Extended-A (0/32) (0/32) (0/32)
|
||||
U+ab30 Latin Extended-E (0/50) (0/50) (0/50)
|
||||
U+ab30 Latin Extended-E (0/54) (0/54) (0/54)
|
||||
U+ab70 Cherokee Supplement (0/80) (0/80) (0/80)
|
||||
U+abc0 Meetei Mayek (0/56) (0/56) (0/56)
|
||||
U+ac00 Hangul Syllables (0/0) (0/0) (0/0)
|
||||
U+d7b0 Hangul Jamo Extended-B (0/72) (0/72) (0/72)
|
||||
|
@ -157,7 +159,7 @@ U+fb00 Alphabetic Presentation Forms 100% (58/58) 12% (7/58)
|
|||
U+fb50 Arabic Presentation Forms-A 17% (108/611) (0/611) 11% (72/611)
|
||||
U+fe00 Variation Selectors 100% (16/16) 100% (16/16) (0/16)
|
||||
U+fe10 Vertical Forms (0/10) (0/10) (0/10)
|
||||
U+fe20 Combining Half Marks 28% (4/14) (0/14) (0/14)
|
||||
U+fe20 Combining Half Marks 25% (4/16) (0/16) (0/16)
|
||||
U+fe30 CJK Compatibility Forms (0/32) (0/32) (0/32)
|
||||
U+fe50 Small Form Variants (0/26) (0/26) (0/26)
|
||||
U+fe70 Arabic Presentation Forms-B 100% (141/141) (0/141) 100% (141/141)
|
||||
|
@ -166,7 +168,7 @@ U+fff0 Specials 100% (5/5) 100% (5/5)
|
|||
U+10000 Linear B Syllabary (0/88) (0/88) (0/88)
|
||||
U+10080 Linear B Ideograms (0/123) (0/123) (0/123)
|
||||
U+10100 Aegean Numbers (0/57) (0/57) (0/57)
|
||||
U+10140 Ancient Greek Numbers (0/77) (0/77) (0/77)
|
||||
U+10140 Ancient Greek Numbers (0/79) (0/79) (0/79)
|
||||
U+10190 Ancient Symbols (0/13) (0/13) (0/13)
|
||||
U+101d0 Phaistos Disc (0/46) (0/46) (0/46)
|
||||
U+10280 Lycian (0/29) (0/29) (0/29)
|
||||
|
@ -180,6 +182,7 @@ U+103a0 Old Persian (0/50) (0/50)
|
|||
U+10400 Deseret (0/80) (0/80) (0/80)
|
||||
U+10450 Shavian (0/48) (0/48) (0/48)
|
||||
U+10480 Osmanya (0/40) (0/40) (0/40)
|
||||
U+104b0 Osage (0/72) (0/72) (0/72)
|
||||
U+10500 Elbasan (0/40) (0/40) (0/40)
|
||||
U+10530 Caucasian Albanian (0/53) (0/53) (0/53)
|
||||
U+10600 Linear A (0/341) (0/341) (0/341)
|
||||
|
@ -187,10 +190,11 @@ U+10800 Cypriot Syllabary (0/55) (0/55)
|
|||
U+10840 Imperial Aramaic (0/31) (0/31) (0/31)
|
||||
U+10860 Palmyrene (0/32) (0/32) (0/32)
|
||||
U+10880 Nabataean (0/40) (0/40) (0/40)
|
||||
U+108e0 Hatran (0/26) (0/26) (0/26)
|
||||
U+10900 Phoenician (0/29) (0/29) (0/29)
|
||||
U+10920 Lydian (0/27) (0/27) (0/27)
|
||||
U+10980 Meroitic Hieroglyphs (0/32) (0/32) (0/32)
|
||||
U+109a0 Meroitic Cursive (0/26) (0/26) (0/26)
|
||||
U+109a0 Meroitic Cursive (0/90) (0/90) (0/90)
|
||||
U+10a00 Kharoshthi (0/65) (0/65) (0/65)
|
||||
U+10a60 Old South Arabian (0/32) (0/32) (0/32)
|
||||
U+10a80 Old North Arabian (0/32) (0/32) (0/32)
|
||||
|
@ -200,57 +204,74 @@ U+10b40 Inscriptional Parthian (0/30) (0/30)
|
|||
U+10b60 Inscriptional Pahlavi (0/27) (0/27) (0/27)
|
||||
U+10b80 Psalter Pahlavi (0/29) (0/29) (0/29)
|
||||
U+10c00 Old Turkic (0/73) (0/73) (0/73)
|
||||
U+10c80 Old Hungarian (0/108) (0/108) (0/108)
|
||||
U+10e60 Rumi Numeral Symbols (0/31) (0/31) (0/31)
|
||||
U+11000 Brahmi (0/109) (0/109) (0/109)
|
||||
U+11080 Kaithi (0/66) (0/66) (0/66)
|
||||
U+110d0 Sora Sompeng (0/35) (0/35) (0/35)
|
||||
U+11100 Chakma (0/67) (0/67) (0/67)
|
||||
U+11150 Mahajani (0/39) (0/39) (0/39)
|
||||
U+11180 Sharada (0/85) (0/85) (0/85)
|
||||
U+11180 Sharada (0/94) (0/94) (0/94)
|
||||
U+111e0 Sinhala Archaic Numbers (0/20) (0/20) (0/20)
|
||||
U+11200 Khojki (0/61) (0/61) (0/61)
|
||||
U+11200 Khojki (0/62) (0/62) (0/62)
|
||||
U+11280 Multani (0/38) (0/38) (0/38)
|
||||
U+112b0 Khudawadi (0/69) (0/69) (0/69)
|
||||
U+11300 Grantha (0/83) (0/83) (0/83)
|
||||
U+11300 Grantha (0/85) (0/85) (0/85)
|
||||
U+11400 Newa (0/92) (0/92) (0/92)
|
||||
U+11480 Tirhuta (0/82) (0/82) (0/82)
|
||||
U+11580 Siddham (0/72) (0/72) (0/72)
|
||||
U+11580 Siddham (0/92) (0/92) (0/92)
|
||||
U+11600 Modi (0/79) (0/79) (0/79)
|
||||
U+11660 Mongolian Supplement (0/13) (0/13) (0/13)
|
||||
U+11680 Takri (0/66) (0/66) (0/66)
|
||||
U+11700 Ahom (0/57) (0/57) (0/57)
|
||||
U+118a0 Warang Citi (0/84) (0/84) (0/84)
|
||||
U+11ac0 Pau Cin Hau (0/57) (0/57) (0/57)
|
||||
U+12000 Cuneiform (0/921) (0/921) (0/921)
|
||||
U+11c00 Bhaiksuki (0/97) (0/97) (0/97)
|
||||
U+11c70 Marchen (0/68) (0/68) (0/68)
|
||||
U+12000 Cuneiform (0/922) (0/922) (0/922)
|
||||
U+12400 Cuneiform Numbers and Punctuation (0/116) (0/116) (0/116)
|
||||
U+12480 Early Dynastic Cuneiform (0/196) (0/196) (0/196)
|
||||
U+13000 Egyptian Hieroglyphs (0/1071) (0/1071) (0/1071)
|
||||
U+14400 Anatolian Hieroglyphs (0/583) (0/583) (0/583)
|
||||
U+16800 Bamum Supplement (0/569) (0/569) (0/569)
|
||||
U+16a40 Mro (0/43) (0/43) (0/43)
|
||||
U+16ad0 Bassa Vah (0/36) (0/36) (0/36)
|
||||
U+16b00 Pahawh Hmong (0/127) (0/127) (0/127)
|
||||
U+16f00 Miao (0/133) (0/133) (0/133)
|
||||
U+16fe0 Ideographic Symbols and Punctuation (0/1) (0/1) (0/1)
|
||||
U+17000 Tangut (0/0) (0/0) (0/0)
|
||||
U+18800 Tangut Components (0/755) (0/755) (0/755)
|
||||
U+1b000 Kana Supplement (0/2) (0/2) (0/2)
|
||||
U+1bc00 Duployan (0/143) (0/143) (0/143)
|
||||
U+1bca0 Shorthand Format Controls (0/4) (0/4) (0/4)
|
||||
U+1d000 Byzantine Musical Symbols (0/246) (0/246) (0/246)
|
||||
U+1d100 Musical Symbols (0/220) (0/220) (0/220)
|
||||
U+1d100 Musical Symbols (0/231) (0/231) (0/231)
|
||||
U+1d200 Ancient Greek Musical Notation (0/70) (0/70) (0/70)
|
||||
U+1d300 Tai Xuan Jing Symbols 100% (87/87) (0/87) (0/87)
|
||||
U+1d360 Counting Rod Numerals (0/18) (0/18) (0/18)
|
||||
U+1d400 Mathematical Alphanumeric Symbols 11% (117/996) 10% (108/996) 6% (63/996)
|
||||
U+1d800 Sutton SignWriting (0/672) (0/672) (0/672)
|
||||
U+1e000 Glagolitic Supplement (0/38) (0/38) (0/38)
|
||||
U+1e800 Mende Kikakui (0/213) (0/213) (0/213)
|
||||
U+1e900 Adlam (0/87) (0/87) (0/87)
|
||||
U+1ee00 Arabic Mathematical Alphabetic Symbols 51% (74/143) (0/143) (0/143)
|
||||
U+1f000 Mahjong Tiles (0/44) (0/44) (0/44)
|
||||
U+1f030 Domino Tiles 100% (100/100) (0/100) (0/100)
|
||||
U+1f0a0 Playing Cards 71% (59/82) (0/82) (0/82)
|
||||
U+1f100 Enclosed Alphanumeric Supplement (0/173) (0/173) (0/173)
|
||||
U+1f200 Enclosed Ideographic Supplement (0/57) (0/57) (0/57)
|
||||
U+1f300 Miscellaneous Symbols and Pictographs 0% (4/742) (0/742) (0/742)
|
||||
U+1f600 Emoticons 80% (63/78) (0/78) (0/78)
|
||||
U+1f100 Enclosed Alphanumeric Supplement (0/191) (0/191) (0/191)
|
||||
U+1f200 Enclosed Ideographic Supplement (0/58) (0/58) (0/58)
|
||||
U+1f300 Miscellaneous Symbols and Pictographs 1% (12/768) (0/768) (0/768)
|
||||
U+1f600 Emoticons 80% (64/80) (0/80) (0/80)
|
||||
U+1f650 Ornamental Dingbats (0/48) (0/48) (0/48)
|
||||
U+1f680 Transport and Map Symbols (0/97) (0/97) (0/97)
|
||||
U+1f680 Transport and Map Symbols (0/103) (0/103) (0/103)
|
||||
U+1f700 Alchemical Symbols (0/116) (0/116) (0/116)
|
||||
U+1f780 Geometric Shapes Extended (0/85) (0/85) (0/85)
|
||||
U+1f800 Supplemental Arrows-C (0/148) (0/148) (0/148)
|
||||
U+1f900 Supplemental Symbols and Pictographs (0/82) (0/82) (0/82)
|
||||
U+20000 CJK Unified Ideographs Extension B (0/0) (0/0) (0/0)
|
||||
U+2a700 CJK Unified Ideographs Extension C (0/0) (0/0) (0/0)
|
||||
U+2b740 CJK Unified Ideographs Extension D (0/0) (0/0) (0/0)
|
||||
U+2b820 CJK Unified Ideographs Extension E (0/0) (0/0) (0/0)
|
||||
U+2f800 CJK Compatibility Ideographs Supplement (0/542) (0/542) (0/542)
|
||||
U+e0000 Tags (0/98) (0/98) (0/98)
|
||||
U+e0100 Variation Selectors Supplement (0/240) (0/240) (0/240)
|
Binary file not shown.
|
@ -308,6 +308,7 @@ public:
|
|||
void stroke();
|
||||
void fill();
|
||||
void paint();
|
||||
void paint(double opacity);
|
||||
void set_pattern(cairo_pattern const& pattern);
|
||||
void set_gradient(cairo_gradient const& pattern, box2d<double> const& bbox);
|
||||
void add_image(double x, double y, image_rgba8 const& data, double opacity = 1.0);
|
||||
|
@ -327,6 +328,9 @@ public:
|
|||
composite_mode_e halo_comp_op = src_over,
|
||||
double scale_factor = 1.0);
|
||||
|
||||
void push_group();
|
||||
void pop_group();
|
||||
|
||||
template <typename T>
|
||||
void add_path(T& path, unsigned start_index = 0)
|
||||
{
|
||||
|
|
|
@ -177,6 +177,7 @@ protected:
|
|||
cairo_context context_;
|
||||
renderer_common common_;
|
||||
cairo_face_manager face_manager_;
|
||||
bool style_level_compositing_;
|
||||
void setup(Map const& m);
|
||||
|
||||
};
|
||||
|
|
|
@ -50,6 +50,17 @@ struct exp_impl
|
|||
|
||||
};
|
||||
|
||||
// log
|
||||
struct log_impl
|
||||
{
|
||||
//using type = T;
|
||||
value_type operator() (value_type const& val) const
|
||||
{
|
||||
return std::log(val.to_double());
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
// sin
|
||||
struct sin_impl
|
||||
{
|
||||
|
|
|
@ -146,9 +146,19 @@ struct geometry : geometry_base<T>
|
|||
{
|
||||
using coord_type = T;
|
||||
|
||||
geometry()
|
||||
: geometry_base<T>() {} // empty
|
||||
#if __cpp_inheriting_constructors >= 200802
|
||||
|
||||
using geometry_base<T>::geometry_base;
|
||||
|
||||
#else
|
||||
|
||||
geometry() = default;
|
||||
|
||||
template <typename G>
|
||||
geometry(G && geom)
|
||||
: geometry_base<T>(std::forward<G>(geom)) {}
|
||||
|
||||
#endif
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
|
|
|
@ -57,15 +57,18 @@ using json_value_base = mapnik::util::variant<value_null,
|
|||
mapnik::util::recursive_wrapper<json_object> >;
|
||||
struct json_value : json_value_base
|
||||
{
|
||||
#if __cpp_inheriting_constructors >= 200802
|
||||
|
||||
using json_value_base::json_value_base;
|
||||
|
||||
#else
|
||||
|
||||
#ifdef _WINDOWS
|
||||
json_value() = default;
|
||||
|
||||
template <typename T>
|
||||
json_value(T && val)
|
||||
: json_value_base(std::forward<T>(val)) {}
|
||||
#else
|
||||
// MSVC 2015 inheriting constructors is not working in this context (support is apparently planned)
|
||||
using json_value_base::json_value_base;
|
||||
|
||||
#endif
|
||||
};
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
This copyright and license do not apply to any other software
|
||||
with which this software may have been included.
|
||||
|
||||
Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
|
||||
SCons - a software construction tool
|
||||
|
||||
|
|
|
@ -1,45 +0,0 @@
|
|||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
# "Software"), to deal in the Software without restriction, including
|
||||
# without limitation the rights to use, copy, modify, merge, publish,
|
||||
# distribute, sublicense, and/or sell copies of the Software, and to
|
||||
# permit persons to whom the Software is furnished to do so, subject to
|
||||
# the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included
|
||||
# in all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
|
||||
# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
||||
# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__doc__ = """
|
||||
collections compatibility module for older (pre-2.4) Python versions
|
||||
|
||||
This does not not NOT (repeat, *NOT*) provide complete collections
|
||||
functionality. It only wraps the portions of collections functionality
|
||||
used by SCons, in an interface that looks enough like collections for
|
||||
our purposes.
|
||||
"""
|
||||
|
||||
__revision__ = "src/engine/SCons/compat/_scons_collections.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
# Use exec to hide old names from fixers.
|
||||
exec("""if True:
|
||||
from UserDict import UserDict
|
||||
from UserList import UserList
|
||||
from UserString import UserString""")
|
||||
|
||||
# Local Variables:
|
||||
# tab-width:4
|
||||
# indent-tabs-mode:nil
|
||||
# End:
|
||||
# vim: set expandtab tabstop=4 shiftwidth=4:
|
|
@ -1,563 +0,0 @@
|
|||
"""Classes to represent arbitrary sets (including sets of sets).
|
||||
|
||||
This module implements sets using dictionaries whose values are
|
||||
ignored. The usual operations (union, intersection, deletion, etc.)
|
||||
are provided as both methods and operators.
|
||||
|
||||
Important: sets are not sequences! While they support 'x in s',
|
||||
'len(s)', and 'for x in s', none of those operations are unique for
|
||||
sequences; for example, mappings support all three as well. The
|
||||
characteristic operation for sequences is subscripting with small
|
||||
integers: s[i], for i in range(len(s)). Sets don't support
|
||||
subscripting at all. Also, sequences allow multiple occurrences and
|
||||
their elements have a definite order; sets on the other hand don't
|
||||
record multiple occurrences and don't remember the order of element
|
||||
insertion (which is why they don't support s[i]).
|
||||
|
||||
The following classes are provided:
|
||||
|
||||
BaseSet -- All the operations common to both mutable and immutable
|
||||
sets. This is an abstract class, not meant to be directly
|
||||
instantiated.
|
||||
|
||||
Set -- Mutable sets, subclass of BaseSet; not hashable.
|
||||
|
||||
ImmutableSet -- Immutable sets, subclass of BaseSet; hashable.
|
||||
An iterable argument is mandatory to create an ImmutableSet.
|
||||
|
||||
_TemporarilyImmutableSet -- A wrapper around a Set, hashable,
|
||||
giving the same hash value as the immutable set equivalent
|
||||
would have. Do not use this class directly.
|
||||
|
||||
Only hashable objects can be added to a Set. In particular, you cannot
|
||||
really add a Set as an element to another Set; if you try, what is
|
||||
actually added is an ImmutableSet built from it (it compares equal to
|
||||
the one you tried adding).
|
||||
|
||||
When you ask if `x in y' where x is a Set and y is a Set or
|
||||
ImmutableSet, x is wrapped into a _TemporarilyImmutableSet z, and
|
||||
what's tested is actually `z in y'.
|
||||
|
||||
"""
|
||||
|
||||
# Code history:
|
||||
#
|
||||
# - Greg V. Wilson wrote the first version, using a different approach
|
||||
# to the mutable/immutable problem, and inheriting from dict.
|
||||
#
|
||||
# - Alex Martelli modified Greg's version to implement the current
|
||||
# Set/ImmutableSet approach, and make the data an attribute.
|
||||
#
|
||||
# - Guido van Rossum rewrote much of the code, made some API changes,
|
||||
# and cleaned up the docstrings.
|
||||
#
|
||||
# - Raymond Hettinger added a number of speedups and other
|
||||
# improvements.
|
||||
|
||||
# protect this import from the fixers...
|
||||
exec('from itertools import ifilterfalse as filterfalse')
|
||||
|
||||
__all__ = ['BaseSet', 'Set', 'ImmutableSet']
|
||||
|
||||
class BaseSet(object):
|
||||
"""Common base class for mutable and immutable sets."""
|
||||
|
||||
__slots__ = ['_data']
|
||||
|
||||
# Constructor
|
||||
|
||||
def __init__(self):
|
||||
"""This is an abstract class."""
|
||||
# Don't call this from a concrete subclass!
|
||||
if self.__class__ is BaseSet:
|
||||
raise TypeError("BaseSet is an abstract class. "
|
||||
"Use Set or ImmutableSet.")
|
||||
|
||||
# Standard protocols: __len__, __repr__, __str__, __iter__
|
||||
|
||||
def __len__(self):
|
||||
"""Return the number of elements of a set."""
|
||||
return len(self._data)
|
||||
|
||||
def __repr__(self):
|
||||
"""Return string representation of a set.
|
||||
|
||||
This looks like 'Set([<list of elements>])'.
|
||||
"""
|
||||
return self._repr()
|
||||
|
||||
# __str__ is the same as __repr__
|
||||
__str__ = __repr__
|
||||
|
||||
def _repr(self, sort_them=False):
|
||||
elements = list(self._data.keys())
|
||||
if sort_them:
|
||||
elements.sort()
|
||||
return '%s(%r)' % (self.__class__.__name__, elements)
|
||||
|
||||
def __iter__(self):
|
||||
"""Return an iterator over the elements or a set.
|
||||
|
||||
This is the keys iterator for the underlying dict.
|
||||
"""
|
||||
# Wrapping name in () prevents fixer from "fixing" this
|
||||
return (self._data.iterkeys)()
|
||||
|
||||
# Three-way comparison is not supported. However, because __eq__ is
|
||||
# tried before __cmp__, if Set x == Set y, x.__eq__(y) returns True and
|
||||
# then cmp(x, y) returns 0 (Python doesn't actually call __cmp__ in this
|
||||
# case).
|
||||
|
||||
def __cmp__(self, other):
|
||||
raise TypeError("can't compare sets using cmp()")
|
||||
|
||||
# Equality comparisons using the underlying dicts. Mixed-type comparisons
|
||||
# are allowed here, where Set == z for non-Set z always returns False,
|
||||
# and Set != z always True. This allows expressions like "x in y" to
|
||||
# give the expected result when y is a sequence of mixed types, not
|
||||
# raising a pointless TypeError just because y contains a Set, or x is
|
||||
# a Set and y contain's a non-set ("in" invokes only __eq__).
|
||||
# Subtle: it would be nicer if __eq__ and __ne__ could return
|
||||
# NotImplemented instead of True or False. Then the other comparand
|
||||
# would get a chance to determine the result, and if the other comparand
|
||||
# also returned NotImplemented then it would fall back to object address
|
||||
# comparison (which would always return False for __eq__ and always
|
||||
# True for __ne__). However, that doesn't work, because this type
|
||||
# *also* implements __cmp__: if, e.g., __eq__ returns NotImplemented,
|
||||
# Python tries __cmp__ next, and the __cmp__ here then raises TypeError.
|
||||
|
||||
def __eq__(self, other):
|
||||
if isinstance(other, BaseSet):
|
||||
return self._data == other._data
|
||||
else:
|
||||
return False
|
||||
|
||||
def __ne__(self, other):
|
||||
if isinstance(other, BaseSet):
|
||||
return self._data != other._data
|
||||
else:
|
||||
return True
|
||||
|
||||
# Copying operations
|
||||
|
||||
def copy(self):
|
||||
"""Return a shallow copy of a set."""
|
||||
result = self.__class__()
|
||||
result._data.update(self._data)
|
||||
return result
|
||||
|
||||
__copy__ = copy # For the copy module
|
||||
|
||||
def __deepcopy__(self, memo):
|
||||
"""Return a deep copy of a set; used by copy module."""
|
||||
# This pre-creates the result and inserts it in the memo
|
||||
# early, in case the deep copy recurses into another reference
|
||||
# to this same set. A set can't be an element of itself, but
|
||||
# it can certainly contain an object that has a reference to
|
||||
# itself.
|
||||
from copy import deepcopy
|
||||
result = self.__class__()
|
||||
memo[id(self)] = result
|
||||
data = result._data
|
||||
value = True
|
||||
for elt in self:
|
||||
data[deepcopy(elt, memo)] = value
|
||||
return result
|
||||
|
||||
# Standard set operations: union, intersection, both differences.
|
||||
# Each has an operator version (e.g. __or__, invoked with |) and a
|
||||
# method version (e.g. union).
|
||||
# Subtle: Each pair requires distinct code so that the outcome is
|
||||
# correct when the type of other isn't suitable. For example, if
|
||||
# we did "union = __or__" instead, then Set().union(3) would return
|
||||
# NotImplemented instead of raising TypeError (albeit that *why* it
|
||||
# raises TypeError as-is is also a bit subtle).
|
||||
|
||||
def __or__(self, other):
|
||||
"""Return the union of two sets as a new set.
|
||||
|
||||
(I.e. all elements that are in either set.)
|
||||
"""
|
||||
if not isinstance(other, BaseSet):
|
||||
return NotImplemented
|
||||
return self.union(other)
|
||||
|
||||
def union(self, other):
|
||||
"""Return the union of two sets as a new set.
|
||||
|
||||
(I.e. all elements that are in either set.)
|
||||
"""
|
||||
result = self.__class__(self)
|
||||
result._update(other)
|
||||
return result
|
||||
|
||||
def __and__(self, other):
|
||||
"""Return the intersection of two sets as a new set.
|
||||
|
||||
(I.e. all elements that are in both sets.)
|
||||
"""
|
||||
if not isinstance(other, BaseSet):
|
||||
return NotImplemented
|
||||
return self.intersection(other)
|
||||
|
||||
def intersection(self, other):
|
||||
"""Return the intersection of two sets as a new set.
|
||||
|
||||
(I.e. all elements that are in both sets.)
|
||||
"""
|
||||
if not isinstance(other, BaseSet):
|
||||
other = Set(other)
|
||||
if len(self) <= len(other):
|
||||
little, big = self, other
|
||||
else:
|
||||
little, big = other, self
|
||||
common = iter(filter(big._data.has_key, little))
|
||||
return self.__class__(common)
|
||||
|
||||
def __xor__(self, other):
|
||||
"""Return the symmetric difference of two sets as a new set.
|
||||
|
||||
(I.e. all elements that are in exactly one of the sets.)
|
||||
"""
|
||||
if not isinstance(other, BaseSet):
|
||||
return NotImplemented
|
||||
return self.symmetric_difference(other)
|
||||
|
||||
def symmetric_difference(self, other):
|
||||
"""Return the symmetric difference of two sets as a new set.
|
||||
|
||||
(I.e. all elements that are in exactly one of the sets.)
|
||||
"""
|
||||
result = self.__class__()
|
||||
data = result._data
|
||||
value = True
|
||||
selfdata = self._data
|
||||
try:
|
||||
otherdata = other._data
|
||||
except AttributeError:
|
||||
otherdata = Set(other)._data
|
||||
for elt in filterfalse(otherdata.has_key, selfdata):
|
||||
data[elt] = value
|
||||
for elt in filterfalse(selfdata.has_key, otherdata):
|
||||
data[elt] = value
|
||||
return result
|
||||
|
||||
def __sub__(self, other):
|
||||
"""Return the difference of two sets as a new Set.
|
||||
|
||||
(I.e. all elements that are in this set and not in the other.)
|
||||
"""
|
||||
if not isinstance(other, BaseSet):
|
||||
return NotImplemented
|
||||
return self.difference(other)
|
||||
|
||||
def difference(self, other):
|
||||
"""Return the difference of two sets as a new Set.
|
||||
|
||||
(I.e. all elements that are in this set and not in the other.)
|
||||
"""
|
||||
result = self.__class__()
|
||||
data = result._data
|
||||
try:
|
||||
otherdata = other._data
|
||||
except AttributeError:
|
||||
otherdata = Set(other)._data
|
||||
value = True
|
||||
for elt in filterfalse(otherdata.has_key, self):
|
||||
data[elt] = value
|
||||
return result
|
||||
|
||||
# Membership test
|
||||
|
||||
def __contains__(self, element):
|
||||
"""Report whether an element is a member of a set.
|
||||
|
||||
(Called in response to the expression `element in self'.)
|
||||
"""
|
||||
try:
|
||||
return element in self._data
|
||||
except TypeError:
|
||||
transform = getattr(element, "__as_temporarily_immutable__", None)
|
||||
if transform is None:
|
||||
raise # re-raise the TypeError exception we caught
|
||||
return transform() in self._data
|
||||
|
||||
# Subset and superset test
|
||||
|
||||
def issubset(self, other):
|
||||
"""Report whether another set contains this set."""
|
||||
self._binary_sanity_check(other)
|
||||
if len(self) > len(other): # Fast check for obvious cases
|
||||
return False
|
||||
for elt in filterfalse(other._data.has_key, self):
|
||||
return False
|
||||
return True
|
||||
|
||||
def issuperset(self, other):
|
||||
"""Report whether this set contains another set."""
|
||||
self._binary_sanity_check(other)
|
||||
if len(self) < len(other): # Fast check for obvious cases
|
||||
return False
|
||||
for elt in filterfalse(self._data.has_key, other):
|
||||
return False
|
||||
return True
|
||||
|
||||
# Inequality comparisons using the is-subset relation.
|
||||
__le__ = issubset
|
||||
__ge__ = issuperset
|
||||
|
||||
def __lt__(self, other):
|
||||
self._binary_sanity_check(other)
|
||||
return len(self) < len(other) and self.issubset(other)
|
||||
|
||||
def __gt__(self, other):
|
||||
self._binary_sanity_check(other)
|
||||
return len(self) > len(other) and self.issuperset(other)
|
||||
|
||||
# Assorted helpers
|
||||
|
||||
def _binary_sanity_check(self, other):
|
||||
# Check that the other argument to a binary operation is also
|
||||
# a set, raising a TypeError otherwise.
|
||||
if not isinstance(other, BaseSet):
|
||||
raise TypeError("Binary operation only permitted between sets")
|
||||
|
||||
def _compute_hash(self):
|
||||
# Calculate hash code for a set by xor'ing the hash codes of
|
||||
# the elements. This ensures that the hash code does not depend
|
||||
# on the order in which elements are added to the set. This is
|
||||
# not called __hash__ because a BaseSet should not be hashable;
|
||||
# only an ImmutableSet is hashable.
|
||||
result = 0
|
||||
for elt in self:
|
||||
result ^= hash(elt)
|
||||
return result
|
||||
|
||||
def _update(self, iterable):
|
||||
# The main loop for update() and the subclass __init__() methods.
|
||||
data = self._data
|
||||
|
||||
# Use the fast update() method when a dictionary is available.
|
||||
if isinstance(iterable, BaseSet):
|
||||
data.update(iterable._data)
|
||||
return
|
||||
|
||||
value = True
|
||||
|
||||
if type(iterable) in (list, tuple, xrange):
|
||||
# Optimized: we know that __iter__() and next() can't
|
||||
# raise TypeError, so we can move 'try:' out of the loop.
|
||||
it = iter(iterable)
|
||||
while True:
|
||||
try:
|
||||
for element in it:
|
||||
data[element] = value
|
||||
return
|
||||
except TypeError:
|
||||
transform = getattr(element, "__as_immutable__", None)
|
||||
if transform is None:
|
||||
raise # re-raise the TypeError exception we caught
|
||||
data[transform()] = value
|
||||
else:
|
||||
# Safe: only catch TypeError where intended
|
||||
for element in iterable:
|
||||
try:
|
||||
data[element] = value
|
||||
except TypeError:
|
||||
transform = getattr(element, "__as_immutable__", None)
|
||||
if transform is None:
|
||||
raise # re-raise the TypeError exception we caught
|
||||
data[transform()] = value
|
||||
|
||||
|
||||
class ImmutableSet(BaseSet):
|
||||
"""Immutable set class."""
|
||||
|
||||
__slots__ = ['_hashcode']
|
||||
|
||||
# BaseSet + hashing
|
||||
|
||||
def __init__(self, iterable=None):
|
||||
"""Construct an immutable set from an optional iterable."""
|
||||
self._hashcode = None
|
||||
self._data = {}
|
||||
if iterable is not None:
|
||||
self._update(iterable)
|
||||
|
||||
def __hash__(self):
|
||||
if self._hashcode is None:
|
||||
self._hashcode = self._compute_hash()
|
||||
return self._hashcode
|
||||
|
||||
def __getstate__(self):
|
||||
return self._data, self._hashcode
|
||||
|
||||
def __setstate__(self, state):
|
||||
self._data, self._hashcode = state
|
||||
|
||||
class Set(BaseSet):
|
||||
""" Mutable set class."""
|
||||
|
||||
__slots__ = []
|
||||
|
||||
# BaseSet + operations requiring mutability; no hashing
|
||||
|
||||
def __init__(self, iterable=None):
|
||||
"""Construct a set from an optional iterable."""
|
||||
self._data = {}
|
||||
if iterable is not None:
|
||||
self._update(iterable)
|
||||
|
||||
def __getstate__(self):
|
||||
# getstate's results are ignored if it is not
|
||||
return self._data,
|
||||
|
||||
def __setstate__(self, data):
|
||||
self._data, = data
|
||||
|
||||
def __hash__(self):
|
||||
"""A Set cannot be hashed."""
|
||||
# We inherit object.__hash__, so we must deny this explicitly
|
||||
raise TypeError("Can't hash a Set, only an ImmutableSet.")
|
||||
|
||||
# In-place union, intersection, differences.
|
||||
# Subtle: The xyz_update() functions deliberately return None,
|
||||
# as do all mutating operations on built-in container types.
|
||||
# The __xyz__ spellings have to return self, though.
|
||||
|
||||
def __ior__(self, other):
|
||||
"""Update a set with the union of itself and another."""
|
||||
self._binary_sanity_check(other)
|
||||
self._data.update(other._data)
|
||||
return self
|
||||
|
||||
def union_update(self, other):
|
||||
"""Update a set with the union of itself and another."""
|
||||
self._update(other)
|
||||
|
||||
def __iand__(self, other):
|
||||
"""Update a set with the intersection of itself and another."""
|
||||
self._binary_sanity_check(other)
|
||||
self._data = (self & other)._data
|
||||
return self
|
||||
|
||||
def intersection_update(self, other):
|
||||
"""Update a set with the intersection of itself and another."""
|
||||
if isinstance(other, BaseSet):
|
||||
self &= other
|
||||
else:
|
||||
self._data = (self.intersection(other))._data
|
||||
|
||||
def __ixor__(self, other):
|
||||
"""Update a set with the symmetric difference of itself and another."""
|
||||
self._binary_sanity_check(other)
|
||||
self.symmetric_difference_update(other)
|
||||
return self
|
||||
|
||||
def symmetric_difference_update(self, other):
|
||||
"""Update a set with the symmetric difference of itself and another."""
|
||||
data = self._data
|
||||
value = True
|
||||
if not isinstance(other, BaseSet):
|
||||
other = Set(other)
|
||||
if self is other:
|
||||
self.clear()
|
||||
for elt in other:
|
||||
if elt in data:
|
||||
del data[elt]
|
||||
else:
|
||||
data[elt] = value
|
||||
|
||||
def __isub__(self, other):
|
||||
"""Remove all elements of another set from this set."""
|
||||
self._binary_sanity_check(other)
|
||||
self.difference_update(other)
|
||||
return self
|
||||
|
||||
def difference_update(self, other):
|
||||
"""Remove all elements of another set from this set."""
|
||||
data = self._data
|
||||
if not isinstance(other, BaseSet):
|
||||
other = Set(other)
|
||||
if self is other:
|
||||
self.clear()
|
||||
for elt in filter(data.has_key, other):
|
||||
del data[elt]
|
||||
|
||||
# Python dict-like mass mutations: update, clear
|
||||
|
||||
def update(self, iterable):
|
||||
"""Add all values from an iterable (such as a list or file)."""
|
||||
self._update(iterable)
|
||||
|
||||
def clear(self):
|
||||
"""Remove all elements from this set."""
|
||||
self._data.clear()
|
||||
|
||||
# Single-element mutations: add, remove, discard
|
||||
|
||||
def add(self, element):
|
||||
"""Add an element to a set.
|
||||
|
||||
This has no effect if the element is already present.
|
||||
"""
|
||||
try:
|
||||
self._data[element] = True
|
||||
except TypeError:
|
||||
transform = getattr(element, "__as_immutable__", None)
|
||||
if transform is None:
|
||||
raise # re-raise the TypeError exception we caught
|
||||
self._data[transform()] = True
|
||||
|
||||
def remove(self, element):
|
||||
"""Remove an element from a set; it must be a member.
|
||||
|
||||
If the element is not a member, raise a KeyError.
|
||||
"""
|
||||
try:
|
||||
del self._data[element]
|
||||
except TypeError:
|
||||
transform = getattr(element, "__as_temporarily_immutable__", None)
|
||||
if transform is None:
|
||||
raise # re-raise the TypeError exception we caught
|
||||
del self._data[transform()]
|
||||
|
||||
def discard(self, element):
|
||||
"""Remove an element from a set if it is a member.
|
||||
|
||||
If the element is not a member, do nothing.
|
||||
"""
|
||||
try:
|
||||
self.remove(element)
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
def pop(self):
|
||||
"""Remove and return an arbitrary set element."""
|
||||
return self._data.popitem()[0]
|
||||
|
||||
def __as_immutable__(self):
|
||||
# Return a copy of self as an immutable set
|
||||
return ImmutableSet(self)
|
||||
|
||||
def __as_temporarily_immutable__(self):
|
||||
# Return self wrapped in a temporarily immutable set
|
||||
return _TemporarilyImmutableSet(self)
|
||||
|
||||
|
||||
class _TemporarilyImmutableSet(BaseSet):
|
||||
# Wrap a mutable set as if it was temporarily immutable.
|
||||
# This only supplies hashing and equality comparisons.
|
||||
|
||||
def __init__(self, set):
|
||||
self._set = set
|
||||
self._data = set._data # Needed by ImmutableSet.__eq__()
|
||||
|
||||
def __hash__(self):
|
||||
return self._set._compute_hash()
|
||||
|
||||
# Local Variables:
|
||||
# tab-width:4
|
||||
# indent-tabs-mode:nil
|
||||
# End:
|
||||
# vim: set expandtab tabstop=4 shiftwidth=4:
|
File diff suppressed because it is too large
Load diff
|
@ -76,7 +76,7 @@ way for wrapping up the functions.
|
|||
|
||||
"""
|
||||
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -97,7 +97,7 @@ way for wrapping up the functions.
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Action.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Action.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import dis
|
||||
import os
|
||||
|
@ -235,11 +235,7 @@ def _code_contents(code):
|
|||
# The code contents depends on the number of local variables
|
||||
# but not their actual names.
|
||||
contents.append("%s,%s" % (code.co_argcount, len(code.co_varnames)))
|
||||
try:
|
||||
contents.append(",%s,%s" % (len(code.co_cellvars), len(code.co_freevars)))
|
||||
except AttributeError:
|
||||
# Older versions of Python do not support closures.
|
||||
contents.append(",0,0")
|
||||
contents.append(",%s,%s" % (len(code.co_cellvars), len(code.co_freevars)))
|
||||
|
||||
# The code contents depends on any constants accessed by the
|
||||
# function. Note that we have to call _object_contents on each
|
||||
|
@ -276,11 +272,7 @@ def _function_contents(func):
|
|||
contents.append(',()')
|
||||
|
||||
# The function contents depends on the closure captured cell values.
|
||||
try:
|
||||
closure = func.func_closure or []
|
||||
except AttributeError:
|
||||
# Older versions of Python do not support closures.
|
||||
closure = []
|
||||
closure = func.func_closure or []
|
||||
|
||||
#xxx = [_object_contents(x.cell_contents) for x in closure]
|
||||
try:
|
||||
|
@ -946,7 +938,6 @@ class LazyAction(CommandGeneratorAction, CommandAction):
|
|||
|
||||
def __init__(self, var, kw):
|
||||
if SCons.Debug.track_instances: logInstanceCreation(self, 'Action.LazyAction')
|
||||
#FUTURE CommandAction.__init__(self, '${'+var+'}', **kw)
|
||||
CommandAction.__init__(self, '${'+var+'}', **kw)
|
||||
self.var = SCons.Util.to_String(var)
|
||||
self.gen_kw = kw
|
|
@ -76,7 +76,7 @@ There are the following methods for internal use within this module:
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -97,7 +97,7 @@ There are the following methods for internal use within this module:
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Builder.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Builder.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import collections
|
||||
|
||||
|
@ -299,7 +299,7 @@ def _node_errors(builder, env, tlist, slist):
|
|||
msg = "Two different environments were specified for target %s,\n\tbut they appear to have the same action: %s" % (t, action.genstring(tlist, slist, t.env))
|
||||
SCons.Warnings.warn(SCons.Warnings.DuplicateEnvironmentWarning, msg)
|
||||
else:
|
||||
msg = "Two environments with different actions were specified for the same target: %s" % t
|
||||
msg = "Two environments with different actions were specified for the same target: %s\n(action 1: %s)\n(action 2: %s)" % (t,t_contents,contents)
|
||||
raise UserError(msg)
|
||||
if builder.multi:
|
||||
if t.builder != builder:
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -21,17 +21,19 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/CacheDir.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/CacheDir.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
__doc__ = """
|
||||
CacheDir support
|
||||
"""
|
||||
|
||||
import os.path
|
||||
import json
|
||||
import os
|
||||
import stat
|
||||
import sys
|
||||
|
||||
import SCons.Action
|
||||
import SCons.Warnings
|
||||
|
||||
cache_enabled = True
|
||||
cache_debug = False
|
||||
|
@ -71,7 +73,8 @@ CacheRetrieve = SCons.Action.Action(CacheRetrieveFunc, CacheRetrieveString)
|
|||
CacheRetrieveSilent = SCons.Action.Action(CacheRetrieveFunc, None)
|
||||
|
||||
def CachePushFunc(target, source, env):
|
||||
if cache_readonly: return
|
||||
if cache_readonly:
|
||||
return
|
||||
|
||||
t = target[0]
|
||||
if t.nocache:
|
||||
|
@ -124,6 +127,10 @@ def CachePushFunc(target, source, env):
|
|||
|
||||
CachePush = SCons.Action.Action(CachePushFunc, None)
|
||||
|
||||
# Nasty hack to cut down to one warning for each cachedir path that needs
|
||||
# upgrading.
|
||||
warned = dict()
|
||||
|
||||
class CacheDir(object):
|
||||
|
||||
def __init__(self, path):
|
||||
|
@ -132,11 +139,63 @@ class CacheDir(object):
|
|||
except ImportError:
|
||||
msg = "No hashlib or MD5 module available, CacheDir() not supported"
|
||||
SCons.Warnings.warn(SCons.Warnings.NoMD5ModuleWarning, msg)
|
||||
self.path = None
|
||||
else:
|
||||
self.path = path
|
||||
path = None
|
||||
self.path = path
|
||||
self.current_cache_debug = None
|
||||
self.debugFP = None
|
||||
self.config = dict()
|
||||
if path is None:
|
||||
return
|
||||
# See if there's a config file in the cache directory. If there is,
|
||||
# use it. If there isn't, and the directory exists and isn't empty,
|
||||
# produce a warning. If the directory doesn't exist or is empty,
|
||||
# write a config file.
|
||||
config_file = os.path.join(path, 'config')
|
||||
if not os.path.exists(config_file):
|
||||
# A note: There is a race hazard here, if two processes start and
|
||||
# attempt to create the cache directory at the same time. However,
|
||||
# python doesn't really give you the option to do exclusive file
|
||||
# creation (it doesn't even give you the option to error on opening
|
||||
# an existing file for writing...). The ordering of events here
|
||||
# as an attempt to alleviate this, on the basis that it's a pretty
|
||||
# unlikely occurence (it'd require two builds with a brand new cache
|
||||
# directory)
|
||||
if os.path.isdir(path) and len(os.listdir(path)) != 0:
|
||||
self.config['prefix_len'] = 1
|
||||
# When building the project I was testing this on, the warning
|
||||
# was output over 20 times. That seems excessive
|
||||
global warned
|
||||
if self.path not in warned:
|
||||
msg = "Please upgrade your cache by running " +\
|
||||
" scons-configure-cache.py " + self.path
|
||||
SCons.Warnings.warn(SCons.Warnings.CacheVersionWarning, msg)
|
||||
warned[self.path] = True
|
||||
else:
|
||||
if not os.path.isdir(path):
|
||||
try:
|
||||
os.makedirs(path)
|
||||
except OSError:
|
||||
# If someone else is trying to create the directory at
|
||||
# the same time as me, bad things will happen
|
||||
msg = "Failed to create cache directory " + path
|
||||
raise SCons.Errors.EnvironmentError(msg)
|
||||
|
||||
self.config['prefix_len'] = 2
|
||||
if not os.path.exists(config_file):
|
||||
try:
|
||||
with open(config_file, 'w') as config:
|
||||
json.dump(self.config, config)
|
||||
except:
|
||||
msg = "Failed to write cache configuration for " + path
|
||||
raise SCons.Errors.EnvironmentError(msg)
|
||||
else:
|
||||
try:
|
||||
with open(config_file) as config:
|
||||
self.config = json.load(config)
|
||||
except ValueError:
|
||||
msg = "Failed to read cache configuration for " + path
|
||||
raise SCons.Errors.EnvironmentError(msg)
|
||||
|
||||
|
||||
def CacheDebug(self, fmt, target, cachefile):
|
||||
if cache_debug != self.current_cache_debug:
|
||||
|
@ -151,7 +210,7 @@ class CacheDir(object):
|
|||
self.debugFP.write(fmt % (target, os.path.split(cachefile)[1]))
|
||||
|
||||
def is_enabled(self):
|
||||
return (cache_enabled and not self.path is None)
|
||||
return cache_enabled and not self.path is None
|
||||
|
||||
def is_readonly(self):
|
||||
return cache_readonly
|
||||
|
@ -163,7 +222,7 @@ class CacheDir(object):
|
|||
return None, None
|
||||
|
||||
sig = node.get_cachedir_bsig()
|
||||
subdir = sig[0].upper()
|
||||
subdir = sig[:self.config['prefix_len']].upper()
|
||||
dir = os.path.join(self.path, subdir)
|
||||
return dir, os.path.join(dir, sig)
|
||||
|
|
@ -1,12 +1,15 @@
|
|||
"""SCons.Debug
|
||||
|
||||
Code for debugging SCons internal things. Shouldn't be
|
||||
needed by most users.
|
||||
needed by most users. Quick shortcuts:
|
||||
|
||||
from SCons.Debug import caller_trace
|
||||
caller_trace()
|
||||
|
||||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -28,7 +31,7 @@ needed by most users.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Debug.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Debug.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
@ -137,8 +140,12 @@ def caller_stack():
|
|||
caller_bases = {}
|
||||
caller_dicts = {}
|
||||
|
||||
# trace a caller's stack
|
||||
def caller_trace(back=0):
|
||||
"""
|
||||
Trace caller stack and save info into global dicts, which
|
||||
are printed automatically at the end of SCons execution.
|
||||
"""
|
||||
global caller_bases, caller_dicts
|
||||
import traceback
|
||||
tb = traceback.extract_stack(limit=3+back)
|
||||
tb.reverse()
|
|
@ -10,7 +10,7 @@ from distutils.msvccompiler.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -33,7 +33,7 @@ from distutils.msvccompiler.
|
|||
#
|
||||
from __future__ import division
|
||||
|
||||
__revision__ = "src/engine/SCons/Defaults.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Defaults.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
|
||||
import os
|
||||
|
@ -169,15 +169,73 @@ def get_paths_str(dest):
|
|||
else:
|
||||
return '"' + str(dest) + '"'
|
||||
|
||||
permission_dic = {
|
||||
'u':{
|
||||
'r':stat.S_IRUSR,
|
||||
'w':stat.S_IWUSR,
|
||||
'x':stat.S_IXUSR
|
||||
},
|
||||
'g':{
|
||||
'r':stat.S_IRGRP,
|
||||
'w':stat.S_IWGRP,
|
||||
'x':stat.S_IXGRP
|
||||
},
|
||||
'o':{
|
||||
'r':stat.S_IROTH,
|
||||
'w':stat.S_IWOTH,
|
||||
'x':stat.S_IXOTH
|
||||
}
|
||||
}
|
||||
|
||||
def chmod_func(dest, mode):
|
||||
import SCons.Util
|
||||
from string import digits
|
||||
SCons.Node.FS.invalidate_node_memos(dest)
|
||||
if not SCons.Util.is_List(dest):
|
||||
dest = [dest]
|
||||
for element in dest:
|
||||
os.chmod(str(element), mode)
|
||||
if SCons.Util.is_String(mode) and not 0 in [i in digits for i in mode]:
|
||||
mode = int(mode, 8)
|
||||
if not SCons.Util.is_String(mode):
|
||||
for element in dest:
|
||||
os.chmod(str(element), mode)
|
||||
else:
|
||||
mode = str(mode)
|
||||
for operation in mode.split(","):
|
||||
if "=" in operation:
|
||||
operator = "="
|
||||
elif "+" in operation:
|
||||
operator = "+"
|
||||
elif "-" in operation:
|
||||
operator = "-"
|
||||
else:
|
||||
raise SyntaxError("Could not find +, - or =")
|
||||
operation_list = operation.split(operator)
|
||||
if len(operation_list) is not 2:
|
||||
raise SyntaxError("More than one operator found")
|
||||
user = operation_list[0].strip().replace("a", "ugo")
|
||||
permission = operation_list[1].strip()
|
||||
new_perm = 0
|
||||
for u in user:
|
||||
for p in permission:
|
||||
try:
|
||||
new_perm = new_perm | permission_dic[u][p]
|
||||
except KeyError:
|
||||
raise SyntaxError("Unrecognized user or permission format")
|
||||
for element in dest:
|
||||
curr_perm = os.stat(str(element)).st_mode
|
||||
if operator == "=":
|
||||
os.chmod(str(element), new_perm)
|
||||
elif operator == "+":
|
||||
os.chmod(str(element), curr_perm | new_perm)
|
||||
elif operator == "-":
|
||||
os.chmod(str(element), curr_perm & ~new_perm)
|
||||
|
||||
def chmod_strfunc(dest, mode):
|
||||
return 'Chmod(%s, 0%o)' % (get_paths_str(dest), mode)
|
||||
import SCons.Util
|
||||
if not SCons.Util.is_String(mode):
|
||||
return 'Chmod(%s, 0%o)' % (get_paths_str(dest), mode)
|
||||
else:
|
||||
return 'Chmod(%s, "%s")' % (get_paths_str(dest), str(mode))
|
||||
|
||||
Chmod = ActionFactory(chmod_func, chmod_strfunc)
|
||||
|
||||
|
@ -493,7 +551,7 @@ def __libversionflags(env, version_var, flags_var):
|
|||
|
||||
ConstructionEnvironment = {
|
||||
'BUILDERS' : {},
|
||||
'SCANNERS' : [],
|
||||
'SCANNERS' : [ SCons.Tool.SourceFileScanner ],
|
||||
'CONFIGUREDIR' : '#/.sconf_temp',
|
||||
'CONFIGURELOG' : '#/config.log',
|
||||
'CPPSUFFIXES' : SCons.Tool.CSuffixes,
|
|
@ -10,7 +10,7 @@ Environment
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -31,7 +31,7 @@ Environment
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Environment.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Environment.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
|
||||
import copy
|
||||
|
@ -857,25 +857,6 @@ class SubstitutionEnvironment(object):
|
|||
self[key] = t
|
||||
return self
|
||||
|
||||
# def MergeShellPaths(self, args, prepend=1):
|
||||
# """
|
||||
# Merge the dict in args into the shell environment in env['ENV'].
|
||||
# Shell path elements are appended or prepended according to prepend.
|
||||
|
||||
# Uses Pre/AppendENVPath, so it always appends or prepends uniquely.
|
||||
|
||||
# Example: env.MergeShellPaths({'LIBPATH': '/usr/local/lib'})
|
||||
# prepends /usr/local/lib to env['ENV']['LIBPATH'].
|
||||
# """
|
||||
|
||||
# for pathname, pathval in args.items():
|
||||
# if not pathval:
|
||||
# continue
|
||||
# if prepend:
|
||||
# self.PrependENVPath(pathname, pathval)
|
||||
# else:
|
||||
# self.AppendENVPath(pathname, pathval)
|
||||
|
||||
|
||||
def default_decide_source(dependency, target, prev_ni):
|
||||
f = SCons.Defaults.DefaultEnvironment().decide_source
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -28,7 +28,7 @@ and user errors in SCons.
|
|||
|
||||
"""
|
||||
|
||||
__revision__ = "src/engine/SCons/Errors.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Errors.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import SCons.Util
|
||||
|
||||
|
@ -73,7 +73,7 @@ class BuildError(Exception):
|
|||
Information about the cause of the location of the error:
|
||||
---------------------------------------------------------
|
||||
|
||||
node : the error occured while building this target node(s)
|
||||
node : the error occurred while building this target node(s)
|
||||
|
||||
executor : the executor that caused the build to fail (might
|
||||
be None if the build failures is not due to the
|
|
@ -6,7 +6,7 @@ Nodes.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -27,7 +27,7 @@ Nodes.
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Executor.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Executor.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import collections
|
||||
|
||||
|
@ -122,7 +122,6 @@ def execute_action_list(obj, target, kw):
|
|||
kw = obj.get_kw(kw)
|
||||
status = 0
|
||||
for act in obj.get_action_list():
|
||||
#args = (self.get_all_targets(), self.get_all_sources(), env)
|
||||
args = ([], [], env)
|
||||
status = act(*args, **kw)
|
||||
if isinstance(status, SCons.Errors.BuildError):
|
||||
|
@ -218,7 +217,9 @@ class Executor(object):
|
|||
us = []
|
||||
ut = []
|
||||
for b in self.batches:
|
||||
if b.targets[0].is_up_to_date():
|
||||
# don't add targets marked always build to unchanged lists
|
||||
# add to changed list as they always need to build
|
||||
if not b.targets[0].always_build and b.targets[0].is_up_to_date():
|
||||
us.extend(list(map(rfile, b.sources)))
|
||||
ut.extend(b.targets)
|
||||
else:
|
||||
|
@ -244,14 +245,12 @@ class Executor(object):
|
|||
return self._changed_targets_list
|
||||
|
||||
def _get_source(self, *args, **kw):
|
||||
#return SCons.Util.NodeList([rfile(self.batches[0].sources[0]).get_subst_proxy()])
|
||||
return rfile(self.batches[0].sources[0]).get_subst_proxy()
|
||||
|
||||
def _get_sources(self, *args, **kw):
|
||||
return SCons.Util.NodeList([rfile(n).get_subst_proxy() for n in self.get_all_sources()])
|
||||
|
||||
def _get_target(self, *args, **kw):
|
||||
#return SCons.Util.NodeList([self.batches[0].targets[0].get_subst_proxy()])
|
||||
return self.batches[0].targets[0].get_subst_proxy()
|
||||
|
||||
def _get_targets(self, *args, **kw):
|
||||
|
@ -486,29 +485,15 @@ class Executor(object):
|
|||
each individual target, which is a hell of a lot more efficient.
|
||||
"""
|
||||
env = self.get_build_env()
|
||||
path = self.get_build_scanner_path
|
||||
kw = self.get_kw()
|
||||
|
||||
# TODO(batch): scan by batches)
|
||||
deps = []
|
||||
if scanner:
|
||||
for node in node_list:
|
||||
node.disambiguate()
|
||||
s = scanner.select(node)
|
||||
if not s:
|
||||
continue
|
||||
path = self.get_build_scanner_path(s)
|
||||
deps.extend(node.get_implicit_deps(env, s, path))
|
||||
else:
|
||||
kw = self.get_kw()
|
||||
for node in node_list:
|
||||
node.disambiguate()
|
||||
scanner = node.get_env_scanner(env, kw)
|
||||
if not scanner:
|
||||
continue
|
||||
scanner = scanner.select(node)
|
||||
if not scanner:
|
||||
continue
|
||||
path = self.get_build_scanner_path(scanner)
|
||||
deps.extend(node.get_implicit_deps(env, scanner, path))
|
||||
|
||||
for node in node_list:
|
||||
node.disambiguate()
|
||||
deps.extend(node.get_implicit_deps(env, scanner, path, kw))
|
||||
|
||||
deps.extend(self.get_implicit_deps())
|
||||
|
|
@ -7,7 +7,7 @@ stop, and wait on jobs.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -29,7 +29,7 @@ stop, and wait on jobs.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Job.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Job.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import SCons.compat
|
||||
|
||||
|
@ -70,7 +70,7 @@ class Jobs(object):
|
|||
|
||||
def __init__(self, num, taskmaster):
|
||||
"""
|
||||
create 'num' jobs using the given taskmaster.
|
||||
Create 'num' jobs using the given taskmaster.
|
||||
|
||||
If 'num' is 1 or less, then a serial job will be used,
|
||||
otherwise a parallel job with 'num' worker threads will
|
||||
|
@ -126,10 +126,10 @@ class Jobs(object):
|
|||
c) SIGHUP: Controlling shell exiting
|
||||
|
||||
We handle all of these cases by stopping the taskmaster. It
|
||||
turns out that it very difficult to stop the build process
|
||||
turns out that it's very difficult to stop the build process
|
||||
by throwing asynchronously an exception such as
|
||||
KeyboardInterrupt. For example, the python Condition
|
||||
variables (threading.Condition) and queue's do not seem to
|
||||
variables (threading.Condition) and queues do not seem to be
|
||||
asynchronous-exception-safe. It would require adding a whole
|
||||
bunch of try/finally block and except KeyboardInterrupt all
|
||||
over the place.
|
||||
|
@ -177,7 +177,7 @@ class Serial(object):
|
|||
The taskmaster's next_task() method should return the next task
|
||||
that needs to be executed, or None if there are no more tasks. The
|
||||
taskmaster's executed() method will be called for each task when it
|
||||
is successfully executed or failed() will be called if it failed to
|
||||
is successfully executed, or failed() will be called if it failed to
|
||||
execute (e.g. execute() raised an exception)."""
|
||||
|
||||
self.taskmaster = taskmaster
|
||||
|
@ -351,7 +351,7 @@ else:
|
|||
The taskmaster's next_task() method should return the next
|
||||
task that needs to be executed, or None if there are no more
|
||||
tasks. The taskmaster's executed() method will be called
|
||||
for each task when it is successfully executed or failed()
|
||||
for each task when it is successfully executed, or failed()
|
||||
will be called if the task failed to execute (i.e. execute()
|
||||
raised an exception).
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Memoize.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Memoize.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
__doc__ = """Memoizer
|
||||
|
|
@ -8,7 +8,7 @@ This creates a hash of global Aliases (dummy targets).
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -30,7 +30,7 @@ This creates a hash of global Aliases (dummy targets).
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Node/Alias.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Node/Alias.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import collections
|
||||
|
|
@ -11,7 +11,7 @@ that can be used by scripts or modules looking for the canonical default.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -32,7 +32,7 @@ that can be used by scripts or modules looking for the canonical default.
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Node/FS.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Node/FS.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import fnmatch
|
||||
import os
|
||||
|
@ -186,7 +186,7 @@ needs_normpath_check = re.compile(
|
|||
# We need to renormalize the path if it contains a '.'
|
||||
# directory, but NOT if it is a single '.' '/' characters. We
|
||||
# do not want to match a single '.' because this case is checked
|
||||
# for explicitely since this is common enough case.
|
||||
# for explicitly since this is common enough case.
|
||||
#
|
||||
# Note that we check for all the following cases:
|
||||
#
|
||||
|
@ -1165,15 +1165,6 @@ class LocalFS(object):
|
|||
return ''
|
||||
|
||||
|
||||
#class RemoteFS:
|
||||
# # Skeleton for the obvious methods we might need from the
|
||||
# # abstraction layer for a remote filesystem.
|
||||
# def upload(self, local_src, remote_dst):
|
||||
# pass
|
||||
# def download(self, remote_src, local_dst):
|
||||
# pass
|
||||
|
||||
|
||||
class FS(LocalFS):
|
||||
|
||||
def __init__(self, path = None):
|
||||
|
@ -2234,7 +2225,6 @@ class Dir(Base):
|
|||
# the overall list will also be filtered later,
|
||||
# after we exit this loop.
|
||||
if pattern[0] != '.':
|
||||
#disk_names = [ d for d in disk_names if d[0] != '.' ]
|
||||
disk_names = [x for x in disk_names if x[0] != '.']
|
||||
disk_names = fnmatch.filter(disk_names, pattern)
|
||||
dirEntry = dir.Entry
|
||||
|
@ -2627,13 +2617,6 @@ class File(Base):
|
|||
the directory of this file."""
|
||||
return self.dir.File(name)
|
||||
|
||||
#def generate_build_dict(self):
|
||||
# """Return an appropriate dictionary of values for building
|
||||
# this File."""
|
||||
# return {'Dir' : self.Dir,
|
||||
# 'File' : self.File,
|
||||
# 'RDirs' : self.RDirs}
|
||||
|
||||
def _morph(self):
|
||||
"""Turn a file system node into a File object."""
|
||||
self.scanner_paths = {}
|
||||
|
@ -2907,9 +2890,7 @@ class File(Base):
|
|||
pass
|
||||
|
||||
if scanner:
|
||||
# result = [n.disambiguate() for n in scanner(self, env, path)]
|
||||
result = scanner(self, env, path)
|
||||
result = [N.disambiguate() for N in result]
|
||||
result = [n.disambiguate() for n in scanner(self, env, path)]
|
||||
else:
|
||||
result = []
|
||||
|
||||
|
@ -3519,36 +3500,6 @@ class FileFinder(object):
|
|||
|
||||
filedir, filename = os.path.split(filename)
|
||||
if filedir:
|
||||
# More compact code that we can't use until we drop
|
||||
# support for Python 1.5.2:
|
||||
#
|
||||
#def filedir_lookup(p, fd=filedir):
|
||||
# """
|
||||
# A helper function that looks up a directory for a file
|
||||
# we're trying to find. This only creates the Dir Node
|
||||
# if it exists on-disk, since if the directory doesn't
|
||||
# exist we know we won't find any files in it... :-)
|
||||
# """
|
||||
# dir, name = os.path.split(fd)
|
||||
# if dir:
|
||||
# p = filedir_lookup(p, dir)
|
||||
# if not p:
|
||||
# return None
|
||||
# norm_name = _my_normcase(name)
|
||||
# try:
|
||||
# node = p.entries[norm_name]
|
||||
# except KeyError:
|
||||
# return p.dir_on_disk(name)
|
||||
# if isinstance(node, Dir):
|
||||
# return node
|
||||
# if isinstance(node, Entry):
|
||||
# node.must_be_same(Dir)
|
||||
# return node
|
||||
# if isinstance(node, Dir) or isinstance(node, Entry):
|
||||
# return node
|
||||
# return None
|
||||
#paths = [_f for _f in map(filedir_lookup, paths) if _f]
|
||||
|
||||
self.default_filedir = filedir
|
||||
paths = [_f for _f in map(self.filedir_lookup, paths) if _f]
|
||||
|
|
@ -5,7 +5,7 @@ Python nodes.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -27,7 +27,7 @@ Python nodes.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Node/Python.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Node/Python.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import SCons.Node
|
||||
|
|
@ -20,7 +20,7 @@ be able to depend on any other type of "thing."
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -41,7 +41,7 @@ be able to depend on any other type of "thing."
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Node/__init__.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Node/__init__.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import collections
|
||||
import copy
|
||||
|
@ -916,35 +916,56 @@ class Node(object):
|
|||
"""
|
||||
return []
|
||||
|
||||
def get_implicit_deps(self, env, scanner, path):
|
||||
def get_implicit_deps(self, env, initial_scanner, path_func, kw = {}):
|
||||
"""Return a list of implicit dependencies for this node.
|
||||
|
||||
This method exists to handle recursive invocation of the scanner
|
||||
on the implicit dependencies returned by the scanner, if the
|
||||
scanner's recursive flag says that we should.
|
||||
"""
|
||||
if not scanner:
|
||||
return []
|
||||
|
||||
# Give the scanner a chance to select a more specific scanner
|
||||
# for this Node.
|
||||
#scanner = scanner.select(self)
|
||||
|
||||
nodes = [self]
|
||||
seen = {}
|
||||
seen[self] = 1
|
||||
deps = []
|
||||
dependencies = []
|
||||
|
||||
root_node_scanner = self._get_scanner(env, initial_scanner, None, kw)
|
||||
|
||||
while nodes:
|
||||
n = nodes.pop(0)
|
||||
d = [x for x in n.get_found_includes(env, scanner, path) if x not in seen]
|
||||
if d:
|
||||
deps.extend(d)
|
||||
for n in d:
|
||||
seen[n] = 1
|
||||
nodes.extend(scanner.recurse_nodes(d))
|
||||
node = nodes.pop(0)
|
||||
|
||||
return deps
|
||||
scanner = node._get_scanner(env, initial_scanner, root_node_scanner, kw)
|
||||
|
||||
if not scanner:
|
||||
continue
|
||||
|
||||
path = path_func(scanner)
|
||||
|
||||
included_deps = [x for x in node.get_found_includes(env, scanner, path) if x not in seen]
|
||||
if included_deps:
|
||||
dependencies.extend(included_deps)
|
||||
for dep in included_deps:
|
||||
seen[dep] = 1
|
||||
nodes.extend(scanner.recurse_nodes(included_deps))
|
||||
|
||||
return dependencies
|
||||
|
||||
def _get_scanner(self, env, initial_scanner, root_node_scanner, kw):
|
||||
if not initial_scanner:
|
||||
# handle implicit scanner case
|
||||
scanner = self.get_env_scanner(env, kw)
|
||||
if scanner:
|
||||
scanner = scanner.select(self)
|
||||
else:
|
||||
# handle explicit scanner case
|
||||
scanner = initial_scanner.select(self)
|
||||
|
||||
if not scanner:
|
||||
# no scanner could be found for the given node's scanner key;
|
||||
# thus, make an attempt at using a default.
|
||||
scanner = root_node_scanner
|
||||
|
||||
return scanner
|
||||
|
||||
def get_env_scanner(self, env, kw={}):
|
||||
return env.get_scanner(self.scanner_key())
|
||||
|
||||
|
@ -1260,11 +1281,6 @@ class Node(object):
|
|||
def _add_child(self, collection, set, child):
|
||||
"""Adds 'child' to 'collection', first checking 'set' to see if it's
|
||||
already present."""
|
||||
#if type(child) is not type([]):
|
||||
# child = [child]
|
||||
#for c in child:
|
||||
# if not isinstance(c, Node):
|
||||
# raise TypeError, c
|
||||
added = None
|
||||
for c in child:
|
||||
if c not in set:
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Options/BoolOption.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Options/BoolOption.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Options/EnumOption.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Options/EnumOption.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Options/ListOption.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Options/ListOption.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Options/PackageOption.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Options/PackageOption.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Options/PathOption.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Options/PathOption.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Options/__init__.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Options/__init__.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -21,13 +21,13 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/PathList.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/PathList.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
__doc__ = """SCons.PathList
|
||||
|
||||
A module for handling lists of directory paths (the sort of things
|
||||
that get set as CPPPATH, LIBPATH, etc.) with as much caching of data and
|
||||
efficiency as we can while still keeping the evaluation delayed so that we
|
||||
efficiency as we can, while still keeping the evaluation delayed so that we
|
||||
Do the Right Thing (almost) regardless of how the variable is specified.
|
||||
|
||||
"""
|
|
@ -12,7 +12,7 @@ environment. Consequently, we'll examine both sys.platform and os.name
|
|||
(and anything else that might come in to play) in order to return some
|
||||
specification which is unique enough for our purposes.
|
||||
|
||||
Note that because this subsysem just *selects* a callable that can
|
||||
Note that because this subsystem just *selects* a callable that can
|
||||
modify a construction environment, it's possible for people to define
|
||||
their own "platform specification" in an arbitrary callable function.
|
||||
No one needs to use or tie in to this subsystem in order to roll
|
||||
|
@ -20,7 +20,7 @@ their own platform definition.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -42,7 +42,7 @@ their own platform definition.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Platform/__init__.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Platform/__init__.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import SCons.compat
|
||||
|
|
@ -8,7 +8,7 @@ selection method.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Platform/aix.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Platform/aix.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import os
|
||||
import subprocess
|
|
@ -8,7 +8,7 @@ selection method.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Platform/cygwin.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Platform/cygwin.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import posix
|
||||
from SCons.Platform import TempFileMunge
|
|
@ -8,7 +8,7 @@ selection method.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Platform/darwin.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Platform/darwin.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import posix
|
||||
import os
|
|
@ -8,7 +8,7 @@ selection method.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Platform/hpux.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Platform/hpux.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import posix
|
||||
|
|
@ -8,7 +8,7 @@ selection method.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Platform/irix.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Platform/irix.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import posix
|
||||
|
|
@ -8,7 +8,7 @@ selection method.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Platform/os2.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Platform/os2.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
import win32
|
||||
|
||||
def generate(env):
|
|
@ -8,7 +8,7 @@ selection method.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Platform/posix.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Platform/posix.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import errno
|
||||
import os
|
||||
|
@ -48,16 +48,18 @@ exitvalmap = {
|
|||
}
|
||||
|
||||
def escape(arg):
|
||||
"escape shell special characters"
|
||||
"escape shell special characters"
|
||||
slash = '\\'
|
||||
special = '"$()'
|
||||
special = '"$'
|
||||
|
||||
arg = arg.replace(slash, slash+slash)
|
||||
for c in special:
|
||||
arg = arg.replace(c, slash+c)
|
||||
|
||||
# print "ESCAPE RESULT: %s"%arg
|
||||
return '"' + arg + '"'
|
||||
|
||||
|
||||
def exec_subprocess(l, env):
|
||||
proc = subprocess.Popen(l, env = env, close_fds = True)
|
||||
return proc.wait()
|
|
@ -8,7 +8,7 @@ selection method.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Platform/sunos.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Platform/sunos.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import posix
|
||||
|
|
@ -8,7 +8,7 @@ selection method.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Platform/win32.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Platform/win32.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import os
|
||||
import os.path
|
||||
|
@ -60,10 +60,8 @@ except AttributeError:
|
|||
else:
|
||||
parallel_msg = None
|
||||
|
||||
import builtins
|
||||
|
||||
_builtin_file = builtins.file
|
||||
_builtin_open = builtins.open
|
||||
_builtin_file = file
|
||||
_builtin_open = open
|
||||
|
||||
class _scons_file(_builtin_file):
|
||||
def __init__(self, *args, **kw):
|
||||
|
@ -78,8 +76,8 @@ else:
|
|||
0)
|
||||
return fp
|
||||
|
||||
builtins.file = _scons_file
|
||||
builtins.open = _scons_open
|
||||
file = _scons_file
|
||||
open = _scons_open
|
||||
|
||||
try:
|
||||
import threading
|
|
@ -12,7 +12,7 @@ libraries are installed, if some command line options are supported etc.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -34,7 +34,7 @@ libraries are installed, if some command line options are supported etc.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/SConf.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/SConf.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import SCons.compat
|
||||
|
||||
|
@ -254,14 +254,7 @@ class SConfBuildTask(SCons.Taskmaster.AlwaysTask):
|
|||
else:
|
||||
self.display('Caught exception while building "%s":\n' %
|
||||
self.targets[0])
|
||||
try:
|
||||
excepthook = sys.excepthook
|
||||
except AttributeError:
|
||||
# Earlier versions of Python don't have sys.excepthook...
|
||||
def excepthook(type, value, tb):
|
||||
traceback.print_tb(tb)
|
||||
print type, value
|
||||
excepthook(*self.exc_info())
|
||||
sys.excepthook(*self.exc_info())
|
||||
return SCons.Taskmaster.Task.failed(self)
|
||||
|
||||
def collect_node_states(self):
|
||||
|
@ -355,8 +348,6 @@ class SConfBuildTask(SCons.Taskmaster.AlwaysTask):
|
|||
raise SCons.Errors.ExplicitExit(self.targets[0],exc_value.code)
|
||||
except Exception, e:
|
||||
for t in self.targets:
|
||||
#binfo = t.get_binfo()
|
||||
#binfo.__class__ = SConfBuildInfo
|
||||
binfo = SConfBuildInfo()
|
||||
binfo.merge(t.get_binfo())
|
||||
binfo.set_build_result(1, s.getvalue())
|
||||
|
@ -375,8 +366,6 @@ class SConfBuildTask(SCons.Taskmaster.AlwaysTask):
|
|||
raise e
|
||||
else:
|
||||
for t in self.targets:
|
||||
#binfo = t.get_binfo()
|
||||
#binfo.__class__ = SConfBuildInfo
|
||||
binfo = SConfBuildInfo()
|
||||
binfo.merge(t.get_binfo())
|
||||
binfo.set_build_result(0, s.getvalue())
|
||||
|
@ -399,16 +388,16 @@ class SConfBase(object):
|
|||
tests, be sure to call the Finish() method, which returns the modified
|
||||
environment.
|
||||
Some words about caching: In most cases, it is not necessary to cache
|
||||
Test results explicitely. Instead, we use the scons dependency checking
|
||||
Test results explicitly. Instead, we use the scons dependency checking
|
||||
mechanism. For example, if one wants to compile a test program
|
||||
(SConf.TryLink), the compiler is only called, if the program dependencies
|
||||
have changed. However, if the program could not be compiled in a former
|
||||
SConf run, we need to explicitely cache this error.
|
||||
SConf run, we need to explicitly cache this error.
|
||||
"""
|
||||
|
||||
def __init__(self, env, custom_tests = {}, conf_dir='$CONFIGUREDIR',
|
||||
log_file='$CONFIGURELOG', config_h = None, _depth = 0):
|
||||
"""Constructor. Pass additional tests in the custom_tests-dictinary,
|
||||
"""Constructor. Pass additional tests in the custom_tests-dictionary,
|
||||
e.g. custom_tests={'CheckPrivate':MyPrivateTest}, where MyPrivateTest
|
||||
defines a custom test.
|
||||
Note also the conf_dir and log_file arguments (you may want to
|
||||
|
@ -766,10 +755,10 @@ class CheckContext(object):
|
|||
A typical test is just a callable with an instance of CheckContext as
|
||||
first argument:
|
||||
|
||||
def CheckCustom(context, ...)
|
||||
context.Message('Checking my weird test ... ')
|
||||
ret = myWeirdTestFunction(...)
|
||||
context.Result(ret)
|
||||
def CheckCustom(context, ...):
|
||||
context.Message('Checking my weird test ... ')
|
||||
ret = myWeirdTestFunction(...)
|
||||
context.Result(ret)
|
||||
|
||||
Often, myWeirdTestFunction will be one of
|
||||
context.TryCompile/context.TryLink/context.TryRun. The results of
|
|
@ -5,7 +5,7 @@ Writing and reading information to the .sconsign file or files.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -27,7 +27,7 @@ Writing and reading information to the .sconsign file or files.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/SConsign.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/SConsign.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import SCons.compat
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
"""SCons.Scanner.C
|
||||
|
||||
This module implements the depenency scanner for C/C++ code.
|
||||
This module implements the dependency scanner for C/C++ code.
|
||||
|
||||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -27,7 +27,7 @@ This module implements the depenency scanner for C/C++ code.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Scanner/C.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Scanner/C.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import SCons.Node.FS
|
||||
import SCons.Scanner
|
|
@ -8,7 +8,7 @@ Coded by Andy Friesen
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -30,7 +30,7 @@ Coded by Andy Friesen
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Scanner/D.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Scanner/D.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import re
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -20,7 +20,7 @@
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Scanner/Dir.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Scanner/Dir.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import SCons.Node.FS
|
||||
import SCons.Scanner
|
|
@ -5,7 +5,7 @@ This module implements the dependency scanner for Fortran code.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -26,7 +26,7 @@ This module implements the dependency scanner for Fortran code.
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Scanner/Fortran.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Scanner/Fortran.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import re
|
||||
|
|
@ -1,12 +1,12 @@
|
|||
"""SCons.Scanner.IDL
|
||||
|
||||
This module implements the depenency scanner for IDL (Interface
|
||||
This module implements the dependency scanner for IDL (Interface
|
||||
Definition Language) files.
|
||||
|
||||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -28,7 +28,7 @@ Definition Language) files.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Scanner/IDL.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Scanner/IDL.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import SCons.Node.FS
|
||||
import SCons.Scanner
|
|
@ -5,7 +5,7 @@ This module implements the dependency scanner for LaTeX code.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -27,7 +27,7 @@ This module implements the dependency scanner for LaTeX code.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Scanner/LaTeX.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Scanner/LaTeX.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import os.path
|
||||
import re
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Scanner/Prog.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Scanner/Prog.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import SCons.Node
|
||||
import SCons.Node.FS
|
|
@ -1,12 +1,12 @@
|
|||
"""SCons.Scanner.RC
|
||||
|
||||
This module implements the depenency scanner for RC (Interface
|
||||
This module implements the dependency scanner for RC (Interface
|
||||
Definition Language) files.
|
||||
|
||||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -28,7 +28,7 @@ Definition Language) files.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Scanner/RC.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Scanner/RC.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import SCons.Node.FS
|
||||
import SCons.Scanner
|
|
@ -1,5 +1,11 @@
|
|||
"""SCons.Scanner.SWIG
|
||||
|
||||
This module implements the dependency scanner for SWIG code.
|
||||
|
||||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -21,22 +27,16 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__doc__ = """
|
||||
io compatibility module for older (pre-2.6) Python versions
|
||||
__revision__ = "src/engine/SCons/Scanner/SWIG.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
This does not not NOT (repeat, *NOT*) provide complete io
|
||||
functionality. It only wraps the portions of io functionality used
|
||||
by SCons, in an interface that looks enough like io for our purposes.
|
||||
"""
|
||||
import SCons.Scanner
|
||||
|
||||
__revision__ = "src/engine/SCons/compat/_scons_io.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
SWIGSuffixes = [ '.i' ]
|
||||
|
||||
# Use the "imp" module to protect the imports below from fixers.
|
||||
import imp
|
||||
|
||||
_cStringIO = imp.load_module('cStringIO', *imp.find_module('cStringIO'))
|
||||
StringIO = _cStringIO.StringIO
|
||||
del _cStringIO
|
||||
def SWIGScanner():
|
||||
expr = '^[ \t]*%[ \t]*(?:include|import|extern)[ \t]*(<|"?)([^>\s"]+)(?:>|"?)'
|
||||
scanner = SCons.Scanner.ClassicCPP("SWIGScanner", ".i", "SWIGPATH", expr)
|
||||
return scanner
|
||||
|
||||
# Local Variables:
|
||||
# tab-width:4
|
|
@ -5,7 +5,7 @@ The Scanner package for the SCons software construction utility.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -27,7 +27,7 @@ The Scanner package for the SCons software construction utility.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Scanner/__init__.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Scanner/__init__.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import re
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -20,7 +20,7 @@
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Script/Interactive.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Script/Interactive.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
__doc__ = """
|
||||
SCons interactive mode
|
||||
|
@ -304,14 +304,8 @@ class SConsInteractiveCmd(cmd.Cmd):
|
|||
return self._strip_initial_spaces(doc)
|
||||
|
||||
def _strip_initial_spaces(self, s):
|
||||
#lines = s.split('\n')
|
||||
lines = s.split('\n')
|
||||
spaces = re.match(' *', lines[0]).group(0)
|
||||
#def strip_spaces(l):
|
||||
# if l.startswith(spaces):
|
||||
# l = l[len(spaces):]
|
||||
# return l
|
||||
#return '\n'.join([ strip_spaces(l) for l in lines ])
|
||||
def strip_spaces(l, spaces=spaces):
|
||||
if l[:len(spaces)] == spaces:
|
||||
l = l[len(spaces):]
|
|
@ -10,10 +10,10 @@ some other module. If it's specific to the "scons" script invocation,
|
|||
it goes here.
|
||||
"""
|
||||
|
||||
unsupported_python_version = (2, 3, 0)
|
||||
unsupported_python_version = (2, 6, 0)
|
||||
deprecated_python_version = (2, 7, 0)
|
||||
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -34,7 +34,7 @@ deprecated_python_version = (2, 7, 0)
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Script/Main.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Script/Main.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import SCons.compat
|
||||
|
||||
|
@ -43,15 +43,6 @@ import sys
|
|||
import time
|
||||
import traceback
|
||||
|
||||
# Strip the script directory from sys.path() so on case-insensitive
|
||||
# (Windows) systems Python doesn't think that the "scons" script is the
|
||||
# "SCons" package. Replace it with our own version directory so, if
|
||||
# if they're there, we pick up the right version of the build engine
|
||||
# modules.
|
||||
#sys.path = [os.path.join(sys.prefix,
|
||||
# 'lib',
|
||||
# 'scons-%d' % SCons.__version__)] + sys.path[1:]
|
||||
|
||||
import SCons.CacheDir
|
||||
import SCons.Debug
|
||||
import SCons.Defaults
|
||||
|
@ -74,7 +65,7 @@ def fetch_win32_parallel_msg():
|
|||
# so we don't have to pull it in on all platforms, and so that an
|
||||
# in-line "import" statement in the _main() function below doesn't
|
||||
# cause warnings about local names shadowing use of the 'SCons'
|
||||
# globl in nest scopes and UnboundLocalErrors and the like in some
|
||||
# global in nest scopes and UnboundLocalErrors and the like in some
|
||||
# versions (2.1) of Python.
|
||||
import SCons.Platform.win32
|
||||
return SCons.Platform.win32.parallel_msg
|
||||
|
@ -368,7 +359,7 @@ class CleanTask(SCons.Taskmaster.AlwaysTask):
|
|||
# issue, an IOError would indicate something like
|
||||
# the file not existing. In either case, print a
|
||||
# message and keep going to try to remove as many
|
||||
# targets aa possible.
|
||||
# targets as possible.
|
||||
print "scons: Could not remove '%s':" % str(t), e.strerror
|
||||
else:
|
||||
if removed:
|
||||
|
@ -383,7 +374,7 @@ class CleanTask(SCons.Taskmaster.AlwaysTask):
|
|||
# we don't want, like store .sconsign information.
|
||||
executed = SCons.Taskmaster.Task.executed_without_callbacks
|
||||
|
||||
# Have the taskmaster arrange to "execute" all of the targets, because
|
||||
# Have the Taskmaster arrange to "execute" all of the targets, because
|
||||
# we'll figure out ourselves (in remove() or show() above) whether
|
||||
# anything really needs to be done.
|
||||
make_ready = SCons.Taskmaster.Task.make_ready_all
|
||||
|
@ -487,7 +478,6 @@ def SetOption(name, value):
|
|||
def PrintHelp(file=None):
|
||||
OptionsParser.print_help(file=file)
|
||||
|
||||
#
|
||||
class Stats(object):
|
||||
def __init__(self):
|
||||
self.stats = []
|
||||
|
@ -574,7 +564,7 @@ def find_deepest_user_frame(tb):
|
|||
|
||||
def _scons_user_error(e):
|
||||
"""Handle user errors. Print out a message and a description of the
|
||||
error, along with the line number and routine where it occured.
|
||||
error, along with the line number and routine where it occurred.
|
||||
The file and line number will be the deepest stack frame that is
|
||||
not part of SCons itself.
|
||||
"""
|
||||
|
@ -589,7 +579,7 @@ def _scons_user_error(e):
|
|||
|
||||
def _scons_user_warning(e):
|
||||
"""Handle user warnings. Print out a message and a description of
|
||||
the warning, along with the line number and routine where it occured.
|
||||
the warning, along with the line number and routine where it occurred.
|
||||
The file and line number will be the deepest stack frame that is
|
||||
not part of SCons itself.
|
||||
"""
|
||||
|
@ -711,7 +701,6 @@ def _load_site_scons_dir(topdir, site_dir_name=None):
|
|||
site_tools_dir = os.path.join(site_dir, site_tools_dirname)
|
||||
if os.path.exists(site_init_file):
|
||||
import imp, re
|
||||
# TODO(2.4): turn this into try:-except:-finally:
|
||||
try:
|
||||
try:
|
||||
fp, pathname, description = imp.find_module(site_init_modname,
|
||||
|
@ -1024,7 +1013,7 @@ def _main(parser):
|
|||
# the SConscript file.
|
||||
#
|
||||
# We delay enabling the PythonVersionWarning class until here so that,
|
||||
# if they explicity disabled it in either in the command line or in
|
||||
# if they explicitly disabled it in either in the command line or in
|
||||
# $SCONSFLAGS, or in the SConscript file, then the search through
|
||||
# the list of deprecated warning classes will find that disabling
|
||||
# first and not issue the warning.
|
||||
|
@ -1232,13 +1221,8 @@ def _build_targets(fs, options, targets, target_top):
|
|||
def order(dependencies):
|
||||
"""Randomize the dependencies."""
|
||||
import random
|
||||
# This is cribbed from the implementation of
|
||||
# random.shuffle() in Python 2.X.
|
||||
d = dependencies
|
||||
for i in range(len(d)-1, 0, -1):
|
||||
j = int(random.random() * (i+1))
|
||||
d[i], d[j] = d[j], d[i]
|
||||
return d
|
||||
random.shuffle(dependencies)
|
||||
return dependencies
|
||||
else:
|
||||
def order(dependencies):
|
||||
"""Leave the order of dependencies alone."""
|
||||
|
@ -1316,18 +1300,6 @@ def _exec_main(parser, values):
|
|||
# compat layer imports "cProfile" for us if it's available.
|
||||
from profile import Profile
|
||||
|
||||
# Some versions of Python 2.4 shipped a profiler that had the
|
||||
# wrong 'c_exception' entry in its dispatch table. Make sure
|
||||
# we have the right one. (This may put an unnecessary entry
|
||||
# in the table in earlier versions of Python, but its presence
|
||||
# shouldn't hurt anything).
|
||||
try:
|
||||
dispatch = Profile.dispatch
|
||||
except AttributeError:
|
||||
pass
|
||||
else:
|
||||
dispatch['c_exception'] = Profile.trace_dispatch_return
|
||||
|
||||
prof = Profile()
|
||||
try:
|
||||
prof.runcall(_main, parser)
|
||||
|
@ -1360,7 +1332,7 @@ def main():
|
|||
pass
|
||||
parts.append(version_string("engine", SCons))
|
||||
parts.append(path_string("engine", SCons))
|
||||
parts.append("Copyright (c) 2001 - 2015 The SCons Foundation")
|
||||
parts.append("Copyright (c) 2001 - 2016 The SCons Foundation")
|
||||
version = ''.join(parts)
|
||||
|
||||
import SConsOptions
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Script/SConsOptions.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Script/SConsOptions.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||
|
||||
import optparse
|
||||
import re
|
||||
|
@ -426,7 +426,7 @@ class SConsOptionParser(optparse.OptionParser):
|
|||
result = group.add_option(*args, **kw)
|
||||
|
||||
if result:
|
||||
# The option was added succesfully. We now have to add the
|
||||
# The option was added successfully. We now have to add the
|
||||
# default value to our object that holds the default values
|
||||
# (so that an attempt to fetch the option's attribute will
|
||||
# yield the default value when not overridden) and then
|
||||
|
@ -449,11 +449,6 @@ class SConsIndentedHelpFormatter(optparse.IndentedHelpFormatter):
|
|||
"SCons Options." Unfortunately, we have to do this here,
|
||||
because those titles are hard-coded in the optparse calls.
|
||||
"""
|
||||
if heading == 'options':
|
||||
# The versions of optparse.py shipped with Pythons 2.3 and
|
||||
# 2.4 pass this in uncapitalized; override that so we get
|
||||
# consistent output on all versions.
|
||||
heading = "Options"
|
||||
if heading == 'Options':
|
||||
heading = "SCons Options"
|
||||
return optparse.IndentedHelpFormatter.format_heading(self, heading)
|
||||
|
@ -488,13 +483,7 @@ class SConsIndentedHelpFormatter(optparse.IndentedHelpFormatter):
|
|||
# read data from FILENAME
|
||||
result = []
|
||||
|
||||
try:
|
||||
opts = self.option_strings[option]
|
||||
except AttributeError:
|
||||
# The Python 2.3 version of optparse attaches this to
|
||||
# to the option argument, not to this object.
|
||||
opts = option.option_strings
|
||||
|
||||
opts = self.option_strings[option]
|
||||
opt_width = self.help_position - self.current_indent - 2
|
||||
if len(opts) > opt_width:
|
||||
wrapper = textwrap.TextWrapper(width=self.width,
|
||||
|
@ -509,14 +498,7 @@ class SConsIndentedHelpFormatter(optparse.IndentedHelpFormatter):
|
|||
result.append(opts)
|
||||
if option.help:
|
||||
|
||||
try:
|
||||
expand_default = self.expand_default
|
||||
except AttributeError:
|
||||
# The HelpFormatter base class in the Python 2.3 version
|
||||
# of optparse has no expand_default() method.
|
||||
help_text = option.help
|
||||
else:
|
||||
help_text = expand_default(option)
|
||||
help_text = self.expand_default(option)
|
||||
|
||||
# SCons: indent every line of the help text but the first.
|
||||
wrapper = textwrap.TextWrapper(width=self.help_width,
|
||||
|
@ -530,34 +512,6 @@ class SConsIndentedHelpFormatter(optparse.IndentedHelpFormatter):
|
|||
result.append("\n")
|
||||
return "".join(result)
|
||||
|
||||
# For consistent help output across Python versions, we provide a
|
||||
# subclass copy of format_option_strings() and these two variables.
|
||||
# This is necessary (?) for Python2.3, which otherwise concatenates
|
||||
# a short option with its metavar.
|
||||
_short_opt_fmt = "%s %s"
|
||||
_long_opt_fmt = "%s=%s"
|
||||
|
||||
def format_option_strings(self, option):
|
||||
"""Return a comma-separated list of option strings & metavariables."""
|
||||
if option.takes_value():
|
||||
metavar = option.metavar or option.dest.upper()
|
||||
short_opts = []
|
||||
for sopt in option._short_opts:
|
||||
short_opts.append(self._short_opt_fmt % (sopt, metavar))
|
||||
long_opts = []
|
||||
for lopt in option._long_opts:
|
||||
long_opts.append(self._long_opt_fmt % (lopt, metavar))
|
||||
else:
|
||||
short_opts = option._short_opts
|
||||
long_opts = option._long_opts
|
||||
|
||||
if self.short_first:
|
||||
opts = short_opts + long_opts
|
||||
else:
|
||||
opts = long_opts + short_opts
|
||||
|
||||
return ", ".join(opts)
|
||||
|
||||
def Parser(version):
|
||||
"""
|
||||
Returns an options parser object initialized with the standard
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue