From 88a5de2aa63c4e9db75ab62eae23927766dd1a7a Mon Sep 17 00:00:00 2001 From: Vladimir Agafonkin Date: Tue, 27 May 2014 18:49:18 +0300 Subject: [PATCH 01/79] ignore flipped glyphs when placing labels for perf --- include/llmr/text/collision.hpp | 2 +- src/text/collision.cpp | 20 +++++++--------- src/text/placement.cpp | 42 ++++++++++++++++++++++----------- 3 files changed, 38 insertions(+), 26 deletions(-) diff --git a/include/llmr/text/collision.hpp b/include/llmr/text/collision.hpp index ef4899c26..c9dafdd38 100644 --- a/include/llmr/text/collision.hpp +++ b/include/llmr/text/collision.hpp @@ -11,7 +11,7 @@ public: Collision(); ~Collision(); - PlacementProperty place(const PlacedGlyphs &boxes, + PlacementProperty place(const GlyphBoxes &boxes, const CollisionAnchor &anchor, float minPlacementScale, float maxPlacementScale, float padding, bool horizontal, bool alwaysVisible); diff --git a/src/text/collision.cpp b/src/text/collision.cpp index d1488cb29..0da50f280 100644 --- a/src/text/collision.cpp +++ b/src/text/collision.cpp @@ -53,7 +53,7 @@ Collision::Collision() : cTree(new Tree()), hTree(new Tree()) { CollisionAnchor{m, m}, 1, {{M_PI * 2, 0}}, false, 2); } -GlyphBox getMergedGlyphs(const PlacedGlyphs &placed_glyphs, bool horizontal, +GlyphBox getMergedGlyphs(const GlyphBoxes &boxes, bool horizontal, const CollisionAnchor &anchor) { GlyphBox mergedGlyphs; const float inf = std::numeric_limits::infinity(); @@ -62,28 +62,28 @@ GlyphBox getMergedGlyphs(const PlacedGlyphs &placed_glyphs, bool horizontal, mergedGlyphs.anchor = anchor; CollisionRect &box = mergedGlyphs.box; - for (const PlacedGlyph &placed_glyph : placed_glyphs) { - const CollisionRect &gbox = placed_glyph.glyphBox.box; + for (const GlyphBox &glyph : boxes) { + const CollisionRect &gbox = glyph.box; box.tl.x = util::min(box.tl.x, gbox.tl.x); box.tl.y = util::min(box.tl.y, gbox.tl.y); box.br.x = util::max(box.br.x, gbox.br.x); box.br.y = util::max(box.br.y, gbox.br.y); mergedGlyphs.minScale = - util::max(mergedGlyphs.minScale, placed_glyph.glyphBox.minScale); + util::max(mergedGlyphs.minScale, glyph.minScale); } return mergedGlyphs; } -PlacementProperty Collision::place(const PlacedGlyphs &placed_glyphs, +PlacementProperty Collision::place(const GlyphBoxes &boxes, const CollisionAnchor &anchor, float minPlacementScale, float maxPlacementScale, float padding, bool horizontal, bool alwaysVisible) { float minScale = std::numeric_limits::infinity(); - for (const PlacedGlyph &placed_glyph : placed_glyphs) { - minScale = util::min(minScale, placed_glyph.glyphBox.minScale); + for (const GlyphBox &glyphBox : boxes) { + minScale = util::min(minScale, glyphBox.minScale); } minPlacementScale = util::max(minPlacementScale, minScale); @@ -92,11 +92,9 @@ PlacementProperty Collision::place(const PlacedGlyphs &placed_glyphs, // for horizontal labels. GlyphBoxes glyphs; if (horizontal) { - glyphs.push_back(getMergedGlyphs(placed_glyphs, horizontal, anchor)); + glyphs.push_back(getMergedGlyphs(boxes, horizontal, anchor)); } else { - for (const PlacedGlyph &placed_glyph : placed_glyphs) { - glyphs.push_back(placed_glyph.glyphBox); - } + glyphs = boxes; } // Calculate bboxes for all the glyphs diff --git a/src/text/placement.cpp b/src/text/placement.cpp index 237fd05d7..dbf7286e5 100644 --- a/src/text/placement.cpp +++ b/src/text/placement.cpp @@ -72,6 +72,14 @@ struct GlyphInstance { const float angle = 0.0f; }; +struct GlyphsAndBoxes { + explicit GlyphsAndBoxes(const PlacedGlyphs &glyphs, const GlyphBoxes &boxes) + : glyphs(glyphs), boxes(boxes) {} + + const PlacedGlyphs glyphs; + const GlyphBoxes boxes; +}; + typedef std::vector GlyphInstances; void getSegmentGlyphs(std::back_insert_iterator glyphs, @@ -145,7 +153,7 @@ void getSegmentGlyphs(std::back_insert_iterator glyphs, } } -PlacedGlyphs getGlyphs(Anchor &anchor, float advance, const Shaping &shaping, +GlyphsAndBoxes getGlyphs(Anchor &anchor, float advance, const Shaping &shaping, const IndexedFaces &faces, float fontScale, bool horizontal, const std::vector &line, float maxAngleDelta, float rotate) { @@ -163,6 +171,7 @@ PlacedGlyphs getGlyphs(Anchor &anchor, float advance, const Shaping &shaping, // } PlacedGlyphs glyphs; + GlyphBoxes boxes; const uint32_t buffer = 3; @@ -235,23 +244,28 @@ PlacedGlyphs getGlyphs(Anchor &anchor, float advance, const Shaping &shaping, fontScale * util::max(tl.y, tr.y, bl.y, br.y)}; } + GlyphBox glyphBox = GlyphBox{ + box, + // Prevent label from extending past the end of the line + util::max(instance.minScale, anchor.scale), + instance.maxScale, + instance.anchor, + horizontal}; + // Remember the glyph for later insertion. glyphs.emplace_back(PlacedGlyph{ tl, tr, bl, br, glyph.rect, static_cast( - std::fmod((anchor.angle + rotate + instance.offset + 2 * M_PI), - (2 * M_PI))), - GlyphBox{box, instance.minScale, instance.maxScale, - instance.anchor, horizontal}}); + std::fmod((anchor.angle + rotate + instance.offset + 2 * M_PI), (2 * M_PI))), + glyphBox}); + + if (instance.offset == 0.0f) { + boxes.emplace_back(glyphBox); + } } } - // Prevent label from extending past the end of the line - for (PlacedGlyph &g : glyphs) { - g.glyphBox.minScale = util::max(g.glyphBox.minScale, anchor.scale); - } - - return glyphs; + return GlyphsAndBoxes{glyphs, boxes}; } void Placement::addFeature(TextBucket& bucket, @@ -289,14 +303,14 @@ void Placement::addFeature(TextBucket& bucket, } for (Anchor anchor : anchors) { - PlacedGlyphs glyphs = + GlyphsAndBoxes glyphsAndBoxes = getGlyphs(anchor, advance, shaping, faces, fontScale, horizontal, line, maxAngleDelta, rotate); PlacementProperty place = - collision.place(glyphs, anchor, anchor.scale, maxPlacementScale, + collision.place(glyphsAndBoxes.boxes, anchor, anchor.scale, maxPlacementScale, padding, horizontal, info.alwaysVisible); if (place) { - bucket.addGlyphs(glyphs, place.zoom, place.rotationRange, + bucket.addGlyphs(glyphsAndBoxes.glyphs, place.zoom, place.rotationRange, zoom - zOffset); } } From 00d6cc6bddef8e8ddb60b6f3ee125dc9008212e2 Mon Sep 17 00:00:00 2001 From: Vladimir Agafonkin Date: Tue, 27 May 2014 19:33:26 +0300 Subject: [PATCH 02/79] simplify glyph boxes handling --- src/text/placement.cpp | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/src/text/placement.cpp b/src/text/placement.cpp index dbf7286e5..e1d7b55bc 100644 --- a/src/text/placement.cpp +++ b/src/text/placement.cpp @@ -72,14 +72,6 @@ struct GlyphInstance { const float angle = 0.0f; }; -struct GlyphsAndBoxes { - explicit GlyphsAndBoxes(const PlacedGlyphs &glyphs, const GlyphBoxes &boxes) - : glyphs(glyphs), boxes(boxes) {} - - const PlacedGlyphs glyphs; - const GlyphBoxes boxes; -}; - typedef std::vector GlyphInstances; void getSegmentGlyphs(std::back_insert_iterator glyphs, @@ -153,7 +145,8 @@ void getSegmentGlyphs(std::back_insert_iterator glyphs, } } -GlyphsAndBoxes getGlyphs(Anchor &anchor, float advance, const Shaping &shaping, +void getGlyphs(PlacedGlyphs &glyphs, GlyphBoxes &boxes, + Anchor &anchor, float advance, const Shaping &shaping, const IndexedFaces &faces, float fontScale, bool horizontal, const std::vector &line, float maxAngleDelta, float rotate) { @@ -170,9 +163,6 @@ GlyphsAndBoxes getGlyphs(Anchor &anchor, float advance, const Shaping &shaping, // origin.x -= advance; // } - PlacedGlyphs glyphs; - GlyphBoxes boxes; - const uint32_t buffer = 3; for (const GlyphPlacement &placed : shaping) { @@ -264,8 +254,6 @@ GlyphsAndBoxes getGlyphs(Anchor &anchor, float advance, const Shaping &shaping, } } } - - return GlyphsAndBoxes{glyphs, boxes}; } void Placement::addFeature(TextBucket& bucket, @@ -303,15 +291,16 @@ void Placement::addFeature(TextBucket& bucket, } for (Anchor anchor : anchors) { - GlyphsAndBoxes glyphsAndBoxes = - getGlyphs(anchor, advance, shaping, faces, fontScale, horizontal, + PlacedGlyphs glyphs; + GlyphBoxes boxes; + + getGlyphs(glyphs, boxes, anchor, advance, shaping, faces, fontScale, horizontal, line, maxAngleDelta, rotate); PlacementProperty place = - collision.place(glyphsAndBoxes.boxes, anchor, anchor.scale, maxPlacementScale, + collision.place(boxes, anchor, anchor.scale, maxPlacementScale, padding, horizontal, info.alwaysVisible); if (place) { - bucket.addGlyphs(glyphsAndBoxes.glyphs, place.zoom, place.rotationRange, - zoom - zOffset); + bucket.addGlyphs(glyphs, place.zoom, place.rotationRange, zoom - zOffset); } } } From 64d313beeab7f3dca90831dfd8dc0cbca240d83f Mon Sep 17 00:00:00 2001 From: Nicki Dlugash Date: Tue, 27 May 2014 20:06:06 -0400 Subject: [PATCH 03/79] more poi labels and icons --- bin/style.js | 188 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 169 insertions(+), 19 deletions(-) diff --git a/bin/style.js b/bin/style.js index 1dbe2b2cf..d32390436 100644 --- a/bin/style.js +++ b/bin/style.js @@ -800,10 +800,29 @@ module.exports = { "layer": "poi_label", "icon": "maki", "field": "scalerank", - "value": [1, 2, 3], + "value": [1, 2], "size": 12, "type": "point" }, + "poi_3": { + "source": "outdoors", + "layer": "poi_label", + "icon": "maki", + "field": "scalerank", + "value": 3, + "size": 12, + "type": "point" + }, + "poi_4": { + "source": "outdoors", + "layer": "poi_label", + "icon": "maki", + "field": "scalerank", + "value": 4, + "size": 12, + "type": "point" + }, + "poi_aerodrome": { "source": "outdoors", "layer": "poi_label", @@ -813,7 +832,7 @@ module.exports = { "size": 24, "type": "point" }, - "poi_label": { + "poi_label_1-2": { "source": "outdoors", "layer": "poi_label", "field": "scalerank", @@ -827,7 +846,33 @@ module.exports = { "fontSize": 12, "feature_type": "point", "type": "text", - "alwaysVisible": true + //"alwaysVisible": true + }, + "poi_label_3": { + "source": "outdoors", + "layer": "poi_label", + "field": "scalerank", + "value": 3, + "text_field": "name", + "path": "horizontal", + "padding": 2, + "fontSize": 12, + "feature_type": "point", + "type": "text", + //"alwaysVisible": true + }, + "poi_label_4": { + "source": "outdoors", + "layer": "poi_label", + "field": "scalerank", + "value": 4, + "text_field": "name", + "path": "horizontal", + "padding": 2, + "fontSize": 12, + "feature_type": "point", + "type": "text", + //"alwaysVisible": true } }, "structure": [ @@ -1299,10 +1344,6 @@ module.exports = { "name": "place_label_other", "bucket": "place_label_other" }, - { - "name": "poi_label", - "bucket": "poi_label" - }, { "name": "road_label", "bucket": "road_label" @@ -1319,14 +1360,35 @@ module.exports = { "name": "waterway_label", "bucket": "waterway_label" }, + { + "name": "poi_aerodrome", + "bucket": "poi_aerodrome" + }, { "name": "poi", "bucket": "poi" }, { - "name": "poi_aerodrome", - "bucket": "poi_aerodrome" - } + "name": "poi_label_1-2", + "bucket": "poi_label_1-2" + }, + { + "name": "poi_3", + "bucket": "poi_3" + }, + { + "name": "poi_label_3", + "bucket": "poi_label_3" + }, + { + "name": "poi_4", + "bucket": "poi_4" + }, + { + "name": "poi_label_4", + "bucket": "poi_label_4" + }, + ], "constants": { "land": "rgb(244,239,225)", @@ -2129,7 +2191,7 @@ module.exports = { "stroke": "rgba(255,255,255,0.5)", "size": [ "stops", - {"z": 6, "val": 14}, + {"z": 2, "val": 14}, {"z": 12, "val": 24} ] }, @@ -2275,14 +2337,58 @@ module.exports = { //"strokeWidth": 0.4, //"strokeBlur": 2 }, - "poi_label": { + "poi_3": { + "antialias": false, + "opacity": [ + "stops", + {"z": 0, "val": 0}, + {"z": 16.5, "val": 0}, + {"z": 16.75, "val": 1} + ] + }, + "poi_4": { + "antialias": false, + "opacity": [ + "stops", + {"z": 18.5, "val": 0}, + {"z": 18.75, "val": 1} + ] + }, + "poi_label_1-2": { "color": "#444", - "size": 10, + "size": 11, "stroke": "land", - "strokeWidth": 0.6, - "strokeBlur": 2, + "strokeWidth": 0.3, + "strokeBlur": 1, "translate": [0, 14] }, + "poi_label_3": { + "color": "#444", + "size": 10, + "stroke": "land", + "strokeWidth": 0.3, + "strokeBlur": 1, + "translate": [0, 14], + "opacity": [ + "stops", + {"z": 0, "val": 0}, + {"z": 16.5, "val": 0}, + {"z": 16.75, "val": 1} + ] + }, + "poi_label_4": { + "color": "#444", + "size": 10, + "opacity": [ + "stops", + {"z": 18.5, "val": 0}, + {"z": 18.75, "val": 1} + ], + "stroke": "land", + "strokeWidth": 0.3, + "strokeBlur": 1, + "translate": [0, 14] + }, "poi_aerodrome": { "opacity": ["stops", {"z": 13, "val": 0}, @@ -2838,7 +2944,7 @@ module.exports = { "stroke": "text_stroke_night", "size": [ "stops", - {"z": 6, "val": 14}, + {"z": 1, "val": 14}, {"z": 12, "val": 24} ] }, @@ -2982,14 +3088,58 @@ module.exports = { "color": "white", "antialias": false }, - "poi_label": { + "poi_3": { + "antialias": false, + "opacity": [ + "stops", + {"z": 0, "val": 0}, + {"z": 16.5, "val": 0}, + {"z": 16.75, "val": 1} + ] + }, + "poi_4": { + "antialias": false, + "opacity": [ + "stops", + {"z": 18.5, "val": 0}, + {"z": 18.75, "val": 1} + ] + }, + "poi_label_1-2": { "color": "#fff", - "size": 10, + "size": 11, "stroke": "text2_stroke_night", "strokeWidth": 0.3, - "strokeBlur": 2, + "strokeBlur": 1, "translate": [0, 14] }, + "poi_label_3": { + "color": "#fff", + "size": 10, + "stroke": "text2_stroke_night", + "strokeWidth": 0.3, + "strokeBlur": 1, + "translate": [0, 14], + "opacity": [ + "stops", + {"z": 0, "val": 0}, + {"z": 16.5, "val": 0}, + {"z": 16.75, "val": 1} + ] + }, + "poi_label_4": { + "color": "#fff", + "size": 10, + "opacity": [ + "stops", + {"z": 18.5, "val": 0}, + {"z": 18.75, "val": 1} + ], + "stroke": "text2_stroke_night", + "strokeWidth": 0.3, + "strokeBlur": 1, + "translate": [0, 14] + }, "poi_aerodrome": { "opacity": ["stops", {"z": 13, "val": 0}, From 2381fedd3793d9cf34a2d6423645eca5bbafb16e Mon Sep 17 00:00:00 2001 From: Eden Halperin Date: Tue, 27 May 2014 17:08:08 -0700 Subject: [PATCH 04/79] remove style comments --- bin/style.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/bin/style.js b/bin/style.js index 1dbe2b2cf..f27236f29 100644 --- a/bin/style.js +++ b/bin/style.js @@ -2269,11 +2269,7 @@ module.exports = { "stroke": "text_stroke" }, "poi": { - //"color": "rgba(50,50,50,0.9)", "antialias": false - //"stroke": #000, - //"strokeWidth": 0.4, - //"strokeBlur": 2 }, "poi_label": { "color": "#444", From f8e69c58cc7595c8d790514bd5f62685520bb906 Mon Sep 17 00:00:00 2001 From: Nicki Dlugash Date: Tue, 27 May 2014 20:14:57 -0400 Subject: [PATCH 05/79] updated poi label bucket textSize to be consistent with sizes in the classes --- bin/style.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/style.js b/bin/style.js index d32390436..842690201 100644 --- a/bin/style.js +++ b/bin/style.js @@ -843,7 +843,7 @@ module.exports = { "text_field": "name", "path": "horizontal", "padding": 2, - "fontSize": 12, + "fontSize": 11, "feature_type": "point", "type": "text", //"alwaysVisible": true @@ -856,7 +856,7 @@ module.exports = { "text_field": "name", "path": "horizontal", "padding": 2, - "fontSize": 12, + "fontSize": 10, "feature_type": "point", "type": "text", //"alwaysVisible": true @@ -869,7 +869,7 @@ module.exports = { "text_field": "name", "path": "horizontal", "padding": 2, - "fontSize": 12, + "fontSize": 10, "feature_type": "point", "type": "text", //"alwaysVisible": true From a1835b3fc27b8fecaa947eb578c60450e3063635 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Tue, 27 May 2014 18:55:20 -0700 Subject: [PATCH 06/79] update gyp to svn r1923 --- deps/gyp/PRESUBMIT.py | 2 - deps/gyp/pylib/gyp/MSVSSettings.py | 73 +++-- deps/gyp/pylib/gyp/MSVSUtil.py | 21 +- deps/gyp/pylib/gyp/MSVSVersion.py | 2 +- deps/gyp/pylib/gyp/common.py | 67 ++++ deps/gyp/pylib/gyp/generator/android.py | 77 +++-- deps/gyp/pylib/gyp/generator/eclipse.py | 7 +- deps/gyp/pylib/gyp/generator/make.py | 3 +- deps/gyp/pylib/gyp/generator/msvs.py | 88 +++--- deps/gyp/pylib/gyp/generator/ninja.py | 163 ++++++---- deps/gyp/pylib/gyp/generator/xcode.py | 16 +- deps/gyp/pylib/gyp/input.py | 403 +++++++++++++----------- deps/gyp/pylib/gyp/mac_tool.py | 6 +- deps/gyp/pylib/gyp/msvs_emulation.py | 20 +- deps/gyp/pylib/gyp/win_tool.py | 31 +- deps/gyp/pylib/gyp/xcode_emulation.py | 343 +++++++++++++------- 16 files changed, 839 insertions(+), 483 deletions(-) diff --git a/deps/gyp/PRESUBMIT.py b/deps/gyp/PRESUBMIT.py index 9c474eb2b..b79316a91 100644 --- a/deps/gyp/PRESUBMIT.py +++ b/deps/gyp/PRESUBMIT.py @@ -16,8 +16,6 @@ PYLINT_BLACKLIST = [ 'test/lib/TestCmd.py', 'test/lib/TestCommon.py', 'test/lib/TestGyp.py', - # Needs style fix. - 'pylib/gyp/generator/xcode.py', ] diff --git a/deps/gyp/pylib/gyp/MSVSSettings.py b/deps/gyp/pylib/gyp/MSVSSettings.py index 773b74e98..205b3b5b9 100644 --- a/deps/gyp/pylib/gyp/MSVSSettings.py +++ b/deps/gyp/pylib/gyp/MSVSSettings.py @@ -367,6 +367,35 @@ fix_vc_macro_slashes_regex = re.compile( r'(\$\((?:%s)\))(?:[\\/]+)' % "|".join(fix_vc_macro_slashes_regex_list) ) +# Regular expression to detect keys that were generated by exclusion lists +_EXCLUDED_SUFFIX_RE = re.compile('^(.*)_excluded$') + + +def _ValidateExclusionSetting(setting, settings, error_msg, stderr=sys.stderr): + """Verify that 'setting' is valid if it is generated from an exclusion list. + + If the setting appears to be generated from an exclusion list, the root name + is checked. + + Args: + setting: A string that is the setting name to validate + settings: A dictionary where the keys are valid settings + error_msg: The message to emit in the event of error + stderr: The stream receiving the error messages. + """ + # This may be unrecognized because it's an exclusion list. If the + # setting name has the _excluded suffix, then check the root name. + unrecognized = True + m = re.match(_EXCLUDED_SUFFIX_RE, setting) + if m: + root_setting = m.group(1) + unrecognized = root_setting not in settings + + if unrecognized: + # We don't know this setting. Give a warning. + print >> stderr, error_msg + + def FixVCMacroSlashes(s): """Replace macros which have excessive following slashes. @@ -403,9 +432,6 @@ def ConvertVCMacrosToMSBuild(s): return s -_EXCLUDED_SUFFIX_RE = re.compile('^(.*)_excluded$') - - def ConvertToMSBuildSettings(msvs_settings, stderr=sys.stderr): """Converts MSVS settings (VS2008 and earlier) to MSBuild settings (VS2010+). @@ -432,19 +458,12 @@ def ConvertToMSBuildSettings(msvs_settings, stderr=sys.stderr): print >> stderr, ('Warning: while converting %s/%s to MSBuild, ' '%s' % (msvs_tool_name, msvs_setting, e)) else: - # This may be unrecognized because it's an exclusion list. If the - # setting name has the _excluded suffix, then check the root name. - unrecognized = True - m = re.match(_EXCLUDED_SUFFIX_RE, msvs_setting) - if m: - root_msvs_setting = m.group(1) - unrecognized = root_msvs_setting not in msvs_tool - - if unrecognized: - # We don't know this setting. Give a warning. - print >> stderr, ('Warning: unrecognized setting %s/%s ' - 'while converting to MSBuild.' % - (msvs_tool_name, msvs_setting)) + _ValidateExclusionSetting(msvs_setting, + msvs_tool, + ('Warning: unrecognized setting %s/%s ' + 'while converting to MSBuild.' % + (msvs_tool_name, msvs_setting)), + stderr) else: print >> stderr, ('Warning: unrecognized tool %s while converting to ' 'MSBuild.' % msvs_tool_name) @@ -495,8 +514,12 @@ def _ValidateSettings(validators, settings, stderr): print >> stderr, ('Warning: for %s/%s, %s' % (tool_name, setting, e)) else: - print >> stderr, ('Warning: unrecognized setting %s/%s' % - (tool_name, setting)) + _ValidateExclusionSetting(setting, + tool_validators, + ('Warning: unrecognized setting %s/%s' % + (tool_name, setting)), + stderr) + else: print >> stderr, ('Warning: unrecognized tool %s' % tool_name) @@ -593,7 +616,9 @@ _Same(_compile, 'DebugInformationFormat', _Same(_compile, 'EnableEnhancedInstructionSet', _Enumeration(['NotSet', 'StreamingSIMDExtensions', # /arch:SSE - 'StreamingSIMDExtensions2'])) # /arch:SSE2 + 'StreamingSIMDExtensions2', # /arch:SSE2 + 'AdvancedVectorExtensions', # /arch:AVX (vs2012+) + 'NoExtensions',])) # /arch:IA32 (vs2012+) _Same(_compile, 'ErrorReporting', _Enumeration(['None', # /errorReport:none 'Prompt', # /errorReport:prompt @@ -848,13 +873,6 @@ _Moved(_link, 'UseLibraryDependencyInputs', 'ProjectReference', _boolean) # MSVS options not found in MSBuild. _MSVSOnly(_link, 'OptimizeForWindows98', _newly_boolean) _MSVSOnly(_link, 'UseUnicodeResponseFiles', _boolean) -# These settings generate correctly in the MSVS output files when using -# e.g. DelayLoadDLLs! or AdditionalDependencies! to exclude files from -# configuration entries, but result in spurious artifacts which can be -# safely ignored here. See crbug.com/246570 -_MSVSOnly(_link, 'AdditionalLibraryDirectories_excluded', _folder_list) -_MSVSOnly(_link, 'DelayLoadDLLs_excluded', _file_list) -_MSVSOnly(_link, 'AdditionalDependencies_excluded', _file_list) # MSBuild options not found in MSVS. _MSBuildOnly(_link, 'BuildingInIDE', _boolean) @@ -1003,9 +1021,6 @@ _Same(_lib, 'TargetMachine', _target_machine_enumeration) # ProjectReference. We may want to validate that they are consistent. _Moved(_lib, 'LinkLibraryDependencies', 'ProjectReference', _boolean) -# TODO(jeanluc) I don't think these are genuine settings but byproducts of Gyp. -_MSVSOnly(_lib, 'AdditionalLibraryDirectories_excluded', _folder_list) - _MSBuildOnly(_lib, 'DisplayLibrary', _string) # /LIST Visible='false' _MSBuildOnly(_lib, 'ErrorReporting', _Enumeration([], new=['PromptImmediately', # /ERRORREPORT:PROMPT diff --git a/deps/gyp/pylib/gyp/MSVSUtil.py b/deps/gyp/pylib/gyp/MSVSUtil.py index 62e8d260d..fbf3ed2e3 100644 --- a/deps/gyp/pylib/gyp/MSVSUtil.py +++ b/deps/gyp/pylib/gyp/MSVSUtil.py @@ -109,15 +109,16 @@ def ShardTargets(target_list, target_dicts): new_target_dicts[t] = target_dicts[t] # Shard dependencies. for t in new_target_dicts: - dependencies = copy.copy(new_target_dicts[t].get('dependencies', [])) - new_dependencies = [] - for d in dependencies: - if d in targets_to_shard: - for i in range(targets_to_shard[d]): - new_dependencies.append(_ShardName(d, i)) - else: - new_dependencies.append(d) - new_target_dicts[t]['dependencies'] = new_dependencies + for deptype in ('dependencies', 'dependencies_original'): + dependencies = copy.copy(new_target_dicts[t].get(deptype, [])) + new_dependencies = [] + for d in dependencies: + if d in targets_to_shard: + for i in range(targets_to_shard[d]): + new_dependencies.append(_ShardName(d, i)) + else: + new_dependencies.append(d) + new_target_dicts[t][deptype] = new_dependencies return (new_target_list, new_target_dicts) @@ -264,4 +265,4 @@ def InsertLargePdbShims(target_list, target_dicts, vars): # Update the original target to depend on the shim target. target_dict.setdefault('dependencies', []).append(full_shim_target_name) - return (target_list, target_dicts) \ No newline at end of file + return (target_list, target_dicts) diff --git a/deps/gyp/pylib/gyp/MSVSVersion.py b/deps/gyp/pylib/gyp/MSVSVersion.py index 03b6d8ad4..bcd6122f2 100644 --- a/deps/gyp/pylib/gyp/MSVSVersion.py +++ b/deps/gyp/pylib/gyp/MSVSVersion.py @@ -379,7 +379,7 @@ def SelectVisualStudioVersion(version='auto'): if version == 'auto': version = os.environ.get('GYP_MSVS_VERSION', 'auto') version_map = { - 'auto': ('10.0', '12.0', '9.0', '8.0', '11.0'), + 'auto': ('12.0', '10.0', '9.0', '8.0', '11.0'), '2005': ('8.0',), '2005e': ('8.0',), '2008': ('9.0',), diff --git a/deps/gyp/pylib/gyp/common.py b/deps/gyp/pylib/gyp/common.py index f9c6c6f3a..df71d973e 100644 --- a/deps/gyp/pylib/gyp/common.py +++ b/deps/gyp/pylib/gyp/common.py @@ -4,6 +4,7 @@ from __future__ import with_statement +import collections import errno import filecmp import os.path @@ -472,6 +473,72 @@ def uniquer(seq, idfun=None): return result +# Based on http://code.activestate.com/recipes/576694/. +class OrderedSet(collections.MutableSet): + def __init__(self, iterable=None): + self.end = end = [] + end += [None, end, end] # sentinel node for doubly linked list + self.map = {} # key --> [key, prev, next] + if iterable is not None: + self |= iterable + + def __len__(self): + return len(self.map) + + def __contains__(self, key): + return key in self.map + + def add(self, key): + if key not in self.map: + end = self.end + curr = end[1] + curr[2] = end[1] = self.map[key] = [key, curr, end] + + def discard(self, key): + if key in self.map: + key, prev_item, next_item = self.map.pop(key) + prev_item[2] = next_item + next_item[1] = prev_item + + def __iter__(self): + end = self.end + curr = end[2] + while curr is not end: + yield curr[0] + curr = curr[2] + + def __reversed__(self): + end = self.end + curr = end[1] + while curr is not end: + yield curr[0] + curr = curr[1] + + # The second argument is an addition that causes a pylint warning. + def pop(self, last=True): # pylint: disable=W0221 + if not self: + raise KeyError('set is empty') + key = self.end[1][0] if last else self.end[2][0] + self.discard(key) + return key + + def __repr__(self): + if not self: + return '%s()' % (self.__class__.__name__,) + return '%s(%r)' % (self.__class__.__name__, list(self)) + + def __eq__(self, other): + if isinstance(other, OrderedSet): + return len(self) == len(other) and list(self) == list(other) + return set(self) == set(other) + + # Extensions to the recipe. + def update(self, iterable): + for i in iterable: + if i not in self: + self.add(i) + + class CycleError(Exception): """An exception raised when an unexpected cycle is detected.""" def __init__(self, nodes): diff --git a/deps/gyp/pylib/gyp/generator/android.py b/deps/gyp/pylib/gyp/generator/android.py index 41346e2b1..39884749b 100644 --- a/deps/gyp/pylib/gyp/generator/android.py +++ b/deps/gyp/pylib/gyp/generator/android.py @@ -55,7 +55,7 @@ generator_additional_path_sections = [] generator_extra_sources_for_rules = [] -SHARED_FOOTER = """\ +ALL_MODULES_FOOTER = """\ # "gyp_all_modules" is a concatenation of the "gyp_all_modules" targets from # all the included sub-makefiles. This is just here to clarify. gyp_all_modules: @@ -133,7 +133,7 @@ class AndroidMkWriter(object): self.android_top_dir = android_top_dir def Write(self, qualified_target, relative_target, base_path, output_filename, - spec, configs, part_of_all): + spec, configs, part_of_all, write_alias_target): """The main entry point: writes a .mk file for a single target. Arguments: @@ -144,6 +144,8 @@ class AndroidMkWriter(object): output_filename: output .mk file name to write spec, configs: gyp info part_of_all: flag indicating this target is part of 'all' + write_alias_target: flag indicating whether to create short aliases for + this target """ gyp.common.EnsureDirExists(output_filename) @@ -186,11 +188,19 @@ class AndroidMkWriter(object): self.WriteLn('LOCAL_MODULE_TAGS := optional') if self.toolset == 'host': self.WriteLn('LOCAL_IS_HOST_MODULE := true') + else: + self.WriteLn('LOCAL_MODULE_TARGET_ARCH := ' + '$(TARGET_$(GYP_VAR_PREFIX)ARCH)') # Grab output directories; needed for Actions and Rules. - self.WriteLn('gyp_intermediate_dir := $(call local-intermediates-dir)') + if self.toolset == 'host': + self.WriteLn('gyp_intermediate_dir := ' + '$(call local-intermediates-dir)') + else: + self.WriteLn('gyp_intermediate_dir := ' + '$(call local-intermediates-dir,,$(GYP_VAR_PREFIX))') self.WriteLn('gyp_shared_intermediate_dir := ' - '$(call intermediates-dir-for,GYP,shared)') + '$(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))') self.WriteLn() # List files this target depends on so that actions/rules/copies/sources @@ -226,7 +236,8 @@ class AndroidMkWriter(object): if spec.get('sources', []) or extra_sources: self.WriteSources(spec, configs, extra_sources) - self.WriteTarget(spec, configs, deps, link_deps, part_of_all) + self.WriteTarget(spec, configs, deps, link_deps, part_of_all, + write_alias_target) # Update global list of target outputs, used in dependency tracking. target_outputs[qualified_target] = ('path', self.output_binary) @@ -291,6 +302,7 @@ class AndroidMkWriter(object): # writing duplicate dummy rules for those outputs. main_output = make.QuoteSpaces(self.LocalPathify(outputs[0])) self.WriteLn('%s: gyp_local_path := $(LOCAL_PATH)' % main_output) + self.WriteLn('%s: gyp_var_prefix := $(GYP_VAR_PREFIX)' % main_output) self.WriteLn('%s: gyp_intermediate_dir := ' '$(abspath $(gyp_intermediate_dir))' % main_output) self.WriteLn('%s: gyp_shared_intermediate_dir := ' @@ -337,13 +349,10 @@ class AndroidMkWriter(object): """ if len(rules) == 0: return - rule_trigger = '%s_rule_trigger' % self.android_module - did_write_rule = False for rule in rules: if len(rule.get('rule_sources', [])) == 0: continue - did_write_rule = True name = make.StringToMakefileVariable('%s_%s' % (self.relative_target, rule['rule_name'])) self.WriteLn('\n### Generated for rule "%s":' % name) @@ -391,6 +400,7 @@ class AndroidMkWriter(object): outputs = map(self.LocalPathify, outputs) main_output = outputs[0] self.WriteLn('%s: gyp_local_path := $(LOCAL_PATH)' % main_output) + self.WriteLn('%s: gyp_var_prefix := $(GYP_VAR_PREFIX)' % main_output) self.WriteLn('%s: gyp_intermediate_dir := ' '$(abspath $(gyp_intermediate_dir))' % main_output) self.WriteLn('%s: gyp_shared_intermediate_dir := ' @@ -412,13 +422,9 @@ class AndroidMkWriter(object): # Make each output depend on the main output, with an empty command # to force make to notice that the mtime has changed. self.WriteLn('%s: %s ;' % (output, main_output)) - self.WriteLn('.PHONY: %s' % (rule_trigger)) - self.WriteLn('%s: %s' % (rule_trigger, main_output)) - self.WriteLn('') - if did_write_rule: - extra_sources.append(rule_trigger) # Force all rules to run. - self.WriteLn('### Finished generating for all rules') - self.WriteLn('') + self.WriteLn() + + self.WriteLn() def WriteCopies(self, copies, extra_outputs): @@ -501,6 +507,9 @@ class AndroidMkWriter(object): self.WriteLn('LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) ' '$(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))') self.WriteLn('LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))') + # Android uses separate flags for assembly file invocations, but gyp expects + # the same CFLAGS to be applied: + self.WriteLn('LOCAL_ASFLAGS := $(LOCAL_CFLAGS)') def WriteSources(self, spec, configs, extra_sources): @@ -609,16 +618,16 @@ class AndroidMkWriter(object): prefix = '' if spec['toolset'] == 'host': - suffix = '_host_gyp' + suffix = '_$(TARGET_$(GYP_VAR_PREFIX)ARCH)_host_gyp' else: suffix = '_gyp' if self.path: - name = '%s%s_%s%s' % (prefix, self.path, self.target, suffix) + middle = make.StringToMakefileVariable('%s_%s' % (self.path, self.target)) else: - name = '%s%s%s' % (prefix, self.target, suffix) + middle = make.StringToMakefileVariable(self.target) - return make.StringToMakefileVariable(name) + return ''.join([prefix, middle, suffix]) def ComputeOutputParts(self, spec): @@ -680,15 +689,15 @@ class AndroidMkWriter(object): if self.toolset == 'host': path = '$(HOST_OUT_INTERMEDIATE_LIBRARIES)' else: - path = '$(TARGET_OUT_INTERMEDIATE_LIBRARIES)' + path = '$($(GYP_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)' else: # Other targets just get built into their intermediate dir. if self.toolset == 'host': path = '$(call intermediates-dir-for,%s,%s,true)' % (self.android_class, self.android_module) else: - path = '$(call intermediates-dir-for,%s,%s)' % (self.android_class, - self.android_module) + path = ('$(call intermediates-dir-for,%s,%s,,,$(GYP_VAR_PREFIX))' + % (self.android_class, self.android_module)) assert spec.get('product_dir') is None # TODO: not supported? return os.path.join(path, self.ComputeOutputBasename(spec)) @@ -816,12 +825,15 @@ class AndroidMkWriter(object): 'LOCAL_SHARED_LIBRARIES') - def WriteTarget(self, spec, configs, deps, link_deps, part_of_all): + def WriteTarget(self, spec, configs, deps, link_deps, part_of_all, + write_alias_target): """Write Makefile code to produce the final target of the gyp spec. spec, configs: input from gyp. deps, link_deps: dependency lists; see ComputeDeps() part_of_all: flag indicating this target is part of 'all' + write_alias_target: flag indicating whether to create short aliases for this + target """ self.WriteLn('### Rules for final target.') @@ -832,7 +844,7 @@ class AndroidMkWriter(object): # name 'gyp_all_modules' as the Android build system doesn't allow the use # of the Make target 'all' and because 'all_modules' is the equivalent of # the Make target 'all' on Android. - if part_of_all: + if part_of_all and write_alias_target: self.WriteLn('# Add target alias to "gyp_all_modules" target.') self.WriteLn('.PHONY: gyp_all_modules') self.WriteLn('gyp_all_modules: %s' % self.android_module) @@ -841,7 +853,7 @@ class AndroidMkWriter(object): # Add an alias from the gyp target name to the Android module name. This # simplifies manual builds of the target, and is required by the test # framework. - if self.target != self.android_module: + if self.target != self.android_module and write_alias_target: self.WriteLn('# Alias gyp target name.') self.WriteLn('.PHONY: %s' % self.target) self.WriteLn('%s: %s' % (self.target, self.android_module)) @@ -870,6 +882,8 @@ class AndroidMkWriter(object): else: self.WriteLn('LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp') self.WriteLn('LOCAL_UNINSTALLABLE_MODULE := true') + if self.toolset == 'target': + self.WriteLn('LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)') self.WriteLn() self.WriteLn('include $(BUILD_SYSTEM)/base_rules.mk') self.WriteLn() @@ -877,6 +891,9 @@ class AndroidMkWriter(object): self.WriteLn('\t$(hide) echo "Gyp timestamp: $@"') self.WriteLn('\t$(hide) mkdir -p $(dir $@)') self.WriteLn('\t$(hide) touch $@') + if self.toolset == 'target': + self.WriteLn() + self.WriteLn('LOCAL_2ND_ARCH_VAR_PREFIX :=') def WriteList(self, value_list, variable=None, prefix='', @@ -926,7 +943,7 @@ class AndroidMkWriter(object): 'INPUT_ROOT': expansion, 'INPUT_DIRNAME': dirname, } - return path + return os.path.normpath(path) def PerformBuild(data, configurations, params): @@ -946,6 +963,7 @@ def GenerateOutput(target_list, target_dicts, data, params): generator_flags = params.get('generator_flags', {}) builddir_name = generator_flags.get('output_dir', 'out') limit_to_target_all = generator_flags.get('limit_to_target_all', False) + write_alias_targets = generator_flags.get('write_alias_targets', True) android_top_dir = os.environ.get('ANDROID_BUILD_TOP') assert android_top_dir, '$ANDROID_BUILD_TOP not set; you need to run lunch.' @@ -1041,7 +1059,8 @@ def GenerateOutput(target_list, target_dicts, data, params): writer = AndroidMkWriter(android_top_dir) android_module = writer.Write(qualified_target, relative_target, base_path, output_file, spec, configs, - part_of_all=part_of_all) + part_of_all=part_of_all, + write_alias_target=write_alias_targets) if android_module in android_modules: print ('ERROR: Android module names must be unique. The following ' 'targets both generate Android module name %s.\n %s\n %s' % @@ -1057,6 +1076,7 @@ def GenerateOutput(target_list, target_dicts, data, params): include_list.add(mkfile_rel_path) root_makefile.write('GYP_CONFIGURATION ?= %s\n' % default_configuration) + root_makefile.write('GYP_VAR_PREFIX ?=\n') # Write out the sorted list of includes. root_makefile.write('\n') @@ -1064,6 +1084,7 @@ def GenerateOutput(target_list, target_dicts, data, params): root_makefile.write('include $(LOCAL_PATH)/' + include_file + '\n') root_makefile.write('\n') - root_makefile.write(SHARED_FOOTER) + if write_alias_targets: + root_makefile.write(ALL_MODULES_FOOTER) root_makefile.close() diff --git a/deps/gyp/pylib/gyp/generator/eclipse.py b/deps/gyp/pylib/gyp/generator/eclipse.py index 8d08f57ea..718eb5d3d 100644 --- a/deps/gyp/pylib/gyp/generator/eclipse.py +++ b/deps/gyp/pylib/gyp/generator/eclipse.py @@ -165,7 +165,7 @@ def GetAllIncludeDirectories(target_list, target_dicts, return all_includes_list -def GetCompilerPath(target_list, data): +def GetCompilerPath(target_list, data, options): """Determine a command that can be used to invoke the compiler. Returns: @@ -173,13 +173,12 @@ def GetCompilerPath(target_list, data): the compiler from that. Otherwise, see if a compiler was specified via the CC_target environment variable. """ - # First, see if the compiler is configured in make's settings. build_file, _, _ = gyp.common.ParseQualifiedTarget(target_list[0]) make_global_settings_dict = data[build_file].get('make_global_settings', {}) for key, value in make_global_settings_dict: if key in ['CC', 'CXX']: - return value + return os.path.join(options.toplevel_dir, value) # Check to see if the compiler was specified as an environment variable. for key in ['CC_target', 'CC', 'CXX']: @@ -304,7 +303,7 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params, eclipse_langs = ['C++ Source File', 'C Source File', 'Assembly Source File', 'GNU C++', 'GNU C', 'Assembly'] - compiler_path = GetCompilerPath(target_list, data) + compiler_path = GetCompilerPath(target_list, data, options) include_dirs = GetAllIncludeDirectories(target_list, target_dicts, shared_intermediate_dirs, config_name, params, compiler_path) diff --git a/deps/gyp/pylib/gyp/generator/make.py b/deps/gyp/pylib/gyp/generator/make.py index b6f766d55..b88a433d3 100644 --- a/deps/gyp/pylib/gyp/generator/make.py +++ b/deps/gyp/pylib/gyp/generator/make.py @@ -1447,8 +1447,7 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD libraries = spec.get('libraries') if libraries: # Remove duplicate entries - # Commented out due to https://code.google.com/p/gyp/issues/detail?id=419 - # libraries = gyp.common.uniquer(libraries) + libraries = gyp.common.uniquer(libraries) if self.flavor == 'mac': libraries = self.xcode_settings.AdjustLibraries(libraries) self.WriteList(libraries, 'LIBS') diff --git a/deps/gyp/pylib/gyp/generator/msvs.py b/deps/gyp/pylib/gyp/generator/msvs.py index 9dcdab6cf..64991d424 100644 --- a/deps/gyp/pylib/gyp/generator/msvs.py +++ b/deps/gyp/pylib/gyp/generator/msvs.py @@ -2,7 +2,6 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import collections import copy import ntpath import os @@ -21,6 +20,7 @@ import gyp.MSVSUserFile as MSVSUserFile import gyp.MSVSUtil as MSVSUtil import gyp.MSVSVersion as MSVSVersion from gyp.common import GypError +from gyp.common import OrderedSet # TODO: Remove once bots are on 2.7, http://crbug.com/241769 def _import_OrderedDict(): @@ -81,6 +81,7 @@ generator_additional_non_configuration_keys = [ 'msvs_external_builder_out_dir', 'msvs_external_builder_build_cmd', 'msvs_external_builder_clean_cmd', + 'msvs_external_builder_clcompile_cmd', ] @@ -97,46 +98,6 @@ cached_username = None cached_domain = None -# Based on http://code.activestate.com/recipes/576694/. -class OrderedSet(collections.MutableSet): - def __init__(self, iterable=None): - self.end = end = [] - end += [None, end, end] # sentinel node for doubly linked list - self.map = {} # key --> [key, prev, next] - if iterable is not None: - self |= iterable - - def __len__(self): - return len(self.map) - - def discard(self, key): - if key in self.map: - key, prev, next = self.map.pop(key) - prev[2] = next - next[1] = prev - - def __contains__(self, key): - return key in self.map - - def add(self, key): - if key not in self.map: - end = self.end - curr = end[1] - curr[2] = end[1] = self.map[key] = [key, curr, end] - - def update(self, iterable): - for i in iterable: - if i not in self: - self.add(i) - - def __iter__(self): - end = self.end - curr = end[2] - while curr is not end: - yield curr[0] - curr = curr[2] - - # TODO(gspencer): Switch the os.environ calls to be # win32api.GetDomainName() and win32api.GetUserName() once the # python version in depot_tools has been updated to work on Vista @@ -858,17 +819,21 @@ def _GenerateRulesForMSVS(p, output_dir, options, spec, def _AdjustSourcesForRules(spec, rules, sources, excluded_sources): # Add outputs generated by each rule (if applicable). for rule in rules: - # Done if not processing outputs as sources. - if int(rule.get('process_outputs_as_sources', False)): - # Add in the outputs from this rule. - trigger_files = _FindRuleTriggerFiles(rule, sources) - for trigger_file in trigger_files: + # Add in the outputs from this rule. + trigger_files = _FindRuleTriggerFiles(rule, sources) + for trigger_file in trigger_files: + # Remove trigger_file from excluded_sources to let the rule be triggered + # (e.g. rule trigger ax_enums.idl is added to excluded_sources + # because it's also in an action's inputs in the same project) + excluded_sources.discard(_FixPath(trigger_file)) + # Done if not processing outputs as sources. + if int(rule.get('process_outputs_as_sources', False)): inputs, outputs = _RuleInputsAndOutputs(rule, trigger_file) inputs = OrderedSet(_FixPaths(inputs)) outputs = OrderedSet(_FixPaths(outputs)) inputs.remove(_FixPath(trigger_file)) sources.update(inputs) - if not spec.get('msvs_external_builder'): + if spec['type'] != 'none' and not spec.get('msvs_external_builder'): excluded_sources.update(inputs) sources.update(outputs) @@ -1427,7 +1392,7 @@ def _PrepareListOfSources(spec, generator_flags, gyp_file): # Add all inputs to sources and excluded sources. inputs = OrderedSet(inputs) sources.update(inputs) - if not spec.get('msvs_external_builder'): + if spec['type'] != 'none' and not spec.get('msvs_external_builder'): excluded_sources.update(inputs) if int(a.get('process_outputs_as_sources', False)): _AddNormalizedSources(sources, a.get('outputs', [])) @@ -1479,8 +1444,14 @@ def _AdjustSourcesAndConvertToFilterHierarchy( # Prune filters with a single child to flatten ugly directory structures # such as ../../src/modules/module1 etc. - while len(sources) == 1 and isinstance(sources[0], MSVSProject.Filter): - sources = sources[0].contents + if version.UsesVcxproj(): + while all([isinstance(s, MSVSProject.Filter) for s in sources]) \ + and len(set([s.name for s in sources])) == 1: + assert all([len(s.contents) == 1 for s in sources]) + sources = [s.contents[0] for s in sources] + else: + while len(sources) == 1 and isinstance(sources[0], MSVSProject.Filter): + sources = sources[0].contents return sources, excluded_sources, excluded_idl @@ -2584,6 +2555,7 @@ def _GetMSBuildGlobalProperties(spec, guid, gyp_file_name): ['ProjectGuid', guid], ['Keyword', 'Win32Proj'], ['RootNamespace', namespace], + ['IgnoreWarnCompileDuplicatedFilename', 'true'], ] ] @@ -3226,7 +3198,9 @@ def _GenerateMSBuildProject(project, options, version, generator_flags): def _GetMSBuildExternalBuilderTargets(spec): """Return a list of MSBuild targets for external builders. - Right now, only "Build" and "Clean" targets are generated. + The "Build" and "Clean" targets are always generated. If the spec contains + 'msvs_external_builder_clcompile_cmd', then the "ClCompile" target will also + be generated, to support building selected C/C++ files. Arguments: spec: The gyp target spec. @@ -3245,7 +3219,17 @@ def _GetMSBuildExternalBuilderTargets(spec): clean_target = ['Target', {'Name': 'Clean'}] clean_target.append(['Exec', {'Command': clean_cmd}]) - return [build_target, clean_target] + targets = [build_target, clean_target] + + if spec.get('msvs_external_builder_clcompile_cmd'): + clcompile_cmd = _BuildCommandLineForRuleRaw( + spec, spec['msvs_external_builder_clcompile_cmd'], + False, False, False, False) + clcompile_target = ['Target', {'Name': 'ClCompile'}] + clcompile_target.append(['Exec', {'Command': clcompile_cmd}]) + targets.append(clcompile_target) + + return targets def _GetMSBuildExtensions(props_files_of_rules): diff --git a/deps/gyp/pylib/gyp/generator/ninja.py b/deps/gyp/pylib/gyp/generator/ninja.py index 1ed23f64c..e3fafb5d4 100644 --- a/deps/gyp/pylib/gyp/generator/ninja.py +++ b/deps/gyp/pylib/gyp/generator/ninja.py @@ -2,6 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import collections import copy import hashlib import json @@ -343,7 +344,7 @@ class NinjaWriter: return os.path.normpath(os.path.join(obj, self.base_dir, path_dir, path_basename)) - def WriteCollapsedDependencies(self, name, targets): + def WriteCollapsedDependencies(self, name, targets, order_only=None): """Given a list of targets, return a path for a single file representing the result of building all the targets or None. @@ -351,10 +352,11 @@ class NinjaWriter: assert targets == filter(None, targets), targets if len(targets) == 0: + assert not order_only return None - if len(targets) > 1: + if len(targets) > 1 or order_only: stamp = self.GypPathToUniqueOutput(name + '.stamp') - targets = self.ninja.build(stamp, 'stamp', targets) + targets = self.ninja.build(stamp, 'stamp', targets, order_only=order_only) self.ninja.newline() return targets[0] @@ -472,6 +474,8 @@ class NinjaWriter: else: print "Warning: Actions/rules writing object files don't work with " \ "multiarch targets, dropping. (target %s)" % spec['target_name'] + elif self.flavor == 'mac' and len(self.archs) > 1: + link_deps = collections.defaultdict(list) if self.flavor == 'win' and self.target.type == 'static_library': @@ -580,10 +584,7 @@ class NinjaWriter: def WriteActions(self, actions, extra_sources, prebuild, extra_mac_bundle_resources): # Actions cd into the base directory. - env = self.GetSortedXcodeEnv() - if self.flavor == 'win': - env = self.msvs_settings.GetVSMacroEnv( - '$!PRODUCT_DIR', config=self.config_name) + env = self.GetToolchainEnv() all_outputs = [] for action in actions: # First write out a rule for the action. @@ -616,15 +617,17 @@ class NinjaWriter: def WriteRules(self, rules, extra_sources, prebuild, mac_bundle_resources, extra_mac_bundle_resources): - env = self.GetSortedXcodeEnv() + env = self.GetToolchainEnv() all_outputs = [] for rule in rules: - # First write out a rule for the rule action. - name = '%s_%s' % (rule['rule_name'], - hashlib.md5(self.qualified_target).hexdigest()) # Skip a rule with no action and no inputs. if 'action' not in rule and not rule.get('rule_sources', []): continue + + # First write out a rule for the rule action. + name = '%s_%s' % (rule['rule_name'], + hashlib.md5(self.qualified_target).hexdigest()) + args = rule['action'] description = self.GenerateDescription( 'RULE', @@ -653,8 +656,22 @@ class NinjaWriter: return path.replace('\\', '/') return path + inputs = [self.GypPathToNinja(i, env) for i in rule.get('inputs', [])] + + # If there are n source files matching the rule, and m additional rule + # inputs, then adding 'inputs' to each build edge written below will + # write m * n inputs. Collapsing reduces this to m + n. + sources = rule.get('rule_sources', []) + num_inputs = len(inputs) + if prebuild: + num_inputs += 1 + if num_inputs > 2 and len(sources) > 2: + inputs = [self.WriteCollapsedDependencies( + rule['rule_name'], inputs, order_only=prebuild)] + prebuild = [] + # For each source file, write an edge that generates all the outputs. - for source in rule.get('rule_sources', []): + for source in sources: source = os.path.normpath(source) dirname, basename = os.path.split(source) root, ext = os.path.splitext(basename) @@ -663,9 +680,6 @@ class NinjaWriter: outputs = [self.ExpandRuleVariables(o, root, dirname, source, ext, basename) for o in rule['outputs']] - inputs = [self.ExpandRuleVariables(i, root, dirname, - source, ext, basename) - for i in rule.get('inputs', [])] if int(rule.get('process_outputs_as_sources', False)): extra_sources += outputs @@ -703,10 +717,11 @@ class NinjaWriter: else: assert var == None, repr(var) - inputs = [self.GypPathToNinja(i, env) for i in inputs] outputs = [self.GypPathToNinja(o, env) for o in outputs] - extra_bindings.append(('unique_name', - hashlib.md5(outputs[0]).hexdigest())) + if self.flavor == 'win': + # WriteNewNinjaRule uses unique_name for creating an rsp file on win. + extra_bindings.append(('unique_name', + hashlib.md5(outputs[0]).hexdigest())) self.ninja.build(outputs, rule_name, self.GypPathToNinja(source), implicit=inputs, order_only=prebuild, @@ -718,7 +733,7 @@ class NinjaWriter: def WriteCopies(self, copies, prebuild, mac_bundle_depends): outputs = [] - env = self.GetSortedXcodeEnv() + env = self.GetToolchainEnv() for copy in copies: for path in copy['files']: # Normalize the path so trailing slashes don't confuse us. @@ -810,6 +825,7 @@ class NinjaWriter: cflags_objcc = ['$cflags_cc'] + \ self.xcode_settings.GetCflagsObjCC(config_name) elif self.flavor == 'win': + asmflags = self.msvs_settings.GetAsmflags(config_name) cflags = self.msvs_settings.GetCflags(config_name) cflags_c = self.msvs_settings.GetCflagsC(config_name) cflags_cc = self.msvs_settings.GetCflagsCC(config_name) @@ -844,16 +860,17 @@ class NinjaWriter: self.WriteVariableList(ninja_file, 'defines', [Define(d, self.flavor) for d in defines]) if self.flavor == 'win': + self.WriteVariableList(ninja_file, 'asmflags', + map(self.ExpandSpecial, asmflags)) self.WriteVariableList(ninja_file, 'rcflags', [QuoteShellArgument(self.ExpandSpecial(f), self.flavor) for f in self.msvs_settings.GetRcflags(config_name, self.GypPathToNinja)]) include_dirs = config.get('include_dirs', []) - env = self.GetSortedXcodeEnv() + + env = self.GetToolchainEnv() if self.flavor == 'win': - env = self.msvs_settings.GetVSMacroEnv('$!PRODUCT_DIR', - config=config_name) include_dirs = self.msvs_settings.AdjustIncludeDirs(include_dirs, config_name) self.WriteVariableList(ninja_file, 'includes', @@ -1095,6 +1112,23 @@ class NinjaWriter: extra_bindings.append(('soname', os.path.split(output)[1])) extra_bindings.append(('lib', gyp.common.EncodePOSIXShellArgument(output))) + if self.flavor != 'win': + link_file_list = output + if self.is_mac_bundle: + # 'Dependency Framework.framework/Versions/A/Dependency Framework' -> + # 'Dependency Framework.framework.rsp' + link_file_list = self.xcode_settings.GetWrapperName() + if arch: + link_file_list += '.' + arch + link_file_list += '.rsp' + # If an rspfile contains spaces, ninja surrounds the filename with + # quotes around it and then passes it to open(), creating a file with + # quotes in its name (and when looking for the rsp file, the name + # makes it through bash which strips the quotes) :-/ + link_file_list = link_file_list.replace(' ', '_') + extra_bindings.append( + ('link_file_list', + gyp.common.EncodePOSIXShellArgument(link_file_list))) if self.flavor == 'win': extra_bindings.append(('binary', output)) if '/NOENTRY' not in ldflags: @@ -1196,6 +1230,19 @@ class NinjaWriter: self.target.bundle = output return output + def GetToolchainEnv(self, additional_settings=None): + """Returns the variables toolchain would set for build steps.""" + env = self.GetSortedXcodeEnv(additional_settings=additional_settings) + if self.flavor == 'win': + env = self.GetMsvsToolchainEnv( + additional_settings=additional_settings) + return env + + def GetMsvsToolchainEnv(self, additional_settings=None): + """Returns the variables Visual Studio would set for build steps.""" + return self.msvs_settings.GetVSMacroEnv('$!PRODUCT_DIR', + config=self.config_name) + def GetSortedXcodeEnv(self, additional_settings=None): """Returns the variables Xcode would set for build steps.""" assert self.abs_build_dir @@ -1559,14 +1606,15 @@ def GetDefaultConcurrentLinks(): hard_cap = max(1, int(os.getenv('GYP_LINK_CONCURRENCY_MAX', 2**32))) return min(mem_limit, hard_cap) elif sys.platform.startswith('linux'): - with open("/proc/meminfo") as meminfo: - memtotal_re = re.compile(r'^MemTotal:\s*(\d*)\s*kB') - for line in meminfo: - match = memtotal_re.match(line) - if not match: - continue - # Allow 8Gb per link on Linux because Gold is quite memory hungry - return max(1, int(match.group(1)) / (8 * (2 ** 20))) + if os.path.exists("/proc/meminfo"): + with open("/proc/meminfo") as meminfo: + memtotal_re = re.compile(r'^MemTotal:\s*(\d*)\s*kB') + for line in meminfo: + match = memtotal_re.match(line) + if not match: + continue + # Allow 8Gb per link on Linux because Gold is quite memory hungry + return max(1, int(match.group(1)) / (8 * (2 ** 20))) return 1 elif sys.platform == 'darwin': try: @@ -1842,9 +1890,9 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params, sys.executable)) master_ninja.rule( 'asm', - description='ASM $in', + description='ASM $out', command=('%s gyp-win-tool asm-wrapper ' - '$arch $asm $defines $includes /c /Fo $out $in' % + '$arch $asm $defines $includes $asmflags /c /Fo $out $in' % sys.executable)) if flavor != 'mac' and flavor != 'win': @@ -1863,32 +1911,33 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params, # The resulting string leaves an uninterpolated %{suffix} which # is used in the final substitution below. mtime_preserving_solink_base = ( - 'if [ ! -e $lib -o ! -e ${lib}.TOC ]; then ' - '%(solink)s && %(extract_toc)s > ${lib}.TOC; else ' - '%(solink)s && %(extract_toc)s > ${lib}.tmp && ' - 'if ! cmp -s ${lib}.tmp ${lib}.TOC; then mv ${lib}.tmp ${lib}.TOC ; ' + 'if [ ! -e $lib -o ! -e $lib.TOC ]; then ' + '%(solink)s && %(extract_toc)s > $lib.TOC; else ' + '%(solink)s && %(extract_toc)s > $lib.tmp && ' + 'if ! cmp -s $lib.tmp $lib.TOC; then mv $lib.tmp $lib.TOC ; ' 'fi; fi' % { 'solink': '$ld -shared $ldflags -o $lib -Wl,-soname=$soname %(suffix)s', 'extract_toc': - ('{ readelf -d ${lib} | grep SONAME ; ' - 'nm -gD -f p ${lib} | cut -f1-2 -d\' \'; }')}) + ('{ readelf -d $lib | grep SONAME ; ' + 'nm -gD -f p $lib | cut -f1-2 -d\' \'; }')}) master_ninja.rule( 'solink', description='SOLINK $lib', restat=True, - command=(mtime_preserving_solink_base % { - 'suffix': '-Wl,--whole-archive $in $solibs -Wl,--no-whole-archive ' - '$libs'}), + command=mtime_preserving_solink_base % {'suffix': '@$link_file_list'}, + rspfile='$link_file_list', + rspfile_content= + '-Wl,--whole-archive $in $solibs -Wl,--no-whole-archive $libs', pool='link_pool') master_ninja.rule( 'solink_module', description='SOLINK(module) $lib', restat=True, - command=(mtime_preserving_solink_base % { - 'suffix': '-Wl,--start-group $in $solibs -Wl,--end-group ' - '$libs'}), + command=mtime_preserving_solink_base % {'suffix': '@$link_file_list'}, + rspfile='$link_file_list', + rspfile_content='-Wl,--start-group $in $solibs -Wl,--end-group $libs', pool='link_pool') master_ninja.rule( 'link', @@ -1938,16 +1987,16 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params, # comment in the posix section above for details. solink_base = '$ld %(type)s $ldflags -o $lib %(suffix)s' mtime_preserving_solink_base = ( - 'if [ ! -e $lib -o ! -e ${lib}.TOC ] || ' + 'if [ ! -e $lib -o ! -e $lib.TOC ] || ' # Always force dependent targets to relink if this library # reexports something. Handling this correctly would require # recursive TOC dumping but this is rare in practice, so punt. 'otool -l $lib | grep -q LC_REEXPORT_DYLIB ; then ' - '%(solink)s && %(extract_toc)s > ${lib}.TOC; ' + '%(solink)s && %(extract_toc)s > $lib.TOC; ' 'else ' - '%(solink)s && %(extract_toc)s > ${lib}.tmp && ' - 'if ! cmp -s ${lib}.tmp ${lib}.TOC; then ' - 'mv ${lib}.tmp ${lib}.TOC ; ' + '%(solink)s && %(extract_toc)s > $lib.tmp && ' + 'if ! cmp -s $lib.tmp $lib.TOC; then ' + 'mv $lib.tmp $lib.TOC ; ' 'fi; ' 'fi' % { 'solink': solink_base, @@ -1955,34 +2004,42 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params, '{ otool -l $lib | grep LC_ID_DYLIB -A 5; ' 'nm -gP $lib | cut -f1-2 -d\' \' | grep -v U$$; true; }'}) - solink_suffix = '$in $solibs $libs$postbuilds' + + solink_suffix = '@$link_file_list$postbuilds' master_ninja.rule( 'solink', description='SOLINK $lib, POSTBUILDS', restat=True, command=mtime_preserving_solink_base % {'suffix': solink_suffix, 'type': '-shared'}, + rspfile='$link_file_list', + rspfile_content='$in $solibs $libs', pool='link_pool') master_ninja.rule( 'solink_notoc', description='SOLINK $lib, POSTBUILDS', restat=True, command=solink_base % {'suffix':solink_suffix, 'type': '-shared'}, + rspfile='$link_file_list', + rspfile_content='$in $solibs $libs', pool='link_pool') - solink_module_suffix = '$in $solibs $libs$postbuilds' master_ninja.rule( 'solink_module', description='SOLINK(module) $lib, POSTBUILDS', restat=True, - command=mtime_preserving_solink_base % {'suffix': solink_module_suffix, + command=mtime_preserving_solink_base % {'suffix': solink_suffix, 'type': '-bundle'}, + rspfile='$link_file_list', + rspfile_content='$in $solibs $libs', pool='link_pool') master_ninja.rule( 'solink_module_notoc', description='SOLINK(module) $lib, POSTBUILDS', restat=True, - command=solink_base % {'suffix': solink_module_suffix, 'type': '-bundle'}, + command=solink_base % {'suffix': solink_suffix, 'type': '-bundle'}, + rspfile='$link_file_list', + rspfile_content='$in $solibs $libs', pool='link_pool') master_ninja.rule( diff --git a/deps/gyp/pylib/gyp/generator/xcode.py b/deps/gyp/pylib/gyp/generator/xcode.py index 331e78baa..797245936 100644 --- a/deps/gyp/pylib/gyp/generator/xcode.py +++ b/deps/gyp/pylib/gyp/generator/xcode.py @@ -5,6 +5,7 @@ import filecmp import gyp.common import gyp.xcodeproj_file +import gyp.xcode_ninja import errno import os import sys @@ -575,6 +576,12 @@ def PerformBuild(data, configurations, params): def GenerateOutput(target_list, target_dicts, data, params): + # Optionally configure each spec to use ninja as the external builder. + ninja_wrapper = params.get('flavor') == 'ninja' + if ninja_wrapper: + (target_list, target_dicts, data) = \ + gyp.xcode_ninja.CreateWrapper(target_list, target_dicts, data, params) + options = params['options'] generator_flags = params.get('generator_flags', {}) parallel_builds = generator_flags.get('xcode_parallel_builds', True) @@ -703,11 +710,16 @@ def GenerateOutput(target_list, target_dicts, data, params): # and is made a dependency of this target. This way the work is done # before the dependency checks for what should be recompiled. support_xct = None - if type != 'none' and (spec_actions or spec_rules): + # The Xcode "issues" don't affect xcode-ninja builds, since the dependency + # logic all happens in ninja. Don't bother creating the extra targets in + # that case. + if type != 'none' and (spec_actions or spec_rules) and not ninja_wrapper: support_xccl = CreateXCConfigurationList(configuration_names); + support_target_suffix = generator_flags.get( + 'support_target_suffix', ' Support') support_target_properties = { 'buildConfigurationList': support_xccl, - 'name': target_name + ' Support', + 'name': target_name + support_target_suffix, } if target_product_name: support_target_properties['productName'] = \ diff --git a/deps/gyp/pylib/gyp/input.py b/deps/gyp/pylib/gyp/input.py index 6472912db..dc143d9df 100644 --- a/deps/gyp/pylib/gyp/input.py +++ b/deps/gyp/pylib/gyp/input.py @@ -10,8 +10,8 @@ from compiler.ast import Module from compiler.ast import Node from compiler.ast import Stmt import compiler -import copy import gyp.common +import gyp.simple_copy import multiprocessing import optparse import os.path @@ -24,6 +24,7 @@ import threading import time import traceback from gyp.common import GypError +from gyp.common import OrderedSet # A list of types that are treated as linkable. @@ -45,18 +46,31 @@ base_path_sections = [ 'outputs', 'sources', ] -path_sections = [] - -is_path_section_charset = set('=+?!') -is_path_section_match_re = re.compile('_(dir|file|path)s?$') +path_sections = set() def IsPathSection(section): - # If section ends in one of these characters, it's applied to a section + # If section ends in one of the '=+?!' characters, it's applied to a section # without the trailing characters. '/' is notably absent from this list, # because there's no way for a regular expression to be treated as a path. - while section[-1:] in is_path_section_charset: + while section[-1:] in '=+?!': section = section[:-1] - return section in path_sections or is_path_section_match_re.search(section) + + if section in path_sections: + return True + + # Sections mathing the regexp '_(dir|file|path)s?$' are also + # considered PathSections. Using manual string matching since that + # is much faster than the regexp and this can be called hundreds of + # thousands of times so micro performance matters. + if "_" in section: + tail = section[-6:] + if tail[-1] == 's': + tail = tail[:-1] + if tail[-5:] in ('_file', '_path'): + return True + return tail[-4:] == '_dir' + + return False # base_non_configuration_keys is a list of key names that belong in the target # itself and should not be propagated into its configurations. It is merged @@ -200,7 +214,7 @@ def CheckNode(node, keypath): "': " + repr(node) -def LoadOneBuildFile(build_file_path, data, aux_data, variables, includes, +def LoadOneBuildFile(build_file_path, data, aux_data, includes, is_target, check): if build_file_path in data: return data[build_file_path] @@ -224,7 +238,7 @@ def LoadOneBuildFile(build_file_path, data, aux_data, variables, includes, gyp.common.ExceptionAppend(e, 'while reading ' + build_file_path) raise - if not isinstance(build_file_data, dict): + if type(build_file_data) is not dict: raise GypError("%s does not evaluate to a dictionary." % build_file_path) data[build_file_path] = build_file_data @@ -236,10 +250,10 @@ def LoadOneBuildFile(build_file_path, data, aux_data, variables, includes, try: if is_target: LoadBuildFileIncludesIntoDict(build_file_data, build_file_path, data, - aux_data, variables, includes, check) + aux_data, includes, check) else: LoadBuildFileIncludesIntoDict(build_file_data, build_file_path, data, - aux_data, variables, None, check) + aux_data, None, check) except Exception, e: gyp.common.ExceptionAppend(e, 'while reading includes of ' + build_file_path) @@ -249,7 +263,7 @@ def LoadOneBuildFile(build_file_path, data, aux_data, variables, includes, def LoadBuildFileIncludesIntoDict(subdict, subdict_path, data, aux_data, - variables, includes, check): + includes, check): includes_list = [] if includes != None: includes_list.extend(includes) @@ -273,30 +287,27 @@ def LoadBuildFileIncludesIntoDict(subdict, subdict_path, data, aux_data, gyp.DebugOutput(gyp.DEBUG_INCLUDES, "Loading Included File: '%s'", include) MergeDicts(subdict, - LoadOneBuildFile(include, data, aux_data, variables, None, - False, check), + LoadOneBuildFile(include, data, aux_data, None, False, check), subdict_path, include) # Recurse into subdictionaries. for k, v in subdict.iteritems(): - if v.__class__ == dict: - LoadBuildFileIncludesIntoDict(v, subdict_path, data, aux_data, variables, + if type(v) is dict: + LoadBuildFileIncludesIntoDict(v, subdict_path, data, aux_data, None, check) - elif v.__class__ == list: - LoadBuildFileIncludesIntoList(v, subdict_path, data, aux_data, variables, + elif type(v) is list: + LoadBuildFileIncludesIntoList(v, subdict_path, data, aux_data, check) # This recurses into lists so that it can look for dicts. -def LoadBuildFileIncludesIntoList(sublist, sublist_path, data, aux_data, - variables, check): +def LoadBuildFileIncludesIntoList(sublist, sublist_path, data, aux_data, check): for item in sublist: - if item.__class__ == dict: + if type(item) is dict: LoadBuildFileIncludesIntoDict(item, sublist_path, data, aux_data, - variables, None, check) - elif item.__class__ == list: - LoadBuildFileIncludesIntoList(item, sublist_path, data, aux_data, - variables, check) + None, check) + elif type(item) is list: + LoadBuildFileIncludesIntoList(item, sublist_path, data, aux_data, check) # Processes toolsets in all the targets. This recurses into condition entries # since they can contain toolsets as well. @@ -320,7 +331,7 @@ def ProcessToolsetsInDict(data): if len(toolsets) > 0: # Optimization: only do copies if more than one toolset is specified. for build in toolsets[1:]: - new_target = copy.deepcopy(target) + new_target = gyp.simple_copy.deepcopy(target) new_target['toolset'] = build new_target_list.append(new_target) target['toolset'] = toolsets[0] @@ -328,7 +339,7 @@ def ProcessToolsetsInDict(data): data['targets'] = new_target_list if 'conditions' in data: for condition in data['conditions']: - if isinstance(condition, list): + if type(condition) is list: for condition_dict in condition[1:]: ProcessToolsetsInDict(condition_dict) @@ -358,7 +369,7 @@ def LoadTargetBuildFile(build_file_path, data, aux_data, variables, includes, gyp.DebugOutput(gyp.DEBUG_INCLUDES, "Loading Target Build File '%s'", build_file_path) - build_file_data = LoadOneBuildFile(build_file_path, data, aux_data, variables, + build_file_data = LoadOneBuildFile(build_file_path, data, aux_data, includes, True, check) # Store DEPTH for later use in generators. @@ -408,7 +419,8 @@ def LoadTargetBuildFile(build_file_path, data, aux_data, variables, includes, # copy with the target-specific data merged into it as the replacement # target dict. old_target_dict = build_file_data['targets'][index] - new_target_dict = copy.deepcopy(build_file_data['target_defaults']) + new_target_dict = gyp.simple_copy.deepcopy( + build_file_data['target_defaults']) MergeDicts(new_target_dict, old_target_dict, build_file_path, build_file_path) build_file_data['targets'][index] = new_target_dict @@ -636,15 +648,26 @@ def FindEnclosingBracketGroup(input_str): return (-1, -1) -canonical_int_re = re.compile('(0|-?[1-9][0-9]*)$') - - def IsStrCanonicalInt(string): """Returns True if |string| is in its canonical integer form. The canonical form is such that str(int(string)) == string. """ - return isinstance(string, str) and canonical_int_re.match(string) + if type(string) is str: + # This function is called a lot so for maximum performance, avoid + # involving regexps which would otherwise make the code much + # shorter. Regexps would need twice the time of this function. + if string: + if string == "0": + return True + if string[0] == "-": + string = string[1:] + if not string: + return False + if '1' <= string[0] <= '9': + return string.isdigit() + + return False # This matches things like "<(asdf)", "', 'eval') + cached_conditions_asts[cond_expr_expanded] = ast_code + if eval(ast_code, {'__builtins__': None}, variables): + return true_dict + return false_dict + except SyntaxError, e: + syntax_error = SyntaxError('%s while evaluating condition \'%s\' in %s ' + 'at character %d.' % + (str(e.args[0]), e.text, build_file, e.offset), + e.filename, e.lineno, e.offset, e.text) + raise syntax_error + except NameError, e: + gyp.common.ExceptionAppend(e, 'while evaluating condition \'%s\' in %s' % + (cond_expr_expanded, build_file)) + raise GypError(e) + def ProcessConditionsInDict(the_dict, phase, variables, build_file): # Process a 'conditions' or 'target_conditions' section in the_dict, @@ -1038,48 +1108,8 @@ def ProcessConditionsInDict(the_dict, phase, variables, build_file): del the_dict[conditions_key] for condition in conditions_list: - if not isinstance(condition, list): - raise GypError(conditions_key + ' must be a list') - if len(condition) != 2 and len(condition) != 3: - # It's possible that condition[0] won't work in which case this - # attempt will raise its own IndexError. That's probably fine. - raise GypError(conditions_key + ' ' + condition[0] + - ' must be length 2 or 3, not ' + str(len(condition))) - - [cond_expr, true_dict] = condition[0:2] - false_dict = None - if len(condition) == 3: - false_dict = condition[2] - - # Do expansions on the condition itself. Since the conditon can naturally - # contain variable references without needing to resort to GYP expansion - # syntax, this is of dubious value for variables, but someone might want to - # use a command expansion directly inside a condition. - cond_expr_expanded = ExpandVariables(cond_expr, phase, variables, - build_file) - if not isinstance(cond_expr_expanded, str) and \ - not isinstance(cond_expr_expanded, int): - raise ValueError, \ - 'Variable expansion in this context permits str and int ' + \ - 'only, found ' + expanded.__class__.__name__ - - try: - ast_code = compile(cond_expr_expanded, '', 'eval') - - if eval(ast_code, {'__builtins__': None}, variables): - merge_dict = true_dict - else: - merge_dict = false_dict - except SyntaxError, e: - syntax_error = SyntaxError('%s while evaluating condition \'%s\' in %s ' - 'at character %d.' % - (str(e.args[0]), e.text, build_file, e.offset), - e.filename, e.lineno, e.offset, e.text) - raise syntax_error - except NameError, e: - gyp.common.ExceptionAppend(e, 'while evaluating condition \'%s\' in %s' % - (cond_expr_expanded, build_file)) - raise GypError(e) + merge_dict = EvalCondition(condition, conditions_key, phase, variables, + build_file) if merge_dict != None: # Expand variables and nested conditinals in the merge_dict before @@ -1094,8 +1124,7 @@ def LoadAutomaticVariablesFromDict(variables, the_dict): # Any keys with plain string values in the_dict become automatic variables. # The variable name is the key name with a "_" character prepended. for key, value in the_dict.iteritems(): - if isinstance(value, str) or isinstance(value, int) or \ - isinstance(value, list): + if type(value) in (str, int, list): variables['_' + key] = value @@ -1108,8 +1137,7 @@ def LoadVariablesFromVariablesDict(variables, the_dict, the_dict_key): # (it could be a list or it could be parentless because it is a root dict), # the_dict_key will be None. for key, value in the_dict.get('variables', {}).iteritems(): - if not isinstance(value, str) and not isinstance(value, int) and \ - not isinstance(value, list): + if type(value) not in (str, int, list): continue if key.endswith('%'): @@ -1162,9 +1190,9 @@ def ProcessVariablesAndConditionsInDict(the_dict, phase, variables_in, for key, value in the_dict.iteritems(): # Skip "variables", which was already processed if present. - if key != 'variables' and isinstance(value, str): + if key != 'variables' and type(value) is str: expanded = ExpandVariables(value, phase, variables, build_file) - if not isinstance(expanded, str) and not isinstance(expanded, int): + if type(expanded) not in (str, int): raise ValueError, \ 'Variable expansion in this context permits str and int ' + \ 'only, found ' + expanded.__class__.__name__ + ' for ' + key @@ -1221,21 +1249,21 @@ def ProcessVariablesAndConditionsInDict(the_dict, phase, variables_in, for key, value in the_dict.iteritems(): # Skip "variables" and string values, which were already processed if # present. - if key == 'variables' or isinstance(value, str): + if key == 'variables' or type(value) is str: continue - if isinstance(value, dict): + if type(value) is dict: # Pass a copy of the variables dict so that subdicts can't influence # parents. ProcessVariablesAndConditionsInDict(value, phase, variables, build_file, key) - elif isinstance(value, list): + elif type(value) is list: # The list itself can't influence the variables dict, and # ProcessVariablesAndConditionsInList will make copies of the variables # dict if it needs to pass it to something that can influence it. No # copy is necessary here. ProcessVariablesAndConditionsInList(value, phase, variables, build_file) - elif not isinstance(value, int): + elif type(value) is not int: raise TypeError, 'Unknown type ' + value.__class__.__name__ + \ ' for ' + key @@ -1246,17 +1274,17 @@ def ProcessVariablesAndConditionsInList(the_list, phase, variables, index = 0 while index < len(the_list): item = the_list[index] - if isinstance(item, dict): + if type(item) is dict: # Make a copy of the variables dict so that it won't influence anything # outside of its own scope. ProcessVariablesAndConditionsInDict(item, phase, variables, build_file) - elif isinstance(item, list): + elif type(item) is list: ProcessVariablesAndConditionsInList(item, phase, variables, build_file) - elif isinstance(item, str): + elif type(item) is str: expanded = ExpandVariables(item, phase, variables, build_file) - if isinstance(expanded, str) or isinstance(expanded, int): + if type(expanded) in (str, int): the_list[index] = expanded - elif isinstance(expanded, list): + elif type(expanded) is list: the_list[index:index+1] = expanded index += len(expanded) @@ -1268,7 +1296,7 @@ def ProcessVariablesAndConditionsInList(the_list, phase, variables, 'Variable expansion in this context permits strings and ' + \ 'lists only, found ' + expanded.__class__.__name__ + ' at ' + \ index - elif not isinstance(item, int): + elif type(item) is not int: raise TypeError, 'Unknown type ' + item.__class__.__name__ + \ ' at index ' + index index = index + 1 @@ -1443,6 +1471,20 @@ def RemoveSelfDependencies(targets): target_dict[dependency_key] = Filter(dependencies, target_name) +def RemoveLinkDependenciesFromNoneTargets(targets): + """Remove dependencies having the 'link_dependency' attribute from the 'none' + targets.""" + for target_name, target_dict in targets.iteritems(): + for dependency_key in dependency_sections: + dependencies = target_dict.get(dependency_key, []) + if dependencies: + for t in dependencies: + if target_dict.get('type', None) == 'none': + if targets[t].get('variables', {}).get('link_dependency', 0): + target_dict[dependency_key] = \ + Filter(target_dict[dependency_key], t) + + class DependencyGraphNode(object): """ @@ -1468,7 +1510,7 @@ class DependencyGraphNode(object): # are the "ref" attributes of DependencyGraphNodes. Every target will # appear in flat_list after all of its dependencies, and before all of its # dependents. - flat_list = [] + flat_list = OrderedSet() # in_degree_zeros is the list of DependencyGraphNodes that have no # dependencies not in flat_list. Initially, it is a copy of the children @@ -1482,12 +1524,15 @@ class DependencyGraphNode(object): # as work progresses, so that the next node to process from the list can # always be accessed at a consistent position. node = in_degree_zeros.pop() - flat_list.append(node.ref) + flat_list.add(node.ref) # Look at dependents of the node just added to flat_list. Some of them # may now belong in in_degree_zeros. for node_dependent in node.dependents: is_in_degree_zero = True + # TODO: We want to check through the + # node_dependent.dependencies list but if it's long and we + # always start at the beginning, then we get O(n^2) behaviour. for node_dependent_dependency in node_dependent.dependencies: if not node_dependent_dependency.ref in flat_list: # The dependent one or more dependencies not in flat_list. There @@ -1503,7 +1548,7 @@ class DependencyGraphNode(object): # iteration of the outer loop. in_degree_zeros.add(node_dependent) - return flat_list + return list(flat_list) def FindCycles(self, path=None): """ @@ -1589,21 +1634,26 @@ class DependencyGraphNode(object): return self._AddImportedDependencies(targets, dependencies) def DeepDependencies(self, dependencies=None): - """Returns a list of all of a target's dependencies, recursively.""" - if dependencies == None: - dependencies = [] + """Returns an OrderedSet of all of a target's dependencies, recursively.""" + if dependencies is None: + # Using a list to get ordered output and a set to do fast "is it + # already added" checks. + dependencies = OrderedSet() for dependency in self.dependencies: # Check for None, corresponding to the root node. - if dependency.ref != None and dependency.ref not in dependencies: - dependencies.append(dependency.ref) + if dependency.ref is None: + continue + if dependency.ref not in dependencies: + dependencies.add(dependency.ref) dependency.DeepDependencies(dependencies) return dependencies def _LinkDependenciesInternal(self, targets, include_shared_libraries, dependencies=None, initial=True): - """Returns a list of dependency targets that are linked into this target. + """Returns an OrderedSet of dependency targets that are linked + into this target. This function has a split personality, depending on the setting of |initial|. Outside callers should always leave |initial| at its default @@ -1616,11 +1666,13 @@ class DependencyGraphNode(object): If |include_shared_libraries| is False, the resulting dependencies will not include shared_library targets that are linked into this target. """ - if dependencies == None: - dependencies = [] + if dependencies is None: + # Using a list to get ordered output and a set to do fast "is it + # already added" checks. + dependencies = OrderedSet() # Check for None, corresponding to the root node. - if self.ref == None: + if self.ref is None: return dependencies # It's kind of sucky that |targets| has to be passed into this function, @@ -1648,8 +1700,7 @@ class DependencyGraphNode(object): # Don't traverse 'none' targets if explicitly excluded. if (target_type == 'none' and not targets[self.ref].get('dependencies_traverse', True)): - if self.ref not in dependencies: - dependencies.append(self.ref) + dependencies.add(self.ref) return dependencies # Executables and loadable modules are already fully and finally linked. @@ -1671,7 +1722,7 @@ class DependencyGraphNode(object): # The target is linkable, add it to the list of link dependencies. if self.ref not in dependencies: - dependencies.append(self.ref) + dependencies.add(self.ref) if initial or not is_linkable: # If this is a subsequent target and it's linkable, don't look any # further for linkable dependencies, as they'll already be linked into @@ -1966,25 +2017,25 @@ def MergeLists(to, fro, to_file, fro_file, is_paths=False, append=True): hashable_to_set = set(x for x in to if is_hashable(x)) for item in fro: singleton = False - if isinstance(item, str) or isinstance(item, int): + if type(item) in (str, int): # The cheap and easy case. if is_paths: to_item = MakePathRelative(to_file, fro_file, item) else: to_item = item - if not isinstance(item, str) or not item.startswith('-'): + if not (type(item) is str and item.startswith('-')): # Any string that doesn't begin with a "-" is a singleton - it can # only appear once in a list, to be enforced by the list merge append # or prepend. singleton = True - elif isinstance(item, dict): + elif type(item) is dict: # Make a copy of the dictionary, continuing to look for paths to fix. # The other intelligent aspects of merge processing won't apply because # item is being merged into an empty dict. to_item = {} MergeDicts(to_item, item, to_file, fro_file) - elif isinstance(item, list): + elif type(item) is list: # Recurse, making a copy of the list. If the list contains any # descendant dicts, path fixing will occur. Note that here, custom # values for is_paths and append are dropped; those are only to be @@ -2030,10 +2081,10 @@ def MergeDicts(to, fro, to_file, fro_file): # modified. if k in to: bad_merge = False - if isinstance(v, str) or isinstance(v, int): - if not (isinstance(to[k], str) or isinstance(to[k], int)): + if type(v) in (str, int): + if type(to[k]) not in (str, int): bad_merge = True - elif v.__class__ != to[k].__class__: + elif type(v) is not type(to[k]): bad_merge = True if bad_merge: @@ -2041,19 +2092,19 @@ def MergeDicts(to, fro, to_file, fro_file): 'Attempt to merge dict value of type ' + v.__class__.__name__ + \ ' into incompatible type ' + to[k].__class__.__name__ + \ ' for key ' + k - if isinstance(v, str) or isinstance(v, int): + if type(v) in (str, int): # Overwrite the existing value, if any. Cheap and easy. is_path = IsPathSection(k) if is_path: to[k] = MakePathRelative(to_file, fro_file, v) else: to[k] = v - elif isinstance(v, dict): + elif type(v) is dict: # Recurse, guaranteeing copies will be made of objects that require it. if not k in to: to[k] = {} MergeDicts(to[k], v, to_file, fro_file) - elif isinstance(v, list): + elif type(v) is list: # Lists in dicts can be merged with different policies, depending on # how the key in the "from" dict (k, the from-key) is written. # @@ -2096,7 +2147,7 @@ def MergeDicts(to, fro, to_file, fro_file): # If the key ends in "?", the list will only be merged if it doesn't # already exist. continue - if not isinstance(to[list_base], list): + elif type(to[list_base]) is not list: # This may not have been checked above if merging in a list with an # extension character. raise TypeError, \ @@ -2157,43 +2208,39 @@ def SetUpConfigurations(target, target_dict): if not 'configurations' in target_dict: target_dict['configurations'] = {'Default': {}} if not 'default_configuration' in target_dict: - concrete = [i for i in target_dict['configurations'].iterkeys() - if not target_dict['configurations'][i].get('abstract')] + concrete = [i for (i, config) in target_dict['configurations'].iteritems() + if not config.get('abstract')] target_dict['default_configuration'] = sorted(concrete)[0] - for configuration in target_dict['configurations'].keys(): - old_configuration_dict = target_dict['configurations'][configuration] + merged_configurations = {} + configs = target_dict['configurations'] + for (configuration, old_configuration_dict) in configs.iteritems(): # Skip abstract configurations (saves work only). if old_configuration_dict.get('abstract'): continue # Configurations inherit (most) settings from the enclosing target scope. # Get the inheritance relationship right by making a copy of the target # dict. - new_configuration_dict = copy.deepcopy(target_dict) - - # Take out the bits that don't belong in a "configurations" section. - # Since configuration setup is done before conditional, exclude, and rules - # processing, be careful with handling of the suffix characters used in - # those phases. - delete_keys = [] - for key in new_configuration_dict: + new_configuration_dict = {} + for (key, target_val) in target_dict.iteritems(): key_ext = key[-1:] if key_ext in key_suffixes: key_base = key[:-1] else: key_base = key - if key_base in non_configuration_keys: - delete_keys.append(key) - - for key in delete_keys: - del new_configuration_dict[key] + if not key_base in non_configuration_keys: + new_configuration_dict[key] = gyp.simple_copy.deepcopy(target_val) # Merge in configuration (with all its parents first). MergeConfigWithInheritance(new_configuration_dict, build_file, target_dict, configuration, []) - # Put the new result back into the target dict as a configuration. - target_dict['configurations'][configuration] = new_configuration_dict + merged_configurations[configuration] = new_configuration_dict + + # Put the new configurations back into the target dict as a configuration. + for configuration in merged_configurations.keys(): + target_dict['configurations'][configuration] = ( + merged_configurations[configuration]) # Now drop all the abstract ones. for configuration in target_dict['configurations'].keys(): @@ -2264,7 +2311,7 @@ def ProcessListFiltersInDict(name, the_dict): if operation != '!' and operation != '/': continue - if not isinstance(value, list): + if type(value) is not list: raise ValueError, name + ' key ' + key + ' must be list, not ' + \ value.__class__.__name__ @@ -2276,7 +2323,7 @@ def ProcessListFiltersInDict(name, the_dict): del_lists.append(key) continue - if not isinstance(the_dict[list_key], list): + if type(the_dict[list_key]) is not list: value = the_dict[list_key] raise ValueError, name + ' key ' + list_key + \ ' must be list, not ' + \ @@ -2378,17 +2425,17 @@ def ProcessListFiltersInDict(name, the_dict): # Now recurse into subdicts and lists that may contain dicts. for key, value in the_dict.iteritems(): - if isinstance(value, dict): + if type(value) is dict: ProcessListFiltersInDict(key, value) - elif isinstance(value, list): + elif type(value) is list: ProcessListFiltersInList(key, value) def ProcessListFiltersInList(name, the_list): for item in the_list: - if isinstance(item, dict): + if type(item) is dict: ProcessListFiltersInDict(name, item) - elif isinstance(item, list): + elif type(item) is list: ProcessListFiltersInList(name, item) @@ -2506,7 +2553,7 @@ def ValidateRunAsInTarget(target, target_dict, build_file): run_as = target_dict.get('run_as') if not run_as: return - if not isinstance(run_as, dict): + if type(run_as) is not dict: raise GypError("The 'run_as' in target %s from file %s should be a " "dictionary." % (target_name, build_file)) @@ -2515,17 +2562,17 @@ def ValidateRunAsInTarget(target, target_dict, build_file): raise GypError("The 'run_as' in target %s from file %s must have an " "'action' section." % (target_name, build_file)) - if not isinstance(action, list): + if type(action) is not list: raise GypError("The 'action' for 'run_as' in target %s from file %s " "must be a list." % (target_name, build_file)) working_directory = run_as.get('working_directory') - if working_directory and not isinstance(working_directory, str): + if working_directory and type(working_directory) is not str: raise GypError("The 'working_directory' for 'run_as' in target %s " "in file %s should be a string." % (target_name, build_file)) environment = run_as.get('environment') - if environment and not isinstance(environment, dict): + if environment and type(environment) is not dict: raise GypError("The 'environment' for 'run_as' in target %s " "in file %s should be a dictionary." % (target_name, build_file)) @@ -2555,17 +2602,17 @@ def TurnIntIntoStrInDict(the_dict): # Use items instead of iteritems because there's no need to try to look at # reinserted keys and their associated values. for k, v in the_dict.items(): - if isinstance(v, int): + if type(v) is int: v = str(v) the_dict[k] = v - elif isinstance(v, dict): + elif type(v) is dict: TurnIntIntoStrInDict(v) - elif isinstance(v, list): + elif type(v) is list: TurnIntIntoStrInList(v) - if isinstance(k, int): - the_dict[str(k)] = v + if type(k) is int: del the_dict[k] + the_dict[str(k)] = v def TurnIntIntoStrInList(the_list): @@ -2573,11 +2620,11 @@ def TurnIntIntoStrInList(the_list): """ for index in xrange(0, len(the_list)): item = the_list[index] - if isinstance(item, int): + if type(item) is int: the_list[index] = str(item) - elif isinstance(item, dict): + elif type(item) is dict: TurnIntIntoStrInDict(item) - elif isinstance(item, list): + elif type(item) is list: TurnIntIntoStrInList(item) @@ -2647,8 +2694,8 @@ def SetGeneratorGlobals(generator_input_info): # Set up path_sections and non_configuration_keys with the default data plus # the generator-specific data. global path_sections - path_sections = base_path_sections[:] - path_sections.extend(generator_input_info['path_sections']) + path_sections = set(base_path_sections) + path_sections.update(generator_input_info['path_sections']) global non_configuration_keys non_configuration_keys = base_non_configuration_keys[:] @@ -2707,6 +2754,10 @@ def Load(build_files, variables, includes, depth, generator_input_info, check, # Expand dependencies specified as build_file:*. ExpandWildcardDependencies(targets, data) + # Remove all dependencies marked as 'link_dependency' from the targets of + # type 'none'. + RemoveLinkDependenciesFromNoneTargets(targets) + # Apply exclude (!) and regex (/) list filters only for dependency_sections. for target_name, target_dict in targets.iteritems(): tmp_dict = {} diff --git a/deps/gyp/pylib/gyp/mac_tool.py b/deps/gyp/pylib/gyp/mac_tool.py index c61a3ef60..821e291e9 100755 --- a/deps/gyp/pylib/gyp/mac_tool.py +++ b/deps/gyp/pylib/gyp/mac_tool.py @@ -219,10 +219,14 @@ class MacTool(object): """Calls libtool and filters out '/path/to/libtool: file: foo.o has no symbols'.""" libtool_re = re.compile(r'^.*libtool: file: .* has no symbols$') + libtool_re5 = re.compile( + r'^.*libtool: warning for library: ' + + r'.* the table of contents is empty ' + + r'\(no object file members in the library define global symbols\)$') libtoolout = subprocess.Popen(cmd_list, stderr=subprocess.PIPE) _, err = libtoolout.communicate() for line in err.splitlines(): - if not libtool_re.match(line): + if not libtool_re.match(line) and not libtool_re5.match(line): print >>sys.stderr, line return libtoolout.returncode diff --git a/deps/gyp/pylib/gyp/msvs_emulation.py b/deps/gyp/pylib/gyp/msvs_emulation.py index 709ba305d..63593a424 100644 --- a/deps/gyp/pylib/gyp/msvs_emulation.py +++ b/deps/gyp/pylib/gyp/msvs_emulation.py @@ -345,6 +345,15 @@ class MsvsSettings(object): else: return None + def GetAsmflags(self, config): + """Returns the flags that need to be added to ml invocations.""" + config = self._TargetConfig(config) + asmflags = [] + safeseh = self._Setting(('MASM', 'UseSafeExceptionHandlers'), config) + if safeseh == 'true': + asmflags.append('/safeseh') + return asmflags + def GetCflags(self, config): """Returns the flags that need to be added to .c and .cc compilations.""" config = self._TargetConfig(config) @@ -379,6 +388,8 @@ class MsvsSettings(object): map={'false': '-', 'true': ''}, prefix='/Zc:wchar_t') cl('EnablePREfast', map={'true': '/analyze'}) cl('AdditionalOptions', prefix='') + cl('EnableEnhancedInstructionSet', + map={'1': 'SSE', '2': 'SSE2', '3': 'AVX', '4': 'IA32'}, prefix='/arch:') cflags.extend(['/FI' + f for f in self._Setting( ('VCCLCompilerTool', 'ForcedIncludeFiles'), config, default=[])]) if self.vs_version.short_name in ('2013', '2013e'): @@ -388,12 +399,6 @@ class MsvsSettings(object): cflags = filter(lambda x: not x.startswith('/MP'), cflags) return cflags - def GetPrecompiledHeader(self, config, gyp_to_build_path): - """Returns an object that handles the generation of precompiled header - build steps.""" - config = self._TargetConfig(config) - return _PchHelper(self, config, gyp_to_build_path) - def _GetPchFlags(self, config, extension): """Get the flags to be added to the cflags for precompiled header support. """ @@ -532,6 +537,7 @@ class MsvsSettings(object): ld('Profile', map={'true': '/PROFILE'}) ld('LargeAddressAware', map={'1': ':NO', '2': ''}, prefix='/LARGEADDRESSAWARE') + ld('ImageHasSafeExceptionHandlers', map={'true': '/SAFESEH'}) # TODO(scottmg): This should sort of be somewhere else (not really a flag). ld('AdditionalDependencies', prefix='') @@ -787,7 +793,7 @@ class PrecompiledHeader(object): def GetObjDependencies(self, sources, objs, arch): """Given a list of sources files and the corresponding object files, returns a list of the pch files that should be depended upon. The - additional wrapping in the return value is for interface compatability + additional wrapping in the return value is for interface compatibility with make.py on Mac, and xcode_emulation.py.""" assert arch is None if not self._PchHeader(): diff --git a/deps/gyp/pylib/gyp/win_tool.py b/deps/gyp/pylib/gyp/win_tool.py index 5872f0750..44e1b0760 100755 --- a/deps/gyp/pylib/gyp/win_tool.py +++ b/deps/gyp/pylib/gyp/win_tool.py @@ -13,6 +13,7 @@ import os import re import shutil import subprocess +import stat import string import sys @@ -89,9 +90,19 @@ class WinTool(object): """Emulation of rm -rf out && cp -af in out.""" if os.path.exists(dest): if os.path.isdir(dest): - shutil.rmtree(dest) + def _on_error(fn, path, excinfo): + # The operation failed, possibly because the file is set to + # read-only. If that's why, make it writable and try the op again. + if not os.access(path, os.W_OK): + os.chmod(path, stat.S_IWRITE) + fn(path) + shutil.rmtree(dest, onerror=_on_error) else: + if not os.access(dest, os.W_OK): + # Attempt to make the file writable before deleting it. + os.chmod(dest, stat.S_IWRITE) os.unlink(dest) + if os.path.isdir(source): shutil.copytree(source, dest) else: @@ -237,10 +248,11 @@ class WinTool(object): # Processing C:\Program Files (x86)\Microsoft SDKs\...\include\objidl.idl # objidl.idl lines = out.splitlines() - prefix = 'Processing ' - processing = set(os.path.basename(x) for x in lines if x.startswith(prefix)) + prefixes = ('Processing ', '64 bit Processing ') + processing = set(os.path.basename(x) + for x in lines if x.startswith(prefixes)) for line in lines: - if not line.startswith(prefix) and line not in processing: + if not line.startswith(prefixes) and line not in processing: print line return popen.returncode @@ -288,5 +300,16 @@ class WinTool(object): dir = dir[0] if dir else None return subprocess.call(args, shell=True, env=env, cwd=dir) + def ExecClCompile(self, project_dir, selected_files): + """Executed by msvs-ninja projects when the 'ClCompile' target is used to + build selected C/C++ files.""" + project_dir = os.path.relpath(project_dir, BASE_DIR) + selected_files = selected_files.split(';') + ninja_targets = [os.path.join(project_dir, filename) + '^^' + for filename in selected_files] + cmd = ['ninja.exe'] + cmd.extend(ninja_targets) + return subprocess.call(cmd, shell=True, cwd=BASE_DIR) + if __name__ == '__main__': sys.exit(main(sys.argv[1:])) diff --git a/deps/gyp/pylib/gyp/xcode_emulation.py b/deps/gyp/pylib/gyp/xcode_emulation.py index 30f27d583..859cd5a93 100644 --- a/deps/gyp/pylib/gyp/xcode_emulation.py +++ b/deps/gyp/pylib/gyp/xcode_emulation.py @@ -18,6 +18,129 @@ import sys import tempfile from gyp.common import GypError +# Populated lazily by XcodeVersion, for efficiency, and to fix an issue when +# "xcodebuild" is called too quickly (it has been found to return incorrect +# version number). +XCODE_VERSION_CACHE = None + +# Populated lazily by GetXcodeArchsDefault, to an |XcodeArchsDefault| instance +# corresponding to the installed version of Xcode. +XCODE_ARCHS_DEFAULT_CACHE = None + + +def XcodeArchsVariableMapping(archs, archs_including_64_bit=None): + """Constructs a dictionary with expansion for $(ARCHS_STANDARD) variable, + and optionally for $(ARCHS_STANDARD_INCLUDING_64_BIT).""" + mapping = {'$(ARCHS_STANDARD)': archs} + if archs_including_64_bit: + mapping['$(ARCHS_STANDARD_INCLUDING_64_BIT)'] = archs_including_64_bit + return mapping + +class XcodeArchsDefault(object): + """A class to resolve ARCHS variable from xcode_settings, resolving Xcode + macros and implementing filtering by VALID_ARCHS. The expansion of macros + depends on the SDKROOT used ("macosx", "iphoneos", "iphonesimulator") and + on the version of Xcode. + """ + + # Match variable like $(ARCHS_STANDARD). + variable_pattern = re.compile(r'\$\([a-zA-Z_][a-zA-Z0-9_]*\)$') + + def __init__(self, default, mac, iphonesimulator, iphoneos): + self._default = (default,) + self._archs = {'mac': mac, 'ios': iphoneos, 'iossim': iphonesimulator} + + def _VariableMapping(self, sdkroot): + """Returns the dictionary of variable mapping depending on the SDKROOT.""" + sdkroot = sdkroot.lower() + if 'iphoneos' in sdkroot: + return self._archs['ios'] + elif 'iphonesimulator' in sdkroot: + return self._archs['iossim'] + else: + return self._archs['mac'] + + def _ExpandArchs(self, archs, sdkroot): + """Expands variables references in ARCHS, and remove duplicates.""" + variable_mapping = self._VariableMapping(sdkroot) + expanded_archs = [] + for arch in archs: + if self.variable_pattern.match(arch): + variable = arch + try: + variable_expansion = variable_mapping[variable] + for arch in variable_expansion: + if arch not in expanded_archs: + expanded_archs.append(arch) + except KeyError as e: + print 'Warning: Ignoring unsupported variable "%s".' % variable + elif arch not in expanded_archs: + expanded_archs.append(arch) + return expanded_archs + + def ActiveArchs(self, archs, valid_archs, sdkroot): + """Expands variables references in ARCHS, and filter by VALID_ARCHS if it + is defined (if not set, Xcode accept any value in ARCHS, otherwise, only + values present in VALID_ARCHS are kept).""" + expanded_archs = self._ExpandArchs(archs or self._default, sdkroot or '') + if valid_archs: + filtered_archs = [] + for arch in expanded_archs: + if arch in valid_archs: + filtered_archs.append(arch) + expanded_archs = filtered_archs + return expanded_archs + + +def GetXcodeArchsDefault(): + """Returns the |XcodeArchsDefault| object to use to expand ARCHS for the + installed version of Xcode. The default values used by Xcode for ARCHS + and the expansion of the variables depends on the version of Xcode used. + + For all version anterior to Xcode 5.0 or posterior to Xcode 5.1 included + uses $(ARCHS_STANDARD) if ARCHS is unset, while Xcode 5.0 to 5.0.2 uses + $(ARCHS_STANDARD_INCLUDING_64_BIT). This variable was added to Xcode 5.0 + and deprecated with Xcode 5.1. + + For "macosx" SDKROOT, all version starting with Xcode 5.0 includes 64-bit + architecture as part of $(ARCHS_STANDARD) and default to only building it. + + For "iphoneos" and "iphonesimulator" SDKROOT, 64-bit architectures are part + of $(ARCHS_STANDARD_INCLUDING_64_BIT) from Xcode 5.0. From Xcode 5.1, they + are also part of $(ARCHS_STANDARD). + + All thoses rules are coded in the construction of the |XcodeArchsDefault| + object to use depending on the version of Xcode detected. The object is + for performance reason.""" + global XCODE_ARCHS_DEFAULT_CACHE + if XCODE_ARCHS_DEFAULT_CACHE: + return XCODE_ARCHS_DEFAULT_CACHE + xcode_version, _ = XcodeVersion() + if xcode_version < '0500': + XCODE_ARCHS_DEFAULT_CACHE = XcodeArchsDefault( + '$(ARCHS_STANDARD)', + XcodeArchsVariableMapping(['i386']), + XcodeArchsVariableMapping(['i386']), + XcodeArchsVariableMapping(['armv7'])) + elif xcode_version < '0510': + XCODE_ARCHS_DEFAULT_CACHE = XcodeArchsDefault( + '$(ARCHS_STANDARD_INCLUDING_64_BIT)', + XcodeArchsVariableMapping(['x86_64'], ['x86_64']), + XcodeArchsVariableMapping(['i386'], ['i386', 'x86_64']), + XcodeArchsVariableMapping( + ['armv7', 'armv7s'], + ['armv7', 'armv7s', 'arm64'])) + else: + XCODE_ARCHS_DEFAULT_CACHE = XcodeArchsDefault( + '$(ARCHS_STANDARD)', + XcodeArchsVariableMapping(['x86_64'], ['x86_64']), + XcodeArchsVariableMapping(['i386', 'x86_64'], ['i386', 'x86_64']), + XcodeArchsVariableMapping( + ['armv7', 'armv7s', 'arm64'], + ['armv7', 'armv7s', 'arm64'])) + return XCODE_ARCHS_DEFAULT_CACHE + + class XcodeSettings(object): """A class that understands the gyp 'xcode_settings' object.""" @@ -34,10 +157,6 @@ class XcodeSettings(object): # cached at class-level for efficiency. _codesigning_key_cache = {} - # Populated lazily by _XcodeVersion. Shared by all XcodeSettings, so cached - # at class-level for efficiency. - _xcode_version_cache = () - def __init__(self, spec): self.spec = spec @@ -267,17 +386,12 @@ class XcodeSettings(object): def GetActiveArchs(self, configname): """Returns the architectures this target should be built for.""" - # TODO: Look at VALID_ARCHS, ONLY_ACTIVE_ARCH; possibly set - # CURRENT_ARCH / NATIVE_ARCH env vars? - return self.xcode_settings[configname].get('ARCHS', [self._DefaultArch()]) - - def _GetStdout(self, cmdlist): - job = subprocess.Popen(cmdlist, stdout=subprocess.PIPE) - out = job.communicate()[0] - if job.returncode != 0: - sys.stderr.write(out + '\n') - raise GypError('Error %d running %s' % (job.returncode, cmdlist[0])) - return out.rstrip('\n') + config_settings = self.xcode_settings[configname] + xcode_archs_default = GetXcodeArchsDefault() + return xcode_archs_default.ActiveArchs( + config_settings.get('ARCHS'), + config_settings.get('VALID_ARCHS'), + config_settings.get('SDKROOT')) def _GetSdkVersionInfoItem(self, sdk, infoitem): # xcodebuild requires Xcode and can't run on Command Line Tools-only @@ -285,7 +399,7 @@ class XcodeSettings(object): # Since the CLT has no SDK paths anyway, returning None is the # most sensible route and should still do the right thing. try: - return self._GetStdout(['xcodebuild', '-version', '-sdk', sdk, infoitem]) + return GetStdout(['xcodebuild', '-version', '-sdk', sdk, infoitem]) except: pass @@ -396,7 +510,8 @@ class XcodeSettings(object): if arch is not None: archs = [arch] else: - archs = self._Settings().get('ARCHS', [self._DefaultArch()]) + assert self.configname + archs = self.GetActiveArchs(self.configname) if len(archs) != 1: # TODO: Supporting fat binaries will be annoying. self._WarnUnimplemented('ARCHS') @@ -653,7 +768,8 @@ class XcodeSettings(object): if arch is not None: archs = [arch] else: - archs = self._Settings().get('ARCHS', [self._DefaultArch()]) + assert self.configname + archs = self.GetActiveArchs(self.configname) if len(archs) != 1: # TODO: Supporting fat binaries will be annoying. self._WarnUnimplemented('ARCHS') @@ -678,6 +794,8 @@ class XcodeSettings(object): for directory in framework_dirs: ldflags.append('-F' + directory.replace('$(SDKROOT)', sdk_root)) + self._Appendf(ldflags, 'CLANG_CXX_LIBRARY', '-stdlib=%s') + self.configname = None return ldflags @@ -874,65 +992,7 @@ class XcodeSettings(object): return libraries def _BuildMachineOSBuild(self): - return self._GetStdout(['sw_vers', '-buildVersion']) - - # This method ported from the logic in Homebrew's CLT version check - def _CLTVersion(self): - # pkgutil output looks like - # package-id: com.apple.pkg.CLTools_Executables - # version: 5.0.1.0.1.1382131676 - # volume: / - # location: / - # install-time: 1382544035 - # groups: com.apple.FindSystemFiles.pkg-group com.apple.DevToolsBoth.pkg-group com.apple.DevToolsNonRelocatableShared.pkg-group - STANDALONE_PKG_ID = "com.apple.pkg.DeveloperToolsCLILeo" - FROM_XCODE_PKG_ID = "com.apple.pkg.DeveloperToolsCLI" - MAVERICKS_PKG_ID = "com.apple.pkg.CLTools_Executables" - - regex = re.compile('version: (?P.+)') - for key in [MAVERICKS_PKG_ID, STANDALONE_PKG_ID, FROM_XCODE_PKG_ID]: - try: - output = self._GetStdout(['/usr/sbin/pkgutil', '--pkg-info', key]) - return re.search(regex, output).groupdict()['version'] - except: - continue - - def _XcodeVersion(self): - # `xcodebuild -version` output looks like - # Xcode 4.6.3 - # Build version 4H1503 - # or like - # Xcode 3.2.6 - # Component versions: DevToolsCore-1809.0; DevToolsSupport-1806.0 - # BuildVersion: 10M2518 - # Convert that to '0463', '4H1503'. - if len(XcodeSettings._xcode_version_cache) == 0: - try: - version_list = self._GetStdout(['xcodebuild', '-version']).splitlines() - # In some circumstances xcodebuild exits 0 but doesn't return - # the right results; for example, a user on 10.7 or 10.8 with - # a bogus path set via xcode-select - # In that case this may be a CLT-only install so fall back to - # checking that version. - if len(version_list) < 2: - raise GypError, "xcodebuild returned unexpected results" - except: - version = self._CLTVersion() - if version: - version = re.match('(\d\.\d\.?\d*)', version).groups()[0] - else: - raise GypError, "No Xcode or CLT version detected!" - # The CLT has no build information, so we return an empty string. - version_list = [version, ''] - version = version_list[0] - build = version_list[-1] - # Be careful to convert "4.2" to "0420": - version = version.split()[-1].replace('.', '') - version = (version + '0' * (3 - len(version))).zfill(4) - if build: - build = build.split()[-1] - XcodeSettings._xcode_version_cache = (version, build) - return XcodeSettings._xcode_version_cache + return GetStdout(['sw_vers', '-buildVersion']) def _XcodeIOSDeviceFamily(self, configname): family = self.xcode_settings[configname].get('TARGETED_DEVICE_FAMILY', '1') @@ -944,7 +1004,7 @@ class XcodeSettings(object): cache = {} cache['BuildMachineOSBuild'] = self._BuildMachineOSBuild() - xcode, xcode_build = self._XcodeVersion() + xcode, xcode_build = XcodeVersion() cache['DTXcode'] = xcode cache['DTXcodeBuild'] = xcode_build @@ -982,14 +1042,15 @@ class XcodeSettings(object): project, then the environment variable was empty. Starting with this version, Xcode uses the name of the newest SDK installed. """ - if self._XcodeVersion() < '0500': + xcode_version, xcode_build = XcodeVersion() + if xcode_version < '0500': return '' default_sdk_path = self._XcodeSdkPath('') default_sdk_root = XcodeSettings._sdk_root_cache.get(default_sdk_path) if default_sdk_root: return default_sdk_root try: - all_sdks = self._GetStdout(['xcodebuild', '-showsdks']) + all_sdks = GetStdout(['xcodebuild', '-showsdks']) except: # If xcodebuild fails, there will be no valid SDKs return '' @@ -1002,28 +1063,6 @@ class XcodeSettings(object): return sdk_root return '' - def _DefaultArch(self): - # For Mac projects, Xcode changed the default value used when ARCHS is not - # set from "i386" to "x86_64". - # - # For iOS projects, if ARCHS is unset, it defaults to "armv7 armv7s" when - # building for a device, and the simulator binaries are always build for - # "i386". - # - # For new projects, ARCHS is set to $(ARCHS_STANDARD_INCLUDING_64_BIT), - # which correspond to "armv7 armv7s arm64", and when building the simulator - # the architecture is either "i386" or "x86_64" depending on the simulated - # device (respectively 32-bit or 64-bit device). - # - # Since the value returned by this function is only used when ARCHS is not - # set, then on iOS we return "i386", as the default xcode project generator - # does not set ARCHS if it is not set in the .gyp file. - if self.isIOS: - return 'i386' - version, build = self._XcodeVersion() - if version >= '0500': - return 'x86_64' - return 'i386' class MacPrefixHeader(object): """A class that helps with emulating Xcode's GCC_PREFIX_HEADER feature. @@ -1131,6 +1170,81 @@ class MacPrefixHeader(object): ] +def XcodeVersion(): + """Returns a tuple of version and build version of installed Xcode.""" + # `xcodebuild -version` output looks like + # Xcode 4.6.3 + # Build version 4H1503 + # or like + # Xcode 3.2.6 + # Component versions: DevToolsCore-1809.0; DevToolsSupport-1806.0 + # BuildVersion: 10M2518 + # Convert that to '0463', '4H1503'. + global XCODE_VERSION_CACHE + if XCODE_VERSION_CACHE: + return XCODE_VERSION_CACHE + try: + version_list = GetStdout(['xcodebuild', '-version']).splitlines() + # In some circumstances xcodebuild exits 0 but doesn't return + # the right results; for example, a user on 10.7 or 10.8 with + # a bogus path set via xcode-select + # In that case this may be a CLT-only install so fall back to + # checking that version. + if len(version_list) < 2: + raise GypError, "xcodebuild returned unexpected results" + except: + version = CLTVersion() + if version: + version = re.match('(\d\.\d\.?\d*)', version).groups()[0] + else: + raise GypError, "No Xcode or CLT version detected!" + # The CLT has no build information, so we return an empty string. + version_list = [version, ''] + version = version_list[0] + build = version_list[-1] + # Be careful to convert "4.2" to "0420": + version = version.split()[-1].replace('.', '') + version = (version + '0' * (3 - len(version))).zfill(4) + if build: + build = build.split()[-1] + XCODE_VERSION_CACHE = (version, build) + return XCODE_VERSION_CACHE + + +# This function ported from the logic in Homebrew's CLT version check +def CLTVersion(): + """Returns the version of command-line tools from pkgutil.""" + # pkgutil output looks like + # package-id: com.apple.pkg.CLTools_Executables + # version: 5.0.1.0.1.1382131676 + # volume: / + # location: / + # install-time: 1382544035 + # groups: com.apple.FindSystemFiles.pkg-group com.apple.DevToolsBoth.pkg-group com.apple.DevToolsNonRelocatableShared.pkg-group + STANDALONE_PKG_ID = "com.apple.pkg.DeveloperToolsCLILeo" + FROM_XCODE_PKG_ID = "com.apple.pkg.DeveloperToolsCLI" + MAVERICKS_PKG_ID = "com.apple.pkg.CLTools_Executables" + + regex = re.compile('version: (?P.+)') + for key in [MAVERICKS_PKG_ID, STANDALONE_PKG_ID, FROM_XCODE_PKG_ID]: + try: + output = GetStdout(['/usr/sbin/pkgutil', '--pkg-info', key]) + return re.search(regex, output).groupdict()['version'] + except: + continue + + +def GetStdout(cmdlist): + """Returns the content of standard output returned by invoking |cmdlist|. + Raises |GypError| if the command return with a non-zero return code.""" + job = subprocess.Popen(cmdlist, stdout=subprocess.PIPE) + out = job.communicate()[0] + if job.returncode != 0: + sys.stderr.write(out + '\n') + raise GypError('Error %d running %s' % (job.returncode, cmdlist[0])) + return out.rstrip('\n') + + def MergeGlobalXcodeSettingsToSpec(global_dict, spec): """Merges the global xcode_settings dictionary into each configuration of the target represented by spec. For keys that are both in the global and the local @@ -1310,6 +1424,11 @@ def _GetXcodeEnv(xcode_settings, built_products_dir, srcroot, configuration, install_name_base = xcode_settings.GetInstallNameBase() if install_name_base: env['DYLIB_INSTALL_NAME_BASE'] = install_name_base + if XcodeVersion() >= '0500' and not env.get('SDKROOT'): + sdk_root = xcode_settings._SdkRoot(configuration) + if not sdk_root: + sdk_root = xcode_settings._XcodeSdkPath('') + env['SDKROOT'] = sdk_root if not additional_settings: additional_settings = {} @@ -1420,16 +1539,16 @@ def _HasIOSTarget(targets): def _AddIOSDeviceConfigurations(targets): """Clone all targets and append -iphoneos to the name. Configure these targets - to build for iOS devices.""" - for target_dict in targets.values(): - for config_name in target_dict['configurations'].keys(): - config = target_dict['configurations'][config_name] - new_config_name = config_name + '-iphoneos' - new_config_dict = copy.deepcopy(config) - if target_dict['toolset'] == 'target': - new_config_dict['xcode_settings']['ARCHS'] = ['armv7'] - new_config_dict['xcode_settings']['SDKROOT'] = 'iphoneos' - target_dict['configurations'][new_config_name] = new_config_dict + to build for iOS devices and use correct architectures for those builds.""" + for target_dict in targets.itervalues(): + toolset = target_dict['toolset'] + configs = target_dict['configurations'] + for config_name, config_dict in dict(configs).iteritems(): + iphoneos_config_dict = copy.deepcopy(config_dict) + configs[config_name + '-iphoneos'] = iphoneos_config_dict + configs[config_name + '-iphonesimulator'] = config_dict + if toolset == 'target': + iphoneos_config_dict['xcode_settings']['SDKROOT'] = 'iphoneos' return targets def CloneConfigurationForDeviceAndEmulator(target_dicts): From 15aa4ee90d89a710e5e3a6c044ba6169474aa1fb Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Tue, 27 May 2014 19:03:55 -0700 Subject: [PATCH 07/79] Add missing gyp files --- Makefile | 1 + deps/gyp/codereview.settings | 10 ++ deps/gyp/pylib/gyp/generator/make.py | 3 +- deps/gyp/pylib/gyp/simple_copy.py | 46 +++++ deps/gyp/pylib/gyp/xcode_ninja.py | 257 +++++++++++++++++++++++++++ deps/gyp/setup.py | 19 ++ 6 files changed, 335 insertions(+), 1 deletion(-) create mode 100644 deps/gyp/codereview.settings create mode 100644 deps/gyp/pylib/gyp/simple_copy.py create mode 100644 deps/gyp/pylib/gyp/xcode_ninja.py create mode 100755 deps/gyp/setup.py diff --git a/Makefile b/Makefile index b864ca4d8..f58079c13 100644 --- a/Makefile +++ b/Makefile @@ -93,6 +93,7 @@ lproj: config.gypi linux/llmr-app.gyp clear_xcode_cache node ##### Maintenace operations #################################################### clean: clear_xcode_cache + -find ./deps/gyp -name "*.pyc" -exec rm {} \; -rm -rf ./build/Release -rm -rf ./build/Debug -rm -f include/llmr/shader/shaders.hpp diff --git a/deps/gyp/codereview.settings b/deps/gyp/codereview.settings new file mode 100644 index 000000000..a04a2440d --- /dev/null +++ b/deps/gyp/codereview.settings @@ -0,0 +1,10 @@ +# This file is used by gcl to get repository specific information. +CODE_REVIEW_SERVER: codereview.chromium.org +CC_LIST: gyp-developer@googlegroups.com +VIEW_VC: http://code.google.com/p/gyp/source/detail?r= +TRY_ON_UPLOAD: True +TRYSERVER_PROJECT: gyp +TRYSERVER_PATCHLEVEL: 0 +TRYSERVER_ROOT: trunk +TRYSERVER_SVN_URL: svn://svn.chromium.org/chrome-try/try-nacl + diff --git a/deps/gyp/pylib/gyp/generator/make.py b/deps/gyp/pylib/gyp/generator/make.py index b88a433d3..b6f766d55 100644 --- a/deps/gyp/pylib/gyp/generator/make.py +++ b/deps/gyp/pylib/gyp/generator/make.py @@ -1447,7 +1447,8 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD libraries = spec.get('libraries') if libraries: # Remove duplicate entries - libraries = gyp.common.uniquer(libraries) + # Commented out due to https://code.google.com/p/gyp/issues/detail?id=419 + # libraries = gyp.common.uniquer(libraries) if self.flavor == 'mac': libraries = self.xcode_settings.AdjustLibraries(libraries) self.WriteList(libraries, 'LIBS') diff --git a/deps/gyp/pylib/gyp/simple_copy.py b/deps/gyp/pylib/gyp/simple_copy.py new file mode 100644 index 000000000..74c98c5a7 --- /dev/null +++ b/deps/gyp/pylib/gyp/simple_copy.py @@ -0,0 +1,46 @@ +# Copyright 2014 Google Inc. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""A clone of the default copy.deepcopy that doesn't handle cyclic +structures or complex types except for dicts and lists. This is +because gyp copies so large structure that small copy overhead ends up +taking seconds in a project the size of Chromium.""" + +class Error(Exception): + pass + +__all__ = ["Error", "deepcopy"] + +def deepcopy(x): + """Deep copy operation on gyp objects such as strings, ints, dicts + and lists. More than twice as fast as copy.deepcopy but much less + generic.""" + + try: + return _deepcopy_dispatch[type(x)](x) + except KeyError: + raise Error('Unsupported type %s for deepcopy. Use copy.deepcopy ' + + 'or expand simple_copy support.' % type(x)) + +_deepcopy_dispatch = d = {} + +def _deepcopy_atomic(x): + return x + +for x in (type(None), int, long, float, + bool, str, unicode, type): + d[x] = _deepcopy_atomic + +def _deepcopy_list(x): + return [deepcopy(a) for a in x] +d[list] = _deepcopy_list + +def _deepcopy_dict(x): + y = {} + for key, value in x.iteritems(): + y[deepcopy(key)] = deepcopy(value) + return y +d[dict] = _deepcopy_dict + +del d diff --git a/deps/gyp/pylib/gyp/xcode_ninja.py b/deps/gyp/pylib/gyp/xcode_ninja.py new file mode 100644 index 000000000..0e5a70c71 --- /dev/null +++ b/deps/gyp/pylib/gyp/xcode_ninja.py @@ -0,0 +1,257 @@ +# Copyright (c) 2014 Google Inc. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Xcode-ninja wrapper project file generator. + +This updates the data structures passed to the Xcode gyp generator to build +with ninja instead. The Xcode project itself is transformed into a list of +executable targets, each with a build step to build with ninja, and a target +with every source and resource file. This appears to sidestep some of the +major performance headaches experienced using complex projects and large number +of targets within Xcode. +""" + +import errno +import gyp.generator.ninja +import os +import re +import xml.sax.saxutils + + +def _WriteWorkspace(main_gyp, sources_gyp): + """ Create a workspace to wrap main and sources gyp paths. """ + (build_file_root, build_file_ext) = os.path.splitext(main_gyp) + workspace_path = build_file_root + '.xcworkspace' + try: + os.makedirs(workspace_path) + except OSError, e: + if e.errno != errno.EEXIST: + raise + output_string = '\n' + \ + '\n' + for gyp_name in [main_gyp, sources_gyp]: + name = os.path.splitext(os.path.basename(gyp_name))[0] + '.xcodeproj' + name = xml.sax.saxutils.quoteattr("group:" + name) + output_string += ' \n' % name + output_string += '\n' + + workspace_file = os.path.join(workspace_path, "contents.xcworkspacedata") + + try: + with open(workspace_file, 'r') as input_file: + input_string = input_file.read() + if input_string == output_string: + return + except IOError: + # Ignore errors if the file doesn't exist. + pass + + with open(workspace_file, 'w') as output_file: + output_file.write(output_string) + +def _TargetFromSpec(old_spec, params): + """ Create fake target for xcode-ninja wrapper. """ + # Determine ninja top level build dir (e.g. /path/to/out). + ninja_toplevel = None + jobs = 0 + if params: + options = params['options'] + ninja_toplevel = \ + os.path.join(options.toplevel_dir, + gyp.generator.ninja.ComputeOutputDir(params)) + jobs = params.get('generator_flags', {}).get('xcode_ninja_jobs', 0) + + target_name = old_spec.get('target_name') + product_name = old_spec.get('product_name', target_name) + + ninja_target = {} + ninja_target['target_name'] = target_name + ninja_target['product_name'] = product_name + ninja_target['toolset'] = old_spec.get('toolset') + ninja_target['default_configuration'] = old_spec.get('default_configuration') + ninja_target['configurations'] = {} + + # Tell Xcode to look in |ninja_toplevel| for build products. + new_xcode_settings = {} + if ninja_toplevel: + new_xcode_settings['CONFIGURATION_BUILD_DIR'] = \ + "%s/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)" % ninja_toplevel + + if 'configurations' in old_spec: + for config in old_spec['configurations'].iterkeys(): + old_xcode_settings = old_spec['configurations'][config]['xcode_settings'] + if 'IPHONEOS_DEPLOYMENT_TARGET' in old_xcode_settings: + new_xcode_settings['CODE_SIGNING_REQUIRED'] = "NO" + new_xcode_settings['IPHONEOS_DEPLOYMENT_TARGET'] = \ + old_xcode_settings['IPHONEOS_DEPLOYMENT_TARGET'] + ninja_target['configurations'][config] = {} + ninja_target['configurations'][config]['xcode_settings'] = \ + new_xcode_settings + + ninja_target['mac_bundle'] = old_spec.get('mac_bundle', 0) + ninja_target['type'] = old_spec['type'] + if ninja_toplevel: + ninja_target['actions'] = [ + { + 'action_name': 'Compile and copy %s via ninja' % target_name, + 'inputs': [], + 'outputs': [], + 'action': [ + 'env', + 'PATH=%s' % os.environ['PATH'], + 'ninja', + '-C', + new_xcode_settings['CONFIGURATION_BUILD_DIR'], + target_name, + ], + 'message': 'Compile and copy %s via ninja' % target_name, + }, + ] + if jobs > 0: + ninja_target['actions'][0]['action'].extend(('-j', jobs)) + return ninja_target + +def IsValidTargetForWrapper(target_extras, executable_target_pattern, spec): + """Limit targets for Xcode wrapper. + + Xcode sometimes performs poorly with too many targets, so only include + proper executable targets, with filters to customize. + Arguments: + target_extras: Regular expression to always add, matching any target. + executable_target_pattern: Regular expression limiting executable targets. + spec: Specifications for target. + """ + target_name = spec.get('target_name') + # Always include targets matching target_extras. + if target_extras is not None and re.search(target_extras, target_name): + return True + + # Otherwise just show executable targets. + if spec.get('type', '') == 'executable' and \ + spec.get('product_extension', '') != 'bundle': + + # If there is a filter and the target does not match, exclude the target. + if executable_target_pattern is not None: + if not re.search(executable_target_pattern, target_name): + return False + return True + return False + +def CreateWrapper(target_list, target_dicts, data, params): + """Initialize targets for the ninja wrapper. + + This sets up the necessary variables in the targets to generate Xcode projects + that use ninja as an external builder. + Arguments: + target_list: List of target pairs: 'base/base.gyp:base'. + target_dicts: Dict of target properties keyed on target pair. + data: Dict of flattened build files keyed on gyp path. + params: Dict of global options for gyp. + """ + orig_gyp = params['build_files'][0] + for gyp_name, gyp_dict in data.iteritems(): + if gyp_name == orig_gyp: + depth = gyp_dict['_DEPTH'] + + # Check for custom main gyp name, otherwise use the default CHROMIUM_GYP_FILE + # and prepend .ninja before the .gyp extension. + generator_flags = params.get('generator_flags', {}) + main_gyp = generator_flags.get('xcode_ninja_main_gyp', None) + if main_gyp is None: + (build_file_root, build_file_ext) = os.path.splitext(orig_gyp) + main_gyp = build_file_root + ".ninja" + build_file_ext + + # Create new |target_list|, |target_dicts| and |data| data structures. + new_target_list = [] + new_target_dicts = {} + new_data = {} + + # Set base keys needed for |data|. + new_data[main_gyp] = {} + new_data[main_gyp]['included_files'] = [] + new_data[main_gyp]['targets'] = [] + new_data[main_gyp]['xcode_settings'] = \ + data[orig_gyp].get('xcode_settings', {}) + + # Normally the xcode-ninja generator includes only valid executable targets. + # If |xcode_ninja_executable_target_pattern| is set, that list is reduced to + # executable targets that match the pattern. (Default all) + executable_target_pattern = \ + generator_flags.get('xcode_ninja_executable_target_pattern', None) + + # For including other non-executable targets, add the matching target name + # to the |xcode_ninja_target_pattern| regular expression. (Default none) + target_extras = generator_flags.get('xcode_ninja_target_pattern', None) + + for old_qualified_target in target_list: + spec = target_dicts[old_qualified_target] + if IsValidTargetForWrapper(target_extras, executable_target_pattern, spec): + # Add to new_target_list. + target_name = spec.get('target_name') + new_target_name = '%s:%s#target' % (main_gyp, target_name) + new_target_list.append(new_target_name) + + # Add to new_target_dicts. + new_target_dicts[new_target_name] = _TargetFromSpec(spec, params) + + # Add to new_data. + for old_target in data[old_qualified_target.split(':')[0]]['targets']: + if old_target['target_name'] == target_name: + new_data_target = {} + new_data_target['target_name'] = old_target['target_name'] + new_data_target['toolset'] = old_target['toolset'] + new_data[main_gyp]['targets'].append(new_data_target) + + # Create sources target. + sources_target_name = 'sources_for_indexing' + sources_target = _TargetFromSpec( + { 'target_name' : sources_target_name, + 'toolset': 'target', + 'default_configuration': 'Default', + 'mac_bundle': '0', + 'type': 'executable' + }, None) + + # Tell Xcode to look everywhere for headers. + sources_target['configurations'] = {'Default': { 'include_dirs': [ depth ] } } + + sources = [] + for target, target_dict in target_dicts.iteritems(): + base = os.path.dirname(target) + files = target_dict.get('sources', []) + \ + target_dict.get('mac_bundle_resources', []) + # Remove files starting with $. These are mostly intermediate files for the + # build system. + files = [ file for file in files if not file.startswith('$')] + + # Make sources relative to root build file. + relative_path = os.path.dirname(main_gyp) + sources += [ os.path.relpath(os.path.join(base, file), relative_path) + for file in files ] + + sources_target['sources'] = sorted(set(sources)) + + # Put sources_to_index in it's own gyp. + sources_gyp = \ + os.path.join(os.path.dirname(main_gyp), sources_target_name + ".gyp") + fully_qualified_target_name = \ + '%s:%s#target' % (sources_gyp, sources_target_name) + + # Add to new_target_list, new_target_dicts and new_data. + new_target_list.append(fully_qualified_target_name) + new_target_dicts[fully_qualified_target_name] = sources_target + new_data_target = {} + new_data_target['target_name'] = sources_target['target_name'] + new_data_target['_DEPTH'] = depth + new_data_target['toolset'] = "target" + new_data[sources_gyp] = {} + new_data[sources_gyp]['targets'] = [] + new_data[sources_gyp]['included_files'] = [] + new_data[sources_gyp]['xcode_settings'] = \ + data[orig_gyp].get('xcode_settings', {}) + new_data[sources_gyp]['targets'].append(new_data_target) + + # Write workspace to file. + _WriteWorkspace(main_gyp, sources_gyp) + return (new_target_list, new_target_dicts, new_data) diff --git a/deps/gyp/setup.py b/deps/gyp/setup.py new file mode 100755 index 000000000..75a42558d --- /dev/null +++ b/deps/gyp/setup.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python + +# Copyright (c) 2009 Google Inc. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +from setuptools import setup + +setup( + name='gyp', + version='0.1', + description='Generate Your Projects', + author='Chromium Authors', + author_email='chromium-dev@googlegroups.com', + url='http://code.google.com/p/gyp', + package_dir = {'': 'pylib'}, + packages=['gyp', 'gyp.generator'], + entry_points = {'console_scripts': ['gyp=gyp:script_main'] } +) From 03a7a7e64aa838a67e43def170b2498689a97545 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Tue, 27 May 2014 19:25:24 -0700 Subject: [PATCH 08/79] add DS_Store to ignores [skip ci] --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a85ec0014..b3b9aabb1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.DS_Store *.o *.xcodeproj *.o From 4288fea8b7da9ae9cc0852645ad4c0e9e017f767 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Tue, 27 May 2014 19:54:02 -0700 Subject: [PATCH 09/79] make clean: remove entire build directory - refs #211 --- Makefile | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index f58079c13..f1baf3e40 100644 --- a/Makefile +++ b/Makefile @@ -94,11 +94,10 @@ lproj: config.gypi linux/llmr-app.gyp clear_xcode_cache node clean: clear_xcode_cache -find ./deps/gyp -name "*.pyc" -exec rm {} \; - -rm -rf ./build/Release - -rm -rf ./build/Debug - -rm -f include/llmr/shader/shaders.hpp - -rm -f include/llmr/style/resources.hpp - -rm -f src/style/resources.cpp + -rm -rf ./build/ + -rm -f ./include/llmr/shader/shaders.hpp + -rm -f ./include/llmr/style/resources.hpp + -rm -f ./src/style/resources.cpp distclean: clean -rm -rf ./build From 4074db512f3aab0e2d9aa9a6bdba1b1eb00d89fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Wed, 28 May 2014 06:34:29 +0200 Subject: [PATCH 10/79] fix stylesheet parse typo refs #192 --- src/style/style_parser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/style/style_parser.cpp b/src/style/style_parser.cpp index 56e28350b..bbc489332 100644 --- a/src/style/style_parser.cpp +++ b/src/style/style_parser.cpp @@ -529,7 +529,7 @@ void StyleParser::parseGenericClass(GenericClass &klass, JSVal value) { } if (value.HasMember("prerender-size")) { - klass.prerenderBuffer = toNumber(parseValue(value["prerender-size"])); + klass.prerenderSize = toNumber(parseValue(value["prerender-size"])); } if (value.HasMember("prerender-blur")) { From 90d02ae6739d1b9063870e75f189c1fae5af98a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Wed, 28 May 2014 06:34:51 +0200 Subject: [PATCH 11/79] increase render buffer size to 512 for hillshades --- bin/style.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/bin/style.js b/bin/style.js index f27236f29..bc548ac29 100644 --- a/bin/style.js +++ b/bin/style.js @@ -1738,6 +1738,7 @@ module.exports = { "color": "#103", "antialias": false, "prerender": true, + "prerender-size": 512, "prerender-blur": 1, "opacity": [ "stops", @@ -1750,6 +1751,7 @@ module.exports = { "color": "#206", "antialias": false, "prerender": true, + "prerender-size": 512, "prerender-blur": 1, "opacity": [ "stops", @@ -1762,6 +1764,7 @@ module.exports = { "color": "#fffff3", "antialias": false, "prerender": true, + "prerender-size": 512, "prerender-blur": 1, "opacity": [ "stops", @@ -1774,6 +1777,7 @@ module.exports = { "color": "#ffd", "antialias": false, "prerender": true, + "prerender-size": 512, "prerender-blur": 1, "opacity": [ "stops", @@ -2446,6 +2450,7 @@ module.exports = { "color": "#103", "antialias": false, "prerender": true, + "prerender-size": 512, "prerender-blur": 1, "opacity": [ "stops", @@ -2458,6 +2463,7 @@ module.exports = { "color": "#206", "antialias": false, "prerender": true, + "prerender-size": 512, "prerender-blur": 1, "opacity": [ "stops", @@ -2470,6 +2476,7 @@ module.exports = { "color": "#fdfdad", "antialias": false, "prerender": true, + "prerender-size": 512, "prerender-blur": 1, "opacity": [ "stops", @@ -2483,6 +2490,7 @@ module.exports = { "color": "#ffe1b7", "antialias": false, "prerender": true, + "prerender-size": 512, "prerender-blur": 1, "opacity": [ "stops", From e304f6629fd4531cf490dd0485079e61c3758b12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Wed, 28 May 2014 09:47:55 +0200 Subject: [PATCH 12/79] only change pass parameters if we actually need to --- src/map/map.cpp | 2 -- src/renderer/painter.cpp | 16 ++++++++++------ src/renderer/painter_fill.cpp | 4 ++-- src/renderer/painter_prerender.cpp | 4 ---- 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/map/map.cpp b/src/map/map.cpp index 8291fc2b9..835edac0b 100644 --- a/src/map/map.cpp +++ b/src/map/map.cpp @@ -548,7 +548,6 @@ void Map::renderLayers(const std::vector& layers) { painter.setStrata(i * strata_thickness); renderLayer(*it, Opaque); } - // painter.endPass(); if (debug::renderTree) { std::cout << std::string(--indent * 4, ' ') << "}" << std::endl; } @@ -566,7 +565,6 @@ void Map::renderLayers(const std::vector& layers) { painter.setStrata(i * strata_thickness); renderLayer(*it, Translucent); } - // painter.endPass(); if (debug::renderTree) { std::cout << std::string(--indent * 4, ' ') << "}" << std::endl; } diff --git a/src/renderer/painter.cpp b/src/renderer/painter.cpp index 1c568073a..82808f4d1 100644 --- a/src/renderer/painter.cpp +++ b/src/renderer/painter.cpp @@ -144,15 +144,19 @@ void Painter::clear() { } void Painter::setOpaque() { - pass = Opaque; - glDisable(GL_BLEND); - depthMask(true); + if (pass != Opaque) { + pass = Opaque; + glDisable(GL_BLEND); + depthMask(true); + } } void Painter::setTranslucent() { - pass = Translucent; - glEnable(GL_BLEND); - depthMask(false); + if (pass != Translucent) { + pass = Translucent; + glEnable(GL_BLEND); + depthMask(false); + } } void Painter::setStrata(float value) { diff --git a/src/renderer/painter_fill.cpp b/src/renderer/painter_fill.cpp index 5f014dc01..cd7b0780d 100644 --- a/src/renderer/painter_fill.cpp +++ b/src/renderer/painter_fill.cpp @@ -180,10 +180,10 @@ void Painter::renderFill(FillBucket& bucket, const std::string& layer_name, cons return vtxMatrix; }(); - pass = Opaque; + setOpaque(); renderFill(bucket, modifiedProperties, id, vtxMatrix); - pass = Translucent; + setTranslucent(); renderFill(bucket, modifiedProperties, id, vtxMatrix); diff --git a/src/renderer/painter_prerender.cpp b/src/renderer/painter_prerender.cpp index d112f7aad..7d4f7f9d9 100644 --- a/src/renderer/painter_prerender.cpp +++ b/src/renderer/painter_prerender.cpp @@ -27,8 +27,6 @@ void Painter::renderPrerenderedTexture(Bucket &bucket, const GenericProperties & const int buffer = 4096 * properties.prerenderBuffer; // draw the texture on a quad - depthMask(false); - useProgram(rasterShader->program); rasterShader->setMatrix(matrix); rasterShader->setOpacity(1); @@ -42,6 +40,4 @@ void Painter::renderPrerenderedTexture(Bucket &bucket, const GenericProperties & bucket.prerendered->bindTexture(); coveringRasterArray.bind(*rasterShader, tileStencilBuffer, BUFFER_OFFSET(0)); glDrawArrays(GL_TRIANGLES, 0, (GLsizei)tileStencilBuffer.index()); - - depthMask(true); } From 192b5a30e455f0814ba28b6e61596eeac4b6a716 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Wed, 28 May 2014 10:49:56 +0200 Subject: [PATCH 13/79] make PropertyTransitions optional --- include/llmr/style/properties.hpp | 1 + include/llmr/style/style_parser.hpp | 2 +- src/style/style.cpp | 32 ++++++++++++++--------------- src/style/style_parser.cpp | 13 ++++++------ 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/include/llmr/style/properties.hpp b/include/llmr/style/properties.hpp index 4dfc7e40b..b8ffcfad6 100644 --- a/include/llmr/style/properties.hpp +++ b/include/llmr/style/properties.hpp @@ -16,6 +16,7 @@ namespace llmr { typedef std::array Color; struct PropertyTransition { + inline PropertyTransition(uint16_t duration, uint16_t delay = 0) : duration(duration), delay(delay) {} uint16_t duration = 0; uint16_t delay = 0; }; diff --git a/include/llmr/style/style_parser.hpp b/include/llmr/style/style_parser.hpp index 109b94f1f..7c7d0a70a 100644 --- a/include/llmr/style/style_parser.hpp +++ b/include/llmr/style/style_parser.hpp @@ -47,7 +47,7 @@ private: Value parseValue(JSVal value); FunctionProperty::fn parseFunctionType(JSVal type); FunctionProperty parseFunction(JSVal value); - PropertyTransition parseTransition(JSVal value, std::string property_name); + boost::optional parseTransition(JSVal value, std::string property_name); private: std::map constants; diff --git a/src/style/style.cpp b/src/style/style.cpp index fced8c223..f1694694c 100644 --- a/src/style/style.cpp +++ b/src/style/style.cpp @@ -35,7 +35,7 @@ void Style::cascadeProperties(GenericProperties &properties, const GenericClass& klass.translate.get()[1].evaluate(z) }}; computed.effective_classes[layer_name][TransitionablePropertyKey::Translate] = class_name; if (klass.translate_transition && klass.translate_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::Translate] = klass.translate_transition.get(); + properties_to_transition[layer_name].emplace(TransitionablePropertyKey::Translate, klass.translate_transition.get()); } } @@ -47,7 +47,7 @@ void Style::cascadeProperties(GenericProperties &properties, const GenericClass& properties.opacity = klass.opacity.get().evaluate(z); computed.effective_classes[layer_name][TransitionablePropertyKey::Opacity] = class_name; if (klass.opacity_transition && klass.opacity_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::Opacity] = klass.opacity_transition.get(); + properties_to_transition[layer_name].emplace(TransitionablePropertyKey::Opacity, klass.opacity_transition.get()); } } @@ -120,7 +120,7 @@ void Style::cascade(float z) { fill.fill_color = layer.fill_color.get(); computed.effective_classes[layer_name][TransitionablePropertyKey::FillColor] = class_name; if (layer.fill_color_transition && layer.fill_color_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::FillColor] = layer.fill_color_transition.get(); + properties_to_transition[layer_name].emplace(TransitionablePropertyKey::FillColor, layer.fill_color_transition.get()); } } @@ -128,7 +128,7 @@ void Style::cascade(float z) { fill.stroke_color = layer.stroke_color.get(); computed.effective_classes[layer_name][TransitionablePropertyKey::StrokeColor] = class_name; if (layer.stroke_color_transition && layer.stroke_color_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::StrokeColor] = layer.stroke_color_transition.get(); + properties_to_transition[layer_name].emplace(TransitionablePropertyKey::StrokeColor, layer.stroke_color_transition.get()); } } @@ -150,7 +150,7 @@ void Style::cascade(float z) { stroke.width = layer.width.get().evaluate(z); computed.effective_classes[layer_name][TransitionablePropertyKey::Width] = class_name; if (layer.width_transition && layer.width_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::Width] = layer.width_transition.get(); + properties_to_transition[layer_name].emplace(TransitionablePropertyKey::Width, layer.width_transition.get()); } } @@ -159,7 +159,7 @@ void Style::cascade(float z) { stroke.offset = layer.offset.get().evaluate(z); computed.effective_classes[layer_name][TransitionablePropertyKey::Offset] = class_name; if (layer.offset_transition && layer.offset_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::Offset] = layer.offset_transition.get(); + properties_to_transition[layer_name].emplace(TransitionablePropertyKey::Offset, layer.offset_transition.get()); } } @@ -167,7 +167,7 @@ void Style::cascade(float z) { stroke.color = layer.color.get(); computed.effective_classes[layer_name][TransitionablePropertyKey::Color] = class_name; if (layer.color_transition && layer.color_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::Color] = layer.color_transition.get(); + properties_to_transition[layer_name].emplace(TransitionablePropertyKey::Color, layer.color_transition.get()); } } @@ -176,7 +176,7 @@ void Style::cascade(float z) { layer.dash_array.get()[1].evaluate(z) }}; computed.effective_classes[layer_name][TransitionablePropertyKey::DashArray] = class_name; if (layer.dash_array_transition && layer.dash_array_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::DashArray] = layer.dash_array_transition.get(); + properties_to_transition[layer_name].emplace(TransitionablePropertyKey::DashArray, layer.dash_array_transition.get()); } } } @@ -194,7 +194,7 @@ void Style::cascade(float z) { icon.color = layer.color.get(); computed.effective_classes[layer_name][TransitionablePropertyKey::Color] = class_name; if (layer.color_transition && layer.color_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::Color] = layer.color_transition.get(); + properties_to_transition[layer_name].emplace(TransitionablePropertyKey::Color, layer.color_transition.get()); } } @@ -210,7 +210,7 @@ void Style::cascade(float z) { icon.radius = layer.radius.get().evaluate(z); computed.effective_classes[layer_name][TransitionablePropertyKey::Radius] = class_name; if (layer.radius_transition && layer.radius_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::Radius] = layer.radius_transition.get(); + properties_to_transition[layer_name].emplace(TransitionablePropertyKey::Radius, layer.radius_transition.get()); } } @@ -218,7 +218,7 @@ void Style::cascade(float z) { icon.blur = layer.blur.get().evaluate(z); computed.effective_classes[layer_name][TransitionablePropertyKey::Blur] = class_name; if (layer.blur_transition && layer.blur_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::Blur] = layer.blur_transition.get(); + properties_to_transition[layer_name].emplace(TransitionablePropertyKey::Blur, layer.blur_transition.get()); } } } @@ -236,7 +236,7 @@ void Style::cascade(float z) { text.color = layer.color.get(); computed.effective_classes[layer_name][TransitionablePropertyKey::Color] = class_name; if (layer.color_transition && layer.color_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::Color] = layer.color_transition.get(); + properties_to_transition[layer_name].emplace(TransitionablePropertyKey::Color, layer.color_transition.get()); } } @@ -248,7 +248,7 @@ void Style::cascade(float z) { text.halo = layer.halo.get(); computed.effective_classes[layer_name][TransitionablePropertyKey::Halo] = class_name; if (layer.halo_transition && layer.halo_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::Halo] = layer.halo_transition.get(); + properties_to_transition[layer_name].emplace(TransitionablePropertyKey::Halo, layer.halo_transition.get()); } } @@ -256,7 +256,7 @@ void Style::cascade(float z) { text.halo_radius = layer.halo_radius.get().evaluate(z); computed.effective_classes[layer_name][TransitionablePropertyKey::HaloRadius] = class_name; if (layer.halo_radius_transition && layer.halo_radius_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::HaloRadius] = layer.halo_radius_transition.get(); + properties_to_transition[layer_name].emplace(TransitionablePropertyKey::HaloRadius, layer.halo_radius_transition.get()); } } @@ -264,7 +264,7 @@ void Style::cascade(float z) { text.halo_blur = layer.halo_blur.get().evaluate(z); computed.effective_classes[layer_name][TransitionablePropertyKey::HaloBlur] = class_name; if (layer.halo_blur_transition && layer.halo_blur_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::HaloBlur] = layer.halo_blur_transition.get(); + properties_to_transition[layer_name].emplace(TransitionablePropertyKey::HaloBlur, layer.halo_blur_transition.get()); } } @@ -305,7 +305,7 @@ void Style::cascade(float z) { computed.background.color = sheetClass.background.color.get(); computed.effective_classes["background"][TransitionablePropertyKey::Color] = class_name; if (sheetClass.background.color_transition && sheetClass.background.color_transition.get().duration) { - properties_to_transition["background"][TransitionablePropertyKey::Color] = sheetClass.background.color_transition.get(); + properties_to_transition["background"].emplace(TransitionablePropertyKey::Color, sheetClass.background.color_transition.get()); } } } diff --git a/src/style/style_parser.cpp b/src/style/style_parser.cpp index bbc489332..6276d657d 100644 --- a/src/style/style_parser.cpp +++ b/src/style/style_parser.cpp @@ -477,7 +477,7 @@ FunctionProperty StyleParser::parseFunction(JSVal value) { return property; } -PropertyTransition StyleParser::parseTransition(JSVal value, std::string property_name) { +boost::optional StyleParser::parseTransition(JSVal value, std::string property_name) { uint16_t duration = 0, delay = 0; std::string transition_property = std::string("transition-").append(property_name); if (value.HasMember(transition_property.c_str())) { @@ -492,12 +492,11 @@ PropertyTransition StyleParser::parseTransition(JSVal value, std::string propert } } - PropertyTransition transition; - - transition.duration = duration; - transition.delay = delay; - - return transition; + if (duration || delay) { + return boost::optional(PropertyTransition { duration, delay }); + } else { + return boost::optional(); + } } void StyleParser::parseGenericClass(GenericClass &klass, JSVal value) { From 5b38927c5f76ab72f5bc9534dbebd97d0759ba49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Wed, 28 May 2014 14:54:54 +0200 Subject: [PATCH 14/79] use an unordered map for bucket name => bucket --- include/llmr/map/vector_tile_data.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/llmr/map/vector_tile_data.hpp b/include/llmr/map/vector_tile_data.hpp index 24d2c7cc2..f82e2ebff 100644 --- a/include/llmr/map/vector_tile_data.hpp +++ b/include/llmr/map/vector_tile_data.hpp @@ -13,7 +13,7 @@ #include #include -#include +#include namespace llmr { @@ -42,7 +42,7 @@ protected: // Holds the buckets of this tile. // They contain the location offsets in the buffers stored above - std::map> buckets; + std::unordered_map> buckets; }; From eb377aced7fc6df31cddd78d0bd74085b64880c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Wed, 28 May 2014 15:50:54 +0200 Subject: [PATCH 15/79] add font names --- bin/style.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/bin/style.js b/bin/style.js index bc548ac29..1a6aca8b7 100644 --- a/bin/style.js +++ b/bin/style.js @@ -267,6 +267,7 @@ module.exports = { "value": 10, "path": "curve", "text_field": "ele", + "font": "Open Sans Regular, Arial Unicode MS Regular", "fontSize": 10, "feature_type": "line", "type": "text" @@ -648,6 +649,7 @@ module.exports = { "layer": "country_label", "text_field": "name", "path": "horizontal", + "font": "Open Sans Regular, Arial Unicode MS Regular", "fontSize": 24, "feature_type": "point", "type": "text" @@ -664,6 +666,7 @@ module.exports = { "type": "text", "text_field": "name", "path": "curve", + "font": "Open Sans Regular, Arial Unicode MS Regular", "fontSize": 16 }, "marine_label_point_1": { @@ -675,6 +678,7 @@ module.exports = { "path": "horizontal", "field": "labelrank", "value": 1, + "font": "Open Sans Regular, Arial Unicode MS Regular", "fontSize": 30 }, "marine_label_point_2": { @@ -686,6 +690,7 @@ module.exports = { "path": "horizontal", "field": "labelrank", "value": 2, + "font": "Open Sans Regular, Arial Unicode MS Regular", "fontSize": 24 }, "marine_label_point_other": { @@ -697,6 +702,7 @@ module.exports = { "path": "horizontal", "field": "labelrank", "value": [3,4,5,6], + "font": "Open Sans Regular, Arial Unicode MS Regular", "fontSize": 18 }, "state_label": { @@ -704,6 +710,7 @@ module.exports = { "layer": "state_label", "text_field": "name", "path": "horizontal", + "font": "Open Sans Regular, Arial Unicode MS Regular", "fontSize": 16, "feature_type": "point", "type": "text", @@ -724,6 +731,7 @@ module.exports = { "value": "city", "text_field": "name", "path": "horizontal", + "font": "Open Sans Regular, Arial Unicode MS Regular", "fontSize": 20, "feature_type": "point", "type": "text" @@ -735,6 +743,7 @@ module.exports = { "value": "town", "text_field": "name", "path": "horizontal", + "font": "Open Sans Regular, Arial Unicode MS Regular", "fontSize": 24, "feature_type": "point", "type": "text" @@ -746,6 +755,7 @@ module.exports = { "value": "village", "text_field": "name", "path": "horizontal", + "font": "Open Sans Regular, Arial Unicode MS Regular", "fontSize": 22, "feature_type": "point", "type": "text" @@ -761,6 +771,7 @@ module.exports = { ], "text_field": "name", "path": "horizontal", + "font": "Open Sans Regular, Arial Unicode MS Regular", "fontSize": 14, "feature_type": "point", "type": "text" @@ -771,6 +782,7 @@ module.exports = { "text_field": "name", "path": "curve", "padding": 2, + "font": "Open Sans Regular, Arial Unicode MS Regular", "fontSize": 13, "feature_type": "line", "type": "text", @@ -781,6 +793,7 @@ module.exports = { "layer": "water_label", "text_field": "name", "path": "horizontal", + "font": "Open Sans Regular, Arial Unicode MS Regular", "fontSize": 12, "feature_type": "point", "type": "text" @@ -790,6 +803,7 @@ module.exports = { "layer": "waterway_label", "text_field": "name", "path": "curve", + "font": "Open Sans Regular, Arial Unicode MS Regular", "fontSize": 12, "textMinDistance": 15, "feature_type": "line", @@ -824,6 +838,7 @@ module.exports = { "text_field": "name", "path": "horizontal", "padding": 2, + "font": "Open Sans Regular, Arial Unicode MS Regular", "fontSize": 12, "feature_type": "point", "type": "text", From cca9d81ee75bc045e8fa790822b7a1ec83b3dbaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Wed, 28 May 2014 15:51:09 +0200 Subject: [PATCH 16/79] add debug warnings --- include/llmr/util/constants.hpp | 5 +++++ src/map/tile_parser.cpp | 7 ++++++- src/renderer/text_bucket.cpp | 7 +++++++ src/util/constants.cpp | 5 +++++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/include/llmr/util/constants.hpp b/include/llmr/util/constants.hpp index 70befcb37..f315e5171 100644 --- a/include/llmr/util/constants.hpp +++ b/include/llmr/util/constants.hpp @@ -19,6 +19,11 @@ extern const bool styleParseWarnings; extern const bool spriteWarnings; extern const bool renderWarnings; extern const bool renderTree; +extern const bool labelTextMissingWarning; +extern const bool missingFontStackWarning; +extern const bool missingFontFaceWarning; +extern const bool glyphWarning; +extern const bool shapingWarning; } diff --git a/src/map/tile_parser.cpp b/src/map/tile_parser.cpp index 49444428a..434372944 100644 --- a/src/map/tile_parser.cpp +++ b/src/map/tile_parser.cpp @@ -163,9 +163,11 @@ std::unique_ptr TileParser::createIconBucket(const VectorTileLayer& laye } std::unique_ptr TileParser::createTextBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc) { - // Determine the correct text stack. if (!layer.shaping.size()) { + if (debug::missingFontStackWarning) { + fprintf(stderr, "[WARNING] missing font stack '%s'\n", bucket_desc.geometry.font.c_str()); + } return nullptr; } @@ -179,6 +181,9 @@ std::unique_ptr TileParser::createTextBucket(const VectorTileLayer& laye auto it = const_faces.find(face); if (it == const_faces.end()) { // This layer references an unknown face. + if (debug::missingFontFaceWarning) { + fprintf(stderr, "[WARNING] missing font face '%s'\n", face.c_str()); + } return nullptr; } faces.push_back(&it->second); diff --git a/src/renderer/text_bucket.cpp b/src/renderer/text_bucket.cpp index 0fd351343..310baf374 100644 --- a/src/renderer/text_bucket.cpp +++ b/src/renderer/text_bucket.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -103,12 +104,18 @@ void TextBucket::addFeature(const VectorTileFeature &feature, auto it_prop = feature.properties.find(geom_desc.field); if (it_prop == feature.properties.end()) { // feature does not have the correct property + if (debug::labelTextMissingWarning) { + fprintf(stderr, "[WARNING] feature doesn't have property '%s' required for labelling\n", geom_desc.field.c_str()); + } return; } const Value &value = it_prop->second; auto it_shaping = shapings.find(value); if (it_shaping == shapings.end()) { + if (debug::shapingWarning) { + fprintf(stderr, "[WARNING] missing shaping for '%s'\n", toString(value).c_str()); + } // we lack shaping information for this label return; } diff --git a/src/util/constants.cpp b/src/util/constants.cpp index 2a4ecd374..f67464926 100644 --- a/src/util/constants.cpp +++ b/src/util/constants.cpp @@ -7,3 +7,8 @@ const bool llmr::debug::styleParseWarnings = false; const bool llmr::debug::spriteWarnings = false; const bool llmr::debug::renderWarnings = false; const bool llmr::debug::renderTree = false; +const bool llmr::debug::labelTextMissingWarning = true; +const bool llmr::debug::missingFontStackWarning = true; +const bool llmr::debug::missingFontFaceWarning = true; +const bool llmr::debug::glyphWarning = true; +const bool llmr::debug::shapingWarning = true; From 1749aa3de2744c830becf05608e008a78b92c49d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Wed, 28 May 2014 15:51:29 +0200 Subject: [PATCH 17/79] switch to glyph/shaping-less endpoint --- src/map/map.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/map/map.cpp b/src/map/map.cpp index 835edac0b..e72c7e30b 100644 --- a/src/map/map.cpp +++ b/src/map/map.cpp @@ -163,7 +163,7 @@ void Map::setup() { sources.emplace("outdoors", std::unique_ptr(new Source(*this, painter, - "http://api-maps-gl.tilestream.net/v3/mapbox.mapbox-terrain-v1,mapbox.mapbox-streets-v5/%d/%d/%d.gl.pbf", + "http://api-maps-gl.tilestream.net/v3/mapbox.mapbox-terrain-v1,mapbox.mapbox-streets-v5/%d/%d/%d.vector.pbf", Source::Type::vector, {{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }}, 512, From bb825363e008c2ec612250677ef43f216aabef4e Mon Sep 17 00:00:00 2001 From: Eden Halperin Date: Wed, 28 May 2014 10:41:51 -0700 Subject: [PATCH 18/79] formatting cleanup --- bin/style.js | 154 ++++++++++++++++++++++++--------------------------- 1 file changed, 71 insertions(+), 83 deletions(-) diff --git a/bin/style.js b/bin/style.js index 842690201..bfe51d0d4 100644 --- a/bin/style.js +++ b/bin/style.js @@ -822,7 +822,6 @@ module.exports = { "size": 12, "type": "point" }, - "poi_aerodrome": { "source": "outdoors", "layer": "poi_label", @@ -845,8 +844,7 @@ module.exports = { "padding": 2, "fontSize": 11, "feature_type": "point", - "type": "text", - //"alwaysVisible": true + "type": "text" }, "poi_label_3": { "source": "outdoors", @@ -858,8 +856,7 @@ module.exports = { "padding": 2, "fontSize": 10, "feature_type": "point", - "type": "text", - //"alwaysVisible": true + "type": "text" }, "poi_label_4": { "source": "outdoors", @@ -871,8 +868,7 @@ module.exports = { "padding": 2, "fontSize": 10, "feature_type": "point", - "type": "text", - //"alwaysVisible": true + "type": "text" } }, "structure": [ @@ -2331,28 +2327,23 @@ module.exports = { "stroke": "text_stroke" }, "poi": { - //"color": "rgba(50,50,50,0.9)", "antialias": false - //"stroke": #000, - //"strokeWidth": 0.4, - //"strokeBlur": 2 }, "poi_3": { - "antialias": false, - "opacity": [ - "stops", - {"z": 0, "val": 0}, - {"z": 16.5, "val": 0}, - {"z": 16.75, "val": 1} - ] + "antialias": false, + "opacity": [ + "stops", + {"z": 16.5, "val": 0}, + {"z": 16.75, "val": 1} + ] }, "poi_4": { - "antialias": false, - "opacity": [ - "stops", - {"z": 18.5, "val": 0}, - {"z": 18.75, "val": 1} - ] + "antialias": false, + "opacity": [ + "stops", + {"z": 18.5, "val": 0}, + {"z": 18.75, "val": 1} + ] }, "poi_label_1-2": { "color": "#444", @@ -2363,31 +2354,30 @@ module.exports = { "translate": [0, 14] }, "poi_label_3": { - "color": "#444", - "size": 10, - "stroke": "land", - "strokeWidth": 0.3, - "strokeBlur": 1, - "translate": [0, 14], - "opacity": [ - "stops", - {"z": 0, "val": 0}, - {"z": 16.5, "val": 0}, - {"z": 16.75, "val": 1} - ] + "color": "#444", + "size": 10, + "stroke": "land", + "strokeWidth": 0.3, + "strokeBlur": 1, + "translate": [0, 14], + "opacity": [ + "stops", + {"z": 16.5, "val": 0}, + {"z": 16.75, "val": 1} + ] }, "poi_label_4": { - "color": "#444", - "size": 10, - "opacity": [ - "stops", - {"z": 18.5, "val": 0}, - {"z": 18.75, "val": 1} - ], - "stroke": "land", - "strokeWidth": 0.3, - "strokeBlur": 1, - "translate": [0, 14] + "color": "#444", + "size": 10, + "opacity": [ + "stops", + {"z": 18.5, "val": 0}, + {"z": 18.75, "val": 1} + ], + "stroke": "land", + "strokeWidth": 0.3, + "strokeBlur": 1, + "translate": [0, 14] }, "poi_aerodrome": { "opacity": ["stops", @@ -3089,21 +3079,20 @@ module.exports = { "antialias": false }, "poi_3": { - "antialias": false, - "opacity": [ - "stops", - {"z": 0, "val": 0}, - {"z": 16.5, "val": 0}, - {"z": 16.75, "val": 1} - ] + "antialias": false, + "opacity": [ + "stops", + {"z": 16.5, "val": 0}, + {"z": 16.75, "val": 1} + ] }, "poi_4": { - "antialias": false, - "opacity": [ - "stops", - {"z": 18.5, "val": 0}, - {"z": 18.75, "val": 1} - ] + "antialias": false, + "opacity": [ + "stops", + {"z": 18.5, "val": 0}, + {"z": 18.75, "val": 1} + ] }, "poi_label_1-2": { "color": "#fff", @@ -3114,31 +3103,30 @@ module.exports = { "translate": [0, 14] }, "poi_label_3": { - "color": "#fff", - "size": 10, - "stroke": "text2_stroke_night", - "strokeWidth": 0.3, - "strokeBlur": 1, - "translate": [0, 14], - "opacity": [ - "stops", - {"z": 0, "val": 0}, - {"z": 16.5, "val": 0}, - {"z": 16.75, "val": 1} - ] + "color": "#fff", + "size": 10, + "stroke": "text2_stroke_night", + "strokeWidth": 0.3, + "strokeBlur": 1, + "translate": [0, 14], + "opacity": [ + "stops", + {"z": 16.5, "val": 0}, + {"z": 16.75, "val": 1} + ] }, "poi_label_4": { - "color": "#fff", - "size": 10, - "opacity": [ - "stops", - {"z": 18.5, "val": 0}, - {"z": 18.75, "val": 1} - ], - "stroke": "text2_stroke_night", - "strokeWidth": 0.3, - "strokeBlur": 1, - "translate": [0, 14] + "color": "#fff", + "size": 10, + "opacity": [ + "stops", + {"z": 18.5, "val": 0}, + {"z": 18.75, "val": 1} + ], + "stroke": "text2_stroke_night", + "strokeWidth": 0.3, + "strokeBlur": 1, + "translate": [0, 14] }, "poi_aerodrome": { "opacity": ["stops", From c6c978f82233b5ad9401aa73f3e3dab6fd588cb7 Mon Sep 17 00:00:00 2001 From: Eden Halperin Date: Wed, 28 May 2014 11:48:51 -0700 Subject: [PATCH 19/79] fix country label size discrepancy --- bin/style.js | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/bin/style.js b/bin/style.js index bfe51d0d4..94abd2e65 100644 --- a/bin/style.js +++ b/bin/style.js @@ -1642,6 +1642,11 @@ module.exports = { {"z": 19, "val": 12}, {"z": 20, "val": 24}, {"z": 21, "val": 48} + ], + "country_label_size": [ + "stops", + {"z": 1, "val": 14}, + {"z": 12, "val": 24} ] }, "classes": [ @@ -2185,11 +2190,7 @@ module.exports = { "country_label": { "color": "country_text", "stroke": "rgba(255,255,255,0.5)", - "size": [ - "stops", - {"z": 2, "val": 14}, - {"z": 12, "val": 24} - ] + "size": "country_label_size" }, "country_label_line": { "color": "country_text", @@ -2932,11 +2933,7 @@ module.exports = { "country_label": { "color": "text_night", "stroke": "text_stroke_night", - "size": [ - "stops", - {"z": 1, "val": 14}, - {"z": 12, "val": 24} - ] + "size": "country_label_size" }, "country_label_line": { "color": "text_night", From ed7b86a1349c0d943e95910d439ac52fd157b28d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Wed, 28 May 2014 20:51:13 +0200 Subject: [PATCH 20/79] add glyph store and load glyph pbfs --- include/llmr/map/map.hpp | 3 + include/llmr/map/tile_parser.hpp | 4 +- include/llmr/platform/platform.hpp | 4 +- include/llmr/text/glyph.hpp | 5 ++ include/llmr/text/glyph_store.hpp | 66 +++++++++++++++++++ src/map/tile_parser.cpp | 67 +++++++++++-------- src/map/vector_tile_data.cpp | 2 +- src/platform/request.cpp | 34 ++++++---- src/text/glyph.cpp | 101 +++++++++++++++++++++++++++++ src/text/glyph_store.cpp | 92 ++++++++++++++++++++++++++ 10 files changed, 334 insertions(+), 44 deletions(-) create mode 100644 include/llmr/text/glyph_store.hpp create mode 100644 src/text/glyph.cpp create mode 100644 src/text/glyph_store.cpp diff --git a/include/llmr/map/map.hpp b/include/llmr/map/map.hpp index ab1738f96..49050540c 100644 --- a/include/llmr/map/map.hpp +++ b/include/llmr/map/map.hpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -98,6 +99,7 @@ public: inline const TransformState &getState() const { return state; } inline const Style &getStyle() const { return style; } inline GlyphAtlas &getGlyphAtlas() { return glyphAtlas; } + inline GlyphStore &getGlyphStore() { return glyphStore; } inline SpriteAtlas &getSpriteAtlas() { return spriteAtlas; } inline uv_loop_t *getLoop() { return loop; } inline time getAnimationTime() const { return animationTime; } @@ -152,6 +154,7 @@ private: Texturepool texturepool; Style style; GlyphAtlas glyphAtlas; + GlyphStore glyphStore; SpriteAtlas spriteAtlas; Painter painter; diff --git a/include/llmr/map/tile_parser.hpp b/include/llmr/map/tile_parser.hpp index 86545e4f7..644cc45b1 100644 --- a/include/llmr/map/tile_parser.hpp +++ b/include/llmr/map/tile_parser.hpp @@ -9,6 +9,7 @@ namespace llmr { class Style; class GlyphAtlas; +class GlyphStore; class SpriteAtlas; class LayerDescription; @@ -16,7 +17,7 @@ class Bucket; class TileParser { public: - TileParser(const std::string& data, VectorTileData& tile, const Style& style, GlyphAtlas& glyphAtlas, SpriteAtlas &spriteAtlas); + TileParser(const std::string& data, VectorTileData& tile, const Style& style, GlyphAtlas& glyphAtlas, GlyphStore &glyphStore, SpriteAtlas &spriteAtlas); private: bool obsolete() const; @@ -35,6 +36,7 @@ private: VectorTileData& tile; const Style& style; GlyphAtlas& glyphAtlas; + GlyphStore &glyphStore; SpriteAtlas &spriteAtlas; Faces faces; Placement placement; diff --git a/include/llmr/platform/platform.hpp b/include/llmr/platform/platform.hpp index 972e7db6b..d516378c2 100644 --- a/include/llmr/platform/platform.hpp +++ b/include/llmr/platform/platform.hpp @@ -25,9 +25,11 @@ struct Response { // Makes an HTTP request of a URL, preferrably on a background thread, and calls a function with the // results in the original thread (which runs the libuv loop). +// If the loop pointer is NULL, the callback function will be called on an arbitrary thread. // Returns a cancellable request. std::shared_ptr request_http(const std::string &url, - std::function callback, uv_loop_t *loop); + std::function callback, + uv_loop_t *loop = nullptr); // Cancels an HTTP request. void cancel_request_http(const std::shared_ptr &req); diff --git a/include/llmr/text/glyph.hpp b/include/llmr/text/glyph.hpp index 91531e24f..e6138e712 100644 --- a/include/llmr/text/glyph.hpp +++ b/include/llmr/text/glyph.hpp @@ -9,6 +9,11 @@ namespace llmr { +typedef std::pair GlyphRange; + +// Note: this only works for the BMP +GlyphRange getGlyphRange(uint32_t glyph); + struct GlyphMetrics { operator bool() const { return width == 0 && height == 0 && advance == 0; diff --git a/include/llmr/text/glyph_store.hpp b/include/llmr/text/glyph_store.hpp new file mode 100644 index 000000000..1cd2fd539 --- /dev/null +++ b/include/llmr/text/glyph_store.hpp @@ -0,0 +1,66 @@ +#ifndef LLMR_TEXT_GLYPH_STORE +#define LLMR_TEXT_GLYPH_STORE + +#include +#include + + +#include +#include +#include +#include +#include +#include + +namespace llmr { + + +class SDFGlyph { +public: + SDFGlyph(); + SDFGlyph(pbf data); + + // A signed distance field of the glyph with a border of 3 pixels. + std::string bitmap; + + // Glyph metrics + GlyphMetrics metrics; +}; + + +class GlyphSet { +public: + GlyphSet(const std::string &fontStack, GlyphRange glyphRange); + + void parse(); + + std::shared_future getFuture(); + +private: + std::map glyphs; + + std::string data; + std::promise promise; + std::shared_future future; + std::mutex mtx; +}; + +// Manages Glyphrange PBF loading. +class GlyphStore { +public: + // Block until all specified GlyphRanges of the specified font stack are loaded. + void waitForGlyphRanges(const std::string &fontStack, const std::set &glyphRanges); + +private: + // Loads an individual glyph range from the font stack and adds it to rangeSets + std::shared_future loadGlyphRange(const std::string &fontStack, std::map> &rangeSets, GlyphRange range); + +private: + std::unordered_map>> stacks; + std::mutex mtx; +}; + + +} + +#endif diff --git a/src/map/tile_parser.cpp b/src/map/tile_parser.cpp index 434372944..c610ca139 100644 --- a/src/map/tile_parser.cpp +++ b/src/map/tile_parser.cpp @@ -9,17 +9,21 @@ #include #include #include +#include #include +#include + using namespace llmr; -TileParser::TileParser(const std::string& data, VectorTileData& tile, const Style& style, GlyphAtlas& glyphAtlas, SpriteAtlas &spriteAtlas) +TileParser::TileParser(const std::string& data, VectorTileData& tile, const Style& style, GlyphAtlas& glyphAtlas, GlyphStore &glyphStore, SpriteAtlas &spriteAtlas) : vector_data(pbf((const uint8_t *)data.data(), data.size())), tile(tile), style(style), glyphAtlas(glyphAtlas), + glyphStore(glyphStore), spriteAtlas(spriteAtlas), placement(tile.id.z) { parseGlyphs(); @@ -162,35 +166,42 @@ std::unique_ptr TileParser::createIconBucket(const VectorTileLayer& laye return obsolete() ? nullptr : std::move(bucket); } +typedef std::pair GlyphRange; + std::unique_ptr TileParser::createTextBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc) { - // Determine the correct text stack. - if (!layer.shaping.size()) { - if (debug::missingFontStackWarning) { - fprintf(stderr, "[WARNING] missing font stack '%s'\n", bucket_desc.geometry.font.c_str()); - } - return nullptr; - } - - // TODO: currently hardcoded to use the first font stack. - const std::map& shaping = layer.shaping.begin()->second; - - const Faces& const_faces = faces; - - IndexedFaces faces; - for (const std::string& face : layer.faces) { - auto it = const_faces.find(face); - if (it == const_faces.end()) { - // This layer references an unknown face. - if (debug::missingFontFaceWarning) { - fprintf(stderr, "[WARNING] missing font face '%s'\n", face.c_str()); - } - return nullptr; - } - faces.push_back(&it->second); - } - std::unique_ptr bucket = std::make_unique( tile.textVertexBuffer, tile.triangleElementsBuffer, bucket_desc, placement); - addBucketFeatures(bucket, layer, bucket_desc, faces, shaping); + + + std::set ranges; + std::wstring_convert, char32_t> ucs4conv; + + FilteredVectorTileLayer filtered_layer(layer, bucket_desc); + for (const pbf& feature_pbf : filtered_layer) { + if (obsolete()) return nullptr; + VectorTileFeature feature { feature_pbf, layer }; + + auto it_prop = feature.properties.find(bucket_desc.geometry.field); + if (it_prop == feature.properties.end()) { + // feature does not have the correct property + if (debug::labelTextMissingWarning) { + fprintf(stderr, "[WARNING] feature doesn't have property '%s' required for labelling\n", bucket_desc.geometry.field.c_str()); + } + continue; + } + + const std::u32string string = ucs4conv.from_bytes(toString(it_prop->second)); + + // Loop through all characters of this text and collect unique codepoints. + for (uint32_t chr : string) { + ranges.insert(getGlyphRange(chr)); + } + } + + glyphStore.waitForGlyphRanges(bucket_desc.geometry.font, ranges); + + // TODO: Now that we have all the glyph ranges, actually perform the shaping and add features to + // the bucket, and add the required glyphs from the glyphStore to the glyphAtlas. + return std::move(bucket); } diff --git a/src/map/vector_tile_data.cpp b/src/map/vector_tile_data.cpp index 337e2fcc3..3c972aa31 100644 --- a/src/map/vector_tile_data.cpp +++ b/src/map/vector_tile_data.cpp @@ -22,7 +22,7 @@ void VectorTileData::parse() { // Parsing creates state that is encapsulated in TileParser. While parsing, // the TileParser object writes results into this objects. All other state // is going to be discarded afterwards. - TileParser parser(data, *this, map.getStyle(), map.getGlyphAtlas(), map.getSpriteAtlas()); + TileParser parser(data, *this, map.getStyle(), map.getGlyphAtlas(), map.getGlyphStore(), map.getSpriteAtlas()); } catch (const std::exception& ex) { fprintf(stderr, "[%p] exception [%d/%d/%d]... failed: %s\n", this, id.z, id.x, id.y, ex.what()); cancel(); diff --git a/src/platform/request.cpp b/src/platform/request.cpp index aadf83dea..f689517ab 100644 --- a/src/platform/request.cpp +++ b/src/platform/request.cpp @@ -12,25 +12,33 @@ Request::Request(const std::string &url, res(std::make_unique(callback)), cancelled(false), loop(loop) { - // Add a check handle without a callback to keep the default loop running. - // We don't have a real handler attached to the default loop right from the - // beginning, because we're using asynchronous messaging to perform the actual - // request in the request thread. Only after the request is complete, we - // create an actual work request that is attached to the default loop. - async = new uv_async_t(); - async->data = new std::unique_ptr(); - uv_async_init(loop, async, complete); + if (loop) { + // Add a check handle without a callback to keep the default loop running. + // We don't have a real handler attached to the default loop right from the + // beginning, because we're using asynchronous messaging to perform the actual + // request in the request thread. Only after the request is complete, we + // create an actual work request that is attached to the default loop. + async = new uv_async_t(); + async->data = new std::unique_ptr(); + uv_async_init(loop, async, complete); + } } Request::~Request() { } void Request::complete() { - // We're scheduling the response callback to be invoked in the event loop. - // Since the Request object will be deleted before the callback is invoked, - // we move over the Response object to be owned by the async handle. - ((std::unique_ptr *)async->data)->swap(res); - uv_async_send(async); + if (loop) { + // We're scheduling the response callback to be invoked in the event loop. + // Since the Request object will be deleted before the callback is invoked, + // we move over the Response object to be owned by the async handle. + ((std::unique_ptr *)async->data)->swap(res); + uv_async_send(async); + } else { + // We're calling the response callback immediately. We're currently on an + // arbitrary thread, but that's okay. + res->callback(res.get()); + } } void Request::complete(uv_async_t *async) { diff --git a/src/text/glyph.cpp b/src/text/glyph.cpp new file mode 100644 index 000000000..039e3bc36 --- /dev/null +++ b/src/text/glyph.cpp @@ -0,0 +1,101 @@ +#include + +namespace llmr { + +// Note: this only works for the BMP +// Note: we could use a binary lookup table to get averaged constant time lookups, however, +// most of our lookups are going to be within the first 3 ranges listed here, so this is +// likely faster. +GlyphRange getGlyphRange(uint32_t glyph) { + if (glyph <= 127) return { 0, 127 }; // Basic Latin + if (glyph <= 255) return { 128, 255 }; // Latin-1 Supplement + if (glyph >= 8192 && glyph <= 8303) return { 8192, 8303 }; // General Punctuation + if (glyph <= 383) return { 256, 383 }; // Latin Extended-A + if (glyph <= 591) return { 384, 591 }; // Latin Extended-B + if (glyph <= 687) return { 592, 687 }; // IPA Extensions + if (glyph <= 767) return { 688, 767 }; // Spacing Modifier Letters + if (glyph <= 879) return { 768, 879 }; // Combining Diacritical Marks + if (glyph <= 1023) return { 880, 1023 }; // Greek + if (glyph <= 1279) return { 1024, 1279 }; // Cyrillic + if (glyph <= 1423) return { 1280, 1423 }; // Armenian + if (glyph <= 1535) return { 1424, 1535 }; // Hebrew + if (glyph <= 1791) return { 1536, 1791 }; // Arabic + if (glyph <= 1871) return { 1792, 1871 }; // Syriac + if (glyph <= 1983) return { 1872, 1983 }; // Thaana + if (glyph <= 2431) return { 1984, 2431 }; // Devanagari + if (glyph <= 2559) return { 2432, 2559 }; // Bengali + if (glyph <= 2687) return { 2560, 2687 }; // Gurmukhi + if (glyph <= 2815) return { 2688, 2815 }; // Gujarati + if (glyph <= 2943) return { 2816, 2943 }; // Oriya + if (glyph <= 3071) return { 2944, 3071 }; // Tamil + if (glyph <= 3199) return { 3072, 3199 }; // Telugu + if (glyph <= 3327) return { 3200, 3327 }; // Kannada + if (glyph <= 3455) return { 3328, 3455 }; // Malayalam + if (glyph <= 3583) return { 3456, 3583 }; // Sinhala + if (glyph <= 3711) return { 3584, 3711 }; // Thai + if (glyph <= 3839) return { 3712, 3839 }; // Lao + if (glyph <= 4095) return { 3840, 4095 }; // Tibetan + if (glyph <= 4255) return { 4096, 4255 }; // Myanmar + if (glyph <= 4351) return { 4256, 4351 }; // Georgian + if (glyph <= 4607) return { 4352, 4607 }; // Hangul Jamo + if (glyph <= 4991) return { 4608, 4991 }; // Ethiopic + if (glyph <= 5119) return { 4992, 5119 }; // Cherokee + if (glyph <= 5759) return { 5120, 5759 }; // Unified Canadian Aboriginal Syllabics + if (glyph <= 5791) return { 5760, 5791 }; // Ogham + if (glyph <= 5887) return { 5792, 5887 }; // Runic + if (glyph <= 6143) return { 5888, 6143 }; // Khmer + if (glyph <= 6319) return { 6144, 6319 }; // Mongolian + if (glyph <= 7935) return { 6320, 7935 }; // Latin Extended Additional + if (glyph <= 8191) return { 7936, 8191 }; // Greek Extended + if (glyph <= 8351) return { 8304, 8351 }; // Superscripts and Subscripts + if (glyph <= 8399) return { 8352, 8399 }; // Currency Symbols + if (glyph <= 8447) return { 8400, 8447 }; // Combining Marks for Symbols + if (glyph <= 8527) return { 8448, 8527 }; // Letterlike Symbols + if (glyph <= 8591) return { 8528, 8591 }; // Number Forms + if (glyph <= 8703) return { 8592, 8703 }; // Arrows + if (glyph <= 8959) return { 8704, 8959 }; // Mathematical Operators + if (glyph <= 9215) return { 8960, 9215 }; // Miscellaneous Technical + if (glyph <= 9279) return { 9216, 9279 }; // Control Pictures + if (glyph <= 9311) return { 9280, 9311 }; // Optical Character Recognition + if (glyph <= 9471) return { 9312, 9471 }; // Enclosed Alphanumerics + if (glyph <= 9599) return { 9472, 9599 }; // Box Drawing + if (glyph <= 9631) return { 9600, 9631 }; // Block Elements + if (glyph <= 9727) return { 9632, 9727 }; // Geometric Shapes + if (glyph <= 9983) return { 9728, 9983 }; // Miscellaneous Symbols + if (glyph <= 10175) return { 9984, 10175 }; // Dingbats + if (glyph <= 10495) return { 10176, 10495 }; // Braille Patterns + if (glyph <= 12031) return { 10496, 12031 }; // CJK Radicals Supplement + if (glyph <= 12255) return { 12032, 12255 }; // Kangxi Radicals + if (glyph <= 12287) return { 12256, 12287 }; // Ideographic Description Characters + if (glyph <= 12351) return { 12288, 12351 }; // CJK Symbols and Punctuation + if (glyph <= 12447) return { 12352, 12447 }; // Hiragana + if (glyph <= 12543) return { 12448, 12543 }; // Katakana + if (glyph <= 12591) return { 12544, 12591 }; // Bopomofo + if (glyph <= 12687) return { 12592, 12687 }; // Hangul Compatibility Jamo + if (glyph <= 12703) return { 12688, 12703 }; // Kanbun + if (glyph <= 12735) return { 12704, 12735 }; // Bopomofo Extended + if (glyph <= 13055) return { 12736, 13055 }; // Enclosed CJK Letters and Months + if (glyph <= 13311) return { 13056, 13311 }; // CJK Compatibility + if (glyph <= 19893) return { 13312, 19893 }; // CJK Unified Ideographs Extension A + if (glyph <= 40959) return { 19894, 40959 }; // CJK Unified Ideographs + if (glyph <= 42127) return { 40960, 42127 }; // Yi Syllables + if (glyph <= 42191) return { 42128, 42191 }; // Yi Radicals + if (glyph <= 55203) return { 42192, 55203 }; // Hangul Syllables + if (glyph <= 56191) return { 55204, 56191 }; // High Surrogates + if (glyph <= 56319) return { 56192, 56319 }; // High Private Use Surrogates + if (glyph <= 57343) return { 56320, 57343 }; // Low Surrogates + if (glyph <= 63743) return { 57344, 63743 }; // Private Use + if (glyph <= 64255) return { 63744, 64255 }; // CJK Compatibility Ideographs + if (glyph <= 64335) return { 64256, 64335 }; // Alphabetic Presentation Forms + if (glyph <= 65023) return { 64336, 65023 }; // Arabic Presentation Forms-A + if (glyph <= 65071) return { 65024, 65071 }; // Combining Half Marks + if (glyph <= 65103) return { 65072, 65103 }; // CJK Compatibility Forms + if (glyph <= 65135) return { 65104, 65135 }; // Small Form Variants + if (glyph <= 65278) return { 65136, 65278 }; // Arabic Presentation Forms-B + if (glyph <= 65279) return { 65279, 65279 }; // Specials + if (glyph <= 65519) return { 65280, 65519 }; // Halfwidth and Fullwidth Forms + if (glyph <= 65533) return { 65520, 65533 }; // Specials + return { 0, 0 }; +} + +} diff --git a/src/text/glyph_store.cpp b/src/text/glyph_store.cpp new file mode 100644 index 000000000..fae9d1326 --- /dev/null +++ b/src/text/glyph_store.cpp @@ -0,0 +1,92 @@ +#include + +#include +#include +#include +#include + +namespace llmr { + + +GlyphSet::GlyphSet(const std::string &fontStack, GlyphRange glyphRange) + : future(promise.get_future().share()) +{ + // Load the glyph set URL + std::string url = util::sprintf<255>("http://mapbox.s3.amazonaws.com/gl-glyphs/%s/%d-%d.pbf", fontStack.c_str(), glyphRange.first, glyphRange.second); + + // TODO: Find more reliable URL normalization function + std::replace(url.begin(), url.end(), ' ', '+'); + + platform::request_http(url, [&](platform::Response *res) { + if (res->code != 200) { + // Something went wrong with loading the glyph pbf. Pass on the error to the future listeners. + const std::string msg = util::sprintf<255>("[ERROR] failed to load glyphs (%d): %s\n", res->code, res->error_message.c_str()); + promise.set_exception(std::make_exception_ptr(std::runtime_error(msg))); + } else { + // Transfer the data to the GlyphSet and signal its availability. + // Once it is available, the caller will need to call parse() to actually + // parse the data we received. We are not doing this here since this callback is being + // called from another (unknown) thread. + data.swap(res->body); + promise.set_value(*this); + } + }); +} + +std::shared_future GlyphSet::getFuture() { + return future; +} + +void GlyphSet::parse() { + std::lock_guard lock(mtx); + + if (!data.size()) { + // If there is no data, this means we either haven't received any data, or + // we have already parsed the data. + return; + } + + // TODO: parse the glyphs + + + data.clear(); +} + + +void GlyphStore::waitForGlyphRanges(const std::string &fontStack, const std::set &glyphRanges) { + // We are implementing a blocking wait with futures: Every GlyphSet has a future that we are + // waiting for until it is loaded. + + std::vector> futures; + futures.reserve(glyphRanges.size()); + { + std::lock_guard lock(mtx); + auto &rangeSets = stacks[fontStack]; + + // Attempt to load the glyph range. If the GlyphSet already exists, we are getting back + // the same shared_future. + for (GlyphRange range : glyphRanges) { + futures.emplace_back(loadGlyphRange(fontStack, rangeSets, range)); + } + } + + // Now that we potentially created all GlyphSets, we are waiting for the results, one by one. + // When we get a result (or the GlyphSet is aready loaded), we are attempting to parse the + // GlyphSet. + for (std::shared_future &future : futures) { + future.get().parse(); + } +} + +std::shared_future GlyphStore::loadGlyphRange(const std::string &name, std::map> &rangeSets, const GlyphRange range) { + auto range_it = rangeSets.find(range); + if (range_it == rangeSets.end()) { + // We don't have this glyph set yet for this font stack. + range_it = rangeSets.emplace(range, std::make_unique(name, range)).first; + } + + return range_it->second->getFuture(); +} + + +} From d2b44cd61cd47a335ed1f3e6735390ea50d9d81c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Wed, 28 May 2014 21:17:28 +0200 Subject: [PATCH 21/79] add glyphs proto --- proto/glyphs.proto | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 proto/glyphs.proto diff --git a/proto/glyphs.proto b/proto/glyphs.proto new file mode 100644 index 000000000..606050f7a --- /dev/null +++ b/proto/glyphs.proto @@ -0,0 +1,33 @@ +// Protocol Version 1 + +package llmr.glyphs; + +option optimize_for = LITE_RUNTIME; + +// Stores a glyph with metrics and optional SDF bitmap information. +message glyph { + required uint32 id = 1; + + // A signed distance field of the glyph with a border of 3 pixels. + optional bytes bitmap = 2; + + // Glyph metrics. + required uint32 width = 3; + required uint32 height = 4; + required sint32 left = 5; + required sint32 top = 6; + required uint32 advance = 7; +} + +// Stores fontstack information and a list of faces. +message fontstack { + required string name = 1; + required string range = 2; + repeated glyph glyphs = 3; +} + +message glyphs { + repeated fontstack stacks = 1; + + extensions 16 to 8191; +} From 906b4839c614535b5202631222e7b5e1c35e47da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Wed, 28 May 2014 21:55:14 +0200 Subject: [PATCH 22/79] parse glyph pbf --- include/llmr/text/glyph_store.hpp | 32 +++++++------ src/text/glyph_store.cpp | 75 ++++++++++++++++++++++++++----- 2 files changed, 83 insertions(+), 24 deletions(-) diff --git a/include/llmr/text/glyph_store.hpp b/include/llmr/text/glyph_store.hpp index 1cd2fd539..c2d467e78 100644 --- a/include/llmr/text/glyph_store.hpp +++ b/include/llmr/text/glyph_store.hpp @@ -17,9 +17,6 @@ namespace llmr { class SDFGlyph { public: - SDFGlyph(); - SDFGlyph(pbf data); - // A signed distance field of the glyph with a border of 3 pixels. std::string bitmap; @@ -27,21 +24,27 @@ public: GlyphMetrics metrics; }; - -class GlyphSet { +class FontStack { public: - GlyphSet(const std::string &fontStack, GlyphRange glyphRange); - - void parse(); - - std::shared_future getFuture(); + void insert(uint32_t id, const SDFGlyph &glyph); private: std::map glyphs; + std::mutex mtx; +}; +class GlyphPBF { +public: + GlyphPBF(const std::string &fontStack, GlyphRange glyphRange); + + void parse(FontStack &stack); + + std::shared_future getFuture(); + +private: std::string data; - std::promise promise; - std::shared_future future; + std::promise promise; + std::shared_future future; std::mutex mtx; }; @@ -53,10 +56,11 @@ public: private: // Loads an individual glyph range from the font stack and adds it to rangeSets - std::shared_future loadGlyphRange(const std::string &fontStack, std::map> &rangeSets, GlyphRange range); + std::shared_future loadGlyphRange(const std::string &fontStack, std::map> &rangeSets, GlyphRange range); private: - std::unordered_map>> stacks; + std::unordered_map>> ranges; + std::unordered_map> stacks; std::mutex mtx; }; diff --git a/src/text/glyph_store.cpp b/src/text/glyph_store.cpp index fae9d1326..65fe38bc4 100644 --- a/src/text/glyph_store.cpp +++ b/src/text/glyph_store.cpp @@ -2,13 +2,20 @@ #include #include +#include #include #include namespace llmr { -GlyphSet::GlyphSet(const std::string &fontStack, GlyphRange glyphRange) +void FontStack::insert(uint32_t id, const SDFGlyph &glyph) { + std::lock_guard lock(mtx); + glyphs.emplace(id, glyph); +} + + +GlyphPBF::GlyphPBF(const std::string &fontStack, GlyphRange glyphRange) : future(promise.get_future().share()) { // Load the glyph set URL @@ -33,11 +40,11 @@ GlyphSet::GlyphSet(const std::string &fontStack, GlyphRange glyphRange) }); } -std::shared_future GlyphSet::getFuture() { +std::shared_future GlyphPBF::getFuture() { return future; } -void GlyphSet::parse() { +void GlyphPBF::parse(FontStack &stack) { std::lock_guard lock(mtx); if (!data.size()) { @@ -46,8 +53,48 @@ void GlyphSet::parse() { return; } - // TODO: parse the glyphs + // Parse the glyph PBF + pbf glyphs_pbf(reinterpret_cast(data.data()), data.size()); + while (glyphs_pbf.next()) { + if (glyphs_pbf.tag == 1) { // stacks + pbf fontstack_pbf = glyphs_pbf.message(); + while (fontstack_pbf.next()) { + if (fontstack_pbf.tag == 3) { // glyphs + pbf glyph_pbf = fontstack_pbf.message(); + + SDFGlyph glyph; + uint32_t id = 0; + + while (glyph_pbf.next()) { + if (glyph_pbf.tag == 1) { // id + id = glyph_pbf.varint(); + } else if (glyph_pbf.tag == 2) { // bitmap + glyph.bitmap = glyph_pbf.string(); + } else if (glyph_pbf.tag == 3) { // width + glyph.metrics.width = glyph_pbf.varint(); + } else if (glyph_pbf.tag == 4) { // height + glyph.metrics.height = glyph_pbf.varint(); + } else if (glyph_pbf.tag == 5) { // left + glyph.metrics.left = glyph_pbf.svarint(); + } else if (glyph_pbf.tag == 6) { // top + glyph.metrics.top = glyph_pbf.svarint(); + } else if (glyph_pbf.tag == 7) { // advance + glyph.metrics.advance = glyph_pbf.varint(); + } else { + glyph_pbf.skip(); + } + } + + stack.insert(id, glyph); + } else { + fontstack_pbf.skip(); + } + } + } else { + glyphs_pbf.skip(); + } + } data.clear(); } @@ -57,11 +104,19 @@ void GlyphStore::waitForGlyphRanges(const std::string &fontStack, const std::set // We are implementing a blocking wait with futures: Every GlyphSet has a future that we are // waiting for until it is loaded. - std::vector> futures; + FontStack *stack = nullptr; + + std::vector> futures; futures.reserve(glyphRanges.size()); { std::lock_guard lock(mtx); - auto &rangeSets = stacks[fontStack]; + auto &rangeSets = ranges[fontStack]; + + auto stack_it = stacks.find(fontStack); + if (stack_it == stacks.end()) { + stack_it = stacks.emplace(fontStack, std::make_unique()).first; + } + stack = stack_it->second.get(); // Attempt to load the glyph range. If the GlyphSet already exists, we are getting back // the same shared_future. @@ -73,16 +128,16 @@ void GlyphStore::waitForGlyphRanges(const std::string &fontStack, const std::set // Now that we potentially created all GlyphSets, we are waiting for the results, one by one. // When we get a result (or the GlyphSet is aready loaded), we are attempting to parse the // GlyphSet. - for (std::shared_future &future : futures) { - future.get().parse(); + for (std::shared_future &future : futures) { + future.get().parse(*stack); } } -std::shared_future GlyphStore::loadGlyphRange(const std::string &name, std::map> &rangeSets, const GlyphRange range) { +std::shared_future GlyphStore::loadGlyphRange(const std::string &name, std::map> &rangeSets, const GlyphRange range) { auto range_it = rangeSets.find(range); if (range_it == rangeSets.end()) { // We don't have this glyph set yet for this font stack. - range_it = rangeSets.emplace(range, std::make_unique(name, range)).first; + range_it = rangeSets.emplace(range, std::make_unique(name, range)).first; } return range_it->second->getFuture(); From 193b2aacb78872084564e0f3398fb9cb0ed7983b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Wed, 28 May 2014 22:00:00 +0200 Subject: [PATCH 23/79] add second labelling pass --- src/map/tile_parser.cpp | 66 ++++++++++++++++++++++++++++------------- 1 file changed, 46 insertions(+), 20 deletions(-) diff --git a/src/map/tile_parser.cpp b/src/map/tile_parser.cpp index c610ca139..f44d464f1 100644 --- a/src/map/tile_parser.cpp +++ b/src/map/tile_parser.cpp @@ -173,35 +173,61 @@ std::unique_ptr TileParser::createTextBucket(const VectorTileLayer& laye tile.textVertexBuffer, tile.triangleElementsBuffer, bucket_desc, placement); - std::set ranges; std::wstring_convert, char32_t> ucs4conv; - FilteredVectorTileLayer filtered_layer(layer, bucket_desc); - for (const pbf& feature_pbf : filtered_layer) { - if (obsolete()) return nullptr; - VectorTileFeature feature { feature_pbf, layer }; - auto it_prop = feature.properties.find(bucket_desc.geometry.field); - if (it_prop == feature.properties.end()) { - // feature does not have the correct property - if (debug::labelTextMissingWarning) { - fprintf(stderr, "[WARNING] feature doesn't have property '%s' required for labelling\n", bucket_desc.geometry.field.c_str()); + // Determine and load glyph ranges + { + std::set ranges; + + FilteredVectorTileLayer filtered_layer(layer, bucket_desc); + for (const pbf& feature_pbf : filtered_layer) { + if (obsolete()) return nullptr; + VectorTileFeature feature { feature_pbf, layer }; + + auto it_prop = feature.properties.find(bucket_desc.geometry.field); + if (it_prop == feature.properties.end()) { + // feature does not have the correct property + if (debug::labelTextMissingWarning) { + fprintf(stderr, "[WARNING] feature doesn't have property '%s' required for labelling\n", bucket_desc.geometry.field.c_str()); + } + continue; + } + + const std::u32string string = ucs4conv.from_bytes(toString(it_prop->second)); + + // Loop through all characters of this text and collect unique codepoints. + for (uint32_t chr : string) { + ranges.insert(getGlyphRange(chr)); } - continue; } - const std::u32string string = ucs4conv.from_bytes(toString(it_prop->second)); - - // Loop through all characters of this text and collect unique codepoints. - for (uint32_t chr : string) { - ranges.insert(getGlyphRange(chr)); - } + glyphStore.waitForGlyphRanges(bucket_desc.geometry.font, ranges); } - glyphStore.waitForGlyphRanges(bucket_desc.geometry.font, ranges); + // Shape and place all labels. + { + FilteredVectorTileLayer filtered_layer(layer, bucket_desc); + for (const pbf& feature_pbf : filtered_layer) { + if (obsolete()) return nullptr; + VectorTileFeature feature { feature_pbf, layer }; - // TODO: Now that we have all the glyph ranges, actually perform the shaping and add features to - // the bucket, and add the required glyphs from the glyphStore to the glyphAtlas. + auto it_prop = feature.properties.find(bucket_desc.geometry.field); + if (it_prop == feature.properties.end()) { + // feature does not have the correct property + if (debug::labelTextMissingWarning) { + fprintf(stderr, "[WARNING] feature doesn't have property '%s' required for labelling\n", bucket_desc.geometry.field.c_str()); + } + continue; + } + + const std::u32string string = ucs4conv.from_bytes(toString(it_prop->second)); + + // TODO: Shape label + // TODO: Place label + } + + } return std::move(bucket); } From 6f68cd3676fd61e74e4d10675d960a1b9fed58d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Wed, 28 May 2014 22:12:31 +0200 Subject: [PATCH 24/79] return font stack --- include/llmr/text/glyph_store.hpp | 13 ++++++++++--- src/map/tile_parser.cpp | 2 ++ src/text/glyph_store.cpp | 28 +++++++++++++++++++++------- 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/include/llmr/text/glyph_store.hpp b/include/llmr/text/glyph_store.hpp index c2d467e78..90fa6d908 100644 --- a/include/llmr/text/glyph_store.hpp +++ b/include/llmr/text/glyph_store.hpp @@ -26,11 +26,14 @@ public: class FontStack { public: - void insert(uint32_t id, const SDFGlyph &glyph); + void insert(uint32_t id, const GlyphMetrics &glyphMetrics, const std::string &bitmap); + + const std::map &getMetrics() const; private: - std::map glyphs; - std::mutex mtx; + std::map bitmaps; + std::map metrics; + mutable std::mutex mtx; }; class GlyphPBF { @@ -54,10 +57,14 @@ public: // Block until all specified GlyphRanges of the specified font stack are loaded. void waitForGlyphRanges(const std::string &fontStack, const std::set &glyphRanges); + FontStack &getFontStack(const std::string &fontStack); + private: // Loads an individual glyph range from the font stack and adds it to rangeSets std::shared_future loadGlyphRange(const std::string &fontStack, std::map> &rangeSets, GlyphRange range); + FontStack &createFontStack(const std::string &fontStack); + private: std::unordered_map>> ranges; std::unordered_map> stacks; diff --git a/src/map/tile_parser.cpp b/src/map/tile_parser.cpp index f44d464f1..744f6fe21 100644 --- a/src/map/tile_parser.cpp +++ b/src/map/tile_parser.cpp @@ -205,6 +205,8 @@ std::unique_ptr TileParser::createTextBucket(const VectorTileLayer& laye glyphStore.waitForGlyphRanges(bucket_desc.geometry.font, ranges); } + const FontStack &fontStack = glyphStore.getFontStack(bucket_desc.geometry.font); + // Shape and place all labels. { FilteredVectorTileLayer filtered_layer(layer, bucket_desc); diff --git a/src/text/glyph_store.cpp b/src/text/glyph_store.cpp index 65fe38bc4..a355b28f2 100644 --- a/src/text/glyph_store.cpp +++ b/src/text/glyph_store.cpp @@ -9,11 +9,16 @@ namespace llmr { -void FontStack::insert(uint32_t id, const SDFGlyph &glyph) { +void FontStack::insert(uint32_t id, const GlyphMetrics &glyphMetrics, const std::string &bitmap) { std::lock_guard lock(mtx); - glyphs.emplace(id, glyph); + metrics.emplace(id, glyphMetrics); + bitmaps.emplace(id, bitmap); } +const std::map &FontStack::getMetrics() const { + std::lock_guard lock(mtx); + return metrics; +} GlyphPBF::GlyphPBF(const std::string &fontStack, GlyphRange glyphRange) : future(promise.get_future().share()) @@ -112,11 +117,7 @@ void GlyphStore::waitForGlyphRanges(const std::string &fontStack, const std::set std::lock_guard lock(mtx); auto &rangeSets = ranges[fontStack]; - auto stack_it = stacks.find(fontStack); - if (stack_it == stacks.end()) { - stack_it = stacks.emplace(fontStack, std::make_unique()).first; - } - stack = stack_it->second.get(); + stack = &createFontStack(fontStack); // Attempt to load the glyph range. If the GlyphSet already exists, we are getting back // the same shared_future. @@ -143,5 +144,18 @@ std::shared_future GlyphStore::loadGlyphRange(const std::string &nam return range_it->second->getFuture(); } +FontStack &GlyphStore::createFontStack(const std::string &fontStack) { + auto stack_it = stacks.find(fontStack); + if (stack_it == stacks.end()) { + stack_it = stacks.emplace(fontStack, std::make_unique()).first; + } + return *stack_it->second.get(); +} + +FontStack &GlyphStore::getFontStack(const std::string &fontStack) { + std::lock_guard lock(mtx); + return createFontStack(fontStack); +} + } From 3c00a71a7bf4ca98b748946ac8909e1af6c66bba Mon Sep 17 00:00:00 2001 From: Nicki Dlugash Date: Wed, 28 May 2014 16:18:06 -0400 Subject: [PATCH 25/79] removed city dot styles, updated strokeWidth and strokeBlur properties for place labels, fixed night style admin marine cover color --- bin/style.js | 66 ++++++++++++++-------------------------------------- 1 file changed, 18 insertions(+), 48 deletions(-) diff --git a/bin/style.js b/bin/style.js index bc548ac29..a24a8e9ba 100644 --- a/bin/style.js +++ b/bin/style.js @@ -709,14 +709,6 @@ module.exports = { "type": "text", "enabled": 4 }, - "place_label_city_point": { - "source": "outdoors", - "layer": "place_label", - "field": "type", - "value": "city", - "type": "point", - "size": 4 - }, "place_label_city": { "source": "outdoors", "layer": "place_label", @@ -1279,10 +1271,6 @@ module.exports = { "name": "state_label", "bucket": "state_label" }, - { - "name": "place_label_city_point", - "bucket": "place_label_city_point" - }, { "name": "place_label_city", "bucket": "place_label_city" @@ -2131,6 +2119,7 @@ module.exports = { "country_label": { "color": "country_text", "stroke": "rgba(255,255,255,0.5)", + "strokeWidth": 0.4, "size": [ "stops", {"z": 6, "val": 14}, @@ -2194,9 +2183,6 @@ module.exports = { {"z": 10, "val": 0} ] }, - "place_label_city_point": { - "color": "#4a4032" - }, "place_label_city": { "color": "#444", "strokeWidth": 0.4, @@ -2208,20 +2194,12 @@ module.exports = { {"z": 7, "val": 14}, {"z": 14.99, "val": 20}, {"z": 15, "val": 0} - ], - "translate": [ - 0, - [ - "stops", - {"z": 4, "val": 10}, - {"z": 6, "val": 30}, - {"z": 7, "val": 0} - ] ] }, "place_label_town": { "color": "#716656", - "strokeWidth": 0.5, + "strokeWidth": 0.3, + "strokeBlur": 2, "stroke": "text_stroke", "size": [ "stops", @@ -2233,7 +2211,8 @@ module.exports = { }, "place_label_village": { "color": "#635644", - "strokeWidth": 0.5, + "strokeWidth": 0.3, + "strokeBlur": 2, "stroke": "text_stroke", "size": [ "stops", @@ -2299,7 +2278,7 @@ module.exports = { "color": "land_night" }, "admin_maritime_cover": { - "color": "#0a1347", + "color": "water_night", "width": 5 }, "admin_maritime": { @@ -2839,7 +2818,8 @@ module.exports = { }, "country_label": { "color": "text_night", - "stroke": "text_stroke_night", + "stroke": "text2_stroke_night", + "strokeWidth": 0.4, "size": [ "stops", {"z": 6, "val": 14}, @@ -2903,13 +2883,10 @@ module.exports = { {"z": 10, "val": 0} ] }, - "place_label_city_point": { - "color": "#ddd" - }, "place_label_city": { "color": "#fff", "strokeWidth": 0.4, - "stroke": "text_stroke_night", + "stroke": "text2_stroke_night", "size": [ "stops", {"z": 3.99, "val": 0}, @@ -2917,21 +2894,13 @@ module.exports = { {"z": 7, "val": 14}, {"z": 14.99, "val": 20}, {"z": 15, "val": 0} - ], - "translate": [ - 0, - [ - "stops", - {"z": 4, "val": 10}, - {"z": 6, "val": 30}, - {"z": 7, "val": 0} - ] ] }, "place_label_town": { "color": "text_night", - "strokeWidth": 0.5, - "stroke": "text_stroke_night", + "strokeWidth": 0.3, + "strokeBlur": 2, + "stroke": "text2_stroke_night", "size": [ "stops", {"z": 9, "val": 10}, @@ -2942,8 +2911,9 @@ module.exports = { }, "place_label_village": { "color": "text_night", - "strokeWidth": 0.5, - "stroke": "text_stroke_night", + "strokeWidth": 0.3, + "strokeBlur": 2, + "stroke": "text2_stroke_night", "size": [ "stops", {"z": 9, "val": 8}, @@ -2955,9 +2925,9 @@ module.exports = { }, "place_label_other": { "color": "text_night", - "stroke": "text_stroke_night", - "strokeWidth": 0.5, - "strokeBlur": 3, + "stroke": "text2_stroke_night", + "strokeWidth": 0.3, + "strokeBlur": 2, "size": [ "stops", {"z": 0, "val": 10}, From 83b3b0bb6a2cc557deebf1cd59486c3fe0e1e063 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Wed, 28 May 2014 22:18:18 +0200 Subject: [PATCH 26/79] create a copy --- src/map/tile_parser.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/map/tile_parser.cpp b/src/map/tile_parser.cpp index 744f6fe21..f097913cc 100644 --- a/src/map/tile_parser.cpp +++ b/src/map/tile_parser.cpp @@ -205,7 +205,8 @@ std::unique_ptr TileParser::createTextBucket(const VectorTileLayer& laye glyphStore.waitForGlyphRanges(bucket_desc.geometry.font, ranges); } - const FontStack &fontStack = glyphStore.getFontStack(bucket_desc.geometry.font); + // Create a copy! + const FontStack fontStack = glyphStore.getFontStack(bucket_desc.geometry.font); // Shape and place all labels. { From 7dadaa8d2287dcdde041099239676acb29c32cde Mon Sep 17 00:00:00 2001 From: Nicki Dlugash Date: Wed, 28 May 2014 16:37:50 -0400 Subject: [PATCH 27/79] fixed duplicate size property in country label --- bin/style.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/bin/style.js b/bin/style.js index 5d8bff900..e77c716aa 100644 --- a/bin/style.js +++ b/bin/style.js @@ -2921,11 +2921,6 @@ module.exports = { "color": "text_night", "stroke": "text2_stroke_night", "strokeWidth": 0.4, - "size": [ - "stops", - {"z": 6, "val": 14}, - {"z": 12, "val": 24} - ] "size": "country_label_size" }, "country_label_line": { From 14141914897d76b61591b32afe26de1ee0a04f7f Mon Sep 17 00:00:00 2001 From: Eden Halperin Date: Wed, 28 May 2014 13:50:13 -0700 Subject: [PATCH 28/79] icons --- ios/img/Icon-40.png | Bin 0 -> 951 bytes ios/img/Icon-40@2x.png | Bin 0 -> 1528 bytes ios/img/Icon-60.png | Bin 9366 -> 1313 bytes ios/img/Icon-60@2x.png | Bin 28880 -> 2091 bytes ios/img/Icon-72.png | Bin 12517 -> 1418 bytes ios/img/Icon-72@2x.png | Bin 38964 -> 2442 bytes ios/img/Icon-76.png | Bin 13775 -> 1447 bytes ios/img/Icon-76@2x.png | Bin 42213 -> 2520 bytes ios/img/Icon-Small-50.png | Bin 6960 -> 1118 bytes ios/img/Icon-Small-50@2x.png | Bin 21430 -> 1839 bytes ios/img/Icon-Small.png | Bin 3270 -> 684 bytes ios/img/Icon-Small@2x.png | Bin 8688 -> 1231 bytes ios/img/Icon-Spotlight-40.png | Bin 5052 -> 951 bytes ios/img/Icon-Spotlight-40@2x.png | Bin 14870 -> 1528 bytes ios/img/Icon.png | Bin 8532 -> 1171 bytes ios/img/Icon@2x.png | Bin 26725 -> 1931 bytes ios/img/iTunesArtwork.png | Bin 0 -> 5655 bytes ios/img/iTunesArtwork@2x.png | Bin 0 -> 9293 bytes macosx/Icon.icns | Bin 359231 -> 62095 bytes 19 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 ios/img/Icon-40.png create mode 100644 ios/img/Icon-40@2x.png create mode 100644 ios/img/iTunesArtwork.png create mode 100644 ios/img/iTunesArtwork@2x.png diff --git a/ios/img/Icon-40.png b/ios/img/Icon-40.png new file mode 100644 index 0000000000000000000000000000000000000000..eca13393e6654246a4a788dc36776b547da1d5d9 GIT binary patch literal 951 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 Q?EnA(07*qoM6N<$g8W8zP5=M^ diff --git a/ios/img/Icon-60@2x.png b/ios/img/Icon-60@2x.png index 84550f36e4a23d3885a66963b8a64b695e3178f5..b7f25955f54048a8f9d7653282ba871154c5eaa6 100644 GIT binary patch literal 2091 zcmb7GYdjMS7oRq_45QZE>B6*SZhMf+)3CASmTfP}a=%yNnYqSXa@*t@lB7l=5h0K3 zlv^S!o-QKIBP~N^iT1d>e1AVY?}u~FhyOX}_dn-%e!u_8JmY99ywi|NnjW!5$2R1GVc&L=VV5Lzr{q1F zH9LdsqB%w1SUOys`!nW~tN#{|7z`)w1LY0nfnChA<+ou+BoqoOd(6}F^I;AcyYF3Y z$%#o&DXU}J${C6H?7xeF01%eZcDzmV9;k=st{{?i1%LLi{39)IPI9%{@PvRghJr$= zY<_#)h9k0@*1Gm6Wb0f@<4jRg2?mni)t(6$a6x8+EYJmU(MGN4LLL8J{4~91Qk323 z@@qK#J<0oy{MLK;iJOU4bDv6<1hVlX^U*_{#2R)aRnW3CT|f8$B1SkrCE`p%NG7a2 zeO0V>qO3&M4_JW_HpsCXJxUxaGc2+$@N!4;Pb!!Y4?rMgH<7n)BF#IQIw4uqvlGd_LXCGQAiq_fd!EWpSR^^AmlcjMo+j#PAJ;IQmi_Aam)oc*QS@pq-T>Cb)h%~J z`SxlX5?aw8@@#yiN$ZQw8mAko*;>ZFDY=zTKh zY@tup;1x~`uDNk@1Kwbzl6^czY(44oNg;8~WN_w_sny}~y*)kOZv7U_EeZl8gd_NnR#sz3(tPCtF=ja@2y6Y3U z6e6Z_P#OavEWlv_-9beR5$6`2Q>}V}X(HidQPO$J!E26)1i?IufIuu@_F9-xb)(c( zpmn70H!KlpSa+RYP*=kSW(BLUfMIR|l?+1Ad=Rl;IJkfb!Z&i5YjdQL2~^a%Ze|FR zb!GO_fhe3W9TB=#$r@MO2)}RGV0V+{pk+-%B=F~bYT(eAK5+A6zt_cRoUHrezMnrB zo^g9qud`mq--!|XV@fq9grzB{>u@OW^teCA9G1#~-H$-5@PX0>XWTzjw<;4giJKyL z+veM8r|7i!iVq9kZ)lhI64L!OfL`cI;n0f^MuqKZmLiB!Yc%G0euA`?k~3S%_$%^? z6GHI&nW%Yom&f*nwjyJ9BNg%BY!21=Tj~0Xo#{{z*7^-Qium1-DR8bn$o45p+7H2g z3b?X8)AB_RU%8Z$R~2MANnT99Ob2)cp;jt=4##@Oa7*sZ1^0sev_1wRYx!%DMtDP+ z!N;T_$dGxd2FUcdecSY9{2JcjeWbq=zx z#`pvyPqwcu%BA%^QC0>x&eUqd*rz@V6TumwB5X_yf`U}!rOOx(N*PBd3X){FMLdg|=(tJpba9fRt3d=ZD zNcAf)jz9&z#Pi6Tg4j<^7YYxMIQ`0~(Nq~PA1v_9NUGij$4q_RS`LCiJq#^1Ag~ml z?~mQ_U@E4LXU-@s*yjfUz#e+!{|lqg*ew76 literal 28880 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 QvH$=807*qoM6N<$g8HAWEdT%j literal 12517 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 diff --git a/ios/img/Icon-72@2x.png b/ios/img/Icon-72@2x.png index b4fb12ba7b0fadd5589afc5f3158fbb8434f61ed..6da408204abd4e85961295030967ff2834ec3859 100644 GIT binary patch literal 2442 zcmbVOdpHyP7oSuX>*AfFHDU9*gi%tGT(aDWkf@C%i>**|mn?T8@+QMvOUR|>lH5|0 z@%A#qnufXjv}w5v$zm?=-rxVfKYs5Y=bYy}=lgx0^E~H#KIfC-D2%?PQ{BiVO4+bi}p6T@_)z8OJPzYGuBJelJ#g#C%Sf zHgul**?|(!qfGY&hGj877E;=$*K`Dg23ld0h%MyJPKf%n3)+JA96eJ}aFnQi7){b^ z)5C;gsEgG2sf0b9GT=mcHIS~o!oMx-VCv6zY0>AX-0&{U0obSmew(OJ7MK~ zlFLCWg}i1-5Mm}Sr#rD|L2#ctF?@s-(5in^+*y_Seq+%`0HD)e8Rj%MfP-Z#7vD-r zqebG*V3lud@x0giy$Y@Vcot{6K`mt5&D7`-9Pp6m0p${UO%?dt10UK6KlOOFjV7sn zDkr@ZzpZ_yn0HpY@lX<(Fc49#E=^xOQAwBUUc*^$#pkxlZBE%`Xu-~}mR|-Rrvkkf z7w#?2Ql_#Q0e3K<ZdQcs~8U`~BsCero_KKbvq8~ojo1Uu2&Ewb%T-`9KEKJ(sP zzfxQH2Fq!!RV2FA7V}jFvecj4b9j$-ge&~Xx0@lM_H^~?it`WV0IA!1Kn@)U5Ns5x`2)~48B_GfP0nB!i z&m1Sa$Ps3oWIv}xi|6RBtcyolAAA8sM3W(kq*sAtlamAI_3?90Nd~az(s82@Y+F!p z&<%I@+s{VCP2e_1rxAGT#$5x{YxB=?O;|P2NRMgjK=aEeAD!3)74&-XWt2rQD>+lA zmvVpI$r)vFmzCU8`Wkt#ykhkZE?6)!l2nB^uCHvN(O22$QnjV+jP@*)XBaf@cOMSt z{=$BTu*nbEzwu0%+m)_IY+6oS<-^1IUl_}hjTuD0cL9YRMFv@#zn))m2)<`@!;Unx zLhoyC3Z%;(=uo8On(SMNiT28{Q*uU42UDx3Xo~~w+@@NNx#wov(w|TDtQ-e^eGKND zP;vHBlbs4vUu|8P`VPsbL#CB3*2M2-w`Tb|U(s~R(b5V;<-0wZlw80m`9znwJd2XI zsE6h`%$2;&{;_#ATNvo}Y3)fQ0Q~p@CefMBAAU9Vj?(sh#|3*iSxMcaickbkqG8qP zx3PHh;xYy~pM>zsZtP-+UwiLNJp{qtyFRijmDFKH^cACJ$m*zwU*fm__XU5QdRW_i z?&{a;jTLT(LdsZc`Eou3UJQXlABxQWk^W(vbZ*?NUbxacAR)v1Qqv01wg5XISmWe2 z7dn5fg-u-?wN|^S03bdvtE>mR82Et8_759CRRg4b0XIzxJ&)5o`qkJ6v4=UHsKQrU zz9&4^gH(-1eA8p>`(lEsF41=_E!-GAT&D#hVh}Sw*Q!#6q_UWr*H~Bf%{TwW?t{qY z9-`G0JSKpLm>VBfr|W2VcdVK`F89Bc-S72;+_)w8}53&a3G1Oaxa z``NF1C^*5bb2}Y`ab8!Lc(*d}65o5OJ`v<~KE5Q|WV|4+)zF0J`9#rjq_g6iN4h^g9ZLFGEvsUq@aD28sNp*#cih553PXK^7WsWP z2zXe5uf9OiLpEmQ=T}A>HzdK1;gLPyM67tF=ivj|f8-g!kka*O3uaA&R%4^-thth& zeDr~1pg)JYH>>YNwAfYsx-I2l@$xlxJ((k1@@8rHe|}U>EsJx-1o7cBI3<}#&WcJ? zE#=S$YEZ{2Wr}X6k9SRU4PUWS2U^q%;ylml z4rqhD#CZ}>O#E@$gqutQ)}RV?a?r}LsKY4A$KMScVkri00X*%2nRD6EM_z@yi-E6D zx!Gv(uNj~Peug`rPf!|1ktR=m6$qVd&XSQMUG(X z;V!f2OO>9*>cjqT7!l$@!^@L_1;PB(Z)O<3=ny-rLFba`ZHfQ;1gAX-CF^wR1%Bz{ z@9XKo9*2J*x!|p=EfgfX%=}CDipn?=sK^{;Q6~>*3A|{QD{?;=tq~8LluSJ$I j7b)m}EiV42PT7!;*ch#Dg2zmXH5S0;f+Mo_ym##1a<;oi literal 38964 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 diff --git a/ios/img/Icon-76.png b/ios/img/Icon-76.png index debb8c453efa1c3dfc6437e95e4cfb9bc9815672..895b4a17615bebe7b7135ec7d01732bbe55ff32c 100644 GIT binary patch delta 1440 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 FV1fY_3X1>$ diff --git a/ios/img/Icon-76@2x.png b/ios/img/Icon-76@2x.png index 1dce0cbd50fb80863d0c0fc56f1ea2b7c50150ae..7bc52089764e5dba49adafa60532a75179bc8ce9 100644 GIT binary patch literal 2520 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 literal 42213 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

MTApICy=-8q9;L;d3;yjE?= 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 FV1grmQQZIl literal 3270 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 Eg1Ff`;Q#;t diff --git a/ios/img/Icon-Small@2x.png b/ios/img/Icon-Small@2x.png index 99058cebdbb68f652086a00c83834a8f95995e0b..7773852e7a061d0f4470ba74edc510959919c78d 100644 GIT binary patch delta 1222 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 literal 14870 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 E153MYU;qFB literal 0 HcmV?d00001 diff --git a/macosx/Icon.icns b/macosx/Icon.icns index ab5ae136ff0c6a999f06804bdfd42468692af3c3..c4535a2e5192f38c2b5f15764ff13d5be5b6bb50 100644 GIT binary patch literal 62095 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 z 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 iAuQ6vf}%}BATck0D;L41-5ME9spL6b=3Y8 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 J01QJ4002tN1EBx_ From 984c1dd8d530140ddb3705147e912c08edf21714 Mon Sep 17 00:00:00 2001 From: Eden Halperin Date: Wed, 28 May 2014 14:15:15 -0700 Subject: [PATCH 29/79] use 1024 hillshade blur sizes for now --- bin/style.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/bin/style.js b/bin/style.js index 566dbdde0..8af9236ea 100644 --- a/bin/style.js +++ b/bin/style.js @@ -1801,7 +1801,7 @@ module.exports = { "color": "#103", "antialias": false, "prerender": true, - "prerender-size": 512, + "prerender-size": 1024, "prerender-blur": 1, "opacity": [ "stops", @@ -1814,7 +1814,7 @@ module.exports = { "color": "#206", "antialias": false, "prerender": true, - "prerender-size": 512, + "prerender-size": 1024, "prerender-blur": 1, "opacity": [ "stops", @@ -1827,7 +1827,7 @@ module.exports = { "color": "#fffff3", "antialias": false, "prerender": true, - "prerender-size": 512, + "prerender-size": 1024, "prerender-blur": 1, "opacity": [ "stops", @@ -1840,7 +1840,7 @@ module.exports = { "color": "#ffd", "antialias": false, "prerender": true, - "prerender-size": 512, + "prerender-size": 1024, "prerender-blur": 1, "opacity": [ "stops", @@ -2551,7 +2551,7 @@ module.exports = { "color": "#103", "antialias": false, "prerender": true, - "prerender-size": 512, + "prerender-size": 1024, "prerender-blur": 1, "opacity": [ "stops", @@ -2564,7 +2564,7 @@ module.exports = { "color": "#206", "antialias": false, "prerender": true, - "prerender-size": 512, + "prerender-size": 1024, "prerender-blur": 1, "opacity": [ "stops", @@ -2577,7 +2577,7 @@ module.exports = { "color": "#fdfdad", "antialias": false, "prerender": true, - "prerender-size": 512, + "prerender-size": 1024, "prerender-blur": 1, "opacity": [ "stops", @@ -2591,7 +2591,7 @@ module.exports = { "color": "#ffe1b7", "antialias": false, "prerender": true, - "prerender-size": 512, + "prerender-size": 1024, "prerender-blur": 1, "opacity": [ "stops", From a66db39a06023f5848af3725bc7c007790eeae1d Mon Sep 17 00:00:00 2001 From: Young Hahn Date: Wed, 28 May 2014 18:45:47 -0400 Subject: [PATCH 30/79] Monkey patching to get linux compile working. --- src/map/tile_parser.cpp | 11 +++-------- src/text/glyph_store.cpp | 4 ++-- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/map/tile_parser.cpp b/src/map/tile_parser.cpp index f097913cc..673600ecc 100644 --- a/src/map/tile_parser.cpp +++ b/src/map/tile_parser.cpp @@ -13,8 +13,6 @@ #include -#include - using namespace llmr; @@ -173,9 +171,6 @@ std::unique_ptr TileParser::createTextBucket(const VectorTileLayer& laye tile.textVertexBuffer, tile.triangleElementsBuffer, bucket_desc, placement); - std::wstring_convert, char32_t> ucs4conv; - - // Determine and load glyph ranges { std::set ranges; @@ -194,7 +189,7 @@ std::unique_ptr TileParser::createTextBucket(const VectorTileLayer& laye continue; } - const std::u32string string = ucs4conv.from_bytes(toString(it_prop->second)); + const std::string string = toString(it_prop->second); // Loop through all characters of this text and collect unique codepoints. for (uint32_t chr : string) { @@ -206,7 +201,7 @@ std::unique_ptr TileParser::createTextBucket(const VectorTileLayer& laye } // Create a copy! - const FontStack fontStack = glyphStore.getFontStack(bucket_desc.geometry.font); + const FontStack &fontStack = glyphStore.getFontStack(bucket_desc.geometry.font); // Shape and place all labels. { @@ -224,7 +219,7 @@ std::unique_ptr TileParser::createTextBucket(const VectorTileLayer& laye continue; } - const std::u32string string = ucs4conv.from_bytes(toString(it_prop->second)); + const std::string string = toString(it_prop->second); // TODO: Shape label // TODO: Place label diff --git a/src/text/glyph_store.cpp b/src/text/glyph_store.cpp index a355b28f2..bafd6ce82 100644 --- a/src/text/glyph_store.cpp +++ b/src/text/glyph_store.cpp @@ -27,7 +27,7 @@ GlyphPBF::GlyphPBF(const std::string &fontStack, GlyphRange glyphRange) std::string url = util::sprintf<255>("http://mapbox.s3.amazonaws.com/gl-glyphs/%s/%d-%d.pbf", fontStack.c_str(), glyphRange.first, glyphRange.second); // TODO: Find more reliable URL normalization function - std::replace(url.begin(), url.end(), ' ', '+'); + // std::replace(url.begin(), url.end(), ' ', '+'); platform::request_http(url, [&](platform::Response *res) { if (res->code != 200) { @@ -91,7 +91,7 @@ void GlyphPBF::parse(FontStack &stack) { } } - stack.insert(id, glyph); + stack.insert(id, glyph.metrics, glyph.bitmap); } else { fontstack_pbf.skip(); } From 944167296a8921c6184cfbcba05f473bfa60c82e Mon Sep 17 00:00:00 2001 From: Young Hahn Date: Wed, 28 May 2014 18:53:54 -0400 Subject: [PATCH 31/79] replace comes from regex --- src/text/glyph_store.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/text/glyph_store.cpp b/src/text/glyph_store.cpp index bafd6ce82..e2ebb97bd 100644 --- a/src/text/glyph_store.cpp +++ b/src/text/glyph_store.cpp @@ -5,6 +5,7 @@ #include #include #include +#include namespace llmr { @@ -27,7 +28,7 @@ GlyphPBF::GlyphPBF(const std::string &fontStack, GlyphRange glyphRange) std::string url = util::sprintf<255>("http://mapbox.s3.amazonaws.com/gl-glyphs/%s/%d-%d.pbf", fontStack.c_str(), glyphRange.first, glyphRange.second); // TODO: Find more reliable URL normalization function - // std::replace(url.begin(), url.end(), ' ', '+'); + std::replace(url.begin(), url.end(), ' ', '+'); platform::request_http(url, [&](platform::Response *res) { if (res->code != 200) { From e2a55e440c83af17598622b88b863b196b36388e Mon Sep 17 00:00:00 2001 From: Nicki Dlugash Date: Wed, 28 May 2014 19:28:22 -0400 Subject: [PATCH 32/79] divided road labels into 3 buckets. Made road labels and neighborhood/suburb/hamlet labels larger - same size as in original carto version. --- bin/style.js | 119 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 99 insertions(+), 20 deletions(-) diff --git a/bin/style.js b/bin/style.js index e77c716aa..bd0db18a0 100644 --- a/bin/style.js +++ b/bin/style.js @@ -753,17 +753,45 @@ module.exports = { ], "text_field": "name", "path": "horizontal", - "fontSize": 14, + "fontSize": 18, "feature_type": "point", "type": "text" }, - "road_label": { + "road_label_1": { "source": "outdoors", "layer": "road_label", + "field": "class", + "value": ["motorway","main"], "text_field": "name", "path": "curve", "padding": 2, - "fontSize": 13, + "fontSize": 18, + "feature_type": "line", + "type": "text", + "maxAngleDelta": 0.5 + }, + "road_label_2": { + "source": "outdoors", + "layer": "road_label", + "field": "class", + "value": ["street","street_limited"], + "text_field": "name", + "path": "curve", + "padding": 2, + "fontSize": 16, + "feature_type": "line", + "type": "text", + "maxAngleDelta": 0.5 + }, + "road_label_3": { + "source": "outdoors", + "layer": "road_label", + "field": "class", + "value": ["service","driveway","path"], + "text_field": "name", + "path": "curve", + "padding": 2, + "fontSize": 14, "feature_type": "line", "type": "text", "maxAngleDelta": 0.5 @@ -1329,8 +1357,16 @@ module.exports = { "bucket": "place_label_other" }, { - "name": "road_label", - "bucket": "road_label" + "name": "road_label_1", + "bucket": "road_label_1" + }, + { + "name": "road_label_2", + "bucket": "road_label_2" + }, + { + "name": "road_label_3", + "bucket": "road_label_3" }, { "name": "contour_label", @@ -1602,12 +1638,27 @@ module.exports = { {"z": 8, "val": 1}, {"z": 12, "val": 2} ], - "road_label_size": [ + "road_label_1_size": [ "stops", - {"z": 0, "val": 12}, + {"z": 0, "val": 11}, {"z": 14, "val": 12}, {"z": 15, "val": 13}, - {"z": 22, "val": 13} + {"z": 16, "val": 14}, + {"z": 17, "val": 16}, + {"z": 18, "val": 18} + ], + "road_label_2_size": [ + "stops", + {"z": 0, "val": 11}, + {"z": 14, "val": 12}, + {"z": 16, "val": 14}, + {"z": 18, "val": 16} + ], + "road_label_3_size": [ + "stops", + {"z": 0, "val": 10}, + {"z": 16, "val": 12}, + {"z": 18, "val": 14} ], "fence_width": [ "stops", @@ -2287,18 +2338,32 @@ module.exports = { "stroke": "text_stroke", "size": [ "stops", - {"z": 0, "val": 10}, - {"z": 14, "val": 11}, - {"z": 15, "val": 12}, - {"z": 16, "val": 14} + {"z": 0, "val": 11}, + {"z": 14, "val": 12}, + {"z": 16, "val": 14}, + {"z": 18, "val": 18} ] }, - "road_label": { + "road_label_1": { "color": "#585042", "stroke": "land", "strokeWidth": 0.6, "strokeBlur": 2, - "size": "road_label_size" + "size": "road_label_1_size" + }, + "road_label_2": { + "color": "#585042", + "stroke": "land", + "strokeWidth": 0.6, + "strokeBlur": 2, + "size": "road_label_2_size" + }, + "road_label_3": { + "color": "#585042", + "stroke": "land", + "strokeWidth": 0.6, + "strokeBlur": 2, + "size": "road_label_3_size" }, "water_label": { "color": "water_dark", @@ -3027,18 +3092,32 @@ module.exports = { "strokeBlur": 2, "size": [ "stops", - {"z": 0, "val": 10}, - {"z": 14, "val": 11}, - {"z": 15, "val": 12}, - {"z": 16, "val": 14} + {"z": 0, "val": 11}, + {"z": 14, "val": 12}, + {"z": 16, "val": 14}, + {"z": 18, "val": 18} ] }, - "road_label": { + "road_label_1": { "color": "text_night", "stroke": "text2_stroke_night", "strokeWidth": 0.5, "strokeBlur": 3, - "size": "road_label_size" + "size": "road_label_1_size" + }, + "road_label_2": { + "color": "text_night", + "stroke": "text2_stroke_night", + "strokeWidth": 0.5, + "strokeBlur": 3, + "size": "road_label_2_size" + }, + "road_label_3": { + "color": "text_night", + "stroke": "text2_stroke_night", + "strokeWidth": 0.5, + "strokeBlur": 3, + "size": "road_label_3_size" }, "water_label": { "color": "water_dark_night", From 9698ac02cf277bcf7fe98718f210578f44eae626 Mon Sep 17 00:00:00 2001 From: Nicki Dlugash Date: Wed, 28 May 2014 20:03:49 -0400 Subject: [PATCH 33/79] fixed all stop functions, and updated waterway and water label colors --- bin/style.js | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/bin/style.js b/bin/style.js index bd0db18a0..8f6cf7626 100644 --- a/bin/style.js +++ b/bin/style.js @@ -1640,7 +1640,7 @@ module.exports = { ], "road_label_1_size": [ "stops", - {"z": 0, "val": 11}, + {"z": 13, "val": 11}, {"z": 14, "val": 12}, {"z": 15, "val": 13}, {"z": 16, "val": 14}, @@ -1649,14 +1649,14 @@ module.exports = { ], "road_label_2_size": [ "stops", - {"z": 0, "val": 11}, + {"z": 13, "val": 11}, {"z": 14, "val": 12}, {"z": 16, "val": 14}, {"z": 18, "val": 16} ], "road_label_3_size": [ "stops", - {"z": 0, "val": 10}, + {"z": 15, "val": 10}, {"z": 16, "val": 12}, {"z": 18, "val": 14} ], @@ -2248,7 +2248,6 @@ module.exports = { "marine_label_point_1": { "color": "#a9c4c7", "size": ["stops", - {"z": 0, "val": 20}, {"z": 3, "val": 20}, {"z": 4, "val": 25}, {"z": 5, "val": 30}, @@ -2259,7 +2258,6 @@ module.exports = { "marine_label_point_2": { "color": "#a9c4c7", "size": ["stops", - {"z": 0, "val": 13}, {"z": 3, "val": 13}, {"z": 4, "val": 14}, {"z": 5, "val": 20}, @@ -2271,7 +2269,6 @@ module.exports = { "marine_label_point_other": { "color": "#a9c4c7", "size": ["stops", - {"z": 0, "val": 12}, {"z": 3, "val": 12}, {"z": 4, "val": 13}, {"z": 5, "val": 15}, @@ -2338,7 +2335,7 @@ module.exports = { "stroke": "text_stroke", "size": [ "stops", - {"z": 0, "val": 11}, + {"z": 13, "val": 11}, {"z": 14, "val": 12}, {"z": 16, "val": 14}, {"z": 18, "val": 18} @@ -2599,7 +2596,7 @@ module.exports = { "prerender-blur": 1, "opacity": [ "stops", - {"z": 0, "val": 0.3}, + {"z": 16, "val": 0.3}, {"z": 17, "val": 0.2}, {"z": 18, "val": 0.1} ] @@ -2612,7 +2609,7 @@ module.exports = { "prerender-blur": 1, "opacity": [ "stops", - {"z": 0, "val": 0.3}, + {"z": 16, "val": 0.3}, {"z": 17, "val": 0.2}, {"z": 18, "val": 0.1} ] @@ -3000,7 +2997,6 @@ module.exports = { "marine_label_point_1": { "color": "water_dark_night", "size": ["stops", - {"z": 0, "val": 20}, {"z": 3, "val": 20}, {"z": 4, "val": 25}, {"z": 5, "val": 30}, @@ -3011,7 +3007,6 @@ module.exports = { "marine_label_point_2": { "color": "water_dark_night", "size": ["stops", - {"z": 0, "val": 13}, {"z": 3, "val": 13}, {"z": 4, "val": 14}, {"z": 5, "val": 20}, @@ -3023,7 +3018,6 @@ module.exports = { "marine_label_point_other": { "color": "#a9c4c7", "size": ["stops", - {"z": 0, "val": 12}, {"z": 3, "val": 12}, {"z": 4, "val": 13}, {"z": 5, "val": 15}, @@ -3092,7 +3086,7 @@ module.exports = { "strokeBlur": 2, "size": [ "stops", - {"z": 0, "val": 11}, + {"z": 13, "val": 11}, {"z": 14, "val": 12}, {"z": 16, "val": 14}, {"z": 18, "val": 18} @@ -3121,12 +3115,13 @@ module.exports = { }, "water_label": { "color": "water_dark_night", - "stroke": "text_stroke_night" + "strokeWidth": 0.8, + "stroke": "text2_stroke_night" }, "waterway_label": { - "color": "land_night", + "color": "water_dark_night", "strokeWidth": 0.8, - "stroke": "water_night" + "stroke": "text2_stroke_night" }, "poi": { "color": "white", From bbae29206be53a38e2ca04e1e47fba0ea9a5b19a Mon Sep 17 00:00:00 2001 From: Eden Halperin Date: Wed, 28 May 2014 17:44:29 -0700 Subject: [PATCH 34/79] countour lines, then buildings, then hillshades --- bin/style.js | 57 ++++++++++++++++++++++++++-------------------------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/bin/style.js b/bin/style.js index cf59cc5f3..35f40beac 100644 --- a/bin/style.js +++ b/bin/style.js @@ -984,6 +984,30 @@ module.exports = { "name": "waterway_stream", "bucket": "waterway_stream" }, + { + "name": "contour_line_loud", + "bucket": "contour_line_10" + }, + { + "name": "contour_line_loud", + "bucket": "contour_line_5" + }, + { + "name": "contour_line_regular", + "bucket": "contour_line_other" + }, + { + "name": "building_shadow", + "bucket": "building" + }, + { + "name": "building", + "bucket": "building" + }, + { + "name": "building_wall", + "bucket": "building" + }, { "name": "hillshade_full_highlight", "bucket": "hillshade_full_highlight" @@ -1000,18 +1024,6 @@ module.exports = { "name": "hillshade_full_shadow", "bucket": "hillshade_full_shadow" }, - { - "name": "contour_line_loud", - "bucket": "contour_line_10" - }, - { - "name": "contour_line_loud", - "bucket": "contour_line_5" - }, - { - "name": "contour_line_regular", - "bucket": "contour_line_other" - }, { "name": "barrier_line_gate", "bucket": "barrier_line_gate" @@ -1052,18 +1064,6 @@ module.exports = { "name": "aeroway_taxiway", "bucket": "aeroway_taxiway" }, - { - "name": "building_shadow", - "bucket": "building" - }, - { - "name": "building", - "bucket": "building" - }, - { - "name": "building_wall", - "bucket": "building" - }, { "name": "tunnel_motorway_link_casing", "bucket": "tunnel_motorway_link" @@ -1380,10 +1380,6 @@ module.exports = { "name": "waterway_label", "bucket": "waterway_label" }, - { - "name": "poi_aerodrome", - "bucket": "poi_aerodrome" - }, { "name": "poi", "bucket": "poi" @@ -1408,7 +1404,10 @@ module.exports = { "name": "poi_label_4", "bucket": "poi_label_4" }, - + { + "name": "poi_aerodrome", + "bucket": "poi_aerodrome" + } ], "constants": { "land": "rgb(244,239,225)", From c91daf244db43c455c7ce302c54897aa5480d9f3 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 28 May 2014 17:51:31 -0700 Subject: [PATCH 35/79] [install]: be more friendly and recommend all build deps on linux --- setup-libraries.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/setup-libraries.sh b/setup-libraries.sh index d43461111..d0d41c879 100755 --- a/setup-libraries.sh +++ b/setup-libraries.sh @@ -27,10 +27,12 @@ fi if [[ $MISSING_DEPS != "" ]]; then if [ ${UNAME} = 'Darwin' ]; then echo "Missing build deps: ${MISSING_DEPS}" - echo 'Please run "brew install autoconf automake libtool makedepend cmake pkg-config" and then re-run ./setup-libraries.sh' + echo 'Please run "brew install autoconf automake libtool makedepend cmake pkg-config"' + echo 'and then re-run ./setup-libraries.sh' elif [ ${UNAME} = 'Linux' ]; then echo "Missing build deps: ${MISSING_DEPS}" - echo 'Please run "sudo apt-get install automake libtool xutils-dev cmake pkg-config" and then re-run ./setup-libraries.sh' + echo 'Please run "sudo apt-get install automake libtool xutils-dev cmake pkg-config libxi-dev libglu1-mesa-dev x11proto-randr-dev x11proto-xext-dev libxrandr-dev x11proto-xf86vidmode-dev libxxf86vm-dev libxcursor-dev"' + echo 'and then re-run ./setup-libraries.sh' fi exit 1 fi @@ -86,8 +88,8 @@ cd ../../ elif [ ${UNAME} = 'Linux' ]; then source Linux.sh - if [ ! -f out/build-cpp11-libstdcpp-gcc-x86_64/lib/libpng.a ] ; then ./scripts/build_png.sh ; fi if [ ! -f out/build-cpp11-libstdcpp-gcc-x86_64/lib/libglfw3.a ] ; then ./scripts/build_glfw.sh ; fi + if [ ! -f out/build-cpp11-libstdcpp-gcc-x86_64/lib/libpng.a ] ; then ./scripts/build_png.sh ; fi if [ ! -f out/build-cpp11-libstdcpp-gcc-x86_64/lib/libuv.a ] ; then ./scripts/build_libuv.sh ; fi if [ ! -f out/build-cpp11-libstdcpp-gcc-x86_64/lib/libssl.a ] ; then ./scripts/build_openssl.sh ; fi if [ ! -f out/build-cpp11-libstdcpp-gcc-x86_64/lib/libcurl.a ] ; then ./scripts/build_curl.sh ; fi From 3e26b899bda5f2b7b977f91ee967c871e8073da8 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 28 May 2014 18:15:44 -0700 Subject: [PATCH 36/79] catch missing node install at setup-libraries.sh --- setup-libraries.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/setup-libraries.sh b/setup-libraries.sh index d0d41c879..8d714b098 100755 --- a/setup-libraries.sh +++ b/setup-libraries.sh @@ -16,6 +16,7 @@ ensure_dep cmake ensure_dep automake ensure_dep autoconf ensure_dep pkg-config +ensure_dep node if [ ${UNAME} = 'Darwin' ]; then ensure_dep makedepend ensure_dep glibtool @@ -27,11 +28,11 @@ fi if [[ $MISSING_DEPS != "" ]]; then if [ ${UNAME} = 'Darwin' ]; then echo "Missing build deps: ${MISSING_DEPS}" - echo 'Please run "brew install autoconf automake libtool makedepend cmake pkg-config"' + echo 'Please run "brew install autoconf automake libtool makedepend cmake pkg-config node"' echo 'and then re-run ./setup-libraries.sh' elif [ ${UNAME} = 'Linux' ]; then echo "Missing build deps: ${MISSING_DEPS}" - echo 'Please run "sudo apt-get install automake libtool xutils-dev cmake pkg-config libxi-dev libglu1-mesa-dev x11proto-randr-dev x11proto-xext-dev libxrandr-dev x11proto-xf86vidmode-dev libxxf86vm-dev libxcursor-dev"' + echo 'Please run "sudo apt-get install automake libtool xutils-dev cmake pkg-config libxi-dev libglu1-mesa-dev x11proto-randr-dev x11proto-xext-dev libxrandr-dev x11proto-xf86vidmode-dev libxxf86vm-dev libxcursor-dev nodejs-legacy"' echo 'and then re-run ./setup-libraries.sh' fi exit 1 From efc6b96d93327d7f8afc76977e7d2fc71bd78e91 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 28 May 2014 18:47:18 -0700 Subject: [PATCH 37/79] [makefile]: consistenly support BUILDTYPE config --- Makefile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index f1baf3e40..1f02ab8d4 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ all: llmr # Builds the regular library llmr: config.gypi llmr.gyp node deps/run_gyp llmr.gyp --depth=. -Goutput_dir=.. --generator-output=./build/llmr -f make - make -C build/llmr V=$(V) llmr-x86 + make -C build/llmr BUILDTYPE=$(BUILDTYPE) V=$(V) llmr-x86 node: @if [ ! `which node` ]; then echo 'error: depends on node.js. please make sure node is on your PATH'; exit 1; fi; @@ -34,8 +34,8 @@ test/%: # Only runs headless test case run-headless-test: build/test/Makefile - make -C build/test BUILDTYPE=Debug V=$(V) headless - build/Debug/test_headless + make -C build/test BUILDTYPE=$(BUILDTYPE) V=$(V) headless + build/$(BUILDTYPE)/test_headless ##### Makefile builds ########################################################## @@ -44,7 +44,7 @@ run-headless-test: build/test/Makefile # Builds the linux app with make. This is also used by Travis CI linux: config.gypi linux/llmr-app.gyp node deps/run_gyp linux/llmr-app.gyp --depth=. -Goutput_dir=.. --generator-output=./build/linux -f make - make -C build/linux V=$(V) linuxapp + make -C build/linux BUILDTYPE=$(BUILDTYPE) V=$(V) linuxapp # Executes the Linux binary run-linux: linux @@ -55,7 +55,7 @@ run-linux: linux # Builds the OS X app with make. osx: config.gypi macosx/llmr-app.gyp node deps/run_gyp macosx/llmr-app.gyp --depth=. -Goutput_dir=.. --generator-output=./build/macosx -f make - make -C build/macosx V=$(V) osxapp + make -C build/macosx BUILDTYPE=$(BUILDTYPE) V=$(V) osxapp # Executes the OS X binary run-osx: osx From 1da72cb77932b3f4e2a5b169d3e0d9c971571d4c Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 28 May 2014 18:47:48 -0700 Subject: [PATCH 38/79] [travis] test both Release and Debug builds --- .travis.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9dde1b9bb..1d5d1acfc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,11 @@ compiler: - gcc - clang +env: + matrix: + - BUILDTYPE=Release + - BUILDTYPE=Debug + cache: - apt - directories: @@ -23,9 +28,9 @@ before_script: - if [ ${CXX} = "g++" ]; then export CXX="g++-4.8" ; fi script: -- make llmr -- make linux -- make run-tests +- make llmr BUILDTYPE=${BUILDTYPE} +- make linux BUILDTYPE=${BUILDTYPE} +- make run-tests BUILDTYPE=${BUILDTYPE} notifications: - hipchat: WB52YkcbCGMbNcStsGeaoRO7cyBSK4wX2ZHo2Y4b@GL From a920ca8112399b7dfcdbba85c252dcf6c6ee1eee Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 28 May 2014 19:04:57 -0700 Subject: [PATCH 39/79] fix #269 --- test/headless.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/headless.cpp b/test/headless.cpp index c515b36c9..af34f4e19 100644 --- a/test/headless.cpp +++ b/test/headless.cpp @@ -11,6 +11,15 @@ #include +namespace llmr { +namespace platform { + +void notify_map_change() { + // no-op +} + +}} + class View : public llmr::View { public: void make_active() { From ee62139038c4dbcabef3693adb2a7947cbef9cd7 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 28 May 2014 19:05:51 -0700 Subject: [PATCH 40/79] [travis] avoid another regression in headless rendering - refs #269 --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 1d5d1acfc..0011ff338 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,6 +31,7 @@ script: - make llmr BUILDTYPE=${BUILDTYPE} - make linux BUILDTYPE=${BUILDTYPE} - make run-tests BUILDTYPE=${BUILDTYPE} +- make run-headless-test BUILDTYPE=${BUILDTYPE} notifications: - hipchat: WB52YkcbCGMbNcStsGeaoRO7cyBSK4wX2ZHo2Y4b@GL From 45eba8d29f7c1400f9bfa26d38f0962668039d52 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 28 May 2014 19:20:37 -0700 Subject: [PATCH 41/79] fix #268 --- include/llmr/platform/gl.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/llmr/platform/gl.hpp b/include/llmr/platform/gl.hpp index f0f913a5e..da30d746e 100644 --- a/include/llmr/platform/gl.hpp +++ b/include/llmr/platform/gl.hpp @@ -39,7 +39,7 @@ namespace llmr { namespace gl { // Debug group markers, useful for debuggin on iOS -#if GL_EXT_debug_marker +#if defined(__APPLE__) && defined(DEBUG) && defined(GL_EXT_debug_marker) // static int indent = 0; inline void start_group(const std::string &str) { glPushGroupMarkerEXT(0, str.c_str()); From bc9847bde847a6da9741581bbbd66d3b7ca7b4c4 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 28 May 2014 19:28:43 -0700 Subject: [PATCH 42/79] headless is osx only right now --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 0011ff338..2ca7779a9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,7 +31,8 @@ script: - make llmr BUILDTYPE=${BUILDTYPE} - make linux BUILDTYPE=${BUILDTYPE} - make run-tests BUILDTYPE=${BUILDTYPE} -- make run-headless-test BUILDTYPE=${BUILDTYPE} +# TODO - port to linux +#- make run-headless-test BUILDTYPE=${BUILDTYPE} notifications: - hipchat: WB52YkcbCGMbNcStsGeaoRO7cyBSK4wX2ZHo2Y4b@GL From 56c55d0b0288a3ab57a95d2b3851a2a39c734e71 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Thu, 29 May 2014 02:36:47 +0000 Subject: [PATCH 43/79] add include needed for std::replace on linux --- src/text/glyph_store.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/text/glyph_store.cpp b/src/text/glyph_store.cpp index a355b28f2..95b295a79 100644 --- a/src/text/glyph_store.cpp +++ b/src/text/glyph_store.cpp @@ -5,6 +5,7 @@ #include #include #include +#include namespace llmr { From c85a0c3da2f296e8c78aa58a01e2bf83259a421d Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 28 May 2014 19:44:11 -0700 Subject: [PATCH 44/79] comment unfinished FontStack code --- src/map/tile_parser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/map/tile_parser.cpp b/src/map/tile_parser.cpp index f097913cc..7d8323960 100644 --- a/src/map/tile_parser.cpp +++ b/src/map/tile_parser.cpp @@ -206,7 +206,7 @@ std::unique_ptr TileParser::createTextBucket(const VectorTileLayer& laye } // Create a copy! - const FontStack fontStack = glyphStore.getFontStack(bucket_desc.geometry.font); + //const FontStack fontStack = glyphStore.getFontStack(bucket_desc.geometry.font); // Shape and place all labels. { From 5c46bef7176b6d8c784516eff6cc1915cf9b28a1 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 28 May 2014 19:57:01 -0700 Subject: [PATCH 45/79] fallback to boost::locale on linux --- include/llmr/util/utf.hpp | 44 +++++++++++++++++++++++++++++++++++++++ src/map/tile_parser.cpp | 11 ++++------ 2 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 include/llmr/util/utf.hpp diff --git a/include/llmr/util/utf.hpp b/include/llmr/util/utf.hpp new file mode 100644 index 000000000..fb9ab2048 --- /dev/null +++ b/include/llmr/util/utf.hpp @@ -0,0 +1,44 @@ +#ifndef LLMR_UTIL_UTF +#define LLMR_UTIL_UTF + +#include + +// g++/libstdc++ is missing c++11 codecvt support +#ifdef __linux__ +#include +#else +#include +#endif + +namespace llmr { + +namespace util { + +#ifdef __linux__ + +class utf8_to_utf32 { + public: + explicit utf8_to_utf32() + : utf32conv_() {} + std::u32string convert(std::string const& utf8) { + return boost::locale::conv::utf_to_utf(utf8) + } +}; +#else + +class utf8_to_utf32 { + public: + explicit utf8_to_utf32() + : utf32conv_() {} + std::u32string convert(std::string const& utf8) { + return utf32conv_.from_bytes(utf8); + } + private: + std::wstring_convert, char32_t> utf32conv_; +}; + +#endif + +}} + +#endif diff --git a/src/map/tile_parser.cpp b/src/map/tile_parser.cpp index 7d8323960..70085b309 100644 --- a/src/map/tile_parser.cpp +++ b/src/map/tile_parser.cpp @@ -12,8 +12,7 @@ #include #include - -#include +#include using namespace llmr; @@ -172,9 +171,7 @@ std::unique_ptr TileParser::createTextBucket(const VectorTileLayer& laye std::unique_ptr bucket = std::make_unique( tile.textVertexBuffer, tile.triangleElementsBuffer, bucket_desc, placement); - - std::wstring_convert, char32_t> ucs4conv; - + util::utf8_to_utf32 ucs4conv; // Determine and load glyph ranges { @@ -194,7 +191,7 @@ std::unique_ptr TileParser::createTextBucket(const VectorTileLayer& laye continue; } - const std::u32string string = ucs4conv.from_bytes(toString(it_prop->second)); + const std::u32string string = ucs4conv.convert(toString(it_prop->second)); // Loop through all characters of this text and collect unique codepoints. for (uint32_t chr : string) { @@ -224,7 +221,7 @@ std::unique_ptr TileParser::createTextBucket(const VectorTileLayer& laye continue; } - const std::u32string string = ucs4conv.from_bytes(toString(it_prop->second)); + const std::u32string string = ucs4conv.convert(toString(it_prop->second)); // TODO: Shape label // TODO: Place label From 97683460c18fe714a6a0f29f81b66739de893f91 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 28 May 2014 19:57:26 -0700 Subject: [PATCH 46/79] fix compile of glyph_store.cpp --- src/text/glyph_store.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/text/glyph_store.cpp b/src/text/glyph_store.cpp index 95b295a79..459c2d971 100644 --- a/src/text/glyph_store.cpp +++ b/src/text/glyph_store.cpp @@ -92,7 +92,7 @@ void GlyphPBF::parse(FontStack &stack) { } } - stack.insert(id, glyph); + stack.insert(id, glyph.metrics, glyph.bitmap); } else { fontstack_pbf.skip(); } From 25803b4b98192675cb15cb73738d1c554253dd1f Mon Sep 17 00:00:00 2001 From: Young Hahn Date: Wed, 28 May 2014 22:57:32 -0400 Subject: [PATCH 47/79] Guesses. --- src/map/tile_parser.cpp | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/map/tile_parser.cpp b/src/map/tile_parser.cpp index 673600ecc..32344edcc 100644 --- a/src/map/tile_parser.cpp +++ b/src/map/tile_parser.cpp @@ -10,12 +10,11 @@ #include #include #include - +#include #include using namespace llmr; - TileParser::TileParser(const std::string& data, VectorTileData& tile, const Style& style, GlyphAtlas& glyphAtlas, GlyphStore &glyphStore, SpriteAtlas &spriteAtlas) : vector_data(pbf((const uint8_t *)data.data(), data.size())), tile(tile), @@ -219,10 +218,29 @@ std::unique_ptr TileParser::createTextBucket(const VectorTileLayer& laye continue; } + uint32_t i = 0; + uint32_t x = 0; const std::string string = toString(it_prop->second); - + std::map shaping; + std::map metrics = fontStack.getMetrics(); + // fprintf(stderr, "%s\n", string.c_str()); + // Loop through all characters of this label and shape. + for (uint32_t chr : string) { + // Can we reuse GlyphPlacement here? First arg is a faces index ... + GlyphPlacement shaped = GlyphPlacement(0, chr, x, 0); + // No idea how to properly put together a shaping std::map ... + shaping.emplace(i, shaped); + i++; + x += metrics[chr].advance; + } // TODO: Shape label // TODO: Place label + // Can faces here be a std::map of fontstacks? + // It looks like nearly the same interface through the rest + // of the stack. + std::unique_ptr bucket = std::make_unique( + tile.textVertexBuffer, tile.triangleElementsBuffer, bucket_desc, placement); + addBucketFeatures(bucket, layer, bucket_desc, faces, shaping); } } From 6b0465448d324888e7c484ae66a40aca1f71d5d6 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 28 May 2014 20:04:40 -0700 Subject: [PATCH 48/79] fix utf.hpp linux compile --- include/llmr/util/utf.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/llmr/util/utf.hpp b/include/llmr/util/utf.hpp index fb9ab2048..f23f616f8 100644 --- a/include/llmr/util/utf.hpp +++ b/include/llmr/util/utf.hpp @@ -18,12 +18,12 @@ namespace util { class utf8_to_utf32 { public: - explicit utf8_to_utf32() - : utf32conv_() {} + explicit utf8_to_utf32() {} std::u32string convert(std::string const& utf8) { return boost::locale::conv::utf_to_utf(utf8) } }; + #else class utf8_to_utf32 { From 36796490de07279d8f36fdf0e944309aa79f2ba3 Mon Sep 17 00:00:00 2001 From: Young Hahn Date: Wed, 28 May 2014 23:12:26 -0400 Subject: [PATCH 49/79] More educated guess. --- src/map/tile_parser.cpp | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/map/tile_parser.cpp b/src/map/tile_parser.cpp index 32344edcc..553c8c79a 100644 --- a/src/map/tile_parser.cpp +++ b/src/map/tile_parser.cpp @@ -201,6 +201,7 @@ std::unique_ptr TileParser::createTextBucket(const VectorTileLayer& laye // Create a copy! const FontStack &fontStack = glyphStore.getFontStack(bucket_desc.geometry.font); + std::map shaping; // Shape and place all labels. { @@ -221,29 +222,30 @@ std::unique_ptr TileParser::createTextBucket(const VectorTileLayer& laye uint32_t i = 0; uint32_t x = 0; const std::string string = toString(it_prop->second); - std::map shaping; + Shaping shapedGlyphs; std::map metrics = fontStack.getMetrics(); // fprintf(stderr, "%s\n", string.c_str()); + // TODO: Shape label // Loop through all characters of this label and shape. for (uint32_t chr : string) { - // Can we reuse GlyphPlacement here? First arg is a faces index ... - GlyphPlacement shaped = GlyphPlacement(0, chr, x, 0); - // No idea how to properly put together a shaping std::map ... - shaping.emplace(i, shaped); + // Can we reuse GlyphPlacement here? First arg is a faces index. + GlyphPlacement glyph = GlyphPlacement(0, chr, x, 0); + // No idea how to properly put together a shapedGlyphs vector. + shapedGylphs.push(glyph); i++; x += metrics[chr].advance; } - // TODO: Shape label // TODO: Place label - // Can faces here be a std::map of fontstacks? - // It looks like nearly the same interface through the rest - // of the stack. - std::unique_ptr bucket = std::make_unique( - tile.textVertexBuffer, tile.triangleElementsBuffer, bucket_desc, placement); - addBucketFeatures(bucket, layer, bucket_desc, faces, shaping); + shaping.emplace(string, shaped); } - } + // Can faces here be a std::map of fontstacks? + // It looks like nearly the same interface through the rest + // of the stack. + std::unique_ptr bucket = std::make_unique( + tile.textVertexBuffer, tile.triangleElementsBuffer, bucket_desc, placement); + addBucketFeatures(bucket, layer, bucket_desc, faces, shaping); + return std::move(bucket); } From da0d436572fbf75bb5c0ba19e4cf4e2299696202 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 28 May 2014 20:28:37 -0700 Subject: [PATCH 50/79] missing semicolon --- include/llmr/util/utf.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/llmr/util/utf.hpp b/include/llmr/util/utf.hpp index f23f616f8..8aa85a90a 100644 --- a/include/llmr/util/utf.hpp +++ b/include/llmr/util/utf.hpp @@ -20,7 +20,7 @@ class utf8_to_utf32 { public: explicit utf8_to_utf32() {} std::u32string convert(std::string const& utf8) { - return boost::locale::conv::utf_to_utf(utf8) + return boost::locale::conv::utf_to_utf(utf8); } }; From d702152068affd0792fb6e4588559efafbcedcdf Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 28 May 2014 20:34:34 -0700 Subject: [PATCH 51/79] temporarily remove directory caching --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9dde1b9bb..3a3a66e52 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,8 +6,6 @@ compiler: cache: - apt -- directories: - - mapnik-packaging before_install: - sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/test From cbd881c020549bcb8b6dcf633ff500e45e90c54b Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 28 May 2014 20:34:48 -0700 Subject: [PATCH 52/79] Revert "temporarily remove directory caching" This reverts commit d702152068affd0792fb6e4588559efafbcedcdf. --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 3a3a66e52..9dde1b9bb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,8 @@ compiler: cache: - apt +- directories: + - mapnik-packaging before_install: - sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/test From 6e5ff8c1226965a31a22d5097d4a7de48f6dd6e1 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 28 May 2014 21:00:34 -0700 Subject: [PATCH 53/79] also find boost headers in include --- setup-libraries.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup-libraries.sh b/setup-libraries.sh index d43461111..fca19fd9c 100755 --- a/setup-libraries.sh +++ b/setup-libraries.sh @@ -71,7 +71,7 @@ source MacOSX.sh if [ ! -f out/build-cpp11-libcpp-x86_64/lib/libuv.a ] ; then ./scripts/build_libuv.sh ; fi if [ ! -f out/build-cpp11-libcpp-x86_64/lib/libssl.a ] ; then ./scripts/build_openssl.sh ; fi if [ ! -f out/build-cpp11-libcpp-x86_64/lib/libcurl.a ] ; then ./scripts/build_curl.sh ; fi - if [ ! -d out/build-cpp11-libcpp-x86_64/include/boost ] ; then ./scripts/build_boost.sh `pwd`/../../src/ `pwd`/../../linux/ `pwd`/../../common/ ; fi + if [ ! -d out/build-cpp11-libcpp-x86_64/include/boost ] ; then ./scripts/build_boost.sh `pwd`/../../src/ `pwd`/../../include/ `pwd`/../../linux/ `pwd`/../../common/ ; fi echo ' ...done' rm -rf out/packages @@ -91,7 +91,7 @@ source Linux.sh if [ ! -f out/build-cpp11-libstdcpp-gcc-x86_64/lib/libuv.a ] ; then ./scripts/build_libuv.sh ; fi if [ ! -f out/build-cpp11-libstdcpp-gcc-x86_64/lib/libssl.a ] ; then ./scripts/build_openssl.sh ; fi if [ ! -f out/build-cpp11-libstdcpp-gcc-x86_64/lib/libcurl.a ] ; then ./scripts/build_curl.sh ; fi - if [ ! -d out/build-cpp11-libstdcpp-gcc-x86_64/include/boost ] ; then ./scripts/build_boost.sh `pwd`/../../src/ `pwd`/../../linux/ `pwd`/../../common/ ; fi + if [ ! -d out/build-cpp11-libstdcpp-gcc-x86_64/include/boost ] ; then ./scripts/build_boost.sh `pwd`/../../src/ `pwd`/../../include/ `pwd`/../../linux/ `pwd`/../../common/ ; fi rm -rf out/packages From be8e2ceae44f6389cf2f4dfda992676bd6b8e258 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 28 May 2014 21:07:49 -0700 Subject: [PATCH 54/79] [build] clear packages only on travis (needed to avoid caching them) --- .travis.yml | 2 ++ setup-libraries.sh | 4 ---- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2ca7779a9..cda0af771 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,6 +23,8 @@ before_install: install: - ./setup-libraries.sh +- rm -rf mapnik-packaging/out/packages + before_script: - if [ ${CXX} = "g++" ]; then export CXX="g++-4.8" ; fi diff --git a/setup-libraries.sh b/setup-libraries.sh index 8d714b098..954c98070 100755 --- a/setup-libraries.sh +++ b/setup-libraries.sh @@ -77,8 +77,6 @@ source MacOSX.sh if [ ! -d out/build-cpp11-libcpp-x86_64/include/boost ] ; then ./scripts/build_boost.sh `pwd`/../../src/ `pwd`/../../linux/ `pwd`/../../common/ ; fi echo ' ...done' -rm -rf out/packages - ./scripts/make_universal.sh cd ../../ @@ -96,8 +94,6 @@ source Linux.sh if [ ! -f out/build-cpp11-libstdcpp-gcc-x86_64/lib/libcurl.a ] ; then ./scripts/build_curl.sh ; fi if [ ! -d out/build-cpp11-libstdcpp-gcc-x86_64/include/boost ] ; then ./scripts/build_boost.sh `pwd`/../../src/ `pwd`/../../linux/ `pwd`/../../common/ ; fi -rm -rf out/packages - cd ../../ ./configure \ --pkg-config-root=`pwd`/mapnik-packaging/osx/out/build-cpp11-libstdcpp-gcc-x86_64/lib/pkgconfig \ From 99bd45a89b4d1a68f257d747947363fbe216ed90 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 28 May 2014 21:15:33 -0700 Subject: [PATCH 55/79] [travis] build with 4 concurrent processes --- .travis.yml | 6 +++--- Makefile | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index cda0af771..fde535c32 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,9 +30,9 @@ before_script: - if [ ${CXX} = "g++" ]; then export CXX="g++-4.8" ; fi script: -- make llmr BUILDTYPE=${BUILDTYPE} -- make linux BUILDTYPE=${BUILDTYPE} -- make run-tests BUILDTYPE=${BUILDTYPE} +- make llmr BUILDTYPE=${BUILDTYPE} -j4 +- make linux BUILDTYPE=${BUILDTYPE} -j4 +- make run-tests BUILDTYPE=${BUILDTYPE} -j4 # TODO - port to linux #- make run-headless-test BUILDTYPE=${BUILDTYPE} diff --git a/Makefile b/Makefile index 1f02ab8d4..b10cdbb7b 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ all: llmr # Builds the regular library llmr: config.gypi llmr.gyp node deps/run_gyp llmr.gyp --depth=. -Goutput_dir=.. --generator-output=./build/llmr -f make - make -C build/llmr BUILDTYPE=$(BUILDTYPE) V=$(V) llmr-x86 + $(MAKE) -C build/llmr BUILDTYPE=$(BUILDTYPE) V=$(V) llmr-x86 node: @if [ ! `which node` ]; then echo 'error: depends on node.js. please make sure node is on your PATH'; exit 1; fi; @@ -20,7 +20,7 @@ build/test/Makefile: src common config.gypi test/test.gyp deps/run_gyp test/test.gyp --depth=. -Goutput_dir=.. --generator-output=./build/test -f make test: build/test/Makefile - make -C build/test BUILDTYPE=$(BUILDTYPE) V=$(V) test + $(MAKE) -C build/test BUILDTYPE=$(BUILDTYPE) V=$(V) test # Runs all test cases run-tests: test @@ -29,12 +29,12 @@ run-tests: test done test/%: - make -C build/test BUILDTYPE=$(BUILDTYPE) V=$(V) $* + $(MAKE) -C build/test BUILDTYPE=$(BUILDTYPE) V=$(V) $* build/$(BUILDTYPE)/test_$* # Only runs headless test case run-headless-test: build/test/Makefile - make -C build/test BUILDTYPE=$(BUILDTYPE) V=$(V) headless + $(MAKE) -C build/test BUILDTYPE=$(BUILDTYPE) V=$(V) headless build/$(BUILDTYPE)/test_headless @@ -44,7 +44,7 @@ run-headless-test: build/test/Makefile # Builds the linux app with make. This is also used by Travis CI linux: config.gypi linux/llmr-app.gyp node deps/run_gyp linux/llmr-app.gyp --depth=. -Goutput_dir=.. --generator-output=./build/linux -f make - make -C build/linux BUILDTYPE=$(BUILDTYPE) V=$(V) linuxapp + $(MAKE) -C build/linux BUILDTYPE=$(BUILDTYPE) V=$(V) linuxapp # Executes the Linux binary run-linux: linux @@ -55,7 +55,7 @@ run-linux: linux # Builds the OS X app with make. osx: config.gypi macosx/llmr-app.gyp node deps/run_gyp macosx/llmr-app.gyp --depth=. -Goutput_dir=.. --generator-output=./build/macosx -f make - make -C build/macosx BUILDTYPE=$(BUILDTYPE) V=$(V) osxapp + $(MAKE) -C build/macosx BUILDTYPE=$(BUILDTYPE) V=$(V) osxapp # Executes the OS X binary run-osx: osx From a3cc5b4b99d6cee61d6addceb227913474c979e4 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 28 May 2014 21:30:09 -0700 Subject: [PATCH 56/79] [travis] make clean between builds, revert parallel builds --- .travis.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index fde535c32..5209cf168 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,9 +30,11 @@ before_script: - if [ ${CXX} = "g++" ]; then export CXX="g++-4.8" ; fi script: -- make llmr BUILDTYPE=${BUILDTYPE} -j4 -- make linux BUILDTYPE=${BUILDTYPE} -j4 -- make run-tests BUILDTYPE=${BUILDTYPE} -j4 +- make llmr BUILDTYPE=${BUILDTYPE} +- make clean +- make linux BUILDTYPE=${BUILDTYPE} +- make clean +- make run-tests BUILDTYPE=${BUILDTYPE} # TODO - port to linux #- make run-headless-test BUILDTYPE=${BUILDTYPE} From 545419501415dd312d4f73d859ef899c6a829a4a Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 28 May 2014 21:32:06 -0700 Subject: [PATCH 57/79] [travis] better bash syntax [skip ci] --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 5209cf168..5d46212f1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,7 +27,7 @@ install: before_script: -- if [ ${CXX} = "g++" ]; then export CXX="g++-4.8" ; fi +- if [[ ${CXX} == "g++" ]]; then export CXX="g++-4.8" ; fi script: - make llmr BUILDTYPE=${BUILDTYPE} From d82acee8c7ec8b5850131ded412bc6337b0371bd Mon Sep 17 00:00:00 2001 From: Young Hahn Date: Thu, 29 May 2014 05:05:48 -0400 Subject: [PATCH 58/79] Stash. --- include/llmr/geometry/glyph_atlas.hpp | 3 +- include/llmr/map/tile_parser.hpp | 3 ++ include/llmr/renderer/text_bucket.hpp | 3 +- include/llmr/text/glyph_store.hpp | 9 +++-- include/llmr/text/placement.hpp | 4 +-- src/geometry/glyph_atlas.cpp | 2 +- src/map/tile_parser.cpp | 48 +++++++++------------------ src/renderer/text_bucket.cpp | 7 ++-- src/text/glyph_store.cpp | 32 +++++++++++++++--- src/text/placement.cpp | 33 +++++++----------- 10 files changed, 76 insertions(+), 68 deletions(-) diff --git a/include/llmr/geometry/glyph_atlas.hpp b/include/llmr/geometry/glyph_atlas.hpp index 312572f5e..5bcd573f5 100644 --- a/include/llmr/geometry/glyph_atlas.hpp +++ b/include/llmr/geometry/glyph_atlas.hpp @@ -2,6 +2,7 @@ #define LLMR_GEOMETRY_GLYPH_ATLAS #include +#include #include #include @@ -30,7 +31,7 @@ public: Rect addGlyph(uint64_t tile_id, const std::string& face_name, - const VectorTileGlyph& glyph); + const SDFGlyph& glyph); void removeGlyphs(uint64_t tile_id); void bind(); diff --git a/include/llmr/map/tile_parser.hpp b/include/llmr/map/tile_parser.hpp index 644cc45b1..b4bccb67a 100644 --- a/include/llmr/map/tile_parser.hpp +++ b/include/llmr/map/tile_parser.hpp @@ -4,6 +4,8 @@ #include #include #include +#include +#include namespace llmr { @@ -23,6 +25,7 @@ private: bool obsolete() const; void parseGlyphs(); void parseStyleLayers(const std::vector& layers); + void addGlyph(uint64_t tileid, const std::string stackname, const std::string &string, const FontStack &fontStack, GlyphAtlas &glyphAtlas, GlyphPositions &face); std::unique_ptr createBucket(const BucketDescription& bucket_desc); std::unique_ptr createFillBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc); std::unique_ptr createLineBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc); diff --git a/include/llmr/renderer/text_bucket.hpp b/include/llmr/renderer/text_bucket.hpp index 2b73aa74d..ad282bdd0 100644 --- a/include/llmr/renderer/text_bucket.hpp +++ b/include/llmr/renderer/text_bucket.hpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -36,7 +37,7 @@ public: PlacementRange placementRange, float zoom); void addFeature(const VectorTileFeature &feature, - const IndexedFaces &faces, + const GlyphPositions &face, const std::map &shapings); void drawGlyphs(TextShader &shader); diff --git a/include/llmr/text/glyph_store.hpp b/include/llmr/text/glyph_store.hpp index 90fa6d908..ea7c96dc4 100644 --- a/include/llmr/text/glyph_store.hpp +++ b/include/llmr/text/glyph_store.hpp @@ -4,7 +4,6 @@ #include #include - #include #include #include @@ -17,6 +16,8 @@ namespace llmr { class SDFGlyph { public: + uint32_t id = 0; + // A signed distance field of the glyph with a border of 3 pixels. std::string bitmap; @@ -26,13 +27,15 @@ public: class FontStack { public: - void insert(uint32_t id, const GlyphMetrics &glyphMetrics, const std::string &bitmap); - + void insert(uint32_t id, const SDFGlyph &glyph); const std::map &getMetrics() const; + const std::map &getSDFs() const; + const Shaping getShaping(const std::string &string) const; private: std::map bitmaps; std::map metrics; + std::map sdfs; mutable std::mutex mtx; }; diff --git a/include/llmr/text/placement.hpp b/include/llmr/text/placement.hpp index 8ec7df5e4..87c47345e 100644 --- a/include/llmr/text/placement.hpp +++ b/include/llmr/text/placement.hpp @@ -18,9 +18,9 @@ public: void addFeature(TextBucket &bucket, const std::vector &line, const BucketGeometryDescription &info, - const IndexedFaces &faces, + const GlyphPositions &face, const Shaping &shaping); - float measureText(const IndexedFaces &faces, + float measureText(const GlyphPositions &face, const Shaping &shaping); private: diff --git a/src/geometry/glyph_atlas.cpp b/src/geometry/glyph_atlas.cpp index 200d281f7..f4defac69 100644 --- a/src/geometry/glyph_atlas.cpp +++ b/src/geometry/glyph_atlas.cpp @@ -22,7 +22,7 @@ GlyphAtlas::~GlyphAtlas() { } Rect GlyphAtlas::addGlyph(uint64_t tile_id, const std::string& face_name, - const VectorTileGlyph& glyph) { + const SDFGlyph& glyph) { std::lock_guard lock(mtx); // Use constant value for now. diff --git a/src/map/tile_parser.cpp b/src/map/tile_parser.cpp index 553c8c79a..2cd10049a 100644 --- a/src/map/tile_parser.cpp +++ b/src/map/tile_parser.cpp @@ -23,7 +23,6 @@ TileParser::TileParser(const std::string& data, VectorTileData& tile, const Styl glyphStore(glyphStore), spriteAtlas(spriteAtlas), placement(tile.id.z) { - parseGlyphs(); parseStyleLayers(style.layers); } @@ -31,17 +30,13 @@ bool TileParser::obsolete() const { return tile.state == TileData::State::obsolete; } -void TileParser::parseGlyphs() { - for (const std::pair pair : vector_data.faces) { - const std::string &name = pair.first; - const VectorTileFace &face = pair.second; - - GlyphPositions &glyphs = faces[name]; - for (const VectorTileGlyph &glyph : face.glyphs) { - const Rect rect = - glyphAtlas.addGlyph(tile.id.to_uint64(), name, glyph); - glyphs.emplace(glyph.id, Glyph{rect, glyph.metrics}); - } +void TileParser::addGlyph(uint64_t tileid, const std::string stackname, const std::string &string, const FontStack &fontStack, GlyphAtlas &glyphAtlas, GlyphPositions &face) { + std::map sdfs = fontStack.getSDFs(); + // Loop through all characters and add glyph to atlas, positions. + for (uint32_t chr : string) { + const SDFGlyph sdf = sdfs[chr]; + const Rect rect = glyphAtlas.addGlyph(tileid, stackname, sdf); + face.emplace(chr, Glyph{rect, sdf.metrics}); } } @@ -202,6 +197,7 @@ std::unique_ptr TileParser::createTextBucket(const VectorTileLayer& laye // Create a copy! const FontStack &fontStack = glyphStore.getFontStack(bucket_desc.geometry.font); std::map shaping; + GlyphPositions face; // Shape and place all labels. { @@ -219,33 +215,21 @@ std::unique_ptr TileParser::createTextBucket(const VectorTileLayer& laye continue; } - uint32_t i = 0; - uint32_t x = 0; const std::string string = toString(it_prop->second); - Shaping shapedGlyphs; - std::map metrics = fontStack.getMetrics(); - // fprintf(stderr, "%s\n", string.c_str()); - // TODO: Shape label - // Loop through all characters of this label and shape. - for (uint32_t chr : string) { - // Can we reuse GlyphPlacement here? First arg is a faces index. - GlyphPlacement glyph = GlyphPlacement(0, chr, x, 0); - // No idea how to properly put together a shapedGlyphs vector. - shapedGylphs.push(glyph); - i++; - x += metrics[chr].advance; - } - // TODO: Place label + + // Shape labels. + const Shaping shaped = fontStack.getShaping(string); shaping.emplace(string, shaped); + + // Place labels. + addGlyph(tile.id.to_uint64(), bucket_desc.geometry.font, string, fontStack, glyphAtlas, face); } } - // Can faces here be a std::map of fontstacks? // It looks like nearly the same interface through the rest // of the stack. - std::unique_ptr bucket = std::make_unique( - tile.textVertexBuffer, tile.triangleElementsBuffer, bucket_desc, placement); - addBucketFeatures(bucket, layer, bucket_desc, faces, shaping); + addBucketFeatures(bucket, layer, bucket_desc, face, shaping); return std::move(bucket); } + diff --git a/src/renderer/text_bucket.cpp b/src/renderer/text_bucket.cpp index 310baf374..7e9633f4b 100644 --- a/src/renderer/text_bucket.cpp +++ b/src/renderer/text_bucket.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -99,7 +100,7 @@ void TextBucket::addGlyphs(const PlacedGlyphs &glyphs, float placementZoom, }; void TextBucket::addFeature(const VectorTileFeature &feature, - const IndexedFaces &faces, + const GlyphPositions &face, const std::map &shapings) { auto it_prop = feature.properties.find(geom_desc.field); if (it_prop == feature.properties.end()) { @@ -134,14 +135,14 @@ void TextBucket::addFeature(const VectorTileFeature &feature, while ((cmd = geometry.next(x, y)) != Geometry::end) { if (cmd == Geometry::move_to) { if (!line.empty()) { - placement.addFeature(*this, line, geom_desc, faces, shaping); + placement.addFeature(*this, line, geom_desc, face, shaping); line.clear(); } } line.emplace_back(x, y); } if (line.size()) { - placement.addFeature(*this, line, geom_desc, faces, shaping); + placement.addFeature(*this, line, geom_desc, face, shaping); } } diff --git a/src/text/glyph_store.cpp b/src/text/glyph_store.cpp index e2ebb97bd..88642907a 100644 --- a/src/text/glyph_store.cpp +++ b/src/text/glyph_store.cpp @@ -10,10 +10,11 @@ namespace llmr { -void FontStack::insert(uint32_t id, const GlyphMetrics &glyphMetrics, const std::string &bitmap) { +void FontStack::insert(uint32_t id, const SDFGlyph &glyph) { std::lock_guard lock(mtx); - metrics.emplace(id, glyphMetrics); - bitmaps.emplace(id, bitmap); + metrics.emplace(id, glyph.metrics); + bitmaps.emplace(id, glyph.bitmap); + sdfs.emplace(id, glyph); } const std::map &FontStack::getMetrics() const { @@ -21,6 +22,26 @@ const std::map &FontStack::getMetrics() const { return metrics; } +const std::map &FontStack::getSDFs() const { + std::lock_guard lock(mtx); + return sdfs; +} + +const Shaping FontStack::getShaping(const std::string &string) const { + std::lock_guard lock(mtx); + uint32_t i = 0; + uint32_t x = 0; + Shaping shaped; + // Loop through all characters of this label and shape. + for (uint32_t chr : string) { + GlyphPlacement glyph = GlyphPlacement(0, chr, x, 0); + shaped.push_back(glyph); + i++; + x += metrics.find(chr)->second.advance; + } + return shaped; +} + GlyphPBF::GlyphPBF(const std::string &fontStack, GlyphRange glyphRange) : future(promise.get_future().share()) { @@ -30,6 +51,8 @@ GlyphPBF::GlyphPBF(const std::string &fontStack, GlyphRange glyphRange) // TODO: Find more reliable URL normalization function std::replace(url.begin(), url.end(), ' ', '+'); + fprintf(stderr, url.c_str()); + platform::request_http(url, [&](platform::Response *res) { if (res->code != 200) { // Something went wrong with loading the glyph pbf. Pass on the error to the future listeners. @@ -75,6 +98,7 @@ void GlyphPBF::parse(FontStack &stack) { while (glyph_pbf.next()) { if (glyph_pbf.tag == 1) { // id id = glyph_pbf.varint(); + glyph.id = glyph_pbf.varint(); } else if (glyph_pbf.tag == 2) { // bitmap glyph.bitmap = glyph_pbf.string(); } else if (glyph_pbf.tag == 3) { // width @@ -92,7 +116,7 @@ void GlyphPBF::parse(FontStack &stack) { } } - stack.insert(id, glyph.metrics, glyph.bitmap); + stack.insert(id, glyph); } else { fontstack_pbf.skip(); } diff --git a/src/text/placement.cpp b/src/text/placement.cpp index 237fd05d7..310f457cd 100644 --- a/src/text/placement.cpp +++ b/src/text/placement.cpp @@ -35,21 +35,12 @@ bool byScale(const Anchor &a, const Anchor &b) { return a.scale < b.scale; } static const Glyph null_glyph; inline const Glyph &getGlyph(const GlyphPlacement &placed, - const IndexedFaces &faces) { - if (placed.face < faces.size()) { - const GlyphPositions &face = *faces[placed.face]; - if (&face) { - auto it = face.find(placed.glyph); - if (it != face.end()) { - return it->second; - } else { - fprintf(stderr, "glyph %d does not exist\n", placed.glyph); - } - } else { - fprintf(stderr, "face pointer is null\n"); - } + const GlyphPositions &face) { + auto it = face.find(placed.glyph); + if (it != face.end()) { + return it->second; } else { - fprintf(stderr, "face does not exist\n"); + fprintf(stderr, "glyph %d does not exist\n", placed.glyph); } return null_glyph; @@ -146,7 +137,7 @@ void getSegmentGlyphs(std::back_insert_iterator glyphs, } PlacedGlyphs getGlyphs(Anchor &anchor, float advance, const Shaping &shaping, - const IndexedFaces &faces, float fontScale, + const GlyphPositions &face, float fontScale, bool horizontal, const std::vector &line, float maxAngleDelta, float rotate) { // The total text advance is the width of this label. @@ -167,7 +158,7 @@ PlacedGlyphs getGlyphs(Anchor &anchor, float advance, const Shaping &shaping, const uint32_t buffer = 3; for (const GlyphPlacement &placed : shaping) { - const Glyph &glyph = getGlyph(placed, faces); + const Glyph &glyph = getGlyph(placed, face); if (!glyph) { // This glyph is empty and doesn't have any pixels that we'd need to // show. @@ -257,7 +248,7 @@ PlacedGlyphs getGlyphs(Anchor &anchor, float advance, const Shaping &shaping, void Placement::addFeature(TextBucket& bucket, const std::vector &line, const BucketGeometryDescription &info, - const IndexedFaces &faces, + const GlyphPositions &face, const Shaping &shaping) { const bool horizontal = info.path == TextPathType::Horizontal; @@ -268,7 +259,7 @@ void Placement::addFeature(TextBucket& bucket, const float fontScale = (tileExtent / util::tileSize) / (glyphSize / info.size); - const float advance = measureText(faces, shaping); + const float advance = measureText(face, shaping); Anchors anchors; // fprintf(stderr, "adding feature with advance %f\n", advance); @@ -290,7 +281,7 @@ void Placement::addFeature(TextBucket& bucket, for (Anchor anchor : anchors) { PlacedGlyphs glyphs = - getGlyphs(anchor, advance, shaping, faces, fontScale, horizontal, + getGlyphs(anchor, advance, shaping, face, fontScale, horizontal, line, maxAngleDelta, rotate); PlacementProperty place = collision.place(glyphs, anchor, anchor.scale, maxPlacementScale, @@ -302,14 +293,14 @@ void Placement::addFeature(TextBucket& bucket, } } -float Placement::measureText(const IndexedFaces &faces, +float Placement::measureText(const GlyphPositions &face, const Shaping &shaping) { float advance = 0; // TODO: advance is not calculated correctly. we should instead use the // bounding box of the glyph placement. for (const GlyphPlacement &shape : shaping) { - advance += getGlyph(shape, faces).metrics.advance; + advance += getGlyph(shape, face).metrics.advance; } return advance; From d5349f9cd31f60914dcacb3a8f540a1eb47c5790 Mon Sep 17 00:00:00 2001 From: Young Hahn Date: Thu, 29 May 2014 05:19:15 -0400 Subject: [PATCH 59/79] Don't call varint() more than once. --- src/text/glyph_store.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/text/glyph_store.cpp b/src/text/glyph_store.cpp index 88642907a..3e6c2bc74 100644 --- a/src/text/glyph_store.cpp +++ b/src/text/glyph_store.cpp @@ -93,11 +93,9 @@ void GlyphPBF::parse(FontStack &stack) { pbf glyph_pbf = fontstack_pbf.message(); SDFGlyph glyph; - uint32_t id = 0; while (glyph_pbf.next()) { if (glyph_pbf.tag == 1) { // id - id = glyph_pbf.varint(); glyph.id = glyph_pbf.varint(); } else if (glyph_pbf.tag == 2) { // bitmap glyph.bitmap = glyph_pbf.string(); @@ -116,7 +114,7 @@ void GlyphPBF::parse(FontStack &stack) { } } - stack.insert(id, glyph); + stack.insert(glyph.id, glyph); } else { fontstack_pbf.skip(); } From f48999dc13fec3fa024f9faa13b4d697a417fa41 Mon Sep 17 00:00:00 2001 From: Young Hahn Date: Thu, 29 May 2014 05:37:30 -0400 Subject: [PATCH 60/79] Treat out of range glyphs as belonging to 0-127 for now. --- src/text/glyph.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/text/glyph.cpp b/src/text/glyph.cpp index 039e3bc36..99e0169ca 100644 --- a/src/text/glyph.cpp +++ b/src/text/glyph.cpp @@ -95,7 +95,10 @@ GlyphRange getGlyphRange(uint32_t glyph) { if (glyph <= 65279) return { 65279, 65279 }; // Specials if (glyph <= 65519) return { 65280, 65519 }; // Halfwidth and Fullwidth Forms if (glyph <= 65533) return { 65520, 65533 }; // Specials - return { 0, 0 }; + // fprintf(stderr, "Glyph out of range %u\n", glyph); + // If glyph is out of range request basic latin for now... + // TODO: null range or way to prevent any range from being used at all? + return { 0, 127 }; } } From 8ba1acaa8361ec717ea6726131df25016645aa9f Mon Sep 17 00:00:00 2001 From: Young Hahn Date: Thu, 29 May 2014 06:09:54 -0400 Subject: [PATCH 61/79] Add second fontstack for testing. --- bin/style.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bin/style.js b/bin/style.js index 1a6aca8b7..e1f3cae08 100644 --- a/bin/style.js +++ b/bin/style.js @@ -731,7 +731,7 @@ module.exports = { "value": "city", "text_field": "name", "path": "horizontal", - "font": "Open Sans Regular, Arial Unicode MS Regular", + "font": "Open Sans Semibold, Arial Unicode MS Regular", "fontSize": 20, "feature_type": "point", "type": "text" @@ -743,7 +743,7 @@ module.exports = { "value": "town", "text_field": "name", "path": "horizontal", - "font": "Open Sans Regular, Arial Unicode MS Regular", + "font": "Open Sans Semibold, Arial Unicode MS Regular", "fontSize": 24, "feature_type": "point", "type": "text" @@ -755,7 +755,7 @@ module.exports = { "value": "village", "text_field": "name", "path": "horizontal", - "font": "Open Sans Regular, Arial Unicode MS Regular", + "font": "Open Sans Semibold, Arial Unicode MS Regular", "fontSize": 22, "feature_type": "point", "type": "text" @@ -771,7 +771,7 @@ module.exports = { ], "text_field": "name", "path": "horizontal", - "font": "Open Sans Regular, Arial Unicode MS Regular", + "font": "Open Sans Semibold, Arial Unicode MS Regular", "fontSize": 14, "feature_type": "point", "type": "text" From 99396478ff0579a50feb3cc4bb30dbfe4455b204 Mon Sep 17 00:00:00 2001 From: Young Hahn Date: Thu, 29 May 2014 11:41:35 -0400 Subject: [PATCH 62/79] Use 256 sized rangeglyphs. Switch to mapbox API VTs. --- src/map/map.cpp | 2 +- src/text/glyph.cpp | 97 +++------------------------------------- src/text/glyph_store.cpp | 2 +- 3 files changed, 7 insertions(+), 94 deletions(-) diff --git a/src/map/map.cpp b/src/map/map.cpp index e72c7e30b..7ac6dbe0e 100644 --- a/src/map/map.cpp +++ b/src/map/map.cpp @@ -163,7 +163,7 @@ void Map::setup() { sources.emplace("outdoors", std::unique_ptr(new Source(*this, painter, - "http://api-maps-gl.tilestream.net/v3/mapbox.mapbox-terrain-v1,mapbox.mapbox-streets-v5/%d/%d/%d.vector.pbf", + "http://a.tiles.mapbox.com/v3/mapbox.mapbox-terrain-v1,mapbox.mapbox-streets-v5/%d/%d/%d.vector.pbf", Source::Type::vector, {{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }}, 512, diff --git a/src/text/glyph.cpp b/src/text/glyph.cpp index 99e0169ca..882a8c493 100644 --- a/src/text/glyph.cpp +++ b/src/text/glyph.cpp @@ -7,98 +7,11 @@ namespace llmr { // most of our lookups are going to be within the first 3 ranges listed here, so this is // likely faster. GlyphRange getGlyphRange(uint32_t glyph) { - if (glyph <= 127) return { 0, 127 }; // Basic Latin - if (glyph <= 255) return { 128, 255 }; // Latin-1 Supplement - if (glyph >= 8192 && glyph <= 8303) return { 8192, 8303 }; // General Punctuation - if (glyph <= 383) return { 256, 383 }; // Latin Extended-A - if (glyph <= 591) return { 384, 591 }; // Latin Extended-B - if (glyph <= 687) return { 592, 687 }; // IPA Extensions - if (glyph <= 767) return { 688, 767 }; // Spacing Modifier Letters - if (glyph <= 879) return { 768, 879 }; // Combining Diacritical Marks - if (glyph <= 1023) return { 880, 1023 }; // Greek - if (glyph <= 1279) return { 1024, 1279 }; // Cyrillic - if (glyph <= 1423) return { 1280, 1423 }; // Armenian - if (glyph <= 1535) return { 1424, 1535 }; // Hebrew - if (glyph <= 1791) return { 1536, 1791 }; // Arabic - if (glyph <= 1871) return { 1792, 1871 }; // Syriac - if (glyph <= 1983) return { 1872, 1983 }; // Thaana - if (glyph <= 2431) return { 1984, 2431 }; // Devanagari - if (glyph <= 2559) return { 2432, 2559 }; // Bengali - if (glyph <= 2687) return { 2560, 2687 }; // Gurmukhi - if (glyph <= 2815) return { 2688, 2815 }; // Gujarati - if (glyph <= 2943) return { 2816, 2943 }; // Oriya - if (glyph <= 3071) return { 2944, 3071 }; // Tamil - if (glyph <= 3199) return { 3072, 3199 }; // Telugu - if (glyph <= 3327) return { 3200, 3327 }; // Kannada - if (glyph <= 3455) return { 3328, 3455 }; // Malayalam - if (glyph <= 3583) return { 3456, 3583 }; // Sinhala - if (glyph <= 3711) return { 3584, 3711 }; // Thai - if (glyph <= 3839) return { 3712, 3839 }; // Lao - if (glyph <= 4095) return { 3840, 4095 }; // Tibetan - if (glyph <= 4255) return { 4096, 4255 }; // Myanmar - if (glyph <= 4351) return { 4256, 4351 }; // Georgian - if (glyph <= 4607) return { 4352, 4607 }; // Hangul Jamo - if (glyph <= 4991) return { 4608, 4991 }; // Ethiopic - if (glyph <= 5119) return { 4992, 5119 }; // Cherokee - if (glyph <= 5759) return { 5120, 5759 }; // Unified Canadian Aboriginal Syllabics - if (glyph <= 5791) return { 5760, 5791 }; // Ogham - if (glyph <= 5887) return { 5792, 5887 }; // Runic - if (glyph <= 6143) return { 5888, 6143 }; // Khmer - if (glyph <= 6319) return { 6144, 6319 }; // Mongolian - if (glyph <= 7935) return { 6320, 7935 }; // Latin Extended Additional - if (glyph <= 8191) return { 7936, 8191 }; // Greek Extended - if (glyph <= 8351) return { 8304, 8351 }; // Superscripts and Subscripts - if (glyph <= 8399) return { 8352, 8399 }; // Currency Symbols - if (glyph <= 8447) return { 8400, 8447 }; // Combining Marks for Symbols - if (glyph <= 8527) return { 8448, 8527 }; // Letterlike Symbols - if (glyph <= 8591) return { 8528, 8591 }; // Number Forms - if (glyph <= 8703) return { 8592, 8703 }; // Arrows - if (glyph <= 8959) return { 8704, 8959 }; // Mathematical Operators - if (glyph <= 9215) return { 8960, 9215 }; // Miscellaneous Technical - if (glyph <= 9279) return { 9216, 9279 }; // Control Pictures - if (glyph <= 9311) return { 9280, 9311 }; // Optical Character Recognition - if (glyph <= 9471) return { 9312, 9471 }; // Enclosed Alphanumerics - if (glyph <= 9599) return { 9472, 9599 }; // Box Drawing - if (glyph <= 9631) return { 9600, 9631 }; // Block Elements - if (glyph <= 9727) return { 9632, 9727 }; // Geometric Shapes - if (glyph <= 9983) return { 9728, 9983 }; // Miscellaneous Symbols - if (glyph <= 10175) return { 9984, 10175 }; // Dingbats - if (glyph <= 10495) return { 10176, 10495 }; // Braille Patterns - if (glyph <= 12031) return { 10496, 12031 }; // CJK Radicals Supplement - if (glyph <= 12255) return { 12032, 12255 }; // Kangxi Radicals - if (glyph <= 12287) return { 12256, 12287 }; // Ideographic Description Characters - if (glyph <= 12351) return { 12288, 12351 }; // CJK Symbols and Punctuation - if (glyph <= 12447) return { 12352, 12447 }; // Hiragana - if (glyph <= 12543) return { 12448, 12543 }; // Katakana - if (glyph <= 12591) return { 12544, 12591 }; // Bopomofo - if (glyph <= 12687) return { 12592, 12687 }; // Hangul Compatibility Jamo - if (glyph <= 12703) return { 12688, 12703 }; // Kanbun - if (glyph <= 12735) return { 12704, 12735 }; // Bopomofo Extended - if (glyph <= 13055) return { 12736, 13055 }; // Enclosed CJK Letters and Months - if (glyph <= 13311) return { 13056, 13311 }; // CJK Compatibility - if (glyph <= 19893) return { 13312, 19893 }; // CJK Unified Ideographs Extension A - if (glyph <= 40959) return { 19894, 40959 }; // CJK Unified Ideographs - if (glyph <= 42127) return { 40960, 42127 }; // Yi Syllables - if (glyph <= 42191) return { 42128, 42191 }; // Yi Radicals - if (glyph <= 55203) return { 42192, 55203 }; // Hangul Syllables - if (glyph <= 56191) return { 55204, 56191 }; // High Surrogates - if (glyph <= 56319) return { 56192, 56319 }; // High Private Use Surrogates - if (glyph <= 57343) return { 56320, 57343 }; // Low Surrogates - if (glyph <= 63743) return { 57344, 63743 }; // Private Use - if (glyph <= 64255) return { 63744, 64255 }; // CJK Compatibility Ideographs - if (glyph <= 64335) return { 64256, 64335 }; // Alphabetic Presentation Forms - if (glyph <= 65023) return { 64336, 65023 }; // Arabic Presentation Forms-A - if (glyph <= 65071) return { 65024, 65071 }; // Combining Half Marks - if (glyph <= 65103) return { 65072, 65103 }; // CJK Compatibility Forms - if (glyph <= 65135) return { 65104, 65135 }; // Small Form Variants - if (glyph <= 65278) return { 65136, 65278 }; // Arabic Presentation Forms-B - if (glyph <= 65279) return { 65279, 65279 }; // Specials - if (glyph <= 65519) return { 65280, 65519 }; // Halfwidth and Fullwidth Forms - if (glyph <= 65533) return { 65520, 65533 }; // Specials - // fprintf(stderr, "Glyph out of range %u\n", glyph); - // If glyph is out of range request basic latin for now... - // TODO: null range or way to prevent any range from being used at all? - return { 0, 127 }; + unsigned start = (glyph/256) * 256; + unsigned end = (start + 255); + if (start > 65280) start = 65280; + if (end > 65533) end = 65533; + return { start, end }; } } diff --git a/src/text/glyph_store.cpp b/src/text/glyph_store.cpp index dc77d18c0..e0404c08d 100644 --- a/src/text/glyph_store.cpp +++ b/src/text/glyph_store.cpp @@ -47,7 +47,7 @@ GlyphPBF::GlyphPBF(const std::string &fontStack, GlyphRange glyphRange) : future(promise.get_future().share()) { // Load the glyph set URL - std::string url = util::sprintf<255>("http://mapbox.s3.amazonaws.com/gl-glyphs/%s/%d-%d.pbf", fontStack.c_str(), glyphRange.first, glyphRange.second); + std::string url = util::sprintf<255>("http://mapbox.s3.amazonaws.com/gl-glyphs-256/%s/%d-%d.pbf", fontStack.c_str(), glyphRange.first, glyphRange.second); // TODO: Find more reliable URL normalization function std::replace(url.begin(), url.end(), ' ', '+'); From 67a3e4651f5f3bb52d2178eb00f931be105036fb Mon Sep 17 00:00:00 2001 From: Mike Morris Date: Thu, 29 May 2014 12:08:37 -0400 Subject: [PATCH 63/79] include locale, ref #270 --- include/llmr/util/utf.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/include/llmr/util/utf.hpp b/include/llmr/util/utf.hpp index 8aa85a90a..92da93f01 100644 --- a/include/llmr/util/utf.hpp +++ b/include/llmr/util/utf.hpp @@ -8,6 +8,7 @@ #include #else #include +#include #endif namespace llmr { From 72a71c6f70a14a166ccf29a09d2cb1c0d643e73f Mon Sep 17 00:00:00 2001 From: Young Hahn Date: Thu, 29 May 2014 12:13:56 -0400 Subject: [PATCH 64/79] Lookup shaping value by string key. Refs #272. --- src/renderer/text_bucket.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/text_bucket.cpp b/src/renderer/text_bucket.cpp index 7e9633f4b..5823607ac 100644 --- a/src/renderer/text_bucket.cpp +++ b/src/renderer/text_bucket.cpp @@ -112,7 +112,7 @@ void TextBucket::addFeature(const VectorTileFeature &feature, } const Value &value = it_prop->second; - auto it_shaping = shapings.find(value); + auto it_shaping = shapings.find(toString(value)); if (it_shaping == shapings.end()) { if (debug::shapingWarning) { fprintf(stderr, "[WARNING] missing shaping for '%s'\n", toString(value).c_str()); From 16c43d30bd42aad8d8596c787f175a128b230fc4 Mon Sep 17 00:00:00 2001 From: Nicki Dlugash Date: Thu, 29 May 2014 13:05:48 -0400 Subject: [PATCH 65/79] moved contour lines above hillshade --- bin/style.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/bin/style.js b/bin/style.js index 35f40beac..a3c312f54 100644 --- a/bin/style.js +++ b/bin/style.js @@ -984,18 +984,6 @@ module.exports = { "name": "waterway_stream", "bucket": "waterway_stream" }, - { - "name": "contour_line_loud", - "bucket": "contour_line_10" - }, - { - "name": "contour_line_loud", - "bucket": "contour_line_5" - }, - { - "name": "contour_line_regular", - "bucket": "contour_line_other" - }, { "name": "building_shadow", "bucket": "building" @@ -1024,6 +1012,18 @@ module.exports = { "name": "hillshade_full_shadow", "bucket": "hillshade_full_shadow" }, + { + "name": "contour_line_loud", + "bucket": "contour_line_10" + }, + { + "name": "contour_line_loud", + "bucket": "contour_line_5" + }, + { + "name": "contour_line_regular", + "bucket": "contour_line_other" + }, { "name": "barrier_line_gate", "bucket": "barrier_line_gate" From 7e0d4399380fd88192b5bde7b8e28a53d4be590d Mon Sep 17 00:00:00 2001 From: Eden Halperin Date: Thu, 29 May 2014 11:16:59 -0700 Subject: [PATCH 66/79] fix country labels --- bin/style.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/style.js b/bin/style.js index 553883728..82705ae24 100644 --- a/bin/style.js +++ b/bin/style.js @@ -649,7 +649,7 @@ module.exports = { "layer": "country_label", "text_field": "name", "path": "horizontal", - "font": "Open Sans Regular, Arial Unicode MS Regular", + "font": "Open Sans Semibold, Arial Unicode MS Regular", "fontSize": 24, "feature_type": "point", "type": "text" @@ -2251,7 +2251,7 @@ module.exports = { "country_label": { "color": "country_text", "stroke": "rgba(255,255,255,0.5)", - "strokeWidth": 0.4, + "strokeWidth": 0.5, "size": "country_label_size" }, "country_label_line": { @@ -3000,7 +3000,7 @@ module.exports = { "country_label": { "color": "text_night", "stroke": "text2_stroke_night", - "strokeWidth": 0.4, + "strokeWidth": 0.5, "size": "country_label_size" }, "country_label_line": { From f5f187fb911ac3564b7415e1136c48d538a35e71 Mon Sep 17 00:00:00 2001 From: Eden Halperin Date: Thu, 29 May 2014 11:45:34 -0700 Subject: [PATCH 67/79] use updated fontstack --- bin/style.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/bin/style.js b/bin/style.js index 82705ae24..38faa8483 100644 --- a/bin/style.js +++ b/bin/style.js @@ -649,7 +649,7 @@ module.exports = { "layer": "country_label", "text_field": "name", "path": "horizontal", - "font": "Open Sans Semibold, Arial Unicode MS Regular", + "font": "Open Sans Bold, Arial Unicode MS Bold", "fontSize": 24, "feature_type": "point", "type": "text" @@ -666,7 +666,7 @@ module.exports = { "type": "text", "text_field": "name", "path": "curve", - "font": "Open Sans Regular, Arial Unicode MS Regular", + "font": "Open Sans Italic, Arial Unicode MS Regular", "fontSize": 16 }, "marine_label_point_1": { @@ -678,7 +678,7 @@ module.exports = { "path": "horizontal", "field": "labelrank", "value": 1, - "font": "Open Sans Regular, Arial Unicode MS Regular", + "font": "Open Sans Italic, Arial Unicode MS Regular", "fontSize": 30 }, "marine_label_point_2": { @@ -690,7 +690,7 @@ module.exports = { "path": "horizontal", "field": "labelrank", "value": 2, - "font": "Open Sans Regular, Arial Unicode MS Regular", + "font": "Open Sans Italic, Arial Unicode MS Regular", "fontSize": 24 }, "marine_label_point_other": { @@ -702,7 +702,7 @@ module.exports = { "path": "horizontal", "field": "labelrank", "value": [3,4,5,6], - "font": "Open Sans Regular, Arial Unicode MS Regular", + "font": "Open Sans Italic, Arial Unicode MS Regular", "fontSize": 18 }, "state_label": { @@ -815,7 +815,7 @@ module.exports = { "layer": "water_label", "text_field": "name", "path": "horizontal", - "font": "Open Sans Regular, Arial Unicode MS Regular", + "font": "Open Sans Semibold Italic, Arial Unicode MS Bold", "fontSize": 12, "feature_type": "point", "type": "text" @@ -825,7 +825,7 @@ module.exports = { "layer": "waterway_label", "text_field": "name", "path": "curve", - "font": "Open Sans Regular, Arial Unicode MS Regular", + "font": "Open Sans Semibold Italic, Arial Unicode MS Bold", "fontSize": 12, "textMinDistance": 15, "feature_type": "line", From f83f4a6d63be8674c7f2ec35f9471025040147a0 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Thu, 29 May 2014 12:16:01 -0700 Subject: [PATCH 68/79] include / fix compile issues with g++-4.9 --- include/llmr/map/tile.hpp | 1 + include/llmr/renderer/bucket.hpp | 1 + 2 files changed, 2 insertions(+) diff --git a/include/llmr/map/tile.hpp b/include/llmr/map/tile.hpp index 0f43f9df2..9681c3637 100644 --- a/include/llmr/map/tile.hpp +++ b/include/llmr/map/tile.hpp @@ -9,6 +9,7 @@ #include #include #include +#include namespace llmr { diff --git a/include/llmr/renderer/bucket.hpp b/include/llmr/renderer/bucket.hpp index f8447be89..43bd96e3f 100644 --- a/include/llmr/renderer/bucket.hpp +++ b/include/llmr/renderer/bucket.hpp @@ -2,6 +2,7 @@ #define LLMR_RENDERER_BUCKET #include +#include #include #include #include From 189436919d9e2793e85b098c0aa43a506f3a4d7e Mon Sep 17 00:00:00 2001 From: Nicki Dlugash Date: Thu, 29 May 2014 15:31:48 -0400 Subject: [PATCH 69/79] updated font for poi labels, and made arial unicode bold fallback for open sans semibold --- bin/style.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/bin/style.js b/bin/style.js index 38faa8483..c831fd414 100644 --- a/bin/style.js +++ b/bin/style.js @@ -723,7 +723,7 @@ module.exports = { "value": "city", "text_field": "name", "path": "horizontal", - "font": "Open Sans Semibold, Arial Unicode MS Regular", + "font": "Open Sans Semibold, Arial Unicode MS Bold", "fontSize": 20, "feature_type": "point", "type": "text" @@ -735,7 +735,7 @@ module.exports = { "value": "town", "text_field": "name", "path": "horizontal", - "font": "Open Sans Semibold, Arial Unicode MS Regular", + "font": "Open Sans Semibold, Arial Unicode MS Bold", "fontSize": 24, "feature_type": "point", "type": "text" @@ -747,7 +747,7 @@ module.exports = { "value": "village", "text_field": "name", "path": "horizontal", - "font": "Open Sans Semibold, Arial Unicode MS Regular", + "font": "Open Sans Semibold, Arial Unicode MS Bold", "fontSize": 22, "feature_type": "point", "type": "text" @@ -763,7 +763,7 @@ module.exports = { ], "text_field": "name", "path": "horizontal", - "font": "Open Sans Semibold, Arial Unicode MS Regular", + "font": "Open Sans Semibold, Arial Unicode MS Bold", "fontSize": 18, "feature_type": "point", "type": "text" @@ -878,7 +878,7 @@ module.exports = { "text_field": "name", "path": "horizontal", "padding": 2, - "font": "Open Sans Regular, Arial Unicode MS Regular", + "font": "Open Sans Semibold, Arial Unicode MS Bold", "fontSize": 11, "feature_type": "point", "type": "text" @@ -891,7 +891,7 @@ module.exports = { "text_field": "name", "path": "horizontal", "padding": 2, - "font": "Open Sans Regular, Arial Unicode MS Regular", + "font": "Open Sans Semibold, Arial Unicode MS Bold", "fontSize": 10, "feature_type": "point", "type": "text" @@ -904,7 +904,7 @@ module.exports = { "text_field": "name", "path": "horizontal", "padding": 2, - "font": "Open Sans Regular, Arial Unicode MS Regular", + "font": "Open Sans Semibold, Arial Unicode MS Bold", "fontSize": 10, "feature_type": "point", "type": "text" From 42c233b8b45c25dc41a989c68bd71a3ced3ac2b5 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Thu, 29 May 2014 12:32:54 -0700 Subject: [PATCH 70/79] fix -Wformat-security warning with dodgy fprintf --- common.gypi | 14 +++++++++++--- src/text/glyph_store.cpp | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/common.gypi b/common.gypi index b1ad46015..a3e4e5e2f 100644 --- a/common.gypi +++ b/common.gypi @@ -5,6 +5,11 @@ 'CLANG_CXX_LIBRARY': 'libc++', 'CLANG_CXX_LANGUAGE_STANDARD':'c++11', 'GCC_VERSION': 'com.apple.compilers.llvm.clang.1_0', + 'GCC_ENABLE_CPP_EXCEPTIONS': 'YES', + 'GCC_ENABLE_CPP_RTTI':'YES', + 'OTHER_CPLUSPLUSFLAGS': [ '-Wall', '-Wextra' ], + 'GCC_WARN_PEDANTIC': 'YES', + 'GCC_WARN_UNINITIALIZED_AUTOS': 'YES_AGGRESSIVE' }, 'cflags_cc': ['-std=c++11'], 'configurations': { @@ -14,7 +19,11 @@ 'xcode_settings': { 'GCC_OPTIMIZATION_LEVEL': '0', 'GCC_GENERATE_DEBUGGING_SYMBOLS': 'YES', - 'OTHER_CPLUSPLUSFLAGS': [ '-Wall', '-Wextra', '-pedantic' ] + 'DEAD_CODE_STRIPPING': 'NO', + 'GCC_INLINES_ARE_PRIVATE_EXTERN': 'NO', + 'RUN_CLANG_STATIC_ANALYZER':'YES', + 'CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY': 'YES', + 'CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER': 'YES' } }, 'Release': { @@ -24,8 +33,7 @@ 'GCC_OPTIMIZATION_LEVEL': '3', 'GCC_GENERATE_DEBUGGING_SYMBOLS': 'NO', 'DEAD_CODE_STRIPPING': 'YES', - 'GCC_INLINES_ARE_PRIVATE_EXTERN': 'YES', - 'OTHER_CPLUSPLUSFLAGS': [ '-Wall', '-Wextra', '-pedantic' ] + 'GCC_INLINES_ARE_PRIVATE_EXTERN': 'YES' } } } diff --git a/src/text/glyph_store.cpp b/src/text/glyph_store.cpp index e0404c08d..3f741236f 100644 --- a/src/text/glyph_store.cpp +++ b/src/text/glyph_store.cpp @@ -52,7 +52,7 @@ GlyphPBF::GlyphPBF(const std::string &fontStack, GlyphRange glyphRange) // TODO: Find more reliable URL normalization function std::replace(url.begin(), url.end(), ' ', '+'); - fprintf(stderr, url.c_str()); + fprintf(stderr, "%s\n", url.c_str()); platform::request_http(url, [&](platform::Response *res) { if (res->code != 200) { From 829f9d11977d95102fe2141f70fa75ed6faf3ccb Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Thu, 29 May 2014 12:36:22 -0700 Subject: [PATCH 71/79] [build] another missing include --- src/util/threadpool.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/util/threadpool.cpp b/src/util/threadpool.cpp index 3b69302b1..29ab11f1c 100644 --- a/src/util/threadpool.cpp +++ b/src/util/threadpool.cpp @@ -1,6 +1,7 @@ #include #include #include +#include using namespace llmr::util; From aa85c54b2de903cacaf592efdac596ea3fce9fc3 Mon Sep 17 00:00:00 2001 From: Nicki Dlugash Date: Thu, 29 May 2014 15:42:04 -0400 Subject: [PATCH 72/79] dont have font stack yet with arial unicode bold as fallback to Open Sans Semibold, so changed them back --- bin/style.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/bin/style.js b/bin/style.js index c831fd414..aa7d5b38f 100644 --- a/bin/style.js +++ b/bin/style.js @@ -649,7 +649,7 @@ module.exports = { "layer": "country_label", "text_field": "name", "path": "horizontal", - "font": "Open Sans Bold, Arial Unicode MS Bold", + "font": "Open Sans Semibold, Arial Unicode MS Bold", "fontSize": 24, "feature_type": "point", "type": "text" @@ -723,7 +723,7 @@ module.exports = { "value": "city", "text_field": "name", "path": "horizontal", - "font": "Open Sans Semibold, Arial Unicode MS Bold", + "font": "Open Sans Semibold, Arial Unicode MS Regular", "fontSize": 20, "feature_type": "point", "type": "text" @@ -735,7 +735,7 @@ module.exports = { "value": "town", "text_field": "name", "path": "horizontal", - "font": "Open Sans Semibold, Arial Unicode MS Bold", + "font": "Open Sans Semibold, Arial Unicode MS Regular", "fontSize": 24, "feature_type": "point", "type": "text" @@ -747,7 +747,7 @@ module.exports = { "value": "village", "text_field": "name", "path": "horizontal", - "font": "Open Sans Semibold, Arial Unicode MS Bold", + "font": "Open Sans Semibold, Arial Unicode MS Regular", "fontSize": 22, "feature_type": "point", "type": "text" @@ -763,7 +763,7 @@ module.exports = { ], "text_field": "name", "path": "horizontal", - "font": "Open Sans Semibold, Arial Unicode MS Bold", + "font": "Open Sans Semibold, Arial Unicode MS Regular", "fontSize": 18, "feature_type": "point", "type": "text" @@ -878,7 +878,7 @@ module.exports = { "text_field": "name", "path": "horizontal", "padding": 2, - "font": "Open Sans Semibold, Arial Unicode MS Bold", + "font": "Open Sans Semibold, Arial Unicode MS Regular", "fontSize": 11, "feature_type": "point", "type": "text" @@ -891,7 +891,7 @@ module.exports = { "text_field": "name", "path": "horizontal", "padding": 2, - "font": "Open Sans Semibold, Arial Unicode MS Bold", + "font": "Open Sans Semibold, Arial Unicode MS Regular", "fontSize": 10, "feature_type": "point", "type": "text" @@ -904,7 +904,7 @@ module.exports = { "text_field": "name", "path": "horizontal", "padding": 2, - "font": "Open Sans Semibold, Arial Unicode MS Bold", + "font": "Open Sans Semibold, Arial Unicode MS Regular", "fontSize": 10, "feature_type": "point", "type": "text" From 7b7e8007e3801de4593fa72f96fa2ac0c8ca43b6 Mon Sep 17 00:00:00 2001 From: Nicki Dlugash Date: Thu, 29 May 2014 15:44:38 -0400 Subject: [PATCH 73/79] temporarily changed country label font back to original --- bin/style.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/style.js b/bin/style.js index aa7d5b38f..8c7b11aaf 100644 --- a/bin/style.js +++ b/bin/style.js @@ -649,7 +649,7 @@ module.exports = { "layer": "country_label", "text_field": "name", "path": "horizontal", - "font": "Open Sans Semibold, Arial Unicode MS Bold", + "font": "Open Sans Bold, Arial Unicode MS Bold", "fontSize": 24, "feature_type": "point", "type": "text" From 3003085763d0b590d6f2c8536abed0e086839212 Mon Sep 17 00:00:00 2001 From: Nicki Dlugash Date: Thu, 29 May 2014 15:50:04 -0400 Subject: [PATCH 74/79] new font stack deployed. Made Arial Unicode Bold fallback for Open Sans Semibold --- bin/style.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/bin/style.js b/bin/style.js index 8c7b11aaf..c831fd414 100644 --- a/bin/style.js +++ b/bin/style.js @@ -723,7 +723,7 @@ module.exports = { "value": "city", "text_field": "name", "path": "horizontal", - "font": "Open Sans Semibold, Arial Unicode MS Regular", + "font": "Open Sans Semibold, Arial Unicode MS Bold", "fontSize": 20, "feature_type": "point", "type": "text" @@ -735,7 +735,7 @@ module.exports = { "value": "town", "text_field": "name", "path": "horizontal", - "font": "Open Sans Semibold, Arial Unicode MS Regular", + "font": "Open Sans Semibold, Arial Unicode MS Bold", "fontSize": 24, "feature_type": "point", "type": "text" @@ -747,7 +747,7 @@ module.exports = { "value": "village", "text_field": "name", "path": "horizontal", - "font": "Open Sans Semibold, Arial Unicode MS Regular", + "font": "Open Sans Semibold, Arial Unicode MS Bold", "fontSize": 22, "feature_type": "point", "type": "text" @@ -763,7 +763,7 @@ module.exports = { ], "text_field": "name", "path": "horizontal", - "font": "Open Sans Semibold, Arial Unicode MS Regular", + "font": "Open Sans Semibold, Arial Unicode MS Bold", "fontSize": 18, "feature_type": "point", "type": "text" @@ -878,7 +878,7 @@ module.exports = { "text_field": "name", "path": "horizontal", "padding": 2, - "font": "Open Sans Semibold, Arial Unicode MS Regular", + "font": "Open Sans Semibold, Arial Unicode MS Bold", "fontSize": 11, "feature_type": "point", "type": "text" @@ -891,7 +891,7 @@ module.exports = { "text_field": "name", "path": "horizontal", "padding": 2, - "font": "Open Sans Semibold, Arial Unicode MS Regular", + "font": "Open Sans Semibold, Arial Unicode MS Bold", "fontSize": 10, "feature_type": "point", "type": "text" @@ -904,7 +904,7 @@ module.exports = { "text_field": "name", "path": "horizontal", "padding": 2, - "font": "Open Sans Semibold, Arial Unicode MS Regular", + "font": "Open Sans Semibold, Arial Unicode MS Bold", "fontSize": 10, "feature_type": "point", "type": "text" From 88f89d0150fb01a8f98b87ef2958940450fae14f Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Thu, 29 May 2014 13:09:10 -0700 Subject: [PATCH 75/79] initialize variables --- src/style/properties.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/style/properties.cpp b/src/style/properties.cpp index 0e4841830..b39f20c51 100644 --- a/src/style/properties.cpp +++ b/src/style/properties.cpp @@ -29,9 +29,11 @@ float functions::stops(float z, const std::vector& stops) { if (stops.size() % 2 != 0) return 0; bool smaller = false; - float smaller_z, smaller_val; + float smaller_z = 0.0; + float smaller_val = 0.0; bool larger = false; - float larger_z, larger_val; + float larger_z = 0.0; + float larger_val = 0.0; for (uint32_t i = 0; i < stops.size(); i += 2) { float stop_z = stops[i]; From b4d5b1ca657c92dc03a8b265b35637137ff1a50b Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Thu, 29 May 2014 13:09:24 -0700 Subject: [PATCH 76/79] use std::pow --- src/map/transform.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/map/transform.cpp b/src/map/transform.cpp index 996117bfa..d567a586c 100644 --- a/src/map/transform.cpp +++ b/src/map/transform.cpp @@ -60,8 +60,8 @@ void Transform::_moveBy(const double dx, const double dy, const time duration) { // Un-rotate when rotated and panning far enough to show off-world in corners. double w = final.scale * util::tileSize / 2; - double m = std::sqrt(pow((current.width / 2), 2) + pow((current.height / 2), 2)); - double x = std::abs(sqrt(pow(final.x, 2) + pow(final.y, 2))); + double m = std::sqrt(std::pow((current.width / 2), 2) + pow((current.height / 2), 2)); + double x = std::abs(sqrt(std::pow(final.x, 2) + std::pow(final.y, 2))); if (current.angle && w - x < m) _setAngle(0, 500_milliseconds, true); if (duration == 0) { From 07767951ee8cf17620fd1a7eb86e1bba600c3ba0 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Thu, 29 May 2014 13:10:51 -0700 Subject: [PATCH 77/79] use std::abs --- src/clipper/clipper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/clipper/clipper.cpp b/src/clipper/clipper.cpp index 95975450e..56ad58416 100755 --- a/src/clipper/clipper.cpp +++ b/src/clipper/clipper.cpp @@ -2152,13 +2152,13 @@ void Clipper::IntersectEdges(TEdge *e1, TEdge *e2, else if (e1->PolyTyp != e2->PolyTyp) { //toggle subj open path OutIdx on/off when Abs(clip.WndCnt) == 1 ... - if ((e1->WindDelta == 0) && abs(e2->WindCnt) == 1 && + if ((e1->WindDelta == 0) && std::abs(e2->WindCnt) == 1 && (m_ClipType != ctUnion || e2->WindCnt2 == 0)) { AddOutPt(e1, Pt); if (e1Contributing) e1->OutIdx = Unassigned; } - else if ((e2->WindDelta == 0) && (abs(e1->WindCnt) == 1) && + else if ((e2->WindDelta == 0) && (std::abs(e1->WindCnt) == 1) && (m_ClipType != ctUnion || e1->WindCnt2 == 0)) { AddOutPt(e2, Pt); From c9a1d9efd47d70eaf0e4d2de00fccf4eb9b5a5cf Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Thu, 29 May 2014 14:17:22 -0700 Subject: [PATCH 78/79] remove unused member variable --- include/llmr/renderer/prerendered_texture.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/include/llmr/renderer/prerendered_texture.hpp b/include/llmr/renderer/prerendered_texture.hpp index e35cc0321..4b163ac70 100644 --- a/include/llmr/renderer/prerendered_texture.hpp +++ b/include/llmr/renderer/prerendered_texture.hpp @@ -26,7 +26,6 @@ private: GLint previous_fbo = 0; GLuint fbo = 0; GLuint texture = 0; - bool mipmapped = false; }; } From a83e749e0977ae057e9ae4e0e82cd2d3cf5b9bba Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Thu, 29 May 2014 14:17:58 -0700 Subject: [PATCH 79/79] [travis] try building with thread and address sanitizer in Debug --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 5d46212f1..99dad26fd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,6 +28,7 @@ install: before_script: - if [[ ${CXX} == "g++" ]]; then export CXX="g++-4.8" ; fi +- if [[ $BUILDTYPE} == "Debug" ]]; then export CXXFLAGS="-fsanitize=address -fsanitize=thread";export LDFLAGS="-fsanitize=address -fsanitize=thread" script: - make llmr BUILDTYPE=${BUILDTYPE}