Page MenuHomeWildfire Games

Move PopulationBonus to new component Population
Needs ReviewPublic

Authored by lonehawk on Aug 12 2020, 5:03 PM.

Details

Reviewers
Angen
Freagarach
Trac Tickets
#4081
Summary

PopulationBonus is not exactly a cost, so this diff moves it from Cost component to a new component called Population, as discussed in the attached Track ticket

Test Plan

Need to test if the populationBonus value is displayed and handled correctly for all applicable units

Unit TestsFailed

TimeTest
0 msJenkins > TestComponentScripts::Debug: Test / test_scripts
Test failed: Stack trace: cmpPlayer<.AddPopulationBonuses@simulation/components/tests/test_Population.js:103:35 global.Spy/spy@simulation/components/tests/setup.js:127:10
0 msJenkins > TestComponentScripts::Release: Test / test_scripts
Test failed: Stack trace: cmpPlayer<.AddPopulationBonuses@simulation/components/tests/test_Population.js:103:35 global.Spy/spy@simulation/components/tests/setup.js:127:10
0 msJenkins > TestComponentScripts::test_scripts
Test failed: Stack trace: cmpPlayer<.AddPopulationBonuses@simulation/components/tests/test_Population.js:103:35 global.Spy/spy@simulation/components/tests/setup.js:127:10
0 msJenkins > TestComponentScripts::test_scripts
Test failed: Stack trace: cmpPlayer<.AddPopulationBonuses@simulation/components/tests/test_Population.js:103:35 global.Spy/spy@simulation/components/tests/setup.js:127:10
0 msJenkins > TestAllocators::Debug: Test / test_da
View Full Test Results (4 Failed · 1,360 Passed)

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes

You can wait with these inlines until there has been a comment about the population cost (or don't wait ;) ). In the meantime, feel free to get your hands dirty on some other issue ^^

binaries/data/mods/_test.sim/simulation/templates/special/filter/foundation.xml
5

Easy to miss, but this should be alphabetically ordered as well ;)

binaries/data/mods/public/simulation/components/Cost.js
67

Sice you touch the string: Captial and . please :)

