)]}'
{
  "commit": "0f610c8b37c7d3305c9e504e7666f62c53508d3c",
  "tree": "dfa023f78a8df3878b3c981407c8d28a941c04a4",
  "parents": [
    "46f94b5a7f5527b5d7ef57271d3e9447a65e22ac"
  ],
  "author": {
    "name": "danakj",
    "email": "danakj@chromium.org",
    "time": "Tue Mar 08 16:46:22 2022 -0500"
  },
  "committer": {
    "name": "Commit Bot",
    "email": "commit-bot@chromium.org",
    "time": "Wed Mar 09 19:06:55 2022 +0000"
  },
  "message": "Don\u0027t propagate rlibs through shared libraries for linking purposes.\n\nIf a C++ target depends on an rlib R, the rlibs are treated as libraries\nfor linking purposes, and all transitive dependencies of R are required\nat linking time.\n\nThe above holds true within a single final linking target, such as an\nexecutable or shared library. However currently the rlibs inside a\nshared library get linked again into anything that depends on the\nshared library. This results in linking issues, such as missing\nsymbols.\n\nexecutable(A) -\u003e dylib(B) -\u003e rlib(C) -\u003e rlib(D)\n\nIf A wants to use C or D, and they are public dependencies, it does\nnot need to link them into A. They are already linked into B and A\nwill be linked against B.\n\nI believe this becomes a more visible problem when C or D depends on a\nC++ static library which has non-public symbols, as then A ends up\nincorrectly linking C without linking its non-Rust dependencies too.\n\nBug: 276\nChange-Id: I8ee2c1d89190920cb5a9eee0e0b6da8a18d4a235\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/13080\nReviewed-by: Tyler Mandry \u003ctmandry@google.com\u003e\nReviewed-by: Brett Wilson \u003cbrettw@google.com\u003e\nReviewed-by: Brett Wilson \u003cbrettw@chromium.org\u003e\nCommit-Queue: Brett Wilson \u003cbrettw@chromium.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3321191f045a8c6abb57738154390e37e3b520a6",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_c_binary_target_writer.cc",
      "new_id": "438e185b72770b9c37c02455c544e99a180dd972",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_c_binary_target_writer.cc"
    },
    {
      "type": "modify",
      "old_id": "61bc517f966e9940a05dbeb9579cee3cf6f35661",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_c_binary_target_writer_unittest.cc",
      "new_id": "e1bdbccdb649e5a813c08a264df283f3d13ddd97",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_c_binary_target_writer_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "c491897440557ed6d7ff1d74e9acba0293609a55",
      "old_mode": 33188,
      "old_path": "src/gn/target.cc",
      "new_id": "53c6510ff0aeb48598ad2b6e90a1e884d7ea1d38",
      "new_mode": 33188,
      "new_path": "src/gn/target.cc"
    },
    {
      "type": "modify",
      "old_id": "de076a84dbfb10ffee51c588018d76816afa2ff1",
      "old_mode": 33188,
      "old_path": "src/gn/target.h",
      "new_id": "31d4e3aa3202ed2ca9c882487d2e52f642af5f58",
      "new_mode": 33188,
      "new_path": "src/gn/target.h"
    }
  ]
}