binaries/data/mods/public/simulation/components/PopulationHolder.js
48 ↗(On Diff #13182)

Is the comment needed?

59 ↗(On Diff #13182)

There's an extra new line here which is not needed.

binaries/data/mods/public/simulation/templates/special/filter/foundation.xml
5–6

The comment needs to be moved as well.

binaries/data/mods/public/simulation/templates/template_unit.xml
68–70

Since units generally do not provide population space, this can be omitted.

Angen added a subscriber: Itms.EditedAug 13 2020, 8:18 PM

Thank you for working on this. I hope I do not create much trouble with this comment :) .

You should consider to rename PopulationHolder to Population and PopulationBonus just to Bonus.
Above would not work because there is Population element inside Cost currently.
Also any popbonus inside this component would be renamed just to bonus.
PopulationBonus and Amount does sound good too (see irc logs below)

ping @Itms ^ it was your suggestion and discussion record is not available, thoughts ?

It is nice to not have the following in the code FooClass.GetFooValue.

binaries/data/mods/public/simulation/components/PopulationHolder.js
22 ↗(On Diff #13182)

in this function there is some duplication in code logic
it would be nice if it could be de-duplicated via some helper function for example but still part of prototype

51 ↗(On Diff #13182)

this could be moved after if
with no difference assignment is useless

Angen added a comment.Aug 13 2020, 8:24 PM

Ok I found discussion:

20:50 <@k776> Why is <PopulationBonus> inside <Cost>
20:50 < Pureon> Mythos_Ruler: I'm moving back into photoshop, vector icon didn't look too good
20:51 <@k776> We don't require a certain population to build something, so <PopulationBonus> should probably be it's own element under <Entity>
20:56 < leper> yay alpha 9 bugs http://trac.wildfiregames.com/ticket/1346
20:57 < Mythos_Ruler> k776: I agree with you re: cost/populationbonus
20:57 < Mythos_Ruler> I didnt design the schema though. :)
21:00 <@k776> leper: You want to try tackle that one? Pull <PopulationBonus> out of <Cost>
21:03 < leper> k776: into Identity?
21:03 <@Philip`> Being in Cost makes more sense from an implementation perspective, since it's precisely symmetric to population cost
21:03 <@Philip`> (Effectively it's just a negative cost)
21:03 <@k776> Philip`: Um, it's the bonus that the building increases population by
21:04 <@k776> i.e.upgrades max pop
21:04 <@k776> Not a Cost...
21:04 < Mythos_Ruler> k776:  is right.
21:04 <@k776> Not an Identity either
21:04 <@k776> It seems suited to a <Bonuses>  element, like  Bonuses/PopulationLimit
21:04 <@k776> I think we have a <Bonuses> somewhere already?
21:05 < quantumstate> add 5 to the pop cap, remove 5 from the current population, what difference does it make in the end?
21:05 < Mythos_Ruler> There's <Population> and then there's <PopulationBonus>
21:05 <@Philip`> If it's going to be moved anywhere, it should be a whole new component like <PopulationBonus><Amount>5</...>
Freagarach requested changes to this revision.Aug 14 2020, 10:36 AM
In D2948#128595, @Angen wrote:

Above would not work because there is Population element inside Cost currently.

I'm not sure where this would fail code-wise? Because that is indeed *inside* the Cost.

In D2948#128599, @Angen wrote:

Ok I found discussion:

Could you post the link, please? ^^

Requesting changes because the GuiInterface.js needs an update.

This revision now requires changes to proceed.Aug 14 2020, 10:36 AM

Thanks for the review, folks. It's been a busy few days at work. I'll get around to working on this someday this week 😁

Hey @lonehawk, any update? I've included the unrelated alphabetisation in D2976 so you only have to make sure the Population node is in the correct location.

@Freagarach Yes, I'll be wrapping this up this weekend.

So the final stand is: New component called "Population" and then have the properties "Cost" and "Bonus" inside it, right?

@Freagarach Yes, I'll be wrapping this up this weekend.

Cool, no hurry, I was just checking up on you :)

So the final stand is: New component called "Population" and then have the properties "Cost" and "Bonus" inside it, right?

I don't think we reached a consensus over the population *cost* actually.
If I were you I'd move only the bonus to a new component called Population. If we decide later that moving the cost is indeed also a good idea, we can move that in a separate patch. Unless someone disagrees with this approach? (@wraitii, @Angen)

lonehawk updated this revision to Diff 13345.Aug 29 2020, 2:23 PM

Renames component from PopulationHolder to Population, and also updates GUIInterface.js

lonehawk updated this revision to Diff 13346.Aug 29 2020, 2:36 PM
lonehawk marked 4 inline comments as done.

Removes unnecessary population bonus entry for units and updates a comment in Cost.js

lonehawk marked 2 inline comments as done.Aug 29 2020, 2:39 PM
lonehawk retitled this revision from Move PopulationBonus to new component PopulationHolder to Move PopulationBonus to new component Population.
lonehawk edited the summary of this revision. (Show Details)

I would like you to take a look at tooltips.js regarding the comment I gave there, otherwise this looks good :)
Feel free to ignore the style comments I gave, I can fix those before committing.

binaries/data/mods/_test.sim/simulation/templates/special/filter/foundation.xml
6–8

Ordering.

binaries/data/mods/public/gui/common/tooltips.js
10–11

Is the bonus still needed here? (And check the implications of its removal here.)

binaries/data/mods/public/gui/credits/texts/programming.json
148

One up ^^

binaries/data/mods/public/simulation/components/Population.js
9

+.

binaries/data/mods/public/simulation/components/tests/test_Foundation.js
6

Ordering.

binaries/data/mods/public/simulation/templates/special/filter/resource.xml
8–11 ↗(On Diff #13346)

Please don't move this, as the comment applies to the Obstruction.

Freagarach added a comment.EditedAug 31 2020, 8:18 AM

Oh, and if you want you can write a simple test for your new component.

[EDIT]: When you've built a structure you probably also want to see its pop bonus when hovering the shield. To that extend you need to add the population bonus to GetEntityState in GuiInterface.js (same way you did with the Templates.js) and you need an entry in gui/session/selection_details.js at Engine.GetGUIObjectByName("attackAndResistanceStats").tooltip = [.

lonehawk updated this revision to Diff 13347.Aug 31 2020, 10:15 AM
lonehawk marked 5 inline comments as done.

Sorts the ordering of content in certain files

lonehawk added inline comments.Aug 31 2020, 10:16 AM
binaries/data/mods/public/gui/common/tooltips.js
613

@Freagarach I think this type != "bonus" is also not needed, since we're not doing that anymore in getCostTypes() ? Just totalCosts[type] would be enough, right?

binaries/data/mods/public/simulation/components/Population.js
9

@Freagarach Sorry, I don't understand this? Am I supposed to add a dot after this plus?

Freagarach added inline comments.Aug 31 2020, 10:21 AM
binaries/data/mods/public/gui/common/tooltips.js
613

Aye :)

binaries/data/mods/public/simulation/components/Population.js
9

Nay, I meant that at line 8 after exists there should be a dot ^^

Build failure - The Moirai have given mortals hearts that can endure.

Link to build: https://jenkins.wildfiregames.com/job/vs2015-differential/2542/display/redirect

Nescio added a subscriber: Nescio.Aug 31 2020, 10:43 AM

In game there are three numbers:

  • population, i.e. the sum of all <Cost/Population> (from units);
  • population limit, i.e. the sum of all <Cost/PopulationBonus> (from structures);
  • population cap, or maximum population limit, i.e. the map setting, modified by some some auras and technologies, i.e. <Player/MaxPopulation>.

Given that houses etc. increase the population limit, not the population (units do), I'm unconvinced naming the new node <Population/Bonus> is appropiate. Although <PopulationHolder/Max>, as suggested in #4081, is not perfect either, it is consistent with <GarrisonHolder/Max>.

lonehawk updated this revision to Diff 13348.Aug 31 2020, 10:58 AM

Updates tooltips.js and GUIInterface for population bonus changes

Oh, and if you want you can write a simple test for your new component.

I tried, but this is too confusing for me :( I am not able to understand what is going on with the test cases, and how to use them. I did check this documentation, but I feel it's a little too vague? Perhaps I'll understand more once I get comfortable with how the codebase works.

[EDIT]: When you've built a structure you probably also want to see its pop bonus when hovering the shield. To that extend you need to add the population bonus to GetEntityState in GuiInterface.js (same way you did with the Templates.js) and you need an entry in gui/session/selection_details.js at Engine.GetGUIObjectByName("attackAndResistanceStats").tooltip = [.

I think I've done it correctly now, please do check!

lonehawk marked 3 inline comments as done.Aug 31 2020, 11:01 AM

Build failure - The Moirai have given mortals hearts that can endure.

Link to build: https://jenkins.wildfiregames.com/job/macos-differential/1444/display/redirect

Oops, looks like tests are failing, will fix them

Build failure - The Moirai have given mortals hearts that can endure.

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/3096/display/redirect

I tried, but this is too confusing for me :( I am not able to understand what is going on with the test cases, and how to use them. I did check this documentation, but I feel it's a little too vague? Perhaps I'll understand more once I get comfortable with how the codebase works.

Sure, no problem, I'll probably write a simple one.

I think I've done it correctly now, please do check!

It is always good practice to check your changes in-game :)

binaries/data/mods/public/simulation/components/GuiInterface.js
307
binaries/data/mods/public/simulation/components/Population.js
60

Extra (unnecessary) newline.

lonehawk updated this revision to Diff 13350.Aug 31 2020, 11:12 AM

Fixes test case failure, as well as missing Engine while calling QueryInterface in GUIInterface

Nescio removed a subscriber: Nescio.Aug 31 2020, 11:17 AM
lonehawk updated this revision to Diff 13352.Aug 31 2020, 11:25 AM

Updates GUIInterface for Population component changes

lonehawk marked 2 inline comments as done.Aug 31 2020, 11:35 AM

Successful build - Chance fights ever on the side of the prudent.

builderr-debug-macos.txt
../../../source/simulation2/scripting/JSInterface_Simulation.cpp:155:4: warning: suggest braces around initialization of subobject [-Wmissing-braces]
                        CFixedVector2D(-halfSize.X, -halfSize.Y),
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
In file included from ../../../source/graphics/tests/test_Camera.cpp:17:
/Users/wfg/Jenkins/workspace/macos-differential/source/graphics/tests/test_Camera.h:168:4: warning: suggest braces around initialization of subobject [-Wmissing-braces]
                        CVector3D(-101.0f, -101.0f, 101.0f),
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
In file included from ../../../source/simulation2/tests/test_SerializeTemplates.cpp:17:
/Users/wfg/Jenkins/workspace/macos-differential/source/simulation2/tests/test_SerializeTemplates.h:39:4: warning: suggest braces around initialization of subobject [-Wmissing-braces]
                        3, 0, 1, 4, 1, 5
                        ^~~~~~~~~~~~~~~~
                        {               }
1 warning generated.
builderr-release-macos.txt
../../../source/simulation2/scripting/JSInterface_Simulation.cpp:155:4: warning: suggest braces around initialization of subobject [-Wmissing-braces]
                        CFixedVector2D(-halfSize.X, -halfSize.Y),
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: ../../../binaries/system/libsimulation2.a(precompiled.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: ../../../binaries/system/libgraphics.a(precompiled.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: ../../../binaries/system/libatlas.a(precompiled.o) has no symbols
In file included from ../../../source/graphics/tests/test_Camera.cpp:17:
/Users/wfg/Jenkins/workspace/macos-differential/source/graphics/tests/test_Camera.h:168:4: warning: suggest braces around initialization of subobject [-Wmissing-braces]
                        CVector3D(-101.0f, -101.0f, 101.0f),
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
In file included from ../../../source/simulation2/tests/test_SerializeTemplates.cpp:17:
/Users/wfg/Jenkins/workspace/macos-differential/source/simulation2/tests/test_SerializeTemplates.h:39:4: warning: suggest braces around initialization of subobject [-Wmissing-braces]
                        3, 0, 1, 4, 1, 5
                        ^~~~~~~~~~~~~~~~
                        {               }
1 warning generated.

Link to build: https://jenkins.wildfiregames.com/job/macos-differential/1447/display/redirect

Build failure - The Moirai have given mortals hearts that can endure.

Link to build: https://jenkins.wildfiregames.com/job/vs2015-differential/2543/display/redirect

Build failure - The Moirai have given mortals hearts that can endure.

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/3102/display/redirect

Freagarach accepted this revision.Aug 31 2020, 1:01 PM
  • Population bonuses are handled.
  • Modifications apply.
  • Ownership changes are handled correctly.
  • Patch is good (population bonus is not a cost).

On PopulationBonus and Amount vs Population and Bonus: I think the "population cost" ought to be moved from cost to this component in the near future, hence I opted for the latter.

This revision is now accepted and ready to land.Aug 31 2020, 1:01 PM
Nescio added a comment.Sep 1 2020, 9:20 AM

On PopulationBonus and Amount vs Population and Bonus: I think the "population cost" ought to be moved from cost to this component in the near future, hence I opted for the latter.

Why? Population is clearly a cost. Besides, population and “population bonus” (i.e. population limit) are independent from each other. Just because they have something to do with the same resource doesn't mean they must be in a single node. Likewise, other resources are present in multiple nodes too (e.g. <Cost>, <Loot>, <Looter>, <ResourceGatherer>, <ResourceSupply>, <TechCostMultiplier>); and even more for time (or interval).

wraitii added a subscriber: Nescio.Sep 1 2020, 10:01 AM

Why? Population is clearly a cost.

It is a cost in a semantic sense, but the "Cost" component represents a "resource transaction", which doesn't fit population very well right now. Separating them might actually make sense (and it might not -> haven't investigated enough, but I can see it).

Angen requested changes to this revision.Sep 1 2020, 11:28 AM

build house
research population bonus
build second house

result: first house has bonus applied, second does not

This revision now requires changes to proceed.Sep 1 2020, 11:28 AM

(Just for the record, that bug is already present without this patch.)

@lonehawk No rushes, but how are things going? The patch is nigh finished and I'm eager to get your first contribution in ;)

Freagarach updated this revision to Diff 13581.Wed, Sep 30, 9:20 AM

Add regression test for above mentioned behaviour.

@lonehawk: I've added a test for the bug @Angen mentioned. If you have time you can solve it. But for now the builds will fail because of it.

Build failure - The Moirai have given mortals hearts that can endure.

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/3266/display/redirect

Build failure - The Moirai have given mortals hearts that can endure.

Link to build: https://jenkins.wildfiregames.com/job/vs2015-differential/2713/display/redirect

Build failure - The Moirai have given mortals hearts that can endure.

builderr-debug-macos.txt
../../../source/simulation2/scripting/JSInterface_Simulation.cpp:155:4: warning: suggest braces around initialization of subobject [-Wmissing-braces]
                        CFixedVector2D(-halfSize.X, -halfSize.Y),
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
../../../source/third_party/fmt/format.cpp:145:7: warning: '_POSIX_C_SOURCE' is not defined, evaluates to 0 [-Wundef]
#if ((_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && !_GNU_SOURCE) || (defined(__ANDROID__) && __ANDROID__)
      ^
../../../source/third_party/fmt/format.cpp:145:37: warning: '_XOPEN_SOURCE' is not defined, evaluates to 0 [-Wundef]
#if ((_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && !_GNU_SOURCE) || (defined(__ANDROID__) && __ANDROID__)
                                    ^
2 warnings generated.
In file included from ../../../source/tools/atlas/AtlasObject/AtlasObjectJS.cpp:21:
In file included from ../../../source/tools/atlas/AtlasObject/JSONSpiritInclude.h:32:
../../../source/third_party/jsonspirit/json_spirit_writer_template.h:37:50: warning: unused typedef 'Char_type' [-Wunused-local-typedef]
        typedef typename String_type::value_type Char_type;
                                                 ^
1 warning generated.
../../../source/tools/atlas/AtlasUI/ActorEditor/ActorEditor.cpp:45:2: warning: 'GetCurrentProcess' is deprecated: first deprecated in macOS 10.9 [-Wdeprecated-declarations]
        GetCurrentProcess(&PSN);
        ^
/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h:415:1: note: 'GetCurrentProcess' has been explicitly marked deprecated here
MacGetCurrentProcess(ProcessSerialNumber * PSN)               AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_9;
^
/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h:412:34: note: expanded from macro 'MacGetCurrentProcess'
    #define MacGetCurrentProcess GetCurrentProcess
                                 ^
1 warning generated.
In file included from ../../../source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Map/Map.cpp:23:
In file included from ../../../source/tools/atlas/AtlasObject/JSONSpiritInclude.h:32:
In file included from ../../../source/third_party/jsonspirit/json_spirit_writer_template.h:13:
../../../source/third_party/jsonspirit/json_spirit_value.h:586:24: warning: 'static' function 'value_type_to_string' declared in header file should be declared 'static inline' [-Wunneeded-internal-declaration]
    static std::string value_type_to_string( const Value_type vtype )
                       ^
In file included from ../../../source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Map/Map.cpp:23:
In file included from ../../../source/tools/atlas/AtlasObject/JSONSpiritInclude.h:32:
../../../source/third_party/jsonspirit/json_spirit_writer_template.h:37:50: warning: unused typedef 'Char_type' [-Wunused-local-typedef]
        typedef typename String_type::value_type Char_type;
                                                 ^
2 warnings generated.
ld: warning: direct access in function 'wxNavigationEnabled<wxWindow>::wxNavigationEnabled()' from file 'obj/AtlasUI_Debug/ActorEditor.o' to global weak symbol 'wxNavigationEnabled<wxWindow>::OnChildFocus(wxChildFocusEvent&)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_filedlg.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxNavigationEnabled<wxWindow>::wxNavigationEnabled()' from file 'obj/AtlasUI_Debug/ActorEditor.o' to global weak symbol 'wxNavigationEnabled<wxWindow>::OnFocus(wxFocusEvent&)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_filedlg.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxNavigationEnabled<wxWindow>::wxNavigationEnabled()' from file 'obj/AtlasUI_Debug/ActorEditor.o' to global weak symbol 'wxNavigationEnabled<wxWindow>::OnNavigationKey(wxNavigationKeyEvent&)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_filedlg.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxStringToStringHashMap_wxImplementation_HashTable::clear()' from file 'obj/AtlasUI_Debug/ActorEditor.o' to global weak symbol 'wxStringToStringHashMap_wxImplementation_HashTable::DeleteNode(_wxHashTable_NodeBase*)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_window.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxStringToNumHashMap_wxImplementation_HashTable::clear()' from file 'obj/AtlasUI_Debug/ActorEditor.o' to global weak symbol 'wxStringToNumHashMap_wxImplementation_HashTable::DeleteNode(_wxHashTable_NodeBase*)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_window.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxAnyButton::DoSetBitmap(wxBitmap const&, wxAnyButtonBase::State)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_anybutton_osx.o)' to global weak symbol 'typeinfo for wxButtonImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_button.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxComboBox::DoInsertItems(wxArrayStringsAdapter const&, unsigned int, void**, wxClientDataType)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_combobox_osx.o)' to global weak symbol 'typeinfo for wxComboWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_combobox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxComboBox::GetComboPeer() const' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_combobox_osx.o)' to global weak symbol 'typeinfo for wxComboWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_combobox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxComboBox::GetCount() const' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_combobox_osx.o)' to global weak symbol 'typeinfo for wxComboWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_combobox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'non-virtual thunk to wxComboBox::GetCount() const' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_combobox_osx.o)' to global weak symbol 'typeinfo for wxComboWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_combobox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxComboBox::DoDeleteOneItem(unsigned int)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_combobox_osx.o)' to global weak symbol 'typeinfo for wxComboWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_combobox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'non-virtual thunk to wxComboBox::DoDeleteOneItem(unsigned int)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_combobox_osx.o)' to global weak symbol 'typeinfo for wxComboWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_combobox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxComboBox::DoClear()' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_combobox_osx.o)' to global weak symbol 'typeinfo for wxComboWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_combobox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'non-virtual thunk to wxComboBox::DoClear()' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_combobox_osx.o)' to global weak symbol 'typeinfo for wxComboWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_combobox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxComboBox::GetSelection() const' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_combobox_osx.o)' to global weak symbol 'typeinfo for wxComboWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_combobox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'non-virtual thunk to wxComboBox::GetSelection() const' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_combobox_osx.o)' to global weak symbol 'typeinfo for wxComboWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_combobox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxComboBox::SetSelection(int)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_combobox_osx.o)' to global weak symbol 'typeinfo for wxComboWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_combobox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'non-virtual thunk to wxComboBox::SetSelection(int)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_combobox_osx.o)' to global weak symbol 'typeinfo for wxComboWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_combobox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxComboBox::FindString(wxString const&, bool) const' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_combobox_osx.o)' to global weak symbol 'typeinfo for wxComboWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_combobox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxComboBox::GetString(unsigned int) const' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_combobox_osx.o)' to global weak symbol 'typeinfo for wxComboWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_combobox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxComboBox::SetString(unsigned int, wxString const&)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_combobox_osx.o)' to global weak symbol 'typeinfo for wxComboWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_combobox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'non-virtual thunk to wxComboBox::SetString(unsigned int, wxString const&)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_combobox_osx.o)' to global weak symbol 'typeinfo for wxComboWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_combobox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxComboBox::Popup()' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_combobox_osx.o)' to global weak symbol 'typeinfo for wxComboWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_combobox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'non-virtual thunk to wxComboBox::Popup()' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_combobox_osx.o)' to global weak symbol 'typeinfo for wxComboWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_combobox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxComboBox::Dismiss()' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_combobox_osx.o)' to global weak symbol 'typeinfo for wxComboWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_combobox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'non-virtual thunk to wxComboBox::Dismiss()' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_combobox_osx.o)' to global weak symbol 'typeinfo for wxComboWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_combobox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxListBox::Create(wxWindow*, int, wxPoint const&, wxSize const&, int, wxString const*, long, wxValidator const&, wxString const&)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_listbox_osx.o)' to global weak symbol 'typeinfo for wxListWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_listbox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxListBox::GetListPeer() const' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_listbox_osx.o)' to global weak symbol 'typeinfo for wxListWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_listbox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxListBox::~wxListBox()' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_listbox_osx.o)' to global weak symbol 'typeinfo for wxListWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_listbox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxListBox::FreeData()' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_listbox_osx.o)' to global weak symbol 'typeinfo for wxListWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_listbox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxListBox::DoSetFirstItem(int)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_listbox_osx.o)' to global weak symbol 'typeinfo for wxListWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_listbox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxListBox::EnsureVisible(int)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_listbox_osx.o)' to global weak symbol 'typeinfo for wxListWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_listbox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxListBox::DoDeleteOneItem(unsigned int)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_listbox_osx.o)' to global weak symbol 'typeinfo for wxListWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_listbox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxListBox::DoClear()' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_listbox_osx.o)' to global weak symbol 'typeinfo for wxListWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_listbox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'non-virtual thunk to wxListBox::DoClear()' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_listbox_osx.o)' to global weak symbol 'typeinfo for wxListWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_listbox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxListBox::DoSetSelection(int, bool)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_listbox_osx.o)' to global weak symbol 'typeinfo for wxListWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_listbox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxListBox::IsSelected(int) const' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_listbox_osx.o)' to global weak symbol 'typeinfo for wxListWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_listbox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxListBox::GetSelections(wxArrayInt&) const' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_listbox_osx.o)' to global weak symbol 'typeinfo for wxListWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_listbox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxListBox::GetSelection() const' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_listbox_osx.o)' to global weak symbol 'typeinfo for wxListWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_listbox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'non-virtual thunk to wxListBox::GetSelection() const' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_listbox_osx.o)' to global weak symbol 'typeinfo for wxListWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_listbox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxListBox::DoListHitTest(wxPoint const&) const' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_listbox_osx.o)' to global weak symbol 'typeinfo for wxListWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_listbox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxListBox::DoInsertItems(wxArrayStringsAdapter const&, unsigned int, void**, wxClientDataType)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_listbox_osx.o)' to global weak symbol 'typeinfo for wxListWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_listbox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxListBox::DoInsertItems(wxArrayStringsAdapter const&, unsigned int, void**, wxClientDataType)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_listbox_osx.o)' to global weak symbol 'typeinfo for wxListWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_listbox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxListBox::SetString(unsigned int, wxString const&)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_listbox_osx.o)' to global weak symbol 'typeinfo for wxListWidgetImpl' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_listbox.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxStringToStringHashMap_wxImplementation_HashTable::CreateNode(wxStringToStringHashMap_wxImplementation_Pair const&, unsigned long)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_containr.o)' to global weak symbol 'wxStringToStringHashMap_wxImplementation_HashTable::GetBucketForNode(wxStringToStringHashMap_wxImplementation_HashTable*, wxStringToStringHashMap_wxImplementation_HashTable::Node*)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_window.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxLogRecordInfo::ExtraData::ExtraData()' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_baseu-3.0.a(baselib_filefn.o)' to global weak symbol 'wxStringToNumHashMap_wxImplementation_HashTable::DeleteNode(_wxHashTable_NodeBase*)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_window.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxLog::CallDoLogNow(unsigned long, wxString const&, wxLogRecordInfo const&)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_baseu-3.0.a(baselib_log.o)' to global weak symbol 'wxStringToNumHashMap_wxImplementation_HashTable::DeleteNode(_wxHashTable_NodeBase*)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_window.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxLog::CallDoLogNow(unsigned long, wxString const&, wxLogRecordInfo const&)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_baseu-3.0.a(baselib_log.o)' to global weak symbol 'wxStringToStringHashMap_wxImplementation_HashTable::DeleteNode(_wxHashTable_NodeBase*)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_window.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxLogRecordInfo::Copy(wxLogRecordInfo const&)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_baseu-3.0.a(baselib_log.o)' to global weak symbol 'wxStringToNumHashMap_wxImplementation_HashTable::DeleteNode(_wxHashTable_NodeBase*)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_window.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxLogRecordInfo::Copy(wxLogRecordInfo const&)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_baseu-3.0.a(baselib_log.o)' to global weak symbol 'wxStringToStringHashMap_wxImplementation_HashTable::GetBucketForNode(wxStringToStringHashMap_wxImplementation_HashTable*, wxStringToStringHashMap_wxImplementation_HashTable::Node*)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_window.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxLogRecordInfo::Copy(wxLogRecordInfo const&)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_baseu-3.0.a(baselib_log.o)' to global weak symbol 'wxStringToStringHashMap_wxImplementation_HashTable::GetBucketForNode(wxStringToStringHashMap_wxImplementation_HashTable*, wxStringToStringHashMap_wxImplementation_HashTable::Node*)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_window.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxScopedPtr<wxMsgCatalog>::~wxScopedPtr()' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_baseu-3.0.a(baselib_translation.o)' to global weak symbol 'wxStringToStringHashMap_wxImplementation_HashTable::DeleteNode(_wxHashTable_NodeBase*)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_window.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxTranslations::~wxTranslations()' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_baseu-3.0.a(baselib_translation.o)' to global weak symbol 'wxStringToStringHashMap_wxImplementation_HashTable::DeleteNode(_wxHashTable_NodeBase*)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_window.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxTranslations::GetBestTranslation(wxString const&, wxString const&)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_baseu-3.0.a(baselib_translation.o)' to global weak symbol 'wxStringToStringHashMap_wxImplementation_HashTable::DeleteNode(_wxHashTable_NodeBase*)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_window.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxTranslations::GetBestTranslation(wxString const&, wxString const&)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_baseu-3.0.a(baselib_translation.o)' to global weak symbol 'wxStringToStringHashMap_wxImplementation_HashTable::DeleteNode(_wxHashTable_NodeBase*)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_window.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxMsgCatalog::wxMsgCatalog(wxString const&)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_baseu-3.0.a(baselib_translation.o)' to global weak symbol 'wxStringToStringHashMap_wxImplementation_HashTable::DeleteNode(_wxHashTable_NodeBase*)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_window.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxExecute(char**, int, wxProcess*, wxExecuteEnv const*)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_baseu-3.0.a(baselib_utilsunx.o)' to global weak symbol 'wxStringToStringHashMap_wxImplementation_HashTable::DeleteNode(_wxHashTable_NodeBase*)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_window.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in function 'wxExecute(char**, int, wxProcess*, wxExecuteEnv const*)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_baseu-3.0.a(baselib_utilsunx.o)' to global weak symbol 'wxStringToStringHashMap_wxImplementation_HashTable::DeleteNode(_wxHashTable_NodeBase*)' from file '/Users/wfg/Jenkins/workspace/macos-differential/libraries/osx/wxwidgets/lib/libwx_osx_cocoau_core-3.0.a(corelib_osx_cocoa_window.o)' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
In file included from ../../../source/graphics/tests/test_Camera.cpp:17:
/Users/wfg/Jenkins/workspace/macos-differential/source/graphics/tests/test_Camera.h:168:4: warning: suggest braces around initialization of subobject [-Wmissing-braces]
                        CVector3D(-101.0f, -101.0f, 101.0f),
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
In file included from ../../../source/simulation2/tests/test_SerializeTemplates.cpp:17:
/Users/wfg/Jenkins/workspace/macos-differential/source/simulation2/tests/test_SerializeTemplates.h:39:4: warning: suggest braces around initialization of subobject [-Wmissing-braces]
                        3, 0, 1, 4, 1, 5
                        ^~~~~~~~~~~~~~~~
                        {               }
1 warning generated.

Link to build: https://jenkins.wildfiregames.com/job/macos-differential/1614/display/redirect

Do you guys think OnValueModification is where the problem would be? Isn't that what is called whenever the population bonus value is updated?

binaries/data/mods/public/simulation/components/Population.js
38

@Freagarach Sorry, I got swept away with other things, and I couldn't devote time for this. Do you think the above OnValueModification function is where I should be looking for the issue? I will check this in the coming weekend.

I wish we could set a breakpoint and do a line-by-line debugging like we do in browsers to see if the correct value is being set. I tried checking our wiki, but there doesn't seem to be a way to do this? (Or I completely missed it).

Sure, no problem! Please don't feel pushed by me, I'm just pinging every now and then ;)

If I am not mistaken, breakpoints are only usable on the C++-side.

Do you guys think OnValueModification is where the problem would be? Isn't that what is called whenever the population bonus value is updated?

Yes and no ^^' The bug description gives some insight about that:

In D2948#130310, @Angen wrote:

build house
research population bonus
build second house

result: first house has bonus applied, second does not

So OnValueModification _is_ applied (first house has bonus applied).
Now you probably need some background how a structure is constructed: when finished, the structure is created in the engine with a default player of INVALID_PLAYER. When everything goes fine, the last step is to convert ownership from INVALID_PLAYER to the player who built it.

So imagine the process for a house:
A player finishes a foundation: the house is inited (this.bonus is being set to the template value) and as one of the last steps OnOwnershipChanged is called (this.bonus is added to the player). <- All good.
Next, the player researches the tech for increased pop:
The already built house receives the message (which is indeed only send whenever the value is changed) and corrects the player's popbonus.

Next house:
A player finishes a foundation: the house is inited (this.bonus is being set to the template value) and as one of the last steps OnOwnershipChanged is called (this.bonus is added to the player). <- Wait, we're still using the template value here! Which correlates with the bug report second does not.

I hope this helps :)

binaries/data/mods/public/simulation/components/Population.js
38

You can use warn(uneval(variablename)); to debug values. Since the components are hotloaded, you can add them while testing stuff.