diff --git a/research/h25-gcc-libexec-phase-frame/.gitattributes b/research/h25-gcc-libexec-phase-frame/.gitattributes new file mode 100644 index 0000000000..d8f4f5e052 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/.gitattributes @@ -0,0 +1 @@ +* -text -filter -ident diff --git a/research/h25-gcc-libexec-phase-frame/MANIFEST.json b/research/h25-gcc-libexec-phase-frame/MANIFEST.json new file mode 100644 index 0000000000..6291bec9a6 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/MANIFEST.json @@ -0,0 +1,434 @@ +{ + "schema": "h25-gcc-libexec-phase-frame-manifest-v1", + "package": "research/h25-gcc-libexec-phase-frame", + "scope": "Exact archival bytes only; external SHA256 required for this non-self-inventoried manifest.", + "files": [ + { + "path": ".gitattributes", + "bytes": 23, + "sha256": "aca07970df50b15cddb5333b18259deb2a0c6efb48c494c55a7dfdb37fcba5a5", + "git_blob": "d8f4f5e0523c3bd5daf3b5e802de604b5f2a5540", + "git_mode": "100644" + }, + { + "path": "NOTICE.md", + "bytes": 2721, + "sha256": "db14a70034f5d3fb598cf8dd06655804bf6fb9204560ee17b874926f368f9269", + "git_blob": "34d4771304b0a7c145ffac6437fc556ab6937185", + "git_mode": "100644" + }, + { + "path": "README.md", + "bytes": 13470, + "sha256": "d81ea59b71d99aa7aa8974471085036b952bd848115115d31a3004dbd34ca0cf", + "git_blob": "b404c6f7a972d7e5121e1f44150e964b44772ff4", + "git_mode": "100644" + }, + { + "path": "SOURCE-ARCHIVE.json", + "bytes": 3684, + "sha256": "07f9293d6305c915d5025bfb8acc9676d2d526392ef50a812b0b957df56306de", + "git_blob": "0346a60d72a75ca069342ec866c985c366ea5ad6", + "git_mode": "100644" + }, + { + "path": "SOURCE-MAP.json", + "bytes": 41784, + "sha256": "f723b5a36fc6cee20fa62e28f7a5e43b2f7872e4a638d306051a9af28b9c2850", + "git_blob": "e2207cd2bf5b67af2ecddf1c3e6f9372338c3a50", + "git_mode": "100644" + }, + { + "path": "evidence/consultation/ASSESSMENT-v20.md", + "bytes": 3946, + "sha256": "74badd2ce0efb5b79139d76ef8d5c28d4b4f1516d394a95af1cf0c1f7f636401", + "git_blob": "1b110ef12c10d0299bc28744f734923d1ebc89d9", + "git_mode": "100644" + }, + { + "path": "evidence/consultation/SEND-RECEIPT-v20.json", + "bytes": 635, + "sha256": "60e29f917bdcd56e296f2594df40dc4754aedbcf7842d9385c18719ec8380b7d", + "git_blob": "1eccb22e2d1c3d546bdc68434754770541f3e934", + "git_mode": "100644" + }, + { + "path": "evidence/consultation/SENT-VERIFICATION-v20.json", + "bytes": 302, + "sha256": "5d90fa241354789a0fe35f447934a868f67511347ec8f7ef20f14cbfb8058834", + "git_blob": "97153e31f92e80a3a6457aedd4500cd352b847d3", + "git_mode": "100644" + }, + { + "path": "evidence/frame/CORRECTION-v1.json", + "bytes": 1135, + "sha256": "ab0aaf1add9ea24ca56d258c927c4836625d303c90d9eb84ca0d076ecbdd03b3", + "git_blob": "aa597c21f284eb1b5b03c1e99b7ce063b160aa2b", + "git_mode": "100644" + }, + { + "path": "evidence/frame/PLAN.json", + "bytes": 626, + "sha256": "c9406d5126a3fc7732b983ea308b1ed088b2f09bf35917f4efdf37b97ada45ac", + "git_blob": "9c06634d5ffe03c34f1f4ee152690dd7eca8d617", + "git_mode": "100644" + }, + { + "path": "evidence/frame/PROPERTY-FRAME-v1.json", + "bytes": 17423, + "sha256": "058f40fefd8c06a3867e77e7e95a70d4690bcc34f3ba3f50a7233d121f50546d", + "git_blob": "e17bec17a4dc86a8695908437160629bded6eea5", + "git_mode": "100644" + }, + { + "path": "evidence/frame/PROPERTY-FRAME-v1.md", + "bytes": 6173, + "sha256": "cc25f8cf72498ac0962cd4b2f12dc584f0ee39563304130b76631a99bcfd374a", + "git_blob": "e678e5454f43a539b1f203fd0c68bb5d307a48d9", + "git_mode": "100644" + }, + { + "path": "evidence/frame/READER-NOTES-v1.json", + "bytes": 934, + "sha256": "bda3f8414be9fb84ba8b99ea57a009dd6a88741a462fc2f375423c8097a6b1f6", + "git_blob": "1bbfd5087d9de5be9b5cef8287ca238e3095b101", + "git_mode": "100644" + }, + { + "path": "evidence/frame/REPORTING-CORRECTION-v1.json", + "bytes": 817, + "sha256": "59fa46d3c042ce6744974400bf3a19d1ed08cacaeaf08382d6bd9dd58976ba1f", + "git_blob": "d5864a86c618eeedb76c80805dd7d60a4da3bdcf", + "git_mode": "100644" + }, + { + "path": "evidence/frame/SOURCE-FREEZE-v1.json", + "bytes": 3129, + "sha256": "955808701850c118409a26caf24bb176340bdf2cab0384fae31ac5562e1c93ef", + "git_blob": "f49ddd41f8cbdbd073309ad8037b5d6316a32770", + "git_mode": "100644" + }, + { + "path": "evidence/frame/SOURCE-PINS-v1.json", + "bytes": 6094, + "sha256": "4cd178b2ad9e41b5dfbd86661ac9aba60d69f99f320244a7a76cecca48204092", + "git_blob": "8f9ae66e399a1cf68fe05530f35482495ed743fc", + "git_mode": "100644" + }, + { + "path": "evidence/frame/draft-before-origin-clarification/PROPERTY-FRAME-v1.json", + "bytes": 16751, + "sha256": "1c233c93e67472a8f2981178491044563abf60ce7071f80e728c8e26d6016959", + "git_blob": "e4002911f418632e6b920acd020226f5115c0f33", + "git_mode": "100644" + }, + { + "path": "evidence/frame/draft-before-origin-clarification/PROPERTY-FRAME-v1.md", + "bytes": 5698, + "sha256": "51adbed110b5123d0039216dd6fdedf8b5cb54ad7803eba04fc1bdcf6c0f818b", + "git_blob": "5e96af4224c99895a131d3d7cddd3ba6a19a9896", + "git_mode": "100644" + }, + { + "path": "evidence/frame/review/REVIEW-v1.json", + "bytes": 22123, + "sha256": "cedf912c5fcb6d9e573b7ac88133dad0ca80f6fc9e9b59af4dc025138c7b1ca9", + "git_blob": "2da9bce780fb6598bf36d7f20364650408757efd", + "git_mode": "100644" + }, + { + "path": "evidence/frame/review/REVIEW-v1.md", + "bytes": 4833, + "sha256": "bc76dac2264ec465455aac688b81813f457b10c99cfa09422956710a8a271ed7", + "git_blob": "e44794a230ecef73ef065644e66ff0ec8d01d899", + "git_mode": "100644" + }, + { + "path": "evidence/input/INPUT-METADATA-v1.json", + "bytes": 3326, + "sha256": "50ff79c303d16f069e9bd40b9879a16bc047828bd99b4dd4bfeabcab95da2117", + "git_blob": "a7d7818104996c7e4f53d5f886947af520624d82", + "git_mode": "100644" + }, + { + "path": "evidence/input/review/FREEZE-v1.json", + "bytes": 1266, + "sha256": "ec1c9cfad59ff67b407b59a550809dda06602d4afc564abff58257f61bfa5aad", + "git_blob": "be97aecc4fc74aef4d8ea25cdcce30a9fb7b8912", + "git_mode": "100644" + }, + { + "path": "evidence/input/review/FREEZE-v2.json", + "bytes": 2092, + "sha256": "381e4e37fd557e5cd2e910b5a86a4cb97ba21b837f12f7697d63633eaabc0572", + "git_blob": "3469ae39774077bc726b91c6f05a060b36705fbf", + "git_mode": "100644" + }, + { + "path": "evidence/input/review/PLAN-v1.json", + "bytes": 544, + "sha256": "218353182ee9bcf230c9506d20b067ad1d4ace9fa456733e3438705a0bc31ce0", + "git_blob": "74af6001d6736f82fd62877e23d723f50340d5f5", + "git_mode": "100644" + }, + { + "path": "evidence/input/review/REVIEW-v1.json", + "bytes": 12817, + "sha256": "872a81744822335772b2d1ed4ac9f786d63fcf888642ffa0849c0f9461d04f81", + "git_blob": "5482a9eebc79cbf8c474cd07c769afaebe314dbe", + "git_mode": "100644" + }, + { + "path": "evidence/input/review/REVIEW-v1.md", + "bytes": 4443, + "sha256": "01c8e725904230a319e752039bdfbbe23b300a5612711df4344834afe7ee459e", + "git_blob": "3634642826a7c9f65c9fa7a2e2cc88efe2341551", + "git_mode": "100644" + }, + { + "path": "evidence/input/review/REVIEW-v2.md", + "bytes": 2541, + "sha256": "349b462fe429503e466ee561eb901b4ff0826ad0f2f3e3312c5b595b81a83433", + "git_blob": "7c6f92491ce391499ecc09a4d8fc03558ac0fd22", + "git_mode": "100644" + }, + { + "path": "evidence/licenses/LICENSE-PROVENANCE-v1.json", + "bytes": 1067, + "sha256": "9855171852f2d0190af7cc3f2b45673e2d518d3543cceab53adecc32bcee8ff8", + "git_blob": "ead927166cf5ac1690540104da937444665e5f04", + "git_mode": "100644" + }, + { + "path": "evidence/licenses/LICENSE-PROVENANCE-v2.json", + "bytes": 1090, + "sha256": "c4ac6815bc5e43d75e4be3ffd69b7a123d7ae566956a63bf80d2f05a62f0fc44", + "git_blob": "47a85fef99281daf88df6c924fc37e479de31307", + "git_mode": "100644" + }, + { + "path": "evidence/reported-driver-input/FREEZE-v1.json", + "bytes": 1873, + "sha256": "7cdc1f01e230e9e657d0999ce926b83d2bc5ad24861fe798a988e96990ffc036", + "git_blob": "d062a795cda9812673192aa7a93ec2ebfd9b3634", + "git_mode": "100644" + }, + { + "path": "evidence/reported-driver-input/INPUT-v1.json", + "bytes": 18882, + "sha256": "edaa4c06aa5d72228161691614262ab546a46c7b30396c03c6c0ff8ecc348892", + "git_blob": "0e73ec1f6564afccd80c770d2a534777f74a8551", + "git_mode": "100644" + }, + { + "path": "evidence/reported-driver-input/INPUT-v1.md", + "bytes": 4260, + "sha256": "442df911f18ff022e78289da05bb596e5c8c22ef91c056da60b1cc6c8d1649f7", + "git_blob": "0c2c1212df29516d6f5edb60769c802b4161b056", + "git_mode": "100644" + }, + { + "path": "evidence/reported-driver-input/OBSERVATIONS-v1.json", + "bytes": 3379, + "sha256": "55cb5892864260e322192d40ca1cf5003d288438e938f0432e7bf0f11aee6eb3", + "git_blob": "21a7eff98360ad9da7856e7bc5a70edb5e261ef0", + "git_mode": "100644" + }, + { + "path": "evidence/reported-driver-input/PLAN-v1.json", + "bytes": 1854, + "sha256": "923606f137bbb394a2b477292a239d3ec89a26ddcd6dafff72f7c884299bee9c", + "git_blob": "fda8645131cd464381bf7f78521c85c70b84abbc", + "git_mode": "100644" + }, + { + "path": "integrity.py", + "bytes": 7580, + "sha256": "22637ba30acc7825a992bdd4aa29479705141d1f495ef168f8ff4108eecb0140", + "git_blob": "8f444c86d5b7a89d249b8fbc923c22164bace5fc", + "git_mode": "100644" + }, + { + "path": "licenses/Apache-2.0.txt", + "bytes": 11357, + "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "git_blob": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64", + "git_mode": "100644" + }, + { + "path": "licenses/GCC-Runtime-Library-Exception.txt", + "bytes": 3324, + "sha256": "9d6b43ce4d8de0c878bf16b54d8e7a10d9bd42b75178153e3af6a815bdc90f74", + "git_blob": "e1b3c69c179dfaff5744ea4bf853e6b0d90c9ef9", + "git_mode": "100644" + }, + { + "path": "licenses/GPL-3-standard-text", + "bytes": 35149, + "sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", + "git_blob": "f288702d2fa16d3cdf0035b15a9fcbc552cd88e7", + "git_mode": "100644" + }, + { + "path": "licenses/GPL-3.0-gcc-source.txt", + "bytes": 35147, + "sha256": "8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903", + "git_blob": "94a9ed024d3859793618152ea559a168bbcbb5e2", + "git_mode": "100644" + }, + { + "path": "licenses/gcc-13-debian-copyright", + "bytes": 69100, + "sha256": "08c6f3dee4c19aa1e57eb7d4ad45829b2e99656313bd07fa0922e2553f500be5", + "git_blob": "4e76ab4575620cf6e03677caf76773e3cf59e8c2", + "git_mode": "100644" + }, + { + "path": "snapshots/pinned/consultation/COMPLETE-RECEIPT-v20.json.txt", + "bytes": 502, + "sha256": "b4bb7201bd30831fd9ae99c0cdb749b099f6c9ed68451acd1463928f973af65b", + "git_blob": "520b49d8e1c5cf9643d38e160b04168a966ead6b", + "git_mode": "100644" + }, + { + "path": "snapshots/pinned/consultation/RESPONSE-v20-LINKS.json.txt", + "bytes": 2845, + "sha256": "632191bec208036ede6b703ac851c92acb63f9997302bd305235ff70b0416d07", + "git_blob": "dd3ce6cb358bd34d31b34fef99232383673abf26", + "git_mode": "100644" + }, + { + "path": "snapshots/pinned/consultation/RESPONSE-v20.txt.txt", + "bytes": 8320, + "sha256": "02d322f0fd524fd57ab663583c704994ca03969dfbdd315b94ecd5de6a8f2095", + "git_blob": "f3505a14ce024366eab7677daf798d0ed5969916", + "git_mode": "100644" + }, + { + "path": "snapshots/pinned/driver-prefix-build-frame-v1/input/review/REVIEW-v2.json.txt", + "bytes": 5591, + "sha256": "52149802d21a4bf68c49f22fc268d6e2acc5c92e136b28f59fb24b17e85286fd", + "git_blob": "cc5c5b3d99a2ac4c133e2a30a599b47e71ba9c5d", + "git_mode": "100644" + }, + { + "path": "snapshots/pinned/evidence/EMBEDDED-CONFIGURATION-v1.json.txt", + "bytes": 1727, + "sha256": "b02f8530e592eddeac5f86a2fb3a8ea80f25ac0e8ab2945fccb64a665b18d4cc", + "git_blob": "e81c37aa4fc86b0a1741ce49f53324b49714fe61", + "git_mode": "100644" + }, + { + "path": "snapshots/pinned/source-artifacts/ACQUISITION-v2.json.txt", + "bytes": 2563, + "sha256": "c287abe845c438ec814cd3a3a807e05df6ec8def764d399fdc1bf5a036c8325d", + "git_blob": "6b78ba2ba5f8792c9e57776914edcf2b4d78ff45", + "git_mode": "100644" + }, + { + "path": "snapshots/pinned/source-artifacts/DISTRO-GENERATOR-SOURCES-v1.json.txt", + "bytes": 14886, + "sha256": "58f4a165bbd0045559eddc79f940eea4672425c0def4d4e12f95069bbbc32fbe", + "git_blob": "627de319fa7ce1bf3ed08c3308cc1739e1a412e0", + "git_mode": "100644" + }, + { + "path": "snapshots/pinned/source-artifacts/SOURCE-METADATA-CHECK-v1.json.txt", + "bytes": 4280, + "sha256": "e34ccce299d6b30d2907ce558d5138b88d65339314382199199fb531d9138514", + "git_blob": "ff5ace15785e7a47cdbdd3ef9b7eb284079387bc", + "git_mode": "100644" + }, + { + "path": "snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-MEMBERS.json.txt", + "bytes": 34772, + "sha256": "30403263d883340813c39497a89751a15c543937b950e1af2a907041d25c066f", + "git_blob": "77fb1c4f3c7a77be8225f9e2777173dc049b3cfb", + "git_mode": "100644" + }, + { + "path": "snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules.defs.txt", + "bytes": 70194, + "sha256": "aaf79170f51110b6b9c90d1bee022d2122401fdbbf8840d91baa3e6f13cbeb58", + "git_blob": "f7163f2188b5af86394d36b6acb22bfbcd72055e", + "git_mode": "100644" + }, + { + "path": "snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules.txt", + "bytes": 2984, + "sha256": "2e0afdc6303e407f344d2f6724be731ae84b8fd59758f172491c25348432d75a", + "git_blob": "81e55811083a6d6a474b125caa232a6fe583b31c", + "git_mode": "100644" + }, + { + "path": "snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules2.txt", + "bytes": 97853, + "sha256": "c9b1cebada609601ef1fe3bb34babccae572dccc3e86cebfad3927229d3b83ae", + "git_blob": "552f7a5d24f12252bf34efedcc4656b6073363f1", + "git_mode": "100644" + }, + { + "path": "snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1_amd64.buildinfo.txt", + "bytes": 52703, + "sha256": "6ee3421f6cf17d77a50122b6934790bdcc64e42ba82c6812d257055cef434b83", + "git_blob": "d73b46acc7a605b4fd147cde153ccb48ad627bf4", + "git_mode": "100644" + }, + { + "path": "snapshots/pinned/source-artifacts/gcc-additional-packaging/debian/rules.conf.txt", + "bytes": 54432, + "sha256": "bd04d88f2b6b39567344df447d03d74b149d8a6c8721c7dd0bbe9dd7b185b546", + "git_blob": "ced6704e63ecaf6c68e3ee86a36878493e923034", + "git_mode": "100644" + }, + { + "path": "snapshots/pinned/source-artifacts/gcc-additional-packaging/debian/rules.parameters.txt", + "bytes": 928, + "sha256": "954623c853cb1c7024f634084edc048a319a7f92527887cb35aacc062abd7610", + "git_blob": "acc6bd8c082ec21105595808e2cb0622904f302e", + "git_mode": "100644" + }, + { + "path": "snapshots/pinned/source-artifacts/gcc-additional-packaging/debian/rules.sonames.txt", + "bytes": 4270, + "sha256": "5fce0244ae5a0716a8b4558ac880e7a6fa26cb7ffc798c29bab536c133940ea3", + "git_blob": "1e12c6d71d8817b543bfd056cc9f4ac426c68f17", + "git_mode": "100644" + }, + { + "path": "snapshots/pinned/source-artifacts/gcc-base-selected/gcc/Makefile.in.txt", + "bytes": 164044, + "sha256": "41e0fe9006909a793736b73fdd434929c913023992c33cf9b746423f78682e45", + "git_blob": "775aaa1b3c4ba6bd81333890b6704f5c5b6b8723", + "git_mode": "100644" + }, + { + "path": "snapshots/pinned/source-artifacts/gcc-base-selected/gcc/gcc.cc.txt", + "bytes": 320626, + "sha256": "c260c6321fb3852df326618d18642a3c795a8886c285db71acde6a97fd031b0a", + "git_blob": "16bb07f2cdc5edf0a25ce1bd221d417d6bc41d3c", + "git_mode": "100644" + }, + { + "path": "snapshots/pinned/source-artifacts/gcc-debian-patch-inputs/debian/patches/cross-install-location.diff.txt", + "bytes": 22890, + "sha256": "9e943d2ea5dbabe60ee30a3cd08384874ce7c933ed233018871dbb568275eeb3", + "git_blob": "ef5f64b661a4874561f0762fd88dc0c08f009e6a", + "git_mode": "100644" + }, + { + "path": "snapshots/pinned/source-artifacts/gcc-debian-patch-inputs/debian/rules.patch.txt", + "bytes": 12473, + "sha256": "6c6d9dc472ee7082c5658030c812436668ffbb99f76966a6cf9081b03732e8dc", + "git_blob": "4e64d8cca97a85949e74b4df9bc9c33f2ef789e8", + "git_mode": "100644" + }, + { + "path": "snapshots/pinned/unit03/source-artifacts/plugin-members/usr/lib/gcc/x86_64-linux-gnu/13/plugin/include/configargs.h.txt", + "bytes": 1640, + "sha256": "987c0a46b31907a609c15c749988921053bdf81e77d3a695c981d7be7a9378fc", + "git_blob": "68e4b7f3cfbbc0de2ff38519567be7c5d33eb08a", + "git_mode": "100644" + } + ] +} diff --git a/research/h25-gcc-libexec-phase-frame/NOTICE.md b/research/h25-gcc-libexec-phase-frame/NOTICE.md new file mode 100644 index 0000000000..34d4771304 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/NOTICE.md @@ -0,0 +1,11 @@ +# Source and license notices + +The retained third-party sources keep all original notices and exact bytes. Changing a snapshot's path to end in `.txt` and storing it as non-executable mode `100644` does not change its license or authorship. No snapshot is relabeled as new Apache-2.0 source. + +- `gcc.cc` and `gcc/Makefile.in`: Free Software Foundation, Inc., original copyright years retained in their full headers; GNU GPL version 3 or later. The entire retained GCC GPL-3 text is `licenses/GPL-3.0-gcc-source.txt` (35,147 bytes; SHA256 `8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903`). `licenses/GPL-3-standard-text` is the exact separately retained 35,149-byte Debian standard text, SHA256 `3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986`; its provenance is not misdescribed as a freshly extracted GCC archive member. +- Debian/Ubuntu packaging sources and patches: attribution to Debian GCC Maintainers and the other named upstream/packaging copyright holders is retained in full in `licenses/gcc-13-debian-copyright` (69,100 bytes; SHA256 `08c6f3dee4c19aa1e57eb7d4ad45829b2e99656313bd07fa0922e2553f500be5`). That is the retained exact source-package copyright, not an abbreviated notice. Original per-file notices, including any SPDX lines, are preserved without inserting guessed per-file SPDX labels. +- `licenses/GCC-Runtime-Library-Exception.txt` retains the complete supplied 3,324-byte exception, SHA256 `9d6b43ce4d8de0c878bf16b54d8e7a10d9bd42b75178153e3af6a815bdc90f74`. It applies only where a source-specific notice makes it applicable; it is not asserted for the compiler driver or all packaging files. Generated configuration/build metadata is retained as such, without manufacturing an original per-file license notice. +- `evidence/licenses/LICENSE-PROVENANCE-v1.json` and `-v2.json` preserve the exact documentary acquisition/copy provenance. No new archive extraction or network acquisition was performed during this packaging task. Their historical attempted GPL-copying extraction/cap outcome remains unchanged. +- The upstream repository's root LICENSE and attribution remain unchanged at base commit `7c49fe32c55de02c2c873655c804b16e4c3fef0a`. `licenses/Apache-2.0.txt` is an exact copy for standalone export. New archive metadata, explanatory prose and the new integrity checker are Apache-2.0 contributions prepared with substantial OpenAI Codex / GPT-6.1 Sol assistance. + +The manifest binds these complete license artifacts. Archival integrity does not establish source-to-binary correspondence or human/legal/scientific approval. Original research reports, reviewer text, correction histories and predecessor credit are retained rather than silently rewritten. diff --git a/research/h25-gcc-libexec-phase-frame/README.md b/research/h25-gcc-libexec-phase-frame/README.md new file mode 100644 index 0000000000..b404c6f7a9 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/README.md @@ -0,0 +1,63 @@ +# GCC libexec phase frame: conditional source result, installed HOLD + +This source archive answers one bounded source question: the supplied `debian/rules.conf` direct parameters-generation recipe emits version, SONAME and LIBC_DEP metadata; it writes no direct `DEB_CROSS`, `FORCE_CROSS_LAYOUT`, `PF`, `libexecdir`, `CXXFLAGS` or `CPPFLAGS` assignment. This is the narrow conditional SOURCE component accepted by the retained independent AI source review. It does not establish semantic noninterference of every generator/include action, the actual build's phase continuity, an installed initializer, or Q3 qualification. + +The exact native recipe candidate is **`/usr/libexec/gcc/`**. The retained `cross-install-location.diff` supplies the concrete competing **`/usr/libexec/gcc-cross/`** expression. The Phobos release-check plus `--with-target-system-zlib=auto` discriminator is conditional on the applicable unoverridden configure recipe; its configure-time selector conclusion does not establish patch-time selection. The retained 928-byte `rules.parameters` records `~24.04` without `.1`; it is source-package data, not the actual generated phase file for build 32148542. + +## Inspect the result and its limitations + +Start with the frozen [property frame](evidence/frame/PROPERTY-FRAME-v1.md), its [structured premises and phase matrix](evidence/frame/PROPERTY-FRAME-v1.json), and the [independent source review](evidence/frame/review/REVIEW-v1.md). The exact [input association review v2](snapshots/pinned/driver-prefix-build-frame-v1/input/review/REVIEW-v2.json.txt) preserves the documentary provenance limitation: available source bodies and their hashes are positively identified, but the retained no-decode receipts do not independently join the compressed archive SHA to both newly considered generator/parameters bodies. This archive does not repair that scientific premise. + +The generator's direct output interface is a source finding, not an actual-phase selector record. `rules.conf` includes other files; metadata output need not be semantically inert. Top and recursive make evaluations, selector origins, generated series and stamps can differ. GNU make's word-based `filter` matches both `environment` and the two-word `environment override`; the subsequent ordinary empty assignment does not establish replacement under `-e`. Command-line origins are outside that filter. Object-specific `DRIVER_DEFINES` precede later relevant flags and includes. These are concrete preservation surfaces, not observed malicious flags or evidence an override happened. + +The first missing fact is an exact-build applied/configured libexec property plus preservation to its consequential use. A directly bound actual property could replace exhaustive historical selector reconstruction. A complete final `gcc.o` export is sufficient evidence in one approach; it is not imposed as the only engineering method. The exact selected `prefix.cc` and `make-relative-prefix.c` bodies remain unavailable. The Pro20 upstream helper links are comparison pointers and do not establish Ubuntu-applied correspondence. + +The conditional future Q3 relation is positioned: after independently binding relocation, `update_path`, suffix fields, context and preceding prefix nodes, the applicable GCC(require1) and BINUTILS(require2) local window can contain the same machine component twice, then the target-only component. An arbitrary matching substring, exit 0 or EOF cannot recover the initializer or establish whole-list, selection or intended-emission completeness. Installed initializer and Q3 remain **HOLD**. + +## Exact preservation and inert format + +[SOURCE-ARCHIVE.json](SOURCE-ARCHIVE.json) declares this format and unchanged qualification boundaries. [SOURCE-MAP.json](SOURCE-MAP.json) maps each retained origin to its exact package bytes, SHA256, computed Git blob identity, role and permission mode. All **21 declared-available SOURCE-PINS bodies / 880,523 bytes** are retained under `snapshots/pinned/` with a path-only `.txt` suffix and mode `100644`. The two unavailable helper-body records have no fabricated payload. The snapshot suffix does not change the applicable source license. + +Raw bytes, CR/LF and GCC formfeeds are unchanged. Frozen anchors count **LF only**; split on `"\n"`, not Python `splitlines()`. Original absolute/workspace paths inside frozen documents are historical origin identifiers; resolve them through SOURCE-MAP rather than expecting that workstation layout. These source snapshots are inert documentary inputs; this package has no original executable source entry point, import adapter, compiler invocation or replay hook. + +The original frame's origin-semantics draft, [clarification](evidence/frame/CORRECTION-v1.json), [reader notes](evidence/frame/READER-NOTES-v1.json), input review predecessors and source freeze remain unchanged. Pro20's exact 8,320-byte response, links, send/complete/readback receipts and parent assessment are retained. Consultation and AI review are distinct from human review, proof-kernel acceptance and installed qualification. Pro21 is outside this archive. + +## Accounting correction and unchanged original task + +The frozen frame's phrase calling `98.950533479` canonical is retained as historical wording and corrected by the accompanying [REPORTING-CORRECTION-v1.json](evidence/frame/REPORTING-CORRECTION-v1.json). The canonical ledger stays **94.550533479 seconds**, SHA256 `589b607e096d4ef7a49b38501827f1f5b865d1263591dff8b96cded9c7d62126`. Supplemental source controls `0.74` plus publication `3.66` give **98.950533479 combined policy seconds**. That combined value is neither a new canonical ledger nor a complete physical bill. The original 2,400-second cap / initial 600-second allocation are not reset, and this archive grants no budget. Physical, outside, historical and final costs remain **OPEN_NOT_ZERO**. + +Full C05, full V03 and installed field qualification remain **false**. The inherited reported score remains **43.5%**, with the inherited activity census **22/49**, full stages **2/10**, overall milestones **1/10**, and inventory **24 components / 52 helpers**. No denominator is changed or recomputed here; original added credit is **0**. Native compiler queries, shell calibrations, original baseline runs and V03 cases remain **0**. The eight-job pilot remains **CLOSED, partial 2/4**; this source archive neither resumes it nor closes another gate. + +## Reported driver input, separately bounded + +[evidence/reported-driver-input/INPUT-v1.md](evidence/reported-driver-input/INPUT-v1.md) and exact JSON observations preserve existing **reported raw-byte data**, not a newly reproduced certificate. No actual ELF/binary is included, and preparation does not reread the installed driver. The report nominates a 1,023,032-byte image SHA256 `1b99826121ae6682a634e5efe09bd3e3df58ce58e0b28f849114ab5b89139c26`; a NUL-terminated native literal occurs once at **file offset 702226**, while the exact cross/name/`.symtab` patterns do not occur and `.dynsym` bytes occur at file offset 1020531. Its two 64-byte windows are preserved as hex in JSON. + +These are reported file offsets and literal matches only. They establish no section, symbol, stripping, virtual address, initializer, live reference, reached use or program behavior. Absence of a fixed literal does not exclude computation or concatenation. The next static property-slice feasibility question remains open; publishing these reports creates no source/ISA certificate or execution grant. + +## Integrity and validation status + +[MANIFEST.json](MANIFEST.json) inventories every regular package file except itself, including source maps, licenses and the new [integrity.py](integrity.py). An external exact manifest SHA256 is required by that checker; the publication freeze outside the package supplies the candidate pin. The checker's only work is filesystem inventory, regular-file/mode/size/hash comparisons and parsing the manifest/source map as data. It imports no archived source, uses no subprocess/network/native/compiler execution, and writes no output file. It assumes a stable filesystem: separately named reads are not an atomic snapshot or race-safe custody, and they establish no full acquisition provenance. + +**Preparation status: checker source written; no checker/test runs performed; parent source review pending.** After source review and an explicit bounded validation grant, a suitable standalone command is: + +```sh +python3 -B research/h25-gcc-libexec-phase-frame/integrity.py --manifest-sha256 EXACT_REVIEWED_MANIFEST_SHA256 +``` + +A parent-authorized optimized run, one read-only Git-free cold copy and one one-byte tamper control may assess this static integrity boundary. They are suggested and **unrun** in this candidate. Integrity success would certify only supplied-byte consistency relative to the externally pinned manifest, not provenance truth, source semantics, a source-to-binary correspondence or C05/V03 completion. + +There is deliberately **no `VERIFY.json`**. The retained base's package guide permits a documented source archive; adding a replay hook would execute no qualified scientific work. Hosted plan and replay states must be read from the eventual exact PR head. A planning pass with candidate replay skipped is planning/archival evidence only, never a scientific replay. + +## Task, overlap and credit + +This package is a refined component of the explicit C05/V03 assignment, not a newly drawn catalogue task or original I8 completion. It is based on upstream commit `7c49fe32c55de02c2c873655c804b16e4c3fef0a`, tree `e6898c8ba7a27b71587c32ba3f639259ceeeed91`, with no shared-code or selected-frontier changes. Its content is self-contained; the local object alternate is preparation machinery and not a public dependency or complete-history claim. The parent reports a fresh 23:24 UTC canonical-main observation at this unchanged commit/tree and a bounded read of 100 open-PR metadata records. That is not a complete diff/discussion overlap search or a novelty result; final live compatibility and exact-head delivery remain parent publication checks. + +The source lineage includes the input-constructor package at head `120072d58ddb46f0e02886756243174d41fce42e`, generated configuration package at head `97dd394ce1ddf00cc80dfdaad71767fdbc85af47`, and the pinned source links in the retained [Pro20 link record](snapshots/pinned/consultation/RESPONSE-v20-LINKS.json.txt). [PR6397](https://github.com/CrocSwap/integer-mult-bounds/pull/6397) is a separate criterion/method source archive; [PR6434](https://github.com/CrocSwap/integer-mult-bounds/pull/6434) is the separately delivered raw pilot/failure-accounting package at head `edc2820ba023b804ef1351a88e2fe31bf8d489dd`. Neither predecessor's hosted checks, scoped counts or publication are inherited as original qualification here. This archive adds the accepted direct-generator source frame and its explicit continuity/preservation gap, rather than repeating predecessor execution claims. + +GCC sources retain their Free Software Foundation copyright and GPL-3.0-or-later notices. Debian GCC Maintainers and original Debian/Ubuntu packaging contributors retain their attribution in the exact [Debian copyright](licenses/gcc-13-debian-copyright). Full retained GPL-3 texts and the runtime exception are included in [licenses](licenses/); the runtime exception is not asserted to apply to compiler-driver source merely because it is retained. Upstream root Apache-2.0 attribution/license remains unchanged, with an exact copy in [licenses/Apache-2.0.txt](licenses/Apache-2.0.txt). New package documentation/metadata and the integrity checker are contributed under Apache-2.0, with substantial OpenAI Codex / GPT-6.1 Sol assistance. This does not relicense any third-party snapshot. + +## Open next questions + +1. **Can a specifically nominated actual-build artifact bind the applied/configured libexec property and relevant preservation path?** It matters because template source and `.0` parameters do not establish actual phase continuity. First step: evaluate the exact retained driver-input nomination for a separately bounded static property slice that distinguishes native versus cross and rejects unused/overwritten-literal explanations. Blocked by an accepted concrete correspondence argument and its source/ISA/ABI/loader/context premises; no decoder or target execution is granted by this archive. A directly bound property may replace reconstructing every phase variable. +2. **Can exact applicable prefix/relocation helpers and reached Q3 context support the positioned component relation?** It matters because raw string presence cannot supply relocation, suffix or prefix-order truth. First step: identify applicable already available helper/correspondence evidence and state a narrowly discriminating relation. Blocked by the two unavailable selected helper bodies, applicable-source correspondence and independently bound context. Do not fetch them or reopen closed routes under this packaging task. +3. **Does a later inference need stronger archive-to-generator-body equality than the current documentary association?** It matters only if the stronger correspondence is used as a premise. First step: state the exact needed equality before seeking separate authorization for any bounded archive comparison. Blocked by that need and a bounded operation grant; no archive listing, decode or acquisition is performed or mandated here. diff --git a/research/h25-gcc-libexec-phase-frame/SOURCE-ARCHIVE.json b/research/h25-gcc-libexec-phase-frame/SOURCE-ARCHIVE.json new file mode 100644 index 0000000000..0346a60d72 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/SOURCE-ARCHIVE.json @@ -0,0 +1,81 @@ +{ + "schema": "h25-gcc-libexec-phase-frame-source-archive-v1", + "format": "SOURCE-ARCHIVE", + "package": "research/h25-gcc-libexec-phase-frame", + "base_commit": "7c49fe32c55de02c2c873655c804b16e4c3fef0a", + "base_tree": "e6898c8ba7a27b71587c32ba3f639259ceeeed91", + "task_basis": "Explicit assigned C05/V03 component; no task picker invoked.", + "scope_status": "refined", + "scope_reason": "Archive the independently AI-reviewed conditional direct-generator source result; actual phase continuity and installed qualification are unresolved.", + "result": "CONDITIONAL_SOURCE_COMPONENT_ONLY", + "review": "Retained independent AI source review accepts this narrow conditional component; new publication/integrity checker source review pending.", + "source_map": "SOURCE-MAP.json", + "inventory": "MANIFEST.json", + "integrity_checker": "integrity.py", + "integrity_boundary": "Exact package bytes against an externally pinned MANIFEST SHA256; no scientific, origin, source-history or binary-use certificate.", + "manifest_self_exclusion": "MANIFEST.json is the only non-self-inventoried regular package file. External publication freeze pins it; checker requires that SHA256 explicitly.", + "registered_replay": false, + "verify_json_present": false, + "source_snapshot_conversion": "Path-only .txt suffix and mode 100644, no byte conversion; LF-only source anchors preserve formfeeds.", + "declared_available_source_pin_bodies": 21, + "declared_unavailable_source_pin_bodies": 2, + "declared_available_source_pin_bytes": 880523, + "installed_initializer": "HOLD", + "Q3": "HOLD", + "full_C05": false, + "full_V03": false, + "field_qualified": false, + "original_added_credit": 0, + "reported_score_percent": 43.5, + "inherited_activity_census": { + "completed": 22, + "denominator": 49, + "arithmetic_recomputed": false + }, + "full_stages": { + "completed": 2, + "denominator": 10 + }, + "overall_milestones": { + "completed": 1, + "denominator": 10 + }, + "inventory_unchanged": { + "components": 24, + "helpers": 52 + }, + "native_compiler_queries": 0, + "shell_calibrations": 0, + "original_baseline_runs": 0, + "V03_cases": 0, + "pilot_status": "CLOSED_PARTIAL_2_OF_4; eight-job pilot never resumed here", + "canonical_ledger_seconds": "94.550533479", + "canonical_ledger_sha256": "589b607e096d4ef7a49b38501827f1f5b865d1263591dff8b96cded9c7d62126", + "supplemental_seconds": { + "source_controls": "0.74", + "publication": "3.66", + "total": "4.40" + }, + "combined_policy_seconds": "98.950533479", + "physical_outside_historical_final_costs": "OPEN_NOT_ZERO", + "original_cap_seconds": 2400, + "initial_allocation_seconds": 600, + "new_budget_or_execution_grant": false, + "original_source_import_execution": false, + "source_acquisition_decode": false, + "native_execution": false, + "preparation_validation_status": "NOT_RUN; checker source review and bounded parent validation pending", + "hosted_checks": "NOT_SUBMITTED; read actual exact-head plan/replay outcomes after parent publication", + "Pro21_included": false, + "next_questions": "README.md#open-next-questions", + "licenses": "NOTICE.md and licenses/", + "filesystem_assumption": "Stable filesystem; separately named reads are not atomic/race-safe custody or full acquisition provenance.", + "parent_reported_publication_observation": { + "observed_utc": "2026-11-02T23:24:00Z", + "timestamp_precision": "Minute as reported by parent; not a newly acquired local receipt.", + "canonical_main": "7c49fe32c55de02c2c873655c804b16e4c3fef0a", + "tree": "e6898c8ba7a27b71587c32ba3f639259ceeeed91", + "open_PR_metadata_bound": 100, + "complete_overlap_or_novelty_claim": false + } +} diff --git a/research/h25-gcc-libexec-phase-frame/SOURCE-MAP.json b/research/h25-gcc-libexec-phase-frame/SOURCE-MAP.json new file mode 100644 index 0000000000..e2207cd2bf --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/SOURCE-MAP.json @@ -0,0 +1,750 @@ +{ + "schema": "h25-gcc-libexec-phase-frame-source-map-v1", + "scope": "Exact retained payload/origin map. These are source snapshots and documentary reports; source archive integrity does not certify their scientific statements.", + "source_origin_root": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453", + "line_numbering": "Split on LF (U+000A) only. Formfeed bytes in GCC source are preserved and do not introduce numbered lines. Do not use str.splitlines() for frozen anchors.", + "inert_conversion": "All 21 declared-available SOURCE-PINS bodies are copied without byte changes under snapshots/pinned/ with a .txt suffix and mode 100644. No original source is imported, compiled or executed.", + "blob_algorithm": "SHA-1 of b\"blob \"+decimal byte length+b\"\\0\"+payload; computed payload identity, not proof of source Git history.", + "declared_source_pins": { + "available": 21, + "unavailable": 2, + "available_payload_bytes": 880523 + }, + "files": [ + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/consultation/RESPONSE-v20.txt", + "package_path": "snapshots/pinned/consultation/RESPONSE-v20.txt.txt", + "available": true, + "role": "source-pin-body", + "bytes": 8320, + "sha256": "02d322f0fd524fd57ab663583c704994ca03969dfbdd315b94ecd5de6a8f2095", + "git_blob": "f3505a14ce024366eab7677daf798d0ed5969916", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Path-only inert .txt suffix; payload bytes unchanged." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/consultation/RESPONSE-v20-LINKS.json", + "package_path": "snapshots/pinned/consultation/RESPONSE-v20-LINKS.json.txt", + "available": true, + "role": "source-pin-body", + "bytes": 2845, + "sha256": "632191bec208036ede6b703ac851c92acb63f9997302bd305235ff70b0416d07", + "git_blob": "dd3ce6cb358bd34d31b34fef99232383673abf26", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Path-only inert .txt suffix; payload bytes unchanged." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/consultation/COMPLETE-RECEIPT-v20.json", + "package_path": "snapshots/pinned/consultation/COMPLETE-RECEIPT-v20.json.txt", + "available": true, + "role": "source-pin-body", + "bytes": 502, + "sha256": "b4bb7201bd30831fd9ae99c0cdb749b099f6c9ed68451acd1463928f973af65b", + "git_blob": "520b49d8e1c5cf9643d38e160b04168a966ead6b", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Path-only inert .txt suffix; payload bytes unchanged." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review/REVIEW-v2.json", + "package_path": "snapshots/pinned/driver-prefix-build-frame-v1/input/review/REVIEW-v2.json.txt", + "available": true, + "role": "source-pin-body", + "bytes": 5591, + "sha256": "52149802d21a4bf68c49f22fc268d6e2acc5c92e136b28f59fb24b17e85286fd", + "git_blob": "cc5c5b3d99a2ac4c133e2a30a599b47e71ba9c5d", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Path-only inert .txt suffix; payload bytes unchanged." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/DISTRO-GENERATOR-SOURCES-v1.json", + "package_path": "snapshots/pinned/source-artifacts/DISTRO-GENERATOR-SOURCES-v1.json.txt", + "available": true, + "role": "source-pin-body", + "bytes": 14886, + "sha256": "58f4a165bbd0045559eddc79f940eea4672425c0def4d4e12f95069bbbc32fbe", + "git_blob": "627de319fa7ce1bf3ed08c3308cc1739e1a412e0", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Path-only inert .txt suffix; payload bytes unchanged." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-MEMBERS.json", + "package_path": "snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-MEMBERS.json.txt", + "available": true, + "role": "source-pin-body", + "bytes": 34772, + "sha256": "30403263d883340813c39497a89751a15c543937b950e1af2a907041d25c066f", + "git_blob": "77fb1c4f3c7a77be8225f9e2777173dc049b3cfb", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Path-only inert .txt suffix; payload bytes unchanged." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/ACQUISITION-v2.json", + "package_path": "snapshots/pinned/source-artifacts/ACQUISITION-v2.json.txt", + "available": true, + "role": "source-pin-body", + "bytes": 2563, + "sha256": "c287abe845c438ec814cd3a3a807e05df6ec8def764d399fdc1bf5a036c8325d", + "git_blob": "6b78ba2ba5f8792c9e57776914edcf2b4d78ff45", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Path-only inert .txt suffix; payload bytes unchanged." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/SOURCE-METADATA-CHECK-v1.json", + "package_path": "snapshots/pinned/source-artifacts/SOURCE-METADATA-CHECK-v1.json.txt", + "available": true, + "role": "source-pin-body", + "bytes": 4280, + "sha256": "e34ccce299d6b30d2907ce558d5138b88d65339314382199199fb531d9138514", + "git_blob": "ff5ace15785e7a47cdbdd3ef9b7eb284079387bc", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Path-only inert .txt suffix; payload bytes unchanged." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules", + "package_path": "snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules.txt", + "available": true, + "role": "source-pin-body", + "bytes": 2984, + "sha256": "2e0afdc6303e407f344d2f6724be731ae84b8fd59758f172491c25348432d75a", + "git_blob": "81e55811083a6d6a474b125caa232a6fe583b31c", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Path-only inert .txt suffix; payload bytes unchanged." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules.defs", + "package_path": "snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules.defs.txt", + "available": true, + "role": "source-pin-body", + "bytes": 70194, + "sha256": "aaf79170f51110b6b9c90d1bee022d2122401fdbbf8840d91baa3e6f13cbeb58", + "git_blob": "f7163f2188b5af86394d36b6acb22bfbcd72055e", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Path-only inert .txt suffix; payload bytes unchanged." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules2", + "package_path": "snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules2.txt", + "available": true, + "role": "source-pin-body", + "bytes": 97853, + "sha256": "c9b1cebada609601ef1fe3bb34babccae572dccc3e86cebfad3927229d3b83ae", + "git_blob": "552f7a5d24f12252bf34efedcc4656b6073363f1", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Path-only inert .txt suffix; payload bytes unchanged." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-debian-patch-inputs/debian/rules.patch", + "package_path": "snapshots/pinned/source-artifacts/gcc-debian-patch-inputs/debian/rules.patch.txt", + "available": true, + "role": "source-pin-body", + "bytes": 12473, + "sha256": "6c6d9dc472ee7082c5658030c812436668ffbb99f76966a6cf9081b03732e8dc", + "git_blob": "4e64d8cca97a85949e74b4df9bc9c33f2ef789e8", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Path-only inert .txt suffix; payload bytes unchanged." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-debian-patch-inputs/debian/patches/cross-install-location.diff", + "package_path": "snapshots/pinned/source-artifacts/gcc-debian-patch-inputs/debian/patches/cross-install-location.diff.txt", + "available": true, + "role": "source-pin-body", + "bytes": 22890, + "sha256": "9e943d2ea5dbabe60ee30a3cd08384874ce7c933ed233018871dbb568275eeb3", + "git_blob": "ef5f64b661a4874561f0762fd88dc0c08f009e6a", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Path-only inert .txt suffix; payload bytes unchanged." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.conf", + "package_path": "snapshots/pinned/source-artifacts/gcc-additional-packaging/debian/rules.conf.txt", + "available": true, + "role": "source-pin-body", + "bytes": 54432, + "sha256": "bd04d88f2b6b39567344df447d03d74b149d8a6c8721c7dd0bbe9dd7b185b546", + "git_blob": "ced6704e63ecaf6c68e3ee86a36878493e923034", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Path-only inert .txt suffix; payload bytes unchanged." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.parameters", + "package_path": "snapshots/pinned/source-artifacts/gcc-additional-packaging/debian/rules.parameters.txt", + "available": true, + "role": "source-pin-body", + "bytes": 928, + "sha256": "954623c853cb1c7024f634084edc048a319a7f92527887cb35aacc062abd7610", + "git_blob": "acc6bd8c082ec21105595808e2cb0622904f302e", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Path-only inert .txt suffix; payload bytes unchanged." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.sonames", + "package_path": "snapshots/pinned/source-artifacts/gcc-additional-packaging/debian/rules.sonames.txt", + "available": true, + "role": "source-pin-body", + "bytes": 4270, + "sha256": "5fce0244ae5a0716a8b4558ac880e7a6fa26cb7ffc798c29bab536c133940ea3", + "git_blob": "1e12c6d71d8817b543bfd056cc9f4ac426c68f17", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Path-only inert .txt suffix; payload bytes unchanged." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-base-selected/gcc/Makefile.in", + "package_path": "snapshots/pinned/source-artifacts/gcc-base-selected/gcc/Makefile.in.txt", + "available": true, + "role": "source-pin-body", + "bytes": 164044, + "sha256": "41e0fe9006909a793736b73fdd434929c913023992c33cf9b746423f78682e45", + "git_blob": "775aaa1b3c4ba6bd81333890b6704f5c5b6b8723", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Path-only inert .txt suffix; payload bytes unchanged." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-base-selected/gcc/gcc.cc", + "package_path": "snapshots/pinned/source-artifacts/gcc-base-selected/gcc/gcc.cc.txt", + "available": true, + "role": "source-pin-body", + "bytes": 320626, + "sha256": "c260c6321fb3852df326618d18642a3c795a8886c285db71acde6a97fd031b0a", + "git_blob": "16bb07f2cdc5edf0a25ce1bd221d417d6bc41d3c", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Path-only inert .txt suffix; payload bytes unchanged." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/unit03/source-artifacts/plugin-members/usr/lib/gcc/x86_64-linux-gnu/13/plugin/include/configargs.h", + "package_path": "snapshots/pinned/unit03/source-artifacts/plugin-members/usr/lib/gcc/x86_64-linux-gnu/13/plugin/include/configargs.h.txt", + "available": true, + "role": "source-pin-body", + "bytes": 1640, + "sha256": "987c0a46b31907a609c15c749988921053bdf81e77d3a695c981d7be7a9378fc", + "git_blob": "68e4b7f3cfbbc0de2ff38519567be7c5d33eb08a", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Path-only inert .txt suffix; payload bytes unchanged." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/evidence/EMBEDDED-CONFIGURATION-v1.json", + "package_path": "snapshots/pinned/evidence/EMBEDDED-CONFIGURATION-v1.json.txt", + "available": true, + "role": "source-pin-body", + "bytes": 1727, + "sha256": "b02f8530e592eddeac5f86a2fb3a8ea80f25ac0e8ab2945fccb64a665b18d4cc", + "git_blob": "e81c37aa4fc86b0a1741ce49f53324b49714fe61", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Path-only inert .txt suffix; payload bytes unchanged." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1_amd64.buildinfo", + "package_path": "snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1_amd64.buildinfo.txt", + "available": true, + "role": "source-pin-body", + "bytes": 52703, + "sha256": "6ee3421f6cf17d77a50122b6934790bdcc64e42ba82c6812d257055cef434b83", + "git_blob": "d73b46acc7a605b4fd147cde153ccb48ad627bf4", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Path-only inert .txt suffix; payload bytes unchanged." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-base-selected/gcc/prefix.cc", + "package_path": null, + "available": false, + "role": "source-pin-body", + "bytes": null, + "sha256": null, + "git_blob": null, + "reason": "Unavailable at frozen conditional source frame; not acquired, synthesized, decoded or substituted." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-base-selected/libiberty/make-relative-prefix.c", + "package_path": null, + "available": false, + "role": "source-pin-body", + "bytes": null, + "sha256": null, + "git_blob": null, + "reason": "Unavailable at frozen conditional source frame; not acquired, synthesized, decoded or substituted." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/CORRECTION-v1.json", + "package_path": "evidence/frame/CORRECTION-v1.json", + "available": true, + "role": "frozen-property-frame-and-independent-review", + "bytes": 1135, + "sha256": "ab0aaf1add9ea24ca56d258c927c4836625d303c90d9eb84ca0d076ecbdd03b3", + "git_blob": "aa597c21f284eb1b5b03c1e99b7ce063b160aa2b", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/PLAN.json", + "package_path": "evidence/frame/PLAN.json", + "available": true, + "role": "frozen-property-frame-and-independent-review", + "bytes": 626, + "sha256": "c9406d5126a3fc7732b983ea308b1ed088b2f09bf35917f4efdf37b97ada45ac", + "git_blob": "9c06634d5ffe03c34f1f4ee152690dd7eca8d617", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/PROPERTY-FRAME-v1.json", + "package_path": "evidence/frame/PROPERTY-FRAME-v1.json", + "available": true, + "role": "frozen-property-frame-and-independent-review", + "bytes": 17423, + "sha256": "058f40fefd8c06a3867e77e7e95a70d4690bcc34f3ba3f50a7233d121f50546d", + "git_blob": "e17bec17a4dc86a8695908437160629bded6eea5", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/PROPERTY-FRAME-v1.md", + "package_path": "evidence/frame/PROPERTY-FRAME-v1.md", + "available": true, + "role": "frozen-property-frame-and-independent-review", + "bytes": 6173, + "sha256": "cc25f8cf72498ac0962cd4b2f12dc584f0ee39563304130b76631a99bcfd374a", + "git_blob": "e678e5454f43a539b1f203fd0c68bb5d307a48d9", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/READER-NOTES-v1.json", + "package_path": "evidence/frame/READER-NOTES-v1.json", + "available": true, + "role": "frozen-property-frame-and-independent-review", + "bytes": 934, + "sha256": "bda3f8414be9fb84ba8b99ea57a009dd6a88741a462fc2f375423c8097a6b1f6", + "git_blob": "1bbfd5087d9de5be9b5cef8287ca238e3095b101", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/REPORTING-CORRECTION-v1.json", + "package_path": "evidence/frame/REPORTING-CORRECTION-v1.json", + "available": true, + "role": "frozen-property-frame-and-independent-review", + "bytes": 817, + "sha256": "59fa46d3c042ce6744974400bf3a19d1ed08cacaeaf08382d6bd9dd58976ba1f", + "git_blob": "d5864a86c618eeedb76c80805dd7d60a4da3bdcf", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/SOURCE-FREEZE-v1.json", + "package_path": "evidence/frame/SOURCE-FREEZE-v1.json", + "available": true, + "role": "frozen-property-frame-and-independent-review", + "bytes": 3129, + "sha256": "955808701850c118409a26caf24bb176340bdf2cab0384fae31ac5562e1c93ef", + "git_blob": "f49ddd41f8cbdbd073309ad8037b5d6316a32770", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/SOURCE-PINS-v1.json", + "package_path": "evidence/frame/SOURCE-PINS-v1.json", + "available": true, + "role": "frozen-property-frame-and-independent-review", + "bytes": 6094, + "sha256": "4cd178b2ad9e41b5dfbd86661ac9aba60d69f99f320244a7a76cecca48204092", + "git_blob": "8f9ae66e399a1cf68fe05530f35482495ed743fc", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/draft-before-origin-clarification/PROPERTY-FRAME-v1.json", + "package_path": "evidence/frame/draft-before-origin-clarification/PROPERTY-FRAME-v1.json", + "available": true, + "role": "frozen-property-frame-and-independent-review", + "bytes": 16751, + "sha256": "1c233c93e67472a8f2981178491044563abf60ce7071f80e728c8e26d6016959", + "git_blob": "e4002911f418632e6b920acd020226f5115c0f33", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/draft-before-origin-clarification/PROPERTY-FRAME-v1.md", + "package_path": "evidence/frame/draft-before-origin-clarification/PROPERTY-FRAME-v1.md", + "available": true, + "role": "frozen-property-frame-and-independent-review", + "bytes": 5698, + "sha256": "51adbed110b5123d0039216dd6fdedf8b5cb54ad7803eba04fc1bdcf6c0f818b", + "git_blob": "5e96af4224c99895a131d3d7cddd3ba6a19a9896", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/review/REVIEW-v1.json", + "package_path": "evidence/frame/review/REVIEW-v1.json", + "available": true, + "role": "frozen-property-frame-and-independent-review", + "bytes": 22123, + "sha256": "cedf912c5fcb6d9e573b7ac88133dad0ca80f6fc9e9b59af4dc025138c7b1ca9", + "git_blob": "2da9bce780fb6598bf36d7f20364650408757efd", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/review/REVIEW-v1.md", + "package_path": "evidence/frame/review/REVIEW-v1.md", + "available": true, + "role": "frozen-property-frame-and-independent-review", + "bytes": 4833, + "sha256": "bc76dac2264ec465455aac688b81813f457b10c99cfa09422956710a8a271ed7", + "git_blob": "e44794a230ecef73ef065644e66ff0ec8d01d899", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/INPUT-METADATA-v1.json", + "package_path": "evidence/input/INPUT-METADATA-v1.json", + "available": true, + "role": "input-association-review", + "bytes": 3326, + "sha256": "50ff79c303d16f069e9bd40b9879a16bc047828bd99b4dd4bfeabcab95da2117", + "git_blob": "a7d7818104996c7e4f53d5f886947af520624d82", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review/FREEZE-v1.json", + "package_path": "evidence/input/review/FREEZE-v1.json", + "available": true, + "role": "input-association-review", + "bytes": 1266, + "sha256": "ec1c9cfad59ff67b407b59a550809dda06602d4afc564abff58257f61bfa5aad", + "git_blob": "be97aecc4fc74aef4d8ea25cdcce30a9fb7b8912", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review/FREEZE-v2.json", + "package_path": "evidence/input/review/FREEZE-v2.json", + "available": true, + "role": "input-association-review", + "bytes": 2092, + "sha256": "381e4e37fd557e5cd2e910b5a86a4cb97ba21b837f12f7697d63633eaabc0572", + "git_blob": "3469ae39774077bc726b91c6f05a060b36705fbf", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review/PLAN-v1.json", + "package_path": "evidence/input/review/PLAN-v1.json", + "available": true, + "role": "input-association-review", + "bytes": 544, + "sha256": "218353182ee9bcf230c9506d20b067ad1d4ace9fa456733e3438705a0bc31ce0", + "git_blob": "74af6001d6736f82fd62877e23d723f50340d5f5", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review/REVIEW-v1.json", + "package_path": "evidence/input/review/REVIEW-v1.json", + "available": true, + "role": "input-association-review", + "bytes": 12817, + "sha256": "872a81744822335772b2d1ed4ac9f786d63fcf888642ffa0849c0f9461d04f81", + "git_blob": "5482a9eebc79cbf8c474cd07c769afaebe314dbe", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review/REVIEW-v1.md", + "package_path": "evidence/input/review/REVIEW-v1.md", + "available": true, + "role": "input-association-review", + "bytes": 4443, + "sha256": "01c8e725904230a319e752039bdfbbe23b300a5612711df4344834afe7ee459e", + "git_blob": "3634642826a7c9f65c9fa7a2e2cc88efe2341551", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review/REVIEW-v2.md", + "package_path": "evidence/input/review/REVIEW-v2.md", + "available": true, + "role": "input-association-review", + "bytes": 2541, + "sha256": "349b462fe429503e466ee561eb901b4ff0826ad0f2f3e3312c5b595b81a83433", + "git_blob": "7c6f92491ce391499ecc09a4d8fc03558ac0fd22", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/consultation/SEND-RECEIPT-v20.json", + "package_path": "evidence/consultation/SEND-RECEIPT-v20.json", + "available": true, + "role": "Pro20-consultation-context-not-scientific-acceptance", + "bytes": 635, + "sha256": "60e29f917bdcd56e296f2594df40dc4754aedbcf7842d9385c18719ec8380b7d", + "git_blob": "1eccb22e2d1c3d546bdc68434754770541f3e934", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/consultation/SENT-VERIFICATION-v20.json", + "package_path": "evidence/consultation/SENT-VERIFICATION-v20.json", + "available": true, + "role": "Pro20-consultation-context-not-scientific-acceptance", + "bytes": 302, + "sha256": "5d90fa241354789a0fe35f447934a868f67511347ec8f7ef20f14cbfb8058834", + "git_blob": "97153e31f92e80a3a6457aedd4500cd352b847d3", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/consultation/ASSESSMENT-v20.md", + "package_path": "evidence/consultation/ASSESSMENT-v20.md", + "available": true, + "role": "Pro20-consultation-context-not-scientific-acceptance", + "bytes": 3946, + "sha256": "74badd2ce0efb5b79139d76ef8d5c28d4b4f1516d394a95af1cf0c1f7f636401", + "git_blob": "1b110ef12c10d0299bc28744f734923d1ebc89d9", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-libexec-property-slice-v1/input/INPUT-v1.json", + "package_path": "evidence/reported-driver-input/INPUT-v1.json", + "available": true, + "role": "reported-raw-byte-data-not-independent-binary-certificate", + "bytes": 18882, + "sha256": "edaa4c06aa5d72228161691614262ab546a46c7b30396c03c6c0ff8ecc348892", + "git_blob": "0e73ec1f6564afccd80c770d2a534777f74a8551", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-libexec-property-slice-v1/input/INPUT-v1.md", + "package_path": "evidence/reported-driver-input/INPUT-v1.md", + "available": true, + "role": "reported-raw-byte-data-not-independent-binary-certificate", + "bytes": 4260, + "sha256": "442df911f18ff022e78289da05bb596e5c8c22ef91c056da60b1cc6c8d1649f7", + "git_blob": "0c2c1212df29516d6f5edb60769c802b4161b056", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-libexec-property-slice-v1/input/OBSERVATIONS-v1.json", + "package_path": "evidence/reported-driver-input/OBSERVATIONS-v1.json", + "available": true, + "role": "reported-raw-byte-data-not-independent-binary-certificate", + "bytes": 3379, + "sha256": "55cb5892864260e322192d40ca1cf5003d288438e938f0432e7bf0f11aee6eb3", + "git_blob": "21a7eff98360ad9da7856e7bc5a70edb5e261ef0", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-libexec-property-slice-v1/input/FREEZE-v1.json", + "package_path": "evidence/reported-driver-input/FREEZE-v1.json", + "available": true, + "role": "reported-raw-byte-data-not-independent-binary-certificate", + "bytes": 1873, + "sha256": "7cdc1f01e230e9e657d0999ce926b83d2bc5ad24861fe798a988e96990ffc036", + "git_blob": "d062a795cda9812673192aa7a93ec2ebfd9b3634", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/driver-libexec-property-slice-v1/input/PLAN-v1.json", + "package_path": "evidence/reported-driver-input/PLAN-v1.json", + "available": true, + "role": "reported-raw-byte-data-not-independent-binary-certificate", + "bytes": 1854, + "sha256": "923606f137bbb394a2b477292a239d3ec89a26ddcd6dafff72f7c884299bee9c", + "git_blob": "fda8645131cd464381bf7f78521c85c70b84abbc", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/unit03/source-artifacts/licenses/gcc-13-debian-copyright", + "package_path": "licenses/gcc-13-debian-copyright", + "available": true, + "role": "exact-third-party-license-or-notice", + "bytes": 69100, + "sha256": "08c6f3dee4c19aa1e57eb7d4ad45829b2e99656313bd07fa0922e2553f500be5", + "git_blob": "4e76ab4575620cf6e03677caf76773e3cf59e8c2", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/unit03/source-artifacts/licenses/GPL-3.0-gcc-source.txt", + "package_path": "licenses/GPL-3.0-gcc-source.txt", + "available": true, + "role": "exact-third-party-license-or-notice", + "bytes": 35147, + "sha256": "8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903", + "git_blob": "94a9ed024d3859793618152ea559a168bbcbb5e2", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/unit03/source-artifacts/licenses/GPL-3-standard-text", + "package_path": "licenses/GPL-3-standard-text", + "available": true, + "role": "exact-third-party-license-or-notice", + "bytes": 35149, + "sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", + "git_blob": "f288702d2fa16d3cdf0035b15a9fcbc552cd88e7", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/unit03/source-artifacts/licenses/GCC-Runtime-Library-Exception.txt", + "package_path": "licenses/GCC-Runtime-Library-Exception.txt", + "available": true, + "role": "exact-third-party-license-or-notice", + "bytes": 3324, + "sha256": "9d6b43ce4d8de0c878bf16b54d8e7a10d9bd42b75178153e3af6a815bdc90f74", + "git_blob": "e1b3c69c179dfaff5744ea4bf853e6b0d90c9ef9", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/unit03/source-artifacts/LICENSE-PROVENANCE-v1.json", + "package_path": "evidence/licenses/LICENSE-PROVENANCE-v1.json", + "available": true, + "role": "retained-license-provenance", + "bytes": 1067, + "sha256": "9855171852f2d0190af7cc3f2b45673e2d518d3543cceab53adecc32bcee8ff8", + "git_blob": "ead927166cf5ac1690540104da937444665e5f04", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "outputs/c05-v03-completion-20261102T055710Z/unit03/source-artifacts/LICENSE-PROVENANCE-v2.json", + "package_path": "evidence/licenses/LICENSE-PROVENANCE-v2.json", + "available": true, + "role": "retained-license-provenance", + "bytes": 1090, + "sha256": "c4ac6815bc5e43d75e4be3ffd69b7a123d7ae566956a63bf80d2f05a62f0fc44", + "git_blob": "47a85fef99281daf88df6c924fc37e479de31307", + "git_blob_meaning": "Computed Git SHA-1 blob of exact payload; no originating Git-history/ancestry claim.", + "origin_permission_mode": "0o664", + "package_git_mode": "100644", + "conversion": "Exact byte copy; no normalization or scientific changes." + }, + { + "origin_path": "upstream:7c49fe32c55de02c2c873655c804b16e4c3fef0a:LICENSE", + "package_path": "licenses/Apache-2.0.txt", + "available": true, + "role": "exact-upstream-root-license", + "bytes": 11357, + "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "git_blob": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64", + "git_blob_meaning": "Computed Git blob identity of retained base LICENSE; base commit pinned in SOURCE-ARCHIVE.json.", + "origin_permission_mode": "0o644", + "package_git_mode": "100644", + "conversion": "Exact byte copy of upstream root license; root LICENSE remains unchanged." + } + ] +} diff --git a/research/h25-gcc-libexec-phase-frame/evidence/consultation/ASSESSMENT-v20.md b/research/h25-gcc-libexec-phase-frame/evidence/consultation/ASSESSMENT-v20.md new file mode 100644 index 0000000000..1b110ef12c --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/consultation/ASSESSMENT-v20.md @@ -0,0 +1,15 @@ +# Critical assessment of Pro20 + +Recorded 2026-11-02T23:12:21.749076+00:00. Response8320B SHA25602d322f0fd524fd57ab663583c704994ca03969dfbdd315b94ecd5de6a8f2095 completed at first observation22:13:57.564 before22:14:58.623 deadline; source response/small receipts/links preserved. + +The native-recipe candidate `/usr/libexec/gcc/` has specific retained source/configuration support. The exact `gcc-cross/` patch competitor is consequential. Configure-phase Phobos auto/release flags discriminate the configuration selector under the stated recipe, not earlier patch selection or all later flag preservation. A complete finalgcc.o record is sufficient rather than uniquely mandatory; a narrowly established actual property may bypass historical phase reconstruction. Package hashes, approval or a matching string do not establish that property by themselves. + +Subsequent independent source review accepts the conditional component: the generator's direct parameters recipe emits version/SONAME/LIBC_DEP cells and no direct layout/flag assignments. This is narrower than semantic noninterference of all generator/include actions. Existing sourcepackage parameters have .0/base version and are not the actualbuild32148542 generated phase record. Word-based make filtering and assignment precedence are separate; command-line/-e effects and later relevant macro flag surfaces remain named, unobserved preservation premises. No actualoverride is asserted. The exact documentary source/archive association is positive but lacks one independently joined present archive/body equality certificate; no freshdecode was performed. + +The Q3 bridge is a positioned component-window relation, after suffix/relocation/update_path/earlier-prefix/context binding. A full independent oracle for every unknown list element is unnecessary for the limited cross-check. Arbitrary substrings, exit0/EOF and complete delivered-byte capture do not establish intended emission or wholelist/rootpopulation completeness. Primary upstream helper sources are comparison material until applicable source correspondence is established. + +Independent review recommends an actual-build LIBEXEC property-slice certificate gate. P0 now supplies an actual nominated artifact: current1,023,032B driver matches exact SHA1b99826121ae6682a634e5efe09bd3e3df58ce58e0b28f849114ab5b89139c26 and existing package/build association. Raw NUL-native-prefix occurs once at FILE OFFSET702226, competing crossliteral is absent; these are rawbytes only. No initializer/reference/reachability/section/symbol/stripping/virtual-address fact follows. A future certificate must reject unused/unreached/overwritten literal explanations and independently bind data/code/use to the exact image. It must state any source-model, ABI, ISA, loader and context premises instead of inventing privatecallee truth. Feasibility remains unknown; no decoder or target/query execution is granted here. + +The independent frame review SHAcedf912c5fcb6d9e573b7ac88133dad0ca80f6fc9e9b59af4dc025138c7b1ca9 and P0 input SHAedaa4c06aa5d72228161691614262ab546a46c7b30396c03c6c0ff8ecc348892 remain distinct from completed field qualification. The original two-command domain, independent Gamma/C5, named closure/C07/fit and source/parent/native/receiver/funding/C06/intactV01/fullV03bothmodes remain unchanged. + +PR6434 is separately delivered: exact68file1,493,862B source/fake-only package, hostedplan/replaySUCCESS andcanonical/hub/deliveryreadbacks complete, headedc2820ba023b804ef1351a88e2fe31bf8d489dd. This gives no originalcredit. FullC05/fullV03 remain false,43.5%=22/49activities,2/10fullstages,1/10milestones,24components52helpers. Canonical94.550533479 remains byte-exact; supplemental0.74+3.66 gives98.950533479policyseconds, not complete physicalcost. All outside/historical/finalcosts OPEN_NOT_ZERO. No budget, automatic native/source retry, source timer extension, service-status change or assurancewaiver introduced. diff --git a/research/h25-gcc-libexec-phase-frame/evidence/consultation/SEND-RECEIPT-v20.json b/research/h25-gcc-libexec-phase-frame/evidence/consultation/SEND-RECEIPT-v20.json new file mode 100644 index 0000000000..1eccb22e2d --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/consultation/SEND-RECEIPT-v20.json @@ -0,0 +1,13 @@ +{ + "sent_utc": "2026-11-02T21:59:58.623Z", + "wait_deadline_utc": "2026-11-02T22:14:58.623Z", + "url": "https://chatgpt.com/c/6ae7bbbd-5ce0-83ea-beb9-456283ffae81", + "mode": "Pro5of5;GPT-6checked", + "usage_notice": "Usage limit reached/Locked observed; no downgrade", + "prompt_sha256": "94f1ef6cbb89bb623611d3db6e6a0c233c8c71b36f45870aa34bc32bca0cf527", + "prompt_bytes": 19362, + "normalized_composer_exact": true, + "pr_nodes": 37, + "scope": "First STANDARD_LIBEXEC_PREFIX engineering evidence/artifact feasibility only; no pilot extension, query, compiler, old-route retry or source-archive acquisition", + "complete": false +} diff --git a/research/h25-gcc-libexec-phase-frame/evidence/consultation/SENT-VERIFICATION-v20.json b/research/h25-gcc-libexec-phase-frame/evidence/consultation/SENT-VERIFICATION-v20.json new file mode 100644 index 0000000000..97153e31f9 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/consultation/SENT-VERIFICATION-v20.json @@ -0,0 +1,8 @@ +{ + "observed_utc": "2026-11-02T22:00:37.854Z", + "url": "https://chatgpt.com/c/6ae7bbbd-5ce0-83ea-beb9-456283ffae81", + "expanded_sent_prompt_exact_normalized": true, + "stop_observed": true, + "no_resend": true, + "prompt_sha256": "94f1ef6cbb89bb623611d3db6e6a0c233c8c71b36f45870aa34bc32bca0cf527" +} diff --git a/research/h25-gcc-libexec-phase-frame/evidence/frame/CORRECTION-v1.json b/research/h25-gcc-libexec-phase-frame/evidence/frame/CORRECTION-v1.json new file mode 100644 index 0000000000..aa597c21f2 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/frame/CORRECTION-v1.json @@ -0,0 +1,18 @@ +{ + "schema": "h25-property-frame-unfrozen-origin-clarification", + "recorded_utc": "2026-11-02T22:36:29.798726+00:00", + "prior_unfrozen_files": [ + { + "path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/draft-before-origin-clarification/PROPERTY-FRAME-v1.json", + "bytes": 16751, + "sha256": "1c233c93e67472a8f2981178491044563abf60ce7071f80e728c8e26d6016959" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/draft-before-origin-clarification/PROPERTY-FRAME-v1.md", + "bytes": 5698, + "sha256": "51adbed110b5123d0039216dd6fdedf8b5cb54ad7803eba04fc1bdcf6c0f818b" + } + ], + "correction": "GNU make filter is word based; environment override contains environment and matches. Filtering, unexport and assignment precedence are distinct. Command-line values are outside filter; -e preservation cannot be concluded cleared by ordinary empty assignment. No source execution/test used.", + "conclusion_change": "None: actual phase/origin and macro preservation evidence remains unproved; final output conditional/HOLD." +} diff --git a/research/h25-gcc-libexec-phase-frame/evidence/frame/PLAN.json b/research/h25-gcc-libexec-phase-frame/evidence/frame/PLAN.json new file mode 100644 index 0000000000..9c06634d5f --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/frame/PLAN.json @@ -0,0 +1,13 @@ +{ + "schema": "h25-driver-prefix-property-source-frame-plan-v1", + "started_utc": "2026-11-02T22:26:30.925675+00:00", + "fixed_deadline_utc": "2026-11-02T22:41:30.925675+00:00", + "scope": "Property-specific retained-source analysis only; no code/parser/controller changes, acquisition, decompression, imports, tests, query/native/process/target work.", + "owned_directory": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame", + "physical_costs": "OPEN_NOT_ZERO", + "canonical_recorded_seconds": "98.950533479", + "full_C05": false, + "full_V03": false, + "score": 43.5, + "original_credit": 0 +} diff --git a/research/h25-gcc-libexec-phase-frame/evidence/frame/PROPERTY-FRAME-v1.json b/research/h25-gcc-libexec-phase-frame/evidence/frame/PROPERTY-FRAME-v1.json new file mode 100644 index 0000000000..e17bec17a4 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/frame/PROPERTY-FRAME-v1.json @@ -0,0 +1,172 @@ +{ + "schema": "h25-standard-libexec-prefix-property-frame-v1", + "disposition": "CONDITIONAL_NATIVE_RECIPE_PREDICTION; STOP_AT_ACTUAL_PHASE_CONTINUITY_AND_PROPERTY_PRESERVATION", + "clock": { + "started_utc": "2026-11-02T22:26:30Z", + "fixed_deadline_utc": "2026-11-02T22:41:30Z", + "frozen_utc": "2026-11-02T22:36:29.798309+00:00", + "no_extension": true + }, + "property": { + "cell": "STANDARD_LIBEXEC_PREFIX initializing gcc.cc standard_libexec_prefix", + "native_recipe_candidate": "/usr/libexec/gcc/", + "cross_competing_candidate": "/usr/libexec/gcc-cross/", + "not_claimed": "No independently qualified installed initializer, Q3 field, actual query, full C05 or universal compiler proof." + }, + "conditional_implication": { + "premises": [ + "Exact retained source/member association is used with the input reviewv2 documentary archive/body qualification limit.", + "The recorded configure text applies to the identified build and follows the applicable unoverridden rules2 option construction; PF/libexecdir arguments match the recorded values.", + "Patch/configuration evaluations use the same relevant effective layout selector and architecture inputs under the intended fresh recursive recipe, without stale series/stamps or phase-specific command-line/environment changes.", + "The actual selected/applied Makefile retains the appropriate DRIVER_DEFINES property and final compile inputs preserve it through later flags/includes/definitions.", + "The installed driver implements the particular source/build property under independently reviewed engineering evidence, rather than package identity or review approval as truth." + ], + "deduction": "Phobos release+auto => DEB_CROSS!=yes at configure under its source precondition; phase continuity => no cross-install-location patch; libexecdir=/usr/libexec => native DRIVER_DEFINES expression /usr/libexec/gcc/; preservation => source compiled initializer candidate.", + "status": "PREMISES_NOT_ALL_ESTABLISHED; installed conclusion remains HOLD", + "first_indispensable_stop": "No actual property-bound record equates patch-phase and configure-phase DEB_CROSS/selector origins/stamps for build32148542, and no property-preservation record excludes relevant later macro replacements. rules.conf/parameters do not provide those records." + }, + "phase_frame": [ + { + "id": "P0-top-rules", + "anchors": [ + "debian/rules19\u201329,50\u201356,82\u201387" + ], + "reads": [ + "rules.defs", + "rules.unpack", + "rules.patch" + ], + "behavior": "Top rules includes defs before patch-selection logic, invokes rules.conf control and recursive rules2 configure/build. Thus patch selection and configure/object phases are separate make evaluations, with stamps and recursive invocation state.", + "known": "Literal include/call graph.", + "unknown": "Actual build32148542 top/recursive make argv, environment/origins, -e/MAKEFLAGS/MAKEOVERRIDES and stamp provenance are not supplied as a joint property record." + }, + { + "id": "P1-layout-definition", + "anchors": [ + "rules.defs39\u201363,145\u2013177,208\u2013231" + ], + "behavior": "Architecture helpers/target input determine build/host/target variables. DEB_CROSS=yes is assigned for cross branches and FORCE_CROSS_LAYOUT=yes even if native triplets agree. The native else sets build_type=build-native but does not clear preexisting DEB_CROSS.", + "known": "Triplet equality alone is insufficient to exclude cross layout. External DEB_CROSS/origins and FORCE_CROSS_LAYOUT matter.", + "unknown": "Actual effective DEB_CROSS at patch evaluation and its origin; actual equality of its relevant inputs at configuration evaluation." + }, + { + "id": "P2-patch-selection", + "anchors": [ + "rules.patch228\u2013231,286\u2013298,323\u2013326", + "cross-install-location.diff158\u2013168" + ], + "behavior": "DEB_CROSS=yes adds cross-install-location; generated series is then quilt-applied. That patch changes DRIVER_DEFINES STANDARD_LIBEXEC_PREFIX from $(libexecdir)/gcc/ to $(libexecdir)/gcc-cross/.", + "known": "Concrete competing property definition and literal selector.", + "unknown": "Actual generated/applied series/stamp and phase-consistent DEB_CROSS for the exact build are not observed by these source bodies." + }, + { + "id": "P3-generator", + "anchors": [ + "rules.conf6\u201310,797,1369\u20131418", + "rules.parameters1\u201341", + "rules2:9\u201310" + ], + "behavior": "rules.conf includes defs/sonames and conditionally binutils defs for gcc-toolchain; control includes parameters-file. It writes version/SONAME/LIBC_DEP cells only. rules2 reads defs first, then parameters.", + "known": "No DEB_CROSS/FORCE_CROSS_LAYOUT/PF/libexecdir/CXXFLAGS/CPPFLAGS cell is emitted by the parameters recipe or retained928B file. Read4270B sonames has no references to these layout/flag names. Therefore generator itself does not insert a contradictory DEB_CROSS assignment, but does not certify continuity either.", + "version_caveat": "Retained source-package SOURCE_VERSION/DEB_VERSION is13.3.0-6ubuntu2~24.04 (no.1). Generated configargs/pinned-driver metadata says Ubuntu13.3.0-6ubuntu2~24.04.1. Under ordinary file-assignment interpretation the retained file cannot simply be used as unchanged actual build phase values; regeneration/overrides are possible.", + "unknown": "Actual generated parameters used by build32148542 and the effective preceding defs inputs are not this source-package metadata." + }, + { + "id": "P4-configure", + "anchors": [ + "rules2:261\u2013282,315\u2013326,419\u2013428,1012\u20131022,1054\u20131062,1328\u20131336" + ], + "behavior": "PF defaults to usr but nonempty external PF is deliberately honored. Both single_package branches ultimately set libexecdir=$(PF)/libexec (1060 is overwritten by1061). CONFARGS emits --libexecdir=/$(libexecdir); Phobos release checking selects without-target-system-zlib if DEB_CROSS=yes, otherwise with-target-system-zlib=auto.", + "known": "The recorded --prefix=/usr and --libexecdir=/usr/libexec positively corroborate ordinary native recipe input. The paired libphobos-checking=release/with-target-system-zlib=auto is a conditional configure-phase DEB_CROSS!=yes discriminator.", + "precondition_to_discriminator": "Applicable unoverridden CONFARGS recipe, actual configure-text applicability and no external injected/replaced alternative option chain; the record remains metadata, not semantics proof.", + "unknown": "That discriminator does not by itself establish earlier patch-phase DEB_CROSS, nor actual final object preservation." + }, + { + "id": "P5-object-definition", + "anchors": [ + "gcc/Makefile.in635,1053\u20131071,1142\u20131157,2328\u20132345", + "rules2:75\u201380,250\u2013251,1331\u20131336,1391\u20131397" + ], + "behavior": "Configured libexecdir feeds DRIVER_DEFINES -DSTANDARD_LIBEXEC_PREFIX=\"$(libexecdir)/gcc/\" (or patched gcc-cross). CFLAGS-gcc.o += DRIVER_DEFINES. COMPILE.base orders ALL_COMPILERFLAGS then ALL_CPPFLAGS; ALL_CXXFLAGS has object-specific flags before CXXFLAGS/INTERNAL_CFLAGS/@DEFS@, and ALL_CPPFLAGS includes CPPFLAGS. Configure pass_vars passes compiler flags as environment assignments; native recursive make passes flags as make command-line assignments.", + "known": "Precise later preservation/override surfaces are localized. rules2:80 uses a word-based filter for environment, selecting both origin environment and the two-word origin environment override. unsetenv unexports and performs an ordinary empty assignment.", + "override_classification": "Under ordinary GNU make language interpretation, command-line origin does not match filter environment and is not cleared. With make -e, environment override DOES match that word-based filter, but an ordinary file assignment to empty is not proof that the higher-priority environment value was superseded; unexport governs export and pass_vars explicitly reads/passes nonempty values. Relevant actual make flags/origins therefore remain a preservation premise. File/target/object-specific definitions and forced/includes/@DEFS@ can also affect the macro after DRIVER_DEFINES. These are possible surfaces, not observed actual overrides or a new GNU-conformance premise.", + "unknown": "Property-focused evidence that later definitions/undefinitions/forced and included inputs preserve STANDARD_LIBEXEC_PREFIX in the final driver; full finalgcc.o export is sufficient but not mandatory." + }, + { + "id": "P6-driver-Q3", + "anchors": [ + "gcc.cc313\u2013318,1611\u20131619,4659\u20134758,5352\u20135385,8314\u20138316,8615\u20138626,2753\u20132969" + ], + "behavior": "standard_libexec_prefix is the compiled initializer; process_command starts gcc_libexec_prefix from it and may relocate via make_relative_prefix based on argv0/standard_bindir. add_prefix calls update_path(component). Reached programs string comes from ordered exec_prefixes, machine suffix and build_search_list, not the scalar directly.", + "known": "Call sites, stable priority ordering and conditional path construction.", + "unknown": "Selected exact Ubuntu helper bodies/preservation, actual argv0 resolution vs configured bindir, GCC_ROOT/standard-prefix transform, machine suffix/accel values and relevant prefix/context ordering for the installed instance remain unqualified." + } + ], + "known_positive_evidence": { + "generated_configargs_sha256": "987c0a46b31907a609c15c749988921053bdf81e77d3a695c981d7be7a9378fc", + "embedded_report_sha256": "b02f8530e592eddeac5f86a2fb3a8ea80f25ac0e8ab2945fccb64a665b18d4cc", + "driver_expected_sha256": "1b99826121ae6682a634e5efe09bd3e3df58ce58e0b28f849114ab5b89139c26", + "driver_expected_bytes": 1023032, + "association": "Same-build plugin/configure metadata plus recorded package-member/build checksums, not a fresh driver read or semantic attestation.", + "buildinfo_sha256": "6ee3421f6cf17d77a50122b6934790bdcc64e42ba82c6812d257055cef434b83", + "buildinfo_environment_positive": [ + "DEB_BUILD_OPTIONS=parallel=4", + "DEB_BUILD_PROFILES=noudeb", + "LANG/LC_ALL/LC_COLLATE=C.UTF-8", + "SOURCE_DATE_EPOCH=1766091591" + ], + "buildinfo_limit": "Selected Environment section does not establish absence of command-line make/compiler flags, fresh patch stamps or complete final macro preservation; unsigned metadata remains unsigned.", + "recipe_newly_resolved": "Generator emits no layout/buildflag cells. Its source-only include sonames has no named layout/flag references. It neither fixes actual DEB_CROSS nor mandates entire finalgcc.o export." + }, + "source_association_limit": { + "independent_review": "driver-prefix-build-frame-v1/input/review/REVIEW-v2.json SHA52149802d21a4bf68c49f22fc268d6e2acc5c92e136b28f59fb24b17e85286fd", + "archive_reported_bytes": 646156, + "archive_reported_sha256": "5523658f272ad6d15a83b6e26d178fbd5cb7709ec7ce2ca52b0c843e19c228e3", + "positive": "Retained exact archive acquisition/checksum association,297-member metadata and separate member/body selection mapping support documentary provenance. Both actual body hashes matched named expectations.", + "not_established": "No single reviewed no-decode record jointly binds compressed archive SHA to these two member body hashes, or independently replays extraction. Source analysis is conditional on recorded member association; no archive listing/decode was done here.", + "no_automatic_expansion": "No new decode/acquisition is authorized by this finding. A later bounded comparison is only a possible separately admitted input operation if consequential." + }, + "future_Q3_property_relation": { + "status": "PREDECLARED_CONDITIONAL_RELATION_NOT_AUTHORIZED_OR_TESTED", + "target_field": "A specifically located component/window in Q3 programs reached-prefix string, not arbitrary substring or complete unknown-list oracle.", + "required_bindings": [ + "Exact pinned installed driver and relevant source/build association; actual command/context fixed independently.", + "Actual resolved executable directory /usr/bin equals independently bound configured STANDARD_BINDIR_PREFIX=/usr/bin/; no -no-canonical-prefixes or GCC_EXEC_PREFIX unless explicitly modeled.", + "Applicable make_relative_prefix returnsNULL in that equal-directory case; add_prefix/update_path Gcc/Binutils transformations preserve the nominated prefix under absent GCC_ROOT and the applicable standard-prefix state.", + "spec_host_machine=x86_64-linux-gnu, spec_version=13, accel_dir_suffix empty and slash/path separator meaning independently bound, not inferred from gcc-13 filename or query output.", + "Source-justified prefix insertion/priority/earlier -B and environment paths and any consequential specs/self-spec effects bound; actual output is unambiguous and raw interpretation expressly limited." + ], + "predicted_native_component": "/usr/libexec/gcc/x86_64-linux-gnu/13/", + "competing_cross_component": "/usr/libexec/gcc-cross/x86_64-linux-gnu/13/", + "position_rule": "Configured no-relocation branch adds standard_libexec GCC(require_machine_suffix1), then BINUTILS(require2), at PREFIX_PRIORITY_LAST. add_prefix inserts after existing equal-priority entries. for_each_path with do_multi=false emits machine_suffix for both; the BINUTILS node also emits just_machine_suffix. Thus after independently accounted earlier nodes, the local source-origin window includes two machine-suffixed components in that order, then the BINUTILS target-only component if update_path maps both prefixes identically. If transforms differ, each is separately predicted; no fixed global index is asserted without binding earlier nodes. Explicit -B nodes have earlier priority and must be accounted as their own block.", + "rejecting_observations": [ + "Observed local block uses gcc-cross candidate where native hypothesis predicts gcc", + "Unexpected relocation/GCC_ROOT/component transform or order/multiplicity; arbitrary matching string elsewhere is insufficient", + "Changed binary/argv0 alias/context, unbound suffix/position, missing/ambiguous/truncated raw output", + "Exit0/EOF/syntactic frame treated as intended-complete emission or full prefix-list/population truth" + ], + "meaning_of_match": "Finite corroboration of the particular source/build case under its premises. It is not logical recovery of scalar initializer, whole-list correctness, directory existence, actual subordinate selection or original C05 closure.", + "helper_frontier": "gcc/prefix.cc and libiberty/make-relative-prefix.c are absent from this selected retained base corpus. Pro20 links upstream13.3.0 comparisons; those bodies were not fetched or independently read here and are not Ubuntu-applied/installed correspondence evidence." + }, + "exact_next_dependency": { + "primary": "One property-bound exact-build artifact or independently justified engineering frame linking actual patch-phase DEB_CROSS/FORCE_CROSS_LAYOUT/origins and selected/applied cross-install-location disposition to the configure phase for32148542; include stamp/reuse applicability.", + "preservation": "A narrow record/argument for ordered operations capable of defining/undefining STANDARD_LIBEXEC_PREFIX in the final driver: applied Makefile property line, relevant object/compiler/CPPFLAGS/@DEFS@/forced or included definitions. Do not require every unrelated gcc.o definition or full machine correctness.", + "alternative_finite_evidence": "Only after source/context/command/funding authorization, the independently predeclared native-vs-cross positioned-component relation can corroborate the engineering case; no query has been authorized here. Helper/body applicability and field binding must remain explicit.", + "stop_now": "No missing phase value, helper semantics or installed correspondence is filled with an approval label, guessed defaults, configure-string equality or a new GNU premise. No old build-log/debug/helper retry." + }, + "preserved": { + "full_C05": false, + "full_V03": false, + "field_qualified": false, + "query_authorization": false, + "score": 43.5, + "original_credit": 0, + "canonical_recorded_seconds": "98.950533479", + "physical_costs": "OPEN_NOT_ZERO", + "sourceavailability_credit": "No original activity credit or runtime budget reset.", + "old_units": "unchanged; no runtime/controller/parser/code changes" + }, + "actual_activity": "Only owned PLAN/source-pin/property prose+JSON writes and bounded named retained text/JSON/hash reads. No acquisition/decompression/tar listing/compiler/native/query/test/import/process/target/policy/namespace/protected-runtime operation.", + "pro20_claims": "Complete on time per pinned receipt; technical claims assessed as source hypotheses and rechecked only where retained source exists. No approval-by-assistant or universal proof inferred.", + "origin_clarification": "An unfrozen draft initially described origin matching as exact; preserved under draft-before-origin-clarification. The final frame correctly distinguishes word-based filter matching from GNU make variable precedence. The final conclusion remains conditional." +} diff --git a/research/h25-gcc-libexec-phase-frame/evidence/frame/PROPERTY-FRAME-v1.md b/research/h25-gcc-libexec-phase-frame/evidence/frame/PROPERTY-FRAME-v1.md new file mode 100644 index 0000000000..e678e5454f --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/frame/PROPERTY-FRAME-v1.md @@ -0,0 +1,31 @@ +# STANDARD_LIBEXEC_PREFIX property frame — conditional native recipe, installed HOLD + +The retained source supports **/usr/libexec/gcc/** as the native recipe candidate, with **/usr/libexec/gcc-cross/** as a concrete competing patched candidate. It does not establish the final installed initializer or qualify Q3. This property-specific witness began22:26:30UTC with a fixed22:41:30UTC stop. No execution, code/controller change or new source acquisition occurred. + +## Phase linkage resolved from source + +Top rules19–29 includes rules.defs/rules.patch, then invokes rules.conf and recursive rules2. rules.defs208–231 can set DEB_CROSS=yes for FORCE_CROSS_LAYOUT=yes even with equal triplets. Its native branch sets build_type but does not clear an externally supplied DEB_CROSS. rules.patch228–231 selects cross-install-location under that selector; the patch158–168 changes the exact STANDARD_LIBEXEC_PREFIX expression to gcc-cross/. + +The newly read generator is precise: rules.conf1369–1418 writes version/SONAME/LIBC_DEP metadata only. It emits no DEB_CROSS/FORCE_CROSS_LAYOUT/PF/libexecdir/CXXFLAGS/CPPFLAGS. rules2 includes defs before parameters. Thus the generator introduces no direct layout assignment, but it is not an actual cross-phase selector record. The retained928B parameters says~24.04 without.1; configargs/driver metadata says~24.04.1. It cannot silently become the actual generated build-phase file. Regeneration or overriding values remain possible. + +Both single_package branches ultimately set libexecdir=$(PF)/libexec; the earlier1060 assignment is overwritten by1061. PF defaults to usr but deliberately honors nonempty external input. Recorded --prefix=/usr and --libexecdir=/usr/libexec corroborate that recipe candidate. Phobos release checking plus --with-target-system-zlib=auto conditionally identifies DEB_CROSS!=yes at configure-time under the applicable unoverridden CONFARGS recipe. It does not by itself settle earlier patch selection. + +Makefile.in635/2328–2345 passes libexecdir into DRIVER_DEFINES and CFLAGS-gcc.o. The object-specific -D precedes CXXFLAGS/INTERNAL_CFLAGS/@DEFS@ and later CPPFLAGS at compilation. rules2:80 uses a word-based filter: both environment and the two-word environment override origin match. Its unsetenv unexports and makes an ordinary empty assignment. Command-line values do not match the filter; with make-e the higher-priority environment value is not proved superseded by that ordinary assignment. Explicit pass_vars can still read/pass a nonempty value. Actual origins/make flags remain a preservation premise. rules2 passes nonempty flags to configure and recursive native make. These are localized potential preservation/override surfaces, not evidence an override occurred. A whole finalgcc.o export is one sufficient artifact, not the sole acceptable engineering evidence. + +## First indispensable gap and conditional conclusion + +If actual patch/configure selector inputs are phase-consistent under the intended fresh recipe, the configure discriminator implies no cross-install-location patch. If the applied Makefile/property and later compile inputs preserve the definition, substitution gives /usr/libexec/gcc/. Those actual-phase and property-preservation premises are not established by the retained generator/parameters. The first STOP is therefore an exact-build property record linking patch/configure DEB_CROSS/origins/stamps, followed by the narrowly relevant definition-preservation evidence. No universal GCC or GNU conformance premise is adopted. + +The unsigned buildinfo positively records parallel=4/noudeb/C.UTF-8 metadata; it is not a complete command-line/phase-origin record. Package/member/configure-text association remains useful partial provenance, not semantics. Independent input reviewv2 also preserves the separate documentary archive/body limitation: the no-decode records do not jointly certify compressed archive SHA and these two body hashes. No decode/listing was attempted to repair that limitation. + +## Conditional future Q3 relation + +Q3 does not expose the scalar. gcc.cc4697–4724 may relocate it; add_prefix3133 applies update_path; machine_suffix8314–8316 and ordered prefix nodes generate the reached programs string. If actual resolved executable directory equals configured/usr/bin, the applicable relocation helper returnsNULL, update_path is identity for the relevant GCC/BINUTILS components, and suffix fields are independently bound, the native candidate component is/usr/libexec/gcc/x86_64-linux-gnu/13/; cross prediction substitutes gcc-cross/. + +Position matters: the configured branch5357–5362 adds GCC(require1), then BINUTILS(require2). Under identical transformations, their local emitted window has the machine-suffixed component twice, then the target-only component. Earlier prefix nodes and explicit-B priority blocks must be independently accounted; no global index or arbitrary matching substring is accepted. Changed identity/context, competing cross layout, unexpected transform/order/multiplicity, or ambiguous/truncated output rejects/holds the relation. A match would be finite corroboration, not initializer recovery or complete list/selection truth. Exit0/EOF still cannot establish intended emission completeness. + +The selected exact prefix.cc and make-relative-prefix.c bodies are absent. Pro20's upstream comparison links are retained, but those bodies were not fetched/read or promoted to Ubuntu-applied correspondence here. That helper/installed binding remains explicit. PROPERTY-FRAME-v1.json contains the full phase matrix, premises, known-vs-unknown classification and exact next dependency; SOURCE-PINS-v1.json pins the named retained inputs. + +Full C05/full V03/field qualification remain false,43.5 and zero added original credit unchanged, canonical recorded98.950533479seconds preserved, physical costs OPEN_NOT_ZERO. All old units remain closed; no query, assurance waiver, budget reset or runtime modification follows. + +An unfrozen origin-matching draft is preserved under draft-before-origin-clarification; CORRECTION-v1.json records that clarification. The final property conclusion is unchanged. diff --git a/research/h25-gcc-libexec-phase-frame/evidence/frame/READER-NOTES-v1.json b/research/h25-gcc-libexec-phase-frame/evidence/frame/READER-NOTES-v1.json new file mode 100644 index 0000000000..1bbfd5087d --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/frame/READER-NOTES-v1.json @@ -0,0 +1,18 @@ +{ + "schema": "h25-prefix-frame-bounded-reader-notes-v1", + "source_execution": false, + "notes": [ + { + "operation": "Initial named rg read included selected/debian/rules.patch", + "outcome": "Path absent; rg exited2. Actual retained exact file was then read from gcc-debian-patch-inputs/debian/rules.patch; no acquisition or source mutation." + }, + { + "operation": "Initial metadata printer treated DISTRO-GENERATOR-SOURCES-v1 as dict", + "outcome": "It is a bare list; AttributeError stopped only that read cell before planned buildinfo read. Corrected targeted list handling read only named rows; buildinfo was later read separately. No original source was imported/executed." + }, + { + "operation": "Origin semantics clarification", + "outcome": "Unfrozen draft preserved with exact old hashes in CORRECTION-v1.json; final frame distinguishes word-based filter from precedence." + } + ] +} diff --git a/research/h25-gcc-libexec-phase-frame/evidence/frame/REPORTING-CORRECTION-v1.json b/research/h25-gcc-libexec-phase-frame/evidence/frame/REPORTING-CORRECTION-v1.json new file mode 100644 index 0000000000..d5864a86c6 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/frame/REPORTING-CORRECTION-v1.json @@ -0,0 +1,14 @@ +{ + "schema": "frozen-frame-accounting-reporting-correction-v1", + "recorded_utc": "2026-11-02T23:08:57.308395+00:00", + "target": "driver-prefix-build-frame-v1/frame/PROPERTY-FRAME-v1.json and author final wording", + "correction": "Canonical ledger remains94.550533479 at589b607e... unchanged. Supplemental sourcecontrols0.74+publication3.66 yield98.950533479 combined. The latter is not a new canonical ledger or complete physical cost.", + "canonical_ledger_sha256": "589b607e096d4ef7a49b38501827f1f5b865d1263591dff8b96cded9c7d62126", + "supplemental_actual_ledger": { + "path": "pilot-publication-checks-v1/LEDGER-002.json", + "bytes": 20799, + "sha256": "4d6158f5f6372af3de92e4515723475c6bb5e7bd48b4d61ea7f83162fe7c2832" + }, + "original_frozen_source_bytes_unchanged": true, + "costs": "OPEN_NOT_ZERO" +} diff --git a/research/h25-gcc-libexec-phase-frame/evidence/frame/SOURCE-FREEZE-v1.json b/research/h25-gcc-libexec-phase-frame/evidence/frame/SOURCE-FREEZE-v1.json new file mode 100644 index 0000000000..f49ddd41f8 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/frame/SOURCE-FREEZE-v1.json @@ -0,0 +1,66 @@ +{ + "schema": "h25-prefix-property-frame-source-freeze-v1", + "status": "FROZEN_CONDITIONAL_SOURCE_WITNESS_STOP", + "frozen_utc": "2026-11-02T22:37:15.838234+00:00", + "fixed_deadline_utc": "2026-11-02T22:41:30Z", + "files": [ + { + "path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/PLAN.json", + "bytes": 626, + "sha256": "c9406d5126a3fc7732b983ea308b1ed088b2f09bf35917f4efdf37b97ada45ac" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/SOURCE-PINS-v1.json", + "bytes": 6094, + "sha256": "4cd178b2ad9e41b5dfbd86661ac9aba60d69f99f320244a7a76cecca48204092" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/PROPERTY-FRAME-v1.json", + "bytes": 17423, + "sha256": "058f40fefd8c06a3867e77e7e95a70d4690bcc34f3ba3f50a7233d121f50546d" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/PROPERTY-FRAME-v1.md", + "bytes": 6173, + "sha256": "cc25f8cf72498ac0962cd4b2f12dc584f0ee39563304130b76631a99bcfd374a" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/CORRECTION-v1.json", + "bytes": 1135, + "sha256": "ab0aaf1add9ea24ca56d258c927c4836625d303c90d9eb84ca0d076ecbdd03b3" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/READER-NOTES-v1.json", + "bytes": 934, + "sha256": "bda3f8414be9fb84ba8b99ea57a009dd6a88741a462fc2f375423c8097a6b1f6" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/draft-before-origin-clarification/PROPERTY-FRAME-v1.json", + "bytes": 16751, + "sha256": "1c233c93e67472a8f2981178491044563abf60ce7071f80e728c8e26d6016959" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/draft-before-origin-clarification/PROPERTY-FRAME-v1.md", + "bytes": 5698, + "sha256": "51adbed110b5123d0039216dd6fdedf8b5cb54ad7803eba04fc1bdcf6c0f818b" + } + ], + "native_recipe_candidate": "/usr/libexec/gcc/", + "competing_patch_candidate": "/usr/libexec/gcc-cross/", + "first_indispensable_gap": "Actual patch/configure DEB_CROSS/selector/origin/stamp continuity for build32148542 and property-specific later STANDARD_LIBEXEC_PREFIX preservation, then exact helper/installed/Q3 binding.", + "no_full_final_gcc_o_export_mandate": true, + "source_association": "Documentary archive/member/body provenance retained with independent inputreviewv2 gap; no new decode/listing.", + "code_parser_controller_changes": false, + "source_or_original_import_execution": false, + "query_native_test_process_or_target_work": false, + "acquisition_decompression": false, + "full_C05": false, + "full_V03": false, + "field_qualified": false, + "score": 43.5, + "original_credit": 0, + "canonical_recorded_seconds": "98.950533479", + "physical_costs": "OPEN_NOT_ZERO", + "old_units_and_caps": "unchanged", + "automatic_resume_or_grant": false +} diff --git a/research/h25-gcc-libexec-phase-frame/evidence/frame/SOURCE-PINS-v1.json b/research/h25-gcc-libexec-phase-frame/evidence/frame/SOURCE-PINS-v1.json new file mode 100644 index 0000000000..8f9ae66e39 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/frame/SOURCE-PINS-v1.json @@ -0,0 +1,141 @@ +{ + "schema": "h25-prefix-property-retained-input-pins-v1", + "files": [ + { + "path": "outputs/c05-v03-completion-20261102T055710Z/consultation/RESPONSE-v20.txt", + "available": true, + "bytes": 8320, + "sha256": "02d322f0fd524fd57ab663583c704994ca03969dfbdd315b94ecd5de6a8f2095" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/consultation/RESPONSE-v20-LINKS.json", + "available": true, + "bytes": 2845, + "sha256": "632191bec208036ede6b703ac851c92acb63f9997302bd305235ff70b0416d07" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/consultation/COMPLETE-RECEIPT-v20.json", + "available": true, + "bytes": 502, + "sha256": "b4bb7201bd30831fd9ae99c0cdb749b099f6c9ed68451acd1463928f973af65b" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review/REVIEW-v2.json", + "available": true, + "bytes": 5591, + "sha256": "52149802d21a4bf68c49f22fc268d6e2acc5c92e136b28f59fb24b17e85286fd" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/DISTRO-GENERATOR-SOURCES-v1.json", + "available": true, + "bytes": 14886, + "sha256": "58f4a165bbd0045559eddc79f940eea4672425c0def4d4e12f95069bbbc32fbe" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-MEMBERS.json", + "available": true, + "bytes": 34772, + "sha256": "30403263d883340813c39497a89751a15c543937b950e1af2a907041d25c066f" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/ACQUISITION-v2.json", + "available": true, + "bytes": 2563, + "sha256": "c287abe845c438ec814cd3a3a807e05df6ec8def764d399fdc1bf5a036c8325d" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/SOURCE-METADATA-CHECK-v1.json", + "available": true, + "bytes": 4280, + "sha256": "e34ccce299d6b30d2907ce558d5138b88d65339314382199199fb531d9138514" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules", + "available": true, + "bytes": 2984, + "sha256": "2e0afdc6303e407f344d2f6724be731ae84b8fd59758f172491c25348432d75a" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules.defs", + "available": true, + "bytes": 70194, + "sha256": "aaf79170f51110b6b9c90d1bee022d2122401fdbbf8840d91baa3e6f13cbeb58" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules2", + "available": true, + "bytes": 97853, + "sha256": "c9b1cebada609601ef1fe3bb34babccae572dccc3e86cebfad3927229d3b83ae" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-debian-patch-inputs/debian/rules.patch", + "available": true, + "bytes": 12473, + "sha256": "6c6d9dc472ee7082c5658030c812436668ffbb99f76966a6cf9081b03732e8dc" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-debian-patch-inputs/debian/patches/cross-install-location.diff", + "available": true, + "bytes": 22890, + "sha256": "9e943d2ea5dbabe60ee30a3cd08384874ce7c933ed233018871dbb568275eeb3" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.conf", + "available": true, + "bytes": 54432, + "sha256": "bd04d88f2b6b39567344df447d03d74b149d8a6c8721c7dd0bbe9dd7b185b546" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.parameters", + "available": true, + "bytes": 928, + "sha256": "954623c853cb1c7024f634084edc048a319a7f92527887cb35aacc062abd7610" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.sonames", + "available": true, + "bytes": 4270, + "sha256": "5fce0244ae5a0716a8b4558ac880e7a6fa26cb7ffc798c29bab536c133940ea3" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-base-selected/gcc/Makefile.in", + "available": true, + "bytes": 164044, + "sha256": "41e0fe9006909a793736b73fdd434929c913023992c33cf9b746423f78682e45" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-base-selected/gcc/gcc.cc", + "available": true, + "bytes": 320626, + "sha256": "c260c6321fb3852df326618d18642a3c795a8886c285db71acde6a97fd031b0a" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/unit03/source-artifacts/plugin-members/usr/lib/gcc/x86_64-linux-gnu/13/plugin/include/configargs.h", + "available": true, + "bytes": 1640, + "sha256": "987c0a46b31907a609c15c749988921053bdf81e77d3a695c981d7be7a9378fc" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/evidence/EMBEDDED-CONFIGURATION-v1.json", + "available": true, + "bytes": 1727, + "sha256": "b02f8530e592eddeac5f86a2fb3a8ea80f25ac0e8ab2945fccb64a665b18d4cc" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1_amd64.buildinfo", + "available": true, + "bytes": 52703, + "sha256": "6ee3421f6cf17d77a50122b6934790bdcc64e42ba82c6812d257055cef434b83" + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-base-selected/gcc/prefix.cc", + "available": false + }, + { + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-base-selected/libiberty/make-relative-prefix.c", + "available": false + } + ], + "scope": "Named retained byte/hash data only; no acquisition/archive traversal/source execution. Missing selected helper bodies are named, not globally absent.", + "line_numbering": "LF only, preserving GCC formfeeds" +} diff --git a/research/h25-gcc-libexec-phase-frame/evidence/frame/draft-before-origin-clarification/PROPERTY-FRAME-v1.json b/research/h25-gcc-libexec-phase-frame/evidence/frame/draft-before-origin-clarification/PROPERTY-FRAME-v1.json new file mode 100644 index 0000000000..e4002911f4 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/frame/draft-before-origin-clarification/PROPERTY-FRAME-v1.json @@ -0,0 +1,171 @@ +{ + "schema": "h25-standard-libexec-prefix-property-frame-v1", + "disposition": "CONDITIONAL_NATIVE_RECIPE_PREDICTION; STOP_AT_ACTUAL_PHASE_CONTINUITY_AND_PROPERTY_PRESERVATION", + "clock": { + "started_utc": "2026-11-02T22:26:30Z", + "fixed_deadline_utc": "2026-11-02T22:41:30Z", + "frozen_utc": "2026-11-02T22:35:05.574535+00:00", + "no_extension": true + }, + "property": { + "cell": "STANDARD_LIBEXEC_PREFIX initializing gcc.cc standard_libexec_prefix", + "native_recipe_candidate": "/usr/libexec/gcc/", + "cross_competing_candidate": "/usr/libexec/gcc-cross/", + "not_claimed": "No independently qualified installed initializer, Q3 field, actual query, full C05 or universal compiler proof." + }, + "conditional_implication": { + "premises": [ + "Exact retained source/member association is used with the input reviewv2 documentary archive/body qualification limit.", + "The recorded configure text applies to the identified build and follows the applicable unoverridden rules2 option construction; PF/libexecdir arguments match the recorded values.", + "Patch/configuration evaluations use the same relevant effective layout selector and architecture inputs under the intended fresh recursive recipe, without stale series/stamps or phase-specific command-line/environment changes.", + "The actual selected/applied Makefile retains the appropriate DRIVER_DEFINES property and final compile inputs preserve it through later flags/includes/definitions.", + "The installed driver implements the particular source/build property under independently reviewed engineering evidence, rather than package identity or review approval as truth." + ], + "deduction": "Phobos release+auto => DEB_CROSS!=yes at configure under its source precondition; phase continuity => no cross-install-location patch; libexecdir=/usr/libexec => native DRIVER_DEFINES expression /usr/libexec/gcc/; preservation => source compiled initializer candidate.", + "status": "PREMISES_NOT_ALL_ESTABLISHED; installed conclusion remains HOLD", + "first_indispensable_stop": "No actual property-bound record equates patch-phase and configure-phase DEB_CROSS/selector origins/stamps for build32148542, and no property-preservation record excludes relevant later macro replacements. rules.conf/parameters do not provide those records." + }, + "phase_frame": [ + { + "id": "P0-top-rules", + "anchors": [ + "debian/rules19\u201329,50\u201356,82\u201387" + ], + "reads": [ + "rules.defs", + "rules.unpack", + "rules.patch" + ], + "behavior": "Top rules includes defs before patch-selection logic, invokes rules.conf control and recursive rules2 configure/build. Thus patch selection and configure/object phases are separate make evaluations, with stamps and recursive invocation state.", + "known": "Literal include/call graph.", + "unknown": "Actual build32148542 top/recursive make argv, environment/origins, -e/MAKEFLAGS/MAKEOVERRIDES and stamp provenance are not supplied as a joint property record." + }, + { + "id": "P1-layout-definition", + "anchors": [ + "rules.defs39\u201363,145\u2013177,208\u2013231" + ], + "behavior": "Architecture helpers/target input determine build/host/target variables. DEB_CROSS=yes is assigned for cross branches and FORCE_CROSS_LAYOUT=yes even if native triplets agree. The native else sets build_type=build-native but does not clear preexisting DEB_CROSS.", + "known": "Triplet equality alone is insufficient to exclude cross layout. External DEB_CROSS/origins and FORCE_CROSS_LAYOUT matter.", + "unknown": "Actual effective DEB_CROSS at patch evaluation and its origin; actual equality of its relevant inputs at configuration evaluation." + }, + { + "id": "P2-patch-selection", + "anchors": [ + "rules.patch228\u2013231,286\u2013298,323\u2013326", + "cross-install-location.diff158\u2013168" + ], + "behavior": "DEB_CROSS=yes adds cross-install-location; generated series is then quilt-applied. That patch changes DRIVER_DEFINES STANDARD_LIBEXEC_PREFIX from $(libexecdir)/gcc/ to $(libexecdir)/gcc-cross/.", + "known": "Concrete competing property definition and literal selector.", + "unknown": "Actual generated/applied series/stamp and phase-consistent DEB_CROSS for the exact build are not observed by these source bodies." + }, + { + "id": "P3-generator", + "anchors": [ + "rules.conf6\u201310,797,1369\u20131418", + "rules.parameters1\u201341", + "rules2:9\u201310" + ], + "behavior": "rules.conf includes defs/sonames and conditionally binutils defs for gcc-toolchain; control includes parameters-file. It writes version/SONAME/LIBC_DEP cells only. rules2 reads defs first, then parameters.", + "known": "No DEB_CROSS/FORCE_CROSS_LAYOUT/PF/libexecdir/CXXFLAGS/CPPFLAGS cell is emitted by the parameters recipe or retained928B file. Read4270B sonames has no references to these layout/flag names. Therefore generator itself does not insert a contradictory DEB_CROSS assignment, but does not certify continuity either.", + "version_caveat": "Retained source-package SOURCE_VERSION/DEB_VERSION is13.3.0-6ubuntu2~24.04 (no.1). Generated configargs/pinned-driver metadata says Ubuntu13.3.0-6ubuntu2~24.04.1. Under ordinary file-assignment interpretation the retained file cannot simply be used as unchanged actual build phase values; regeneration/overrides are possible.", + "unknown": "Actual generated parameters used by build32148542 and the effective preceding defs inputs are not this source-package metadata." + }, + { + "id": "P4-configure", + "anchors": [ + "rules2:261\u2013282,315\u2013326,419\u2013428,1012\u20131022,1054\u20131062,1328\u20131336" + ], + "behavior": "PF defaults to usr but nonempty external PF is deliberately honored. Both single_package branches ultimately set libexecdir=$(PF)/libexec (1060 is overwritten by1061). CONFARGS emits --libexecdir=/$(libexecdir); Phobos release checking selects without-target-system-zlib if DEB_CROSS=yes, otherwise with-target-system-zlib=auto.", + "known": "The recorded --prefix=/usr and --libexecdir=/usr/libexec positively corroborate ordinary native recipe input. The paired libphobos-checking=release/with-target-system-zlib=auto is a conditional configure-phase DEB_CROSS!=yes discriminator.", + "precondition_to_discriminator": "Applicable unoverridden CONFARGS recipe, actual configure-text applicability and no external injected/replaced alternative option chain; the record remains metadata, not semantics proof.", + "unknown": "That discriminator does not by itself establish earlier patch-phase DEB_CROSS, nor actual final object preservation." + }, + { + "id": "P5-object-definition", + "anchors": [ + "gcc/Makefile.in635,1053\u20131071,1142\u20131157,2328\u20132345", + "rules2:75\u201380,250\u2013251,1331\u20131336,1391\u20131397" + ], + "behavior": "Configured libexecdir feeds DRIVER_DEFINES -DSTANDARD_LIBEXEC_PREFIX=\"$(libexecdir)/gcc/\" (or patched gcc-cross). CFLAGS-gcc.o += DRIVER_DEFINES. COMPILE.base orders ALL_COMPILERFLAGS then ALL_CPPFLAGS; ALL_CXXFLAGS has object-specific flags before CXXFLAGS/INTERNAL_CFLAGS/@DEFS@, and ALL_CPPFLAGS includes CPPFLAGS. Configure pass_vars passes compiler flags as environment assignments; native recursive make passes flags as make command-line assignments.", + "known": "Precise later preservation/override surfaces are localized. rules2 clears compiler flags only when origin is exactly environment.", + "override_classification": "Under ordinary GNU make language interpretation, command-line variables are not cleared by that environment-only filter; -e environment override origin is also not the literal environment filter. File/target/object-specific assignments and forced/includes/@DEFS@ can affect the macro after DRIVER_DEFINES. These are possible surfaces, not observed malicious/actual overrides or a new GNU-conformance premise.", + "unknown": "Property-focused evidence that later definitions/undefinitions/forced and included inputs preserve STANDARD_LIBEXEC_PREFIX in the final driver; full finalgcc.o export is sufficient but not mandatory." + }, + { + "id": "P6-driver-Q3", + "anchors": [ + "gcc.cc313\u2013318,1611\u20131619,4659\u20134758,5352\u20135385,8314\u20138316,8615\u20138626,2753\u20132969" + ], + "behavior": "standard_libexec_prefix is the compiled initializer; process_command starts gcc_libexec_prefix from it and may relocate via make_relative_prefix based on argv0/standard_bindir. add_prefix calls update_path(component). Reached programs string comes from ordered exec_prefixes, machine suffix and build_search_list, not the scalar directly.", + "known": "Call sites, stable priority ordering and conditional path construction.", + "unknown": "Selected exact Ubuntu helper bodies/preservation, actual argv0 resolution vs configured bindir, GCC_ROOT/standard-prefix transform, machine suffix/accel values and relevant prefix/context ordering for the installed instance remain unqualified." + } + ], + "known_positive_evidence": { + "generated_configargs_sha256": "987c0a46b31907a609c15c749988921053bdf81e77d3a695c981d7be7a9378fc", + "embedded_report_sha256": "b02f8530e592eddeac5f86a2fb3a8ea80f25ac0e8ab2945fccb64a665b18d4cc", + "driver_expected_sha256": "1b99826121ae6682a634e5efe09bd3e3df58ce58e0b28f849114ab5b89139c26", + "driver_expected_bytes": 1023032, + "association": "Same-build plugin/configure metadata plus recorded package-member/build checksums, not a fresh driver read or semantic attestation.", + "buildinfo_sha256": "6ee3421f6cf17d77a50122b6934790bdcc64e42ba82c6812d257055cef434b83", + "buildinfo_environment_positive": [ + "DEB_BUILD_OPTIONS=parallel=4", + "DEB_BUILD_PROFILES=noudeb", + "LANG/LC_ALL/LC_COLLATE=C.UTF-8", + "SOURCE_DATE_EPOCH=1766091591" + ], + "buildinfo_limit": "Selected Environment section does not establish absence of command-line make/compiler flags, fresh patch stamps or complete final macro preservation; unsigned metadata remains unsigned.", + "recipe_newly_resolved": "Generator emits no layout/buildflag cells. Its source-only include sonames has no named layout/flag references. It neither fixes actual DEB_CROSS nor mandates entire finalgcc.o export." + }, + "source_association_limit": { + "independent_review": "driver-prefix-build-frame-v1/input/review/REVIEW-v2.json SHA52149802d21a4bf68c49f22fc268d6e2acc5c92e136b28f59fb24b17e85286fd", + "archive_reported_bytes": 646156, + "archive_reported_sha256": "5523658f272ad6d15a83b6e26d178fbd5cb7709ec7ce2ca52b0c843e19c228e3", + "positive": "Retained exact archive acquisition/checksum association,297-member metadata and separate member/body selection mapping support documentary provenance. Both actual body hashes matched named expectations.", + "not_established": "No single reviewed no-decode record jointly binds compressed archive SHA to these two member body hashes, or independently replays extraction. Source analysis is conditional on recorded member association; no archive listing/decode was done here.", + "no_automatic_expansion": "No new decode/acquisition is authorized by this finding. A later bounded comparison is only a possible separately admitted input operation if consequential." + }, + "future_Q3_property_relation": { + "status": "PREDECLARED_CONDITIONAL_RELATION_NOT_AUTHORIZED_OR_TESTED", + "target_field": "A specifically located component/window in Q3 programs reached-prefix string, not arbitrary substring or complete unknown-list oracle.", + "required_bindings": [ + "Exact pinned installed driver and relevant source/build association; actual command/context fixed independently.", + "Actual resolved executable directory /usr/bin equals independently bound configured STANDARD_BINDIR_PREFIX=/usr/bin/; no -no-canonical-prefixes or GCC_EXEC_PREFIX unless explicitly modeled.", + "Applicable make_relative_prefix returnsNULL in that equal-directory case; add_prefix/update_path Gcc/Binutils transformations preserve the nominated prefix under absent GCC_ROOT and the applicable standard-prefix state.", + "spec_host_machine=x86_64-linux-gnu, spec_version=13, accel_dir_suffix empty and slash/path separator meaning independently bound, not inferred from gcc-13 filename or query output.", + "Source-justified prefix insertion/priority/earlier -B and environment paths and any consequential specs/self-spec effects bound; actual output is unambiguous and raw interpretation expressly limited." + ], + "predicted_native_component": "/usr/libexec/gcc/x86_64-linux-gnu/13/", + "competing_cross_component": "/usr/libexec/gcc-cross/x86_64-linux-gnu/13/", + "position_rule": "Configured no-relocation branch adds standard_libexec GCC(require_machine_suffix1), then BINUTILS(require2), at PREFIX_PRIORITY_LAST. add_prefix inserts after existing equal-priority entries. for_each_path with do_multi=false emits machine_suffix for both; the BINUTILS node also emits just_machine_suffix. Thus after independently accounted earlier nodes, the local source-origin window includes two machine-suffixed components in that order, then the BINUTILS target-only component if update_path maps both prefixes identically. If transforms differ, each is separately predicted; no fixed global index is asserted without binding earlier nodes. Explicit -B nodes have earlier priority and must be accounted as their own block.", + "rejecting_observations": [ + "Observed local block uses gcc-cross candidate where native hypothesis predicts gcc", + "Unexpected relocation/GCC_ROOT/component transform or order/multiplicity; arbitrary matching string elsewhere is insufficient", + "Changed binary/argv0 alias/context, unbound suffix/position, missing/ambiguous/truncated raw output", + "Exit0/EOF/syntactic frame treated as intended-complete emission or full prefix-list/population truth" + ], + "meaning_of_match": "Finite corroboration of the particular source/build case under its premises. It is not logical recovery of scalar initializer, whole-list correctness, directory existence, actual subordinate selection or original C05 closure.", + "helper_frontier": "gcc/prefix.cc and libiberty/make-relative-prefix.c are absent from this selected retained base corpus. Pro20 links upstream13.3.0 comparisons; those bodies were not fetched or independently read here and are not Ubuntu-applied/installed correspondence evidence." + }, + "exact_next_dependency": { + "primary": "One property-bound exact-build artifact or independently justified engineering frame linking actual patch-phase DEB_CROSS/FORCE_CROSS_LAYOUT/origins and selected/applied cross-install-location disposition to the configure phase for32148542; include stamp/reuse applicability.", + "preservation": "A narrow record/argument for ordered operations capable of defining/undefining STANDARD_LIBEXEC_PREFIX in the final driver: applied Makefile property line, relevant object/compiler/CPPFLAGS/@DEFS@/forced or included definitions. Do not require every unrelated gcc.o definition or full machine correctness.", + "alternative_finite_evidence": "Only after source/context/command/funding authorization, the independently predeclared native-vs-cross positioned-component relation can corroborate the engineering case; no query has been authorized here. Helper/body applicability and field binding must remain explicit.", + "stop_now": "No missing phase value, helper semantics or installed correspondence is filled with an approval label, guessed defaults, configure-string equality or a new GNU premise. No old build-log/debug/helper retry." + }, + "preserved": { + "full_C05": false, + "full_V03": false, + "field_qualified": false, + "query_authorization": false, + "score": 43.5, + "original_credit": 0, + "canonical_recorded_seconds": "98.950533479", + "physical_costs": "OPEN_NOT_ZERO", + "sourceavailability_credit": "No original activity credit or runtime budget reset.", + "old_units": "unchanged; no runtime/controller/parser/code changes" + }, + "actual_activity": "Only owned PLAN/source-pin/property prose+JSON writes and bounded named retained text/JSON/hash reads. No acquisition/decompression/tar listing/compiler/native/query/test/import/process/target/policy/namespace/protected-runtime operation.", + "pro20_claims": "Complete on time per pinned receipt; technical claims assessed as source hypotheses and rechecked only where retained source exists. No approval-by-assistant or universal proof inferred." +} diff --git a/research/h25-gcc-libexec-phase-frame/evidence/frame/draft-before-origin-clarification/PROPERTY-FRAME-v1.md b/research/h25-gcc-libexec-phase-frame/evidence/frame/draft-before-origin-clarification/PROPERTY-FRAME-v1.md new file mode 100644 index 0000000000..5e96af4224 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/frame/draft-before-origin-clarification/PROPERTY-FRAME-v1.md @@ -0,0 +1,29 @@ +# STANDARD_LIBEXEC_PREFIX property frame — conditional native recipe, installed HOLD + +The retained source supports **/usr/libexec/gcc/** as the native recipe candidate, with **/usr/libexec/gcc-cross/** as a concrete competing patched candidate. It does not establish the final installed initializer or qualify Q3. This property-specific witness began22:26:30UTC with a fixed22:41:30UTC stop. No execution, code/controller change or new source acquisition occurred. + +## Phase linkage resolved from source + +Top rules19–29 includes rules.defs/rules.patch, then invokes rules.conf and recursive rules2. rules.defs208–231 can set DEB_CROSS=yes for FORCE_CROSS_LAYOUT=yes even with equal triplets. Its native branch sets build_type but does not clear an externally supplied DEB_CROSS. rules.patch228–231 selects cross-install-location under that selector; the patch158–168 changes the exact STANDARD_LIBEXEC_PREFIX expression to gcc-cross/. + +The newly read generator is precise: rules.conf1369–1418 writes version/SONAME/LIBC_DEP metadata only. It emits no DEB_CROSS/FORCE_CROSS_LAYOUT/PF/libexecdir/CXXFLAGS/CPPFLAGS. rules2 includes defs before parameters. Thus the generator introduces no direct layout assignment, but it is not an actual cross-phase selector record. The retained928B parameters says~24.04 without.1; configargs/driver metadata says~24.04.1. It cannot silently become the actual generated build-phase file. Regeneration or overriding values remain possible. + +Both single_package branches ultimately set libexecdir=$(PF)/libexec; the earlier1060 assignment is overwritten by1061. PF defaults to usr but deliberately honors nonempty external input. Recorded --prefix=/usr and --libexecdir=/usr/libexec corroborate that recipe candidate. Phobos release checking plus --with-target-system-zlib=auto conditionally identifies DEB_CROSS!=yes at configure-time under the applicable unoverridden CONFARGS recipe. It does not by itself settle earlier patch selection. + +Makefile.in635/2328–2345 passes libexecdir into DRIVER_DEFINES and CFLAGS-gcc.o. The object-specific -D precedes CXXFLAGS/INTERNAL_CFLAGS/@DEFS@ and later CPPFLAGS at compilation. rules2:80 clears only flags of origin exactly environment; command-line and make-e environment-override values are outside that filter. rules2 passes nonempty flags to configure and recursive native make. These are localized potential preservation/override surfaces, not evidence an override occurred. A whole finalgcc.o export is one sufficient artifact, not the sole acceptable engineering evidence. + +## First indispensable gap and conditional conclusion + +If actual patch/configure selector inputs are phase-consistent under the intended fresh recipe, the configure discriminator implies no cross-install-location patch. If the applied Makefile/property and later compile inputs preserve the definition, substitution gives /usr/libexec/gcc/. Those actual-phase and property-preservation premises are not established by the retained generator/parameters. The first STOP is therefore an exact-build property record linking patch/configure DEB_CROSS/origins/stamps, followed by the narrowly relevant definition-preservation evidence. No universal GCC or GNU conformance premise is adopted. + +The unsigned buildinfo positively records parallel=4/noudeb/C.UTF-8 metadata; it is not a complete command-line/phase-origin record. Package/member/configure-text association remains useful partial provenance, not semantics. Independent input reviewv2 also preserves the separate documentary archive/body limitation: the no-decode records do not jointly certify compressed archive SHA and these two body hashes. No decode/listing was attempted to repair that limitation. + +## Conditional future Q3 relation + +Q3 does not expose the scalar. gcc.cc4697–4724 may relocate it; add_prefix3133 applies update_path; machine_suffix8314–8316 and ordered prefix nodes generate the reached programs string. If actual resolved executable directory equals configured/usr/bin, the applicable relocation helper returnsNULL, update_path is identity for the relevant GCC/BINUTILS components, and suffix fields are independently bound, the native candidate component is/usr/libexec/gcc/x86_64-linux-gnu/13/; cross prediction substitutes gcc-cross/. + +Position matters: the configured branch5357–5362 adds GCC(require1), then BINUTILS(require2). Under identical transformations, their local emitted window has the machine-suffixed component twice, then the target-only component. Earlier prefix nodes and explicit-B priority blocks must be independently accounted; no global index or arbitrary matching substring is accepted. Changed identity/context, competing cross layout, unexpected transform/order/multiplicity, or ambiguous/truncated output rejects/holds the relation. A match would be finite corroboration, not initializer recovery or complete list/selection truth. Exit0/EOF still cannot establish intended emission completeness. + +The selected exact prefix.cc and make-relative-prefix.c bodies are absent. Pro20's upstream comparison links are retained, but those bodies were not fetched/read or promoted to Ubuntu-applied correspondence here. That helper/installed binding remains explicit. PROPERTY-FRAME-v1.json contains the full phase matrix, premises, known-vs-unknown classification and exact next dependency; SOURCE-PINS-v1.json pins the named retained inputs. + +Full C05/full V03/field qualification remain false,43.5 and zero added original credit unchanged, canonical recorded98.950533479seconds preserved, physical costs OPEN_NOT_ZERO. All old units remain closed; no query, assurance waiver, budget reset or runtime modification follows. diff --git a/research/h25-gcc-libexec-phase-frame/evidence/frame/review/REVIEW-v1.json b/research/h25-gcc-libexec-phase-frame/evidence/frame/review/REVIEW-v1.json new file mode 100644 index 0000000000..2da9bce780 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/frame/review/REVIEW-v1.json @@ -0,0 +1,269 @@ +{ + "schema": "standard-libexec-property-frame-independent-critical-review-v1", + "started_utc": "2026-11-02T22:42:41Z", + "fixed_review_stop_utc": "2026-11-02T22:52:41Z", + "frozen_utc": "2026-11-02T22:50:03.541234+00:00", + "disposition": "ACCEPT_CONDITIONAL_SOURCE_COMPONENT_WITH_NARROW_WRITE_FRAME_AND_ACCOUNTING_CORRECTION; INSTALLED_PROPERTY_AND_Q3_HOLD", + "inputs": [ + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/PROPERTY-FRAME-v1.json", + "bytes": 17423, + "sha256": "058f40fefd8c06a3867e77e7e95a70d4690bcc34f3ba3f50a7233d121f50546d" + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/PROPERTY-FRAME-v1.md", + "bytes": 6173, + "sha256": "cc25f8cf72498ac0962cd4b2f12dc584f0ee39563304130b76631a99bcfd374a" + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/SOURCE-PINS-v1.json", + "bytes": 6094, + "sha256": "4cd178b2ad9e41b5dfbd86661ac9aba60d69f99f320244a7a76cecca48204092" + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/SOURCE-FREEZE-v1.json", + "bytes": 3129, + "sha256": "955808701850c118409a26caf24bb176340bdf2cab0384fae31ac5562e1c93ef" + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/CORRECTION-v1.json", + "bytes": 1135, + "sha256": "ab0aaf1add9ea24ca56d258c927c4836625d303c90d9eb84ca0d076ecbdd03b3" + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/READER-NOTES-v1.json", + "bytes": 934, + "sha256": "bda3f8414be9fb84ba8b99ea57a009dd6a88741a462fc2f375423c8097a6b1f6" + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/consultation/RESPONSE-v20.txt", + "bytes": 8320, + "sha256": "02d322f0fd524fd57ab663583c704994ca03969dfbdd315b94ecd5de6a8f2095" + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/consultation/COMPLETE-RECEIPT-v20.json", + "bytes": 502, + "sha256": "b4bb7201bd30831fd9ae99c0cdb749b099f6c9ed68451acd1463928f973af65b" + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review/REVIEW-v2.json", + "bytes": 5591, + "sha256": "52149802d21a4bf68c49f22fc268d6e2acc5c92e136b28f59fb24b17e85286fd" + } + ], + "retained_pin_checks": { + "declared_available": 21, + "bytes": 880523, + "all_match": true, + "details": [ + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/consultation/RESPONSE-v20.txt", + "bytes": 8320, + "sha256": "02d322f0fd524fd57ab663583c704994ca03969dfbdd315b94ecd5de6a8f2095", + "matches_declared": true + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/consultation/RESPONSE-v20-LINKS.json", + "bytes": 2845, + "sha256": "632191bec208036ede6b703ac851c92acb63f9997302bd305235ff70b0416d07", + "matches_declared": true + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/consultation/COMPLETE-RECEIPT-v20.json", + "bytes": 502, + "sha256": "b4bb7201bd30831fd9ae99c0cdb749b099f6c9ed68451acd1463928f973af65b", + "matches_declared": true + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review/REVIEW-v2.json", + "bytes": 5591, + "sha256": "52149802d21a4bf68c49f22fc268d6e2acc5c92e136b28f59fb24b17e85286fd", + "matches_declared": true + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/DISTRO-GENERATOR-SOURCES-v1.json", + "bytes": 14886, + "sha256": "58f4a165bbd0045559eddc79f940eea4672425c0def4d4e12f95069bbbc32fbe", + "matches_declared": true + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-MEMBERS.json", + "bytes": 34772, + "sha256": "30403263d883340813c39497a89751a15c543937b950e1af2a907041d25c066f", + "matches_declared": true + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/ACQUISITION-v2.json", + "bytes": 2563, + "sha256": "c287abe845c438ec814cd3a3a807e05df6ec8def764d399fdc1bf5a036c8325d", + "matches_declared": true + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/SOURCE-METADATA-CHECK-v1.json", + "bytes": 4280, + "sha256": "e34ccce299d6b30d2907ce558d5138b88d65339314382199199fb531d9138514", + "matches_declared": true + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules", + "bytes": 2984, + "sha256": "2e0afdc6303e407f344d2f6724be731ae84b8fd59758f172491c25348432d75a", + "matches_declared": true + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules.defs", + "bytes": 70194, + "sha256": "aaf79170f51110b6b9c90d1bee022d2122401fdbbf8840d91baa3e6f13cbeb58", + "matches_declared": true + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules2", + "bytes": 97853, + "sha256": "c9b1cebada609601ef1fe3bb34babccae572dccc3e86cebfad3927229d3b83ae", + "matches_declared": true + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-debian-patch-inputs/debian/rules.patch", + "bytes": 12473, + "sha256": "6c6d9dc472ee7082c5658030c812436668ffbb99f76966a6cf9081b03732e8dc", + "matches_declared": true + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-debian-patch-inputs/debian/patches/cross-install-location.diff", + "bytes": 22890, + "sha256": "9e943d2ea5dbabe60ee30a3cd08384874ce7c933ed233018871dbb568275eeb3", + "matches_declared": true + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.conf", + "bytes": 54432, + "sha256": "bd04d88f2b6b39567344df447d03d74b149d8a6c8721c7dd0bbe9dd7b185b546", + "matches_declared": true + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.parameters", + "bytes": 928, + "sha256": "954623c853cb1c7024f634084edc048a319a7f92527887cb35aacc062abd7610", + "matches_declared": true + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.sonames", + "bytes": 4270, + "sha256": "5fce0244ae5a0716a8b4558ac880e7a6fa26cb7ffc798c29bab536c133940ea3", + "matches_declared": true + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-base-selected/gcc/Makefile.in", + "bytes": 164044, + "sha256": "41e0fe9006909a793736b73fdd434929c913023992c33cf9b746423f78682e45", + "matches_declared": true + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-base-selected/gcc/gcc.cc", + "bytes": 320626, + "sha256": "c260c6321fb3852df326618d18642a3c795a8886c285db71acde6a97fd031b0a", + "matches_declared": true + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/unit03/source-artifacts/plugin-members/usr/lib/gcc/x86_64-linux-gnu/13/plugin/include/configargs.h", + "bytes": 1640, + "sha256": "987c0a46b31907a609c15c749988921053bdf81e77d3a695c981d7be7a9378fc", + "matches_declared": true + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/evidence/EMBEDDED-CONFIGURATION-v1.json", + "bytes": 1727, + "sha256": "b02f8530e592eddeac5f86a2fb3a8ea80f25ac0e8ab2945fccb64a665b18d4cc", + "matches_declared": true + }, + { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1_amd64.buildinfo", + "bytes": 52703, + "sha256": "6ee3421f6cf17d77a50122b6934790bdcc64e42ba82c6812d257055cef434b83", + "matches_declared": true + } + ] + }, + "Pro20_assessment": { + "response_sha256": "02d322f0fd524fd57ab663583c704994ca03969dfbdd315b94ecd5de6a8f2095", + "response_bytes": 8320, + "complete_response_read": true, + "receipt": "Complete observed22:13:57.564 before22:14:58.623 deadline. Technical assertions were rechecked against retained source where available, not accepted merely from Pro.", + "accepted": "Native/gcc recipe candidate, concrete cross-layout patch, conditional Phobos discriminator and field-level engineering method are sound in inspected retained spans. Full finalgcc.o or universal machine proof is not mandatory.", + "limits": "Pro upstream relocation/prefix comparisons were not independently acquired/read and are not Ubuntu-applied or installed helper correspondence. The named generator question is now answered at its direct write interface; repeating its acquisition is unnecessary." + }, + "strongest_resolved_component": { + "claim": "For the applicable unoverridden retained recipe, parameters-file directly emits version/SONAME/LIBC_DEP cells and no direct DEB_CROSS/FORCE_CROSS_LAYOUT/PF/libexecdir/CXXFLAGS/CPPFLAGS assignment. Together with the retained layout/patch/Makefile source this gives a localized native-versus-cross STANDARD_LIBEXEC_PREFIX recipe alternative and conditional configure-phase discriminator.", + "generator_anchors": "rules.conf6-10,1369-1418;rules.parameters1-41;rules2:9-14;rules.sonames4270B", + "native_candidate": "/usr/libexec/gcc/", + "competing_candidate": "/usr/libexec/gcc-cross/", + "provenance_boundary": "Source-level implication is conditional on recorded member association and actual applicable recipe/build context. It is not an installed initializer or actual build-phase record." + }, + "generator_noninterference_qualification": { + "accepted_direct_frame": "The visible parameters-file target writes a finite assignment-name set G excluding direct layout/flag names L. In that syntactic sense G intersection L is empty.", + "not_proved": "This is not semantic noninterference of every generator/include/recipe action on every future layout decision. rules.conf includes rules.defs (which itself computes layout), rules.sonames, and conditionally binutils rules.defs; emitted versions can affect other state. Applicable input values, selected includes and unoverridden recipe remain premises.", + "why_not_a_new_blocker": "The final frame already distinguishes emitted cells from continuity and lists the optional include. Narrow the accepted component to its direct emission interface; do not erase useful source progress or introduce a universal generator theorem.", + "actual_parameters_limit": "The retained928B file says13.3.0-6ubuntu2~24.04, while associated installed/configargs metadata says~24.04.1. It is not the unchanged actual build32148542 generated phase file. Regeneration/overrides are possible, not observed facts.", + "sonames_check": "No named DEB_CROSS/FORCE_CROSS_LAYOUT/libexecdir/CXXFLAGS/CPPFLAGS references found in the retained4270B sonames text; that is a direct-name observation, not all transitive semantic dependence." + }, + "make_origin_and_preservation": { + "origin_correction": "ACCEPT: rules2:80 filter is word-based. Both origin environment and two-word environment override contain the matching environment word. Command line does not match. unexport and an ordinary empty assignment are distinct from winning value precedence.", + "minus_e": "Under ordinary make language semantics with-e, an ordinary file assignment is not evidence that a higher-priority environment override was replaced. Explicit pass_vars at250/1331 can read/pass surviving nonempty values. No make invocation was executed to test this.", + "source_real_surfaces": [ + "Makefile.in1061 puts object-specific CFLAGS-gcc.o before CXXFLAGS/INTERNAL_CFLAGS/@DEFS@.", + "ALL_CPPFLAGS1068 is INCLUDES then CPPFLAGS, after compiler flags in COMPILE.base1142.", + "DRIVER_DEFINES2328-2345 supplies the targeted-D; later-D/-U/forced or included definitions are concrete potential property-changing inputs.", + "rules2:1331-1336 passes configure environment values;1391-1397 passes recursive build make assignments." + ], + "scope": "These are source-localized preservation obligations, not evidence any actual override/corruption occurred. No need to prove every possible compiler defect impossible or export all unrelated gcc.o definitions." + }, + "phase_selector_logic": { + "anchors": "rules.defs208-231;rules.patch228-231,286-298,323-326;cross-install-location.diff158-168;rules2:421-428", + "deduction": "Under applicable unoverridden CONFARGS recipe, Phobos release plus with-target-system-zlib=auto gives DEB_CROSS_conf!=yes. It does not give DEB_CROSS_patch!=yes.", + "why_phase_gap_is_real": "Top rules parses defs/patch and invokes control/configure/build recursively; generated-series and patch stamps may be reused. Native triplets do not exclude FORCE_CROSS_LAYOUT=yes, and the native defs branch does not clear a preexisting selector. Same actual applicable selectors/stamps across these evaluations are not established by the configure text.", + "conditional_chain": "If that phase continuity or a directly bound applied property record is justified, and relevant later macro operations preserve the definition, libexecdir=/usr/libexec yields native/gcc initializer candidate. Until then installed conclusion stays HOLD." + }, + "Q3_relation": { + "status": "ACCEPT_AS_CONDITIONAL_POSITIONED_FINITE_RELATION_ONLY", + "source_anchors": "gcc.cc1617-1619,4697-4724,5354-5362,3118-3146,2753-2875,8615-8626", + "accepted_window": "If no-relocation/configured branch is applicable, component transforms are independently bound and suffixes fixed, GCC require1 emits its machine-suffixed component, then BINUTILS require2 emits its machine-suffixed and target-only components. If transforms coincide, local sequence has two same machine components then the target-only component. Earlier prefix/-B blocks must be accounted; add_prefix appends within equal priority.", + "missing": "Applicable exact prefix.cc and libiberty/make-relative-prefix.c bodies/correspondence, actual argv0/bindir/environment/namespace, machine/version/accel suffix state and source-to-installed fidelity remain open.", + "limits": "Complete independent oracle for every unknown Q3 element is unnecessary for a limited positioned relation. Arbitrary substring matching is insufficient. Even a valid match is finite corroboration, not logical recovery of scalar initializer, full list, directory existence or actual subtool selection. Exit0/EOF cannot supply ignored writer-return completeness." + }, + "archive_body_association": { + "input_review_sha256": "52149802d21a4bf68c49f22fc268d6e2acc5c92e136b28f59fb24b17e85286fd", + "accepted": "Documentary archive acquisition/member metadata and separate exact-body records are positive source association evidence; both retained body hashes match.", + "not_established": "No reviewed joint archive-SHA-to-these-two-body equality certificate or extraction replay. This review did not decode/list archives.", + "calibration": "Keep that limitation explicit in the conditional source claim. It is not grounds to call the bodies globally unavailable or mandate a redundant decode before authoring a bounded case. Stronger equality comparison would need its own consequential purpose and approval." + }, + "exact_first_installed_correspondence_gap": "No property-bound evidence currently links the actual applied STANDARD_LIBEXEC_PREFIX definition and its relevant preservation path for build32148542 to the pinned driver. The source already explains how it could be native or cross; actual applicability is missing, not the native recipe algebra.", + "ONE_next_operation": { + "name": "BOUNDED_BUILD32148542_LIBEXEC_PROPERTY_SLICE_CERTIFICATE_GATE", + "operation": "Make one separately bounded, predeclared attempt to obtain and assess a property-bound actual-build slice for build32148542, rather than write a collector/helper or acquire the generator again. Its first admissible input must be a specifically identified exact-build artifact/record, not another source template or approving label.", + "minimal_witness_fields": [ + "Exact source/package/build32148542 and pinned-driver association with actual artifact provenance/hash.", + "Actual applied/configured DRIVER_DEFINES STANDARD_LIBEXEC_PREFIX property (native/gcc or competing/gcc-cross) and libexecdir binding. A directly bound applied property record may bypass reconstructing every earlier DEB_CROSS phase variable; otherwise the record must justify actual selector/stamp continuity.", + "Only the ordered flags/includes/definitions capable of changing this macro before gcc.cc1618, or a justified narrow engineering preservation argument. No unrelated all-gcc.o export or universal compiler correctness mandate." + ], + "acceptance": "Accept only a concrete independently reviewable slice that distinguishes native/cross, binds actual phase/property applicability and states remaining installed/helper/conformance premises. Predeclare the later positioned Q3 prediction before observation. This would be property-specific engineering evidence, not fullC05.", + "STOP": "If no specifically identified artifact is available inside that bounded gate, if it is only the retained.0 parameters/template/configure string, if applied property/cross-phase continuity or relevant preservation remains unbound, or if it requires reopening the closed build-log/debug/helper route, STOP this gate as unavailable/conditional. Do not silently start another helper/timer/query or ask the user for a trust axiom.", + "not_authorized_here": "No acquisition/decode, native/compiler query, source helper implementation or follow-on gate is granted by this recommendation. A safe genuinely admitted RAW_UNQUALIFIED experiment could test hypotheses before completed qualification; that general possibility does not resume the closed8-job pilot or supply a field grant." + }, + "required_reporting_correction": { + "frozen_wrong_label": "canonical_recorded_seconds=98.950533479 in PROPERTY-FRAME JSON/MD and freeze is inaccurate as a canonical-ledger claim.", + "correct": "Canonical original guarded ledger remains94.550533479 unchanged. Supplemental NEW controls.74 + publication3.66 add4.40, yielding supplemental combined recorded98.950533479. Physical/outside cost remains OPEN_NOT_ZERO.", + "disposition": "Preserve original frozen frame; attach parent/review reporting correction rather than overwrite original bytes. Does not change the source implication, score, funding or admission." + }, + "preserved": { + "full_C05": false, + "full_V03": false, + "field_qualified": false, + "query_authorization": false, + "native_pilot": "Closed;source+synthetic2of4/native0 unchanged", + "original_completion_percent": 43.5, + "new_original_credit": 0, + "physical_costs": "OPEN_NOT_ZERO", + "old_units_clocks_caps_unchanged": true + }, + "activity": "Read exact retained source/JSON/text/hash records and wrote only owned review files. No source acquisition, archive decode/listing, code import/execution, tests/make/compiler/native/query/target/process/policy action, remote activity or protected runtime read." +} diff --git a/research/h25-gcc-libexec-phase-frame/evidence/frame/review/REVIEW-v1.md b/research/h25-gcc-libexec-phase-frame/evidence/frame/review/REVIEW-v1.md new file mode 100644 index 0000000000..e44794a230 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/frame/review/REVIEW-v1.md @@ -0,0 +1,21 @@ +# Independent STANDARD_LIBEXEC_PREFIX property-frame review + +**Accept the conditional source component, with a narrow generator claim and accounting correction. Installed initializer/Q3 qualification remains HOLD.** Pro20's8,320B response02d322f0... was read completely; retained source claims were checked where available. All21 declared-available pins/880,523B match. + +The strongest new result is concrete: rules.conf1369–1418 writes a finite version/SONAME/LIBC_DEP assignment interface; it emits no direct DEB_CROSS/FORCE_CROSS_LAYOUT/PF/libexecdir/CXXFLAGS/CPPFLAGS cell. rules2 reads defs before parameters. The native recipe gives/usr/libexec/gcc/; the literal cross-install-location patch gives/usr/libexec/gcc-cross/. Phobos release+auto conditionally discriminates DEB_CROSS!=yes at configure expansion. This answers the named generator-source question without another acquisition. + +That direct write frame is not semantic noninterference of every generator/include action. rules.conf includes rules.defs and sonames, and conditionally binutils defs. Emitted version cells are not universally inert. Actual applicable inputs/recipe and phase continuity remain premises. The928B parameters records~24.04 without.1; it must not become the actual32148542 phase file merely by association. + +The origin correction is sound: make filter is word-based, so environment override matches environment. Command-line origin does not. unexport and an ordinary empty assignment do not prove value replacement under-e; explicit pass_vars can read/pass a surviving value. Makefile.in1061/1068/1142 puts targeted DRIVER_DEFINES before later CXXFLAGS/internal/@DEFS@/CPPFLAGS and relevant includes. These are actual source-supported potential override surfaces, not observed bad flags or hypothetical machine corruption. Neither universal GCC correctness nor complete finalgcc.o is required. + +Configure-time DEB_CROSS!=yes does not by itself give patch-time!=yes. Top/recursive evaluations and generated-series/patch stamps are distinct; FORCE_CROSS_LAYOUT and a preexisting selector can matter even for native triplets. A directly bound actual applied property can bypass reconstructing every phase variable, but no such actual32148542 property/preservation evidence is currently supplied. + +The conditional Q3 relation is appropriately positioned, not an arbitrary substring: under independently bound no-relocation/helper/suffix/prefix state, the GCC(require1) machine component is followed by BINUTILS(require2) machine and target-only components. Equal transforms yield two same machine components then target-only; earlier nodes/-B blocks still need accounting. A full unknown-list oracle is unnecessary for this limited relation, while a match remains finite corroboration—not scalar recovery or full closure. Exact applicable prefix/relocation helper bodies and installed/context fidelity are still missing; Pro20 upstream comparisons do not supply Ubuntu-applied correspondence. EOF/exit0 cannot repair ignored writer returns. + +Documentary archive/member/body association is useful positive evidence, with both body hashes checked. Joint archive-SHA-to-two-body equality/extraction was not established by the no-decode input review. Preserve that limit; do not call known texts unavailable or require a redundant decode merely to author a conditional case. + +**One next operation:** a separately bounded BUILD32148542-LIBEXEC-PROPERTY-SLICE certificate gate. It must begin with a specifically identified actual-build artifact and bind exact build/package/driver, the applied/configured prefix property and only its relevant later macro-preservation path. A directly bound applied property may replace exhaustive selector-phase reconstruction; a narrow engineering argument plus later discriminating conformance may replace fullgcc.o. Accept only concrete native-versus-cross evidence with stated premises. STOP if the input is unavailable, only a template/.0parameters/configure string, leaves actual applicability/preservation unbound, or requires reopening closed log/debug/helper routes. No new collector, broad source pool, native retry or user-assurance waiver follows. + +Before public use attach the reporting correction outside frozen originals: canonical old ledger94.550533479 remains unchanged; supplemental.74+3.66=4.40 yields combined98.950533479. Calling the latter canonical is inaccurate. Physical costs remain OPEN_NOT_ZERO; this correction changes no science or admission. + +Review began22:42:41UTC, fixed stop22:52:41UTC; JSON records freeze. No acquisition/decode/make/test/import/native/query/target/process/remote/protected-runtime action occurred. Full C05/V03/field/native admission false, original43.5%, new original credit0, closed8-job pilot/source+synthetic2of4/native0 and original clocks/caps unchanged. diff --git a/research/h25-gcc-libexec-phase-frame/evidence/input/INPUT-METADATA-v1.json b/research/h25-gcc-libexec-phase-frame/evidence/input/INPUT-METADATA-v1.json new file mode 100644 index 0000000000..a7d7818104 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/input/INPUT-METADATA-v1.json @@ -0,0 +1,59 @@ +{ + "schema": "exact-retained-debian-generator-input-metadata-v1", + "recorded_utc": "2026-11-02T22:22:36.778824+00:00", + "status": "METADATA_ONLY_SOURCE_RELEASE_PENDING", + "archive": { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1.debian.tar.xz", + "bytes": 646156, + "sha256": "5523658f272ad6d15a83b6e26d178fbd5cb7709ec7ce2ca52b0c843e19c228e3", + "compressed_limit_bytes": 67108864, + "within_compressed_limit": true + }, + "dsc": { + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1.dsc", + "bytes": 39540, + "sha256": "86b4012c312ac13e3e092877719a62a5b5dbab082ae7e9680780a25c6a13ddc6", + "Checksums-Sha256_row_matches": true, + "signature": "UNVERIFIED; association not signed semantic attestation" + }, + "package_source_version": "gcc-13_13.3.0-6ubuntu2~24.04.1", + "prior_agent_capacity_failure": "Source agent reported archive identity but failed at selected-model capacity before writing metadata/PLAN. No data decoding occurred. Original unsaved exact start/deadline UNKNOWN; no backdating or automatic extension. Parent independently reverified archive/DSC bytes for this record.", + "pro20": { + "response": "consultation/RESPONSE-v20.txt", + "complete_observed_utc": "2026-11-02T22:13:57.564Z", + "deadline_utc": "2026-11-02T22:14:58.623Z", + "before_deadline": true, + "claim_status": "Unverified AI: native recipe /usr/libexec/gcc/ candidate and competing gcc-cross frame, not installed qualification" + }, + "selected_new_members": [ + "debian/rules.conf", + "debian/rules.parameters" + ], + "member_availability": "UNKNOWN_NOT_LISTED_OR_DECOMPRESSED", + "conditional_selection_plan": { + "parent_only_decode": true, + "max_selected_regular_members": 2, + "max_selected_file_bytes": 1048576, + "max_selected_aggregate_bytes": 2097152, + "max_uncompressed_stream_bytes": 33554432, + "max_members": 4096, + "max_name_bytes": 8192, + "compressed_archive_must_rehash_before_decode": true, + "exact_literal_names_only": true, + "symlinks_hardlinks_special_types": "REFUSE selected members, no dereference", + "duplicates": "STOP preserve first and duplicate evidence; do not replace", + "decode": "Standard-library bounded stream from exact retained XZ; consume only enough to select named members, bounded header/body traversal; no full extraction or include expansion.", + "absence": "Record exact bounded stream disposition; absent member is no generated-cell authority. Stop or further source gate, no path guessing.", + "text": "Preserve exact bytes; strictUTF8 view only if valid, no normalization", + "wall_seconds_proposed": 5, + "no_execution_of_member_or_original_code": true + }, + "semantic_goal": "Property-specific phase relationship/preservation of STANDARD_LIBEXEC_PREFIX through rules.conf/generated rules.parameters, not completegcc.o proof or C05", + "current_query_or_native_grant": false, + "pilot_round_reopened": false, + "full_C05": false, + "full_V03": false, + "original_credit_added": 0, + "score43_5_unchanged": true, + "physical_costs": "OPEN_NOT_ZERO" +} diff --git a/research/h25-gcc-libexec-phase-frame/evidence/input/review/FREEZE-v1.json b/research/h25-gcc-libexec-phase-frame/evidence/input/review/FREEZE-v1.json new file mode 100644 index 0000000000..be97aecc4f --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/input/review/FREEZE-v1.json @@ -0,0 +1,26 @@ +{ + "actual_authority_granted": false, + "automatic_resume": false, + "files": [ + { + "bytes": 544, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review/PLAN-v1.json", + "sha256": "218353182ee9bcf230c9506d20b067ad1d4ace9fa456733e3438705a0bc31ce0" + }, + { + "bytes": 12817, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review/REVIEW-v1.json", + "sha256": "872a81744822335772b2d1ed4ac9f786d63fcf888642ffa0849c0f9461d04f81" + }, + { + "bytes": 4443, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review/REVIEW-v1.md", + "sha256": "01c8e725904230a319e752039bdfbbe23b300a5612711df4344834afe7ee459e" + } + ], + "fixed_stop_utc": "2026-11-02T22:28:03Z", + "recorded_utc": "2026-11-02T22:25:55.889564+00:00", + "schema": "two-member-input-gate-review-freeze-v1", + "source_data_release_recommended_conditionally": true, + "start_utc": "2026-11-02T22:23:03Z" +} diff --git a/research/h25-gcc-libexec-phase-frame/evidence/input/review/FREEZE-v2.json b/research/h25-gcc-libexec-phase-frame/evidence/input/review/FREEZE-v2.json new file mode 100644 index 0000000000..3469ae3977 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/input/review/FREEZE-v2.json @@ -0,0 +1,39 @@ +{ + "automatic_resume": false, + "files": [ + { + "bytes": 544, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review/PLAN-v1.json", + "sha256": "218353182ee9bcf230c9506d20b067ad1d4ace9fa456733e3438705a0bc31ce0" + }, + { + "bytes": 12817, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review/REVIEW-v1.json", + "sha256": "872a81744822335772b2d1ed4ac9f786d63fcf888642ffa0849c0f9461d04f81" + }, + { + "bytes": 4443, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review/REVIEW-v1.md", + "sha256": "01c8e725904230a319e752039bdfbbe23b300a5612711df4344834afe7ee459e" + }, + { + "bytes": 1266, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review/FREEZE-v1.json", + "sha256": "ec1c9cfad59ff67b407b59a550809dda06602d4afc564abff58257f61bfa5aad" + }, + { + "bytes": 5591, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review/REVIEW-v2.json", + "sha256": "52149802d21a4bf68c49f22fc268d6e2acc5c92e136b28f59fb24b17e85286fd" + }, + { + "bytes": 2541, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review/REVIEW-v2.md", + "sha256": "349b462fe429503e466ee561eb901b4ff0826ad0f2f3e3312c5b595b81a83433" + } + ], + "fixed_stop_utc": "2026-11-02T22:28:03Z", + "no_decode_now": true, + "recorded_utc": "2026-11-02T22:27:03.754717+00:00", + "schema": "existing-source-input-review-freeze-v2" +} diff --git a/research/h25-gcc-libexec-phase-frame/evidence/input/review/PLAN-v1.json b/research/h25-gcc-libexec-phase-frame/evidence/input/review/PLAN-v1.json new file mode 100644 index 0000000000..74af6001d6 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/input/review/PLAN-v1.json @@ -0,0 +1,9 @@ +{ + "costs": "OPEN_NOT_ZERO", + "fixed_stop_utc": "2026-11-02T22:28:03Z", + "original_prior_start_deadline": "UNKNOWN_UNSAVED_NO_BACKDATING", + "owned_directory": "outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review", + "schema": "independent-two-member-input-gate-plan-v1", + "scope": "Retained metadata/source bytes and passive hashing only. No archive listing/decompression or source execution. Conditional source-data recommendation only; parent release separate.", + "start_utc": "2026-11-02T22:23:03Z" +} diff --git a/research/h25-gcc-libexec-phase-frame/evidence/input/review/REVIEW-v1.json b/research/h25-gcc-libexec-phase-frame/evidence/input/review/REVIEW-v1.json new file mode 100644 index 0000000000..5482a9eebc --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/input/review/REVIEW-v1.json @@ -0,0 +1,209 @@ +{ + "DSC_matching_sha256_row": [ + { + "line": 398, + "text": " 5523658f272ad6d15a83b6e26d178fbd5cb7709ec7ce2ca52b0c843e19c228e3 646156 gcc-13_13.3.0-6ubuntu2~24.04.1.debian.tar.xz" + } + ], + "PGP_signature_verification": "NOT_PERFORMED; signed-looking descriptor is not an authenticated semantic assertion", + "already_retained_selected_bodies": { + "meaning": "Exact ordinary source copies already exist in gcc-additional-packaging. Re-extraction is not a new source-existence discovery; it can independently bind selected bodies to the same authenticated archive if released.", + "rules_conf": { + "bytes": 54432, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.conf", + "sha256": "bd04d88f2b6b39567344df447d03d74b149d8a6c8721c7dd0bbe9dd7b185b546" + }, + "rules_parameters": { + "bytes": 928, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.parameters", + "sha256": "954623c853cb1c7024f634084edc048a319a7f92527887cb35aacc062abd7610" + } + }, + "automatic_resume": false, + "budget": { + "existing_total_ceiling_seconds": 2400, + "initial_ceiling_seconds": 600, + "new_budget_created": false, + "parent_reported_current_policy_seconds": "98.950533479", + "physical_costs": "OPEN_NOT_ZERO", + "planned_sum_if_only_that_reserve_added": "103.950533479", + "proposed_source_decode_reserve_seconds": "5", + "reserve_granted_by_this_review": false + }, + "essential_remaining_gate": "Parent may release this finite source-DATA operation after adopting bounds/EOF-duplicate semantics and genuine5s reserve. Actual selected bodies, stream disposition and logs must be recorded. Any cap/timeout/type/name/duplicate/topology/mismatch failure STOPs; property-frame and installed engineering qualification require later independent analysis.", + "fixed_stop_utc": "2026-11-02T22:28:03Z", + "fresh_archive_pin": { + "bytes": 646156, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1.debian.tar.xz", + "sha256": "5523658f272ad6d15a83b6e26d178fbd5cb7709ec7ce2ca52b0c843e19c228e3" + }, + "fresh_dsc_pin": { + "bytes": 39540, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1.dsc", + "sha256": "86b4012c312ac13e3e092877719a62a5b5dbab082ae7e9680780a25c6a13ddc6" + }, + "frozen_utc": "2026-11-02T22:25:55.889564+00:00", + "input_metadata_actual": { + "bytes": 3326, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/INPUT-METADATA-v1.json", + "sha256": "50ff79c303d16f069e9bd40b9879a16bc047828bd99b4dd4bfeabcab95da2117" + }, + "input_metadata_expected_sha256": "50ff79c303d16f069e9bd40b9879a16bc047828bd99b4dd4bfeabcab95da2117", + "inputs": [ + { + "bytes": 3326, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/INPUT-METADATA-v1.json", + "sha256": "50ff79c303d16f069e9bd40b9879a16bc047828bd99b4dd4bfeabcab95da2117" + }, + { + "bytes": 8320, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/consultation/RESPONSE-v20.txt", + "sha256": "02d322f0fd524fd57ab663583c704994ca03969dfbdd315b94ecd5de6a8f2095" + }, + { + "bytes": 502, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/consultation/COMPLETE-RECEIPT-v20.json", + "sha256": "b4bb7201bd30831fd9ae99c0cdb749b099f6c9ed68451acd1463928f973af65b" + }, + { + "bytes": 646156, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1.debian.tar.xz", + "sha256": "5523658f272ad6d15a83b6e26d178fbd5cb7709ec7ce2ca52b0c843e19c228e3" + }, + { + "bytes": 39540, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1.dsc", + "sha256": "86b4012c312ac13e3e092877719a62a5b5dbab082ae7e9680780a25c6a13ddc6" + }, + { + "bytes": 34772, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-MEMBERS.json", + "sha256": "30403263d883340813c39497a89751a15c543937b950e1af2a907041d25c066f" + }, + { + "bytes": 14886, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/DISTRO-GENERATOR-SOURCES-v1.json", + "sha256": "58f4a165bbd0045559eddc79f940eea4672425c0def4d4e12f95069bbbc32fbe" + }, + { + "bytes": 54432, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.conf", + "sha256": "bd04d88f2b6b39567344df447d03d74b149d8a6c8721c7dd0bbe9dd7b185b546" + }, + { + "bytes": 928, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.parameters", + "sha256": "954623c853cb1c7024f634084edc048a319a7f92527887cb35aacc062abd7610" + } + ], + "not_authorized_or_proven": { + "actual_decode_by_reviewer": false, + "full_C05": false, + "full_V03": false, + "funding_grant": false, + "installed_prefix_qualified": false, + "original_credit_added": 0, + "query_or_native_release": false, + "score43_5_changed": false, + "source_execution": false + }, + "owner": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review", + "prior_capacity_failure": { + "decoder_run": "None reported by parent metadata; no reconstructed/backdated timing", + "old_exact_start_deadline": "UNKNOWN_UNSAVED", + "old_unit_reopened": false + }, + "pro20": { + "complete_before_deadline": "Recorded receipt says22:13:57.564Z before22:14:58.623Z; reviewer did not access browser.", + "disposition": "Complete response read; native /usr/libexec/gcc/ candidate and competing gcc-cross patch/phase issue remain source/engineering questions, not adopted truth.", + "receipt_pin": { + "bytes": 502, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/consultation/COMPLETE-RECEIPT-v20.json", + "sha256": "b4bb7201bd30831fd9ae99c0cdb749b099f6c9ed68451acd1463928f973af65b" + }, + "response_pin": { + "bytes": 8320, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/consultation/RESPONSE-v20.txt", + "sha256": "02d322f0fd524fd57ab663583c704994ca03969dfbdd315b94ecd5de6a8f2095" + } + }, + "release_conditions": [ + { + "id": "R1", + "requirement": "Parent explicitly releases ONLY source-DATA decoding and its5s reserve after this review; rehash compressed bytes against exact pinned hash immediately before decode; no query/native/source execution.", + "status": "RELEASE_REQUIRED_NOT_GRANTED_BY_REVIEW" + }, + { + "id": "R2", + "requirement": "Select only exact literal debian/rules.conf and debian/rules.parameters; preserve bytes, no leading-root guessing, prefix stripping, path normalization, include expansion, link dereference or arbitrary source names. Refuse selected nonregular/link/special types.", + "status": "SCOPE_REQUIRED" + }, + { + "id": "R3", + "requirement": "Enforce1MiB/member,2MiB selected,32MiB total uncompressed stream output/traversal,4096headers/members,8192namebytes and5s external watchdog before oversized allocations/reads. Count skipped payload, tar metadata/padding and all decoded bytes. Bound decoder dictionary/memory too (e.g. explicit64MiB memlimit or a demonstrated bounded equivalent); compressed size alone is not decoder-memory control.", + "status": "IMPLEMENTATION_REQUIREMENT_NOT_TESTED_BY_REVIEW" + }, + { + "id": "R4", + "requirement": "Global absence/duplicate claims require bounded traversal through validated archive/XZ completion. Do not stop after first two matches and declare archive-wide duplicates absent. Retain only the two selected bodies while scanning bounded headers/output; STOP if end/checksum/topology cannot be established within caps/time. Do not silently ignore concatenated/trailing streams.", + "status": "NARROW_REFINEMENT_NEEDED_TO_METADATA_EARLY_STOP_WORDING" + }, + { + "id": "R5", + "requirement": "Detect duplicate selected literal names anywhere in the validated stream; preserve first bytes and duplicate/failure evidence, never overwrite. Preserve failed/truncated/timed-out/absent evidence with precise scope; no fallback, guessing, retries or extra names. PAX/long-name metadata affecting selected names requires bounded exact-name interpretation or refusal, not unchecked aliasing.", + "status": "FAIL_CLOSED_REQUIRED" + }, + { + "id": "R6", + "requirement": "Record actual headers/kinds/sizes/offsets and exact selected body hashes; compare to retained prior copies if present and retain discrepancies. Use exclusive outputs, with no frozen-source changes.", + "status": "CUSTODY_OF_SOURCE_DATA_ONLY" + }, + { + "id": "R7", + "requirement": "Label extracted parameters as source-package contents, not final build32148542 generated parameters/phase snapshot. Subsequent property-frame review must independently establish applicable definitions, generator interactions and relevant phase preservation.", + "status": "SEMANTIC_BOUNDARY_REQUIRED" + } + ], + "retained_member_metadata": { + "artifact": { + "bytes": 34772, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-MEMBERS.json", + "sha256": "30403263d883340813c39497a89751a15c543937b950e1af2a907041d25c066f" + }, + "limited_meaning": "Historical selected-member availability evidence only. New decode must validate current pinned stream and actual selected members; historical metadata is not a substitute for decoder checks.", + "member_count": 297, + "new_tar_listing_by_reviewer": false, + "selected_records": [ + { + "bytes": 54432, + "name": "debian/rules.conf", + "regular": true, + "symlink": false + }, + { + "bytes": 928, + "name": "debian/rules.parameters", + "regular": true, + "symlink": false + } + ] + }, + "review_scope": "Existing metadata and source text plus fresh ordinary archive/DSC hashing only. No actual archive listing/decompression/query/source import or execution. Not installed-compiler, C05, native or funding authority.", + "schema": "independent-exact-two-member-source-input-gate-review-v1", + "source_meaning": { + "archive_parameters": { + "DEB_CROSS_assignment_present": false, + "SOURCE_VERSION": "13.3.0-6ubuntu2~24.04", + "bytes": 928, + "first_line": "# configuration parameters taken from upstream source files", + "no_final_build_instance_claim": true + }, + "generator_anchors": [ + "debian/rules.conf:1-7 says generator for control/parameters and includes rules.defs/rules.sonames", + "debian/rules.conf:1369-1418 writes a fixed parameters-file recipe, compare/move/touch" + ], + "property_scope": "Source generator and archived parameters are legitimate named inputs for narrower STANDARD_LIBEXEC_PREFIX phase/build-frame analysis. Extracting them alone proves neither native/gcc-cross applicability nor final installed cell or reporting conformance. A complete final gcc.o export is not imposed as the only acceptable engineering route." + }, + "start_utc": "2026-11-02T22:23:03Z", + "verdict": "CONDITIONAL_SOURCE_DATA_RELEASE_RECOMMENDED_WITH_EXPLICIT_REFINEMENTS" +} diff --git a/research/h25-gcc-libexec-phase-frame/evidence/input/review/REVIEW-v1.md b/research/h25-gcc-libexec-phase-frame/evidence/input/review/REVIEW-v1.md new file mode 100644 index 0000000000..3634642826 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/input/review/REVIEW-v1.md @@ -0,0 +1,17 @@ +# Independent two-member source input gate — conditional release recommendation + +The independent review began **22:23:03 UTC**, with a fixed **22:28:03 UTC** freeze/stop. It recommends a **conditional SOURCE-DATA release**, subject to the explicit decoder/duplicate refinements below and a separate parental5s reserve. It does not grant decoding, queries, native execution or installed qualification. The complete Pro20 response and completion receipt were read. + +Fresh ordinary-byte hashes independently match the646,156-byte retained Debian archive SHA256 `5523658f272ad6d15a83b6e26d178fbd5cb7709ec7ce2ca52b0c843e19c228e3` and39,540-byte DSC SHA256 `86b4012c312ac13e3e092877719a62a5b5dbab082ae7e9680780a25c6a13ddc6`. The DSC SHA256 filename/size row matches. Its PGP signature remains unverified. Parent metadata itself matches SHA256 `50ff79c303d16f069e9bd40b9879a16bc047828bd99b4dd4bfeabcab95da2117`. + +The already retained297-row member metadata names exactly `debian/rules.conf` (54,432bytes, regular) and `debian/rules.parameters` (928bytes, regular). This review did **not** list or decompress the archive. Exact prior ordinary copies also exist under `source-artifacts/gcc-additional-packaging/debian/`, at hashes `bd04d88f2b6b39567344df447d03d74b149d8a6c8721c7dd0bbe9dd7b185b546` and `954623c853cb1c7024f634084edc048a319a7f92527887cb35aacc062abd7610`. Thus availability is positively supported by retained records; a released re-extraction may independently establish current pinned-stream membership and hash equality, rather than discover new source names. + +The proposed two-member selection is finite and relevant to Pro20's native/gcc-cross phase question. Preserve the exact literal names and member kinds. Refuse selected links/special types and duplicates, oversized names/bodies, malformed topology, absent or incomplete results. No path-prefix guesses, include expansion, general extraction, original archive/debug/log retry or executing Make/source is warranted. + +One consequential refinement is necessary: **stopping as soon as the first two names match does not establish that a duplicate selected name is absent later**. For archive-wide absence/duplicate claims, the parent must traverse through validated bounded archive/XZ completion while retaining only the two bodies. If that completion cannot be established within32MiB output/traversal,4096headers,5s, or other caps, STOP and retain the precise partial disposition. Do not silently ignore trailing/concatenated streams. Unknown-size reads, decoder buffers/dictionaries and skipped payload/PAX metadata must also be bounded; compressed size is not a memory bound. The JSON recommends an explicit64MiB decoder-memory cap or demonstrated bounded equivalent. Existing1MiB/member,2MiB selected and8192namebyte limits remain unchanged. + +The semantic boundary is equally precise. Retained rules.conf1–7 identifies a generator and includes rules.defs/rules.sonames;1369–1418 gives the parameters-file emission recipe. The archived928-byte parameters file starts “configuration parameters taken from upstream source files”, contains SOURCE_VERSION `13.3.0-6ubuntu2~24.04`, and contains no DEB_CROSS assignment. Its extraction from the exact `.1` source-package archive does **not** make it the final build32148542 generated phase record. Subsequent property-frame analysis must establish the relevant generator/definitions/patch-selection/configuration relationship and preservation of STANDARD_LIBEXEC_PREFIX. It may use a narrow engineering argument; a complete final gcc.o export is not made mandatory by this input gate. + +The old source agent's exact unsaved start/deadline remain UNKNOWN; no timing is backdated and no decode milestone is inferred. Pro20's receipt records completion22:13:57.564Z before22:14:58.623Z, without a new browser observation by this reviewer. Its candidate conclusions remain unverified source/engineering proposals. + +Parent-reported policy use98.950533479s plus a proposed5s source-data reserve would total103.950533479s, within the stated600s initial/2400s total ceilings. This is arithmetic, not an allocation or actual charge. The reserve is not granted by this review; all physical costs remain **OPEN_NOT_ZERO**. Full C05/V03, installed-prefix qualification and original credit remain false/zero, original43.5% unchanged. No archive listing/decode, source execution, query, native action or old-attempt retry occurred here. diff --git a/research/h25-gcc-libexec-phase-frame/evidence/input/review/REVIEW-v2.md b/research/h25-gcc-libexec-phase-frame/evidence/input/review/REVIEW-v2.md new file mode 100644 index 0000000000..7c6f92491c --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/input/review/REVIEW-v2.md @@ -0,0 +1,11 @@ +# Final input disposition — use existing frozen source, no new decode + +This successor preserves REVIEW-v1 and changes its immediate recommendation: **read the two already retained source bodies; do not list/decompress the archive now**. The fixed22:28:03UTC stop is unchanged. Restoring known availability adds no original credit or timer extension. + +The297-row member metadata is `source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-MEMBERS.json`,34,772bytes/SHA256 `30403263d883340813c39497a89751a15c543937b950e1af2a907041d25c066f`. It records both literal regular names and sizes. The46-row `DISTRO-GENERATOR-SOURCES-v1.json`,14,886bytes/SHA256 `58f4a165bbd0045559eddc79f940eea4672425c0def4d4e12f95069bbbc32fbe`, maps those names to the exact local54,432/928-byte body paths/hashes. Both source copies freshly match those body records. Archive/DSC hashes and its checksum row independently match as recorded in v1. + +The provenance limit is precise: the source-selection record is a bare list without the compressed archive SHA. The separate SOURCE-METADATA-CHECK binds that exact archive but omits these two from its selected-body list. No single reviewed retained receipt jointly binds this archive SHA and both member-body hashes or replays extraction. Documentary source-selection evidence is positive; present independent body-to-archive byte equality was not established by this no-decode review. Names/sizes alone must not be promoted into that stronger fact. + +Use these authenticated frozen source bytes for **conditional property-frame analysis**, explicitly retaining their recorded-membership premise and this limitation. Only if a later inference needs stronger equality should parent separately consider the bounded compare-to-archive operation; no decode reserve or grant follows now. V1's bounded EOF/duplicate cautions apply to such a future operation, not as prerequisites to reading existing text. + +The archived928-byte parameters file remains source-package data: SOURCE_VERSION ends `~24.04`, without `.1`, and no DEB_CROSS/layout/buildflag assignments are supplied. It is not the actual build32148542 generated phase record. The rules.conf generator and applicable phase preservation remain analysis obligations. No whole final gcc.o record is imposed as the sole engineering method. No tar listing/decode, source execution, query/native release, budget grant or original qualification occurred. Full C05/V03 remain false, original43.5% unchanged, costs OPEN_NOT_ZERO. Work stops within the original five-minute window. diff --git a/research/h25-gcc-libexec-phase-frame/evidence/licenses/LICENSE-PROVENANCE-v1.json b/research/h25-gcc-libexec-phase-frame/evidence/licenses/LICENSE-PROVENANCE-v1.json new file mode 100644 index 0000000000..ead927166c --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/licenses/LICENSE-PROVENANCE-v1.json @@ -0,0 +1,19 @@ +{ + "bounded_copying3_source_attempt": "stopped at256MiB decoded stream ceiling before named member; no capraise, no further archive attempt", + "licenses": [ + { + "bytes": 69100, + "member": "debian/copyright", + "saved_path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/unit03/source-artifacts/licenses/gcc-13-debian-copyright", + "sha256": "08c6f3dee4c19aa1e57eb7d4ad45829b2e99656313bd07fa0922e2553f500be5", + "source": "exact retained gcc Debian source archive" + }, + { + "bytes": 35149, + "saved_path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/unit03/source-artifacts/licenses/GPL-3-standard-text", + "scope": "standard GPL-3 text referenced by retained source notices; not claimed re-extracted GCC archive member", + "sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", + "source": "/usr/share/common-licenses/GPL-3" + } + ] +} diff --git a/research/h25-gcc-libexec-phase-frame/evidence/licenses/LICENSE-PROVENANCE-v2.json b/research/h25-gcc-libexec-phase-frame/evidence/licenses/LICENSE-PROVENANCE-v2.json new file mode 100644 index 0000000000..47a85fef99 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/licenses/LICENSE-PROVENANCE-v2.json @@ -0,0 +1,14 @@ +[ + { + "bytes": 35147, + "saved_path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/unit03/source-artifacts/licenses/GPL-3.0-gcc-source.txt", + "sha256": "8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903", + "source": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/publication-v2/research/h25-c05-v03-input-constructors/licenses/GPL-3.0-gcc-source.txt" + }, + { + "bytes": 3324, + "saved_path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/unit03/source-artifacts/licenses/GCC-Runtime-Library-Exception.txt", + "sha256": "9d6b43ce4d8de0c878bf16b54d8e7a10d9bd42b75178153e3af6a815bdc90f74", + "source": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/publication-v2/research/h25-c05-v03-input-constructors/licenses/GCC-Runtime-Library-Exception.txt" + } +] diff --git a/research/h25-gcc-libexec-phase-frame/evidence/reported-driver-input/FREEZE-v1.json b/research/h25-gcc-libexec-phase-frame/evidence/reported-driver-input/FREEZE-v1.json new file mode 100644 index 0000000000..d062a795cd --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/reported-driver-input/FREEZE-v1.json @@ -0,0 +1,36 @@ +{ + "actual_input_available": true, + "automatic_resume": false, + "files": [ + { + "bytes": 1854, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-libexec-property-slice-v1/input/PLAN-v1.json", + "sha256": "923606f137bbb394a2b477292a239d3ec89a26ddcd6dafff72f7c884299bee9c" + }, + { + "bytes": 3385, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-libexec-property-slice-v1/input/passive_literal_metadata_v1.py", + "sha256": "60d6de5d7b217a61f75cb68298762f2d0acd938c4a615f318671140f5eb5f2e0" + }, + { + "bytes": 3379, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-libexec-property-slice-v1/input/OBSERVATIONS-v1.json", + "sha256": "55cb5892864260e322192d40ca1cf5003d288438e938f0432e7bf0f11aee6eb3" + }, + { + "bytes": 18882, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-libexec-property-slice-v1/input/INPUT-v1.json", + "sha256": "edaa4c06aa5d72228161691614262ab546a46c7b30396c03c6c0ff8ecc348892" + }, + { + "bytes": 4260, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-libexec-property-slice-v1/input/INPUT-v1.md", + "sha256": "442df911f18ff022e78289da05bb596e5c8c22ef91c056da60b1cc6c8d1649f7" + } + ], + "fixed_stop_utc": "2026-11-02T23:04:19Z", + "property_certificate_complete": false, + "query_or_native_grant": false, + "recorded_utc": "2026-11-02T22:58:21.296388+00:00", + "schema": "actual-driver-property-input-freeze-v1" +} diff --git a/research/h25-gcc-libexec-phase-frame/evidence/reported-driver-input/INPUT-v1.json b/research/h25-gcc-libexec-phase-frame/evidence/reported-driver-input/INPUT-v1.json new file mode 100644 index 0000000000..0e73ec1f65 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/reported-driver-input/INPUT-v1.json @@ -0,0 +1,397 @@ +{ + "P0_answer": { + "certificate_feasibility_established": false, + "concrete_actual_build_artifact_available": true, + "minimum_next_question": "Can an independent, explicitly bounded source/ISA/correspondence argument on these exact driver bytes identify the relevant initialization/reference/reached-use chain for STANDARD_LIBEXEC_PREFIX and retain all consequential call/configuration effects? Begin from raw literal evidence only; do not assume it belongs to that initializer or that a named section/symbol exists.", + "no_guarantee": "This concrete artifact nomination is a starting input for Pro21 formulation, not proof that a complete static certificate is feasible within a later budget.", + "nominated_narrow_starting_point": "The exact1,023,032-byte installed driver, historical package-member/build associated, with one predeclared native-prefix NUL literal at file offset702226 and a bounded exact64B raw window.", + "static_property_slice_certificate_exists": false + }, + "actual_observation": { + "ELF_or_instruction_decode": false, + "actual_bytes_read": 1023032, + "address_or_symbol_interpretation": false, + "descriptor_after": { + "ctime_ns": 1772221733958608818, + "dev": 2114, + "gid": 65534, + "ino": 4065395, + "mode": 33261, + "mtime_ns": 1766091591000000000, + "nlink": 1, + "permission_mode_octal": "0o755", + "size": 1023032, + "uid": 65534 + }, + "descriptor_before": { + "ctime_ns": 1772221733958608818, + "dev": 2114, + "gid": 65534, + "ino": 4065395, + "mode": 33261, + "mtime_ns": 1766091591000000000, + "nlink": 1, + "permission_mode_octal": "0o755", + "size": 1023032, + "uid": 65534 + }, + "descriptor_endpoints_equal": true, + "descriptor_lookup_equal": true, + "finished_utc": "2026-11-02T22:57:06.417876+00:00", + "lookup_after": { + "ctime_ns": 1772221733958608818, + "dev": 2114, + "gid": 65534, + "ino": 4065395, + "mode": 33261, + "mtime_ns": 1766091591000000000, + "nlink": 1, + "permission_mode_octal": "0o755", + "size": 1023032, + "uid": 65534 + }, + "passive_process_cpu_seconds": 0.004843088000000002, + "passive_wall_seconds": 0.004843346992856823, + "path": "/usr/bin/x86_64-linux-gnu-gcc-13", + "patterns": [ + { + "matches": [ + { + "file_offset": 702226, + "pattern_end_exclusive": 702244, + "window_bytes": 64, + "window_end_exclusive": 702274, + "window_file_offset": 702210, + "window_hex": "4743435f455845435f505245464958002f7573722f6c6962657865632f6763632f002f7573722f62696e2f004743435f455845435f5052454649583d00434f4d" + } + ], + "matches_retained": 1, + "more_matches_unretained": false, + "pattern_bytes": 18, + "pattern_hex": "2f7573722f6c6962657865632f6763632f00" + }, + { + "matches": [], + "matches_retained": 0, + "more_matches_unretained": false, + "pattern_bytes": 24, + "pattern_hex": "2f7573722f6c6962657865632f6763632d63726f73732f00" + }, + { + "matches": [], + "matches_retained": 0, + "more_matches_unretained": false, + "pattern_bytes": 24, + "pattern_hex": "7374616e646172645f6c6962657865635f70726566697800" + }, + { + "matches": [], + "matches_retained": 0, + "more_matches_unretained": false, + "pattern_bytes": 19, + "pattern_hex": "6763635f6c6962657865635f70726566697800" + }, + { + "matches": [], + "matches_retained": 0, + "more_matches_unretained": false, + "pattern_bytes": 8, + "pattern_hex": "2e73796d74616200" + }, + { + "matches": [ + { + "file_offset": 1020531, + "pattern_end_exclusive": 1020539, + "window_bytes": 64, + "window_end_exclusive": 1020579, + "window_file_offset": 1020515, + "window_hex": "636b616765002e676e752e68617368002e64796e73796d002e64796e737472002e676e752e76657273696f6e002e676e752e76657273696f6e5f72002e72656c" + } + ], + "matches_retained": 1, + "more_matches_unretained": false, + "pattern_bytes": 8, + "pattern_hex": "2e64796e73796d00" + } + ], + "read_calls": 1, + "schema": "single-driver-fixed-literal-observations-v1", + "sha256": "1b99826121ae6682a634e5efe09bd3e3df58ce58e0b28f849114ab5b89139c26", + "started_utc": "2026-11-02T22:57:06.413049+00:00", + "status": "EXACT_PIN_MATCH_RAW_LITERAL_DATA_ONLY", + "target_execution": false + }, + "automatic_resume": false, + "bookkeeping": { + "canonical_prior_seconds": "94.550533479", + "full_C05": false, + "full_V03": false, + "installed_field_qualified": false, + "new_budget_or_timer_reset": false, + "original_credit_added": 0, + "original_score_percent": 43.5, + "physical_costs": "OPEN_NOT_ZERO", + "reported_local_supplement_seconds": "4.4", + "reported_supplemental_total_seconds": "98.950533479" + }, + "effects": { + "actual_binary_bytes_read": 1023032, + "actual_binary_files_read": 1, + "alternative_artifact_search": false, + "compiler_or_query_execution": false, + "disassembly_or_ELF_decode": false, + "max_allowed_binary_bytes": 2097152, + "old_unit_reopening": false, + "original_import_or_execution": false, + "patterns": 6, + "process_inspection": false, + "retained_matches": 2, + "retained_window_bytes": 128, + "source_acquisition_or_decompression": false, + "target_execution": false + }, + "first_clock_utc": "2026-11-02T22:56:19Z", + "fixed_stop_utc": "2026-11-02T23:04:19Z", + "frozen_utc": "2026-11-02T22:58:21.296388+00:00", + "interpretation_refusals": [ + "Prefix presence is not proof of initializer, selection, reference, use, active field or conformance.", + "Absent exact gcc-cross/NUL bytes do not exclude computed/concatenated/transformed cross paths or prove the native initializer.", + "No standard_libexec_prefix/gcc_libexec_prefix name matches means only these exact byte patterns were absent; no variable/symbol recovery follows.", + "A .dynsym NUL byte occurrence does not prove a section/symbol table; no .symtab pattern does not prove stripping or section absence.", + "File offsets/windows are not virtual addresses and no addresses are guessed.", + "Current stable descriptor endpoints do not establish future namespace/C07 immutable lifetime." + ], + "metadata_routine_data_pin": { + "bytes": 3385, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-libexec-property-slice-v1/input/passive_literal_metadata_v1.py", + "sha256": "60d6de5d7b217a61f75cb68298762f2d0acd938c4a615f318671140f5eb5f2e0" + }, + "metadata_routine_invocation": { + "command": "python3 -B -S outputs/c05-v03-completion-20261102T055710Z/driver-libexec-property-slice-v1/input/passive_literal_metadata_v1.py", + "exit_code": 0, + "scope": "One permitted new standard-library file/hash/byte-find metadata routine. No source execution, ELF decoder, original parser import, disassembler, library loading of inspected bytes or target query.", + "target_read_calls": 1 + }, + "predeclared_plan_pin": { + "bytes": 1854, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-libexec-property-slice-v1/input/PLAN-v1.json", + "sha256": "923606f137bbb394a2b477292a239d3ec89a26ddcd6dafff72f7c884299bee9c" + }, + "raw_observation_pin": { + "bytes": 3379, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-libexec-property-slice-v1/input/OBSERVATIONS-v1.json", + "sha256": "55cb5892864260e322192d40ca1cf5003d288438e938f0432e7bf0f11aee6eb3" + }, + "retained_ELF_metadata_only": { + "artifact": { + "bytes": 67127, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/qualification-pilot-v2-identity/IDENTITY-v1.json", + "sha256": "57ac35b03981ef988d7e3cf65ad39908a221c04724bc828fffa6b824eb98dbc9" + }, + "claim": "ELF64LE AMD64/type2 metadata is inherited from the exact-hash retained identity packet; no new binary header interpretation here.", + "elf_type_integer": 2, + "format": "ELF64-little-endian-x86-64", + "new_ELF_decode": false, + "same_driver_hash": true + }, + "retained_input_pins": [ + { + "bytes": 3437, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/BINARY-PACKAGE-CORRESPONDENCE-v1.json", + "sha256": "7ade5b65ff17b1a941bc768eb81aaffb986ba6b40fea689d3408f1889032b98f" + }, + { + "bytes": 1900, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13-x86-64-linux-gnu-BUILD-v1.json", + "sha256": "c776295d23a87c9efdccbd9b43b0cc79f037163b14037a37c2e8f7dcfc714379" + }, + { + "bytes": 7161, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/PUBLISHER-BUILD-CHECKSUM-ASSOCIATION-v1.json", + "sha256": "21cb1f2059830a63ae9c3a289e960ff7df15a10cb66b6ff9bfcab025ea5c2d3f" + }, + { + "bytes": 52703, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1_amd64.buildinfo", + "sha256": "6ee3421f6cf17d77a50122b6934790bdcc64e42ba82c6812d257055cef434b83" + }, + { + "bytes": 47145, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1_amd64.changes", + "sha256": "db40bf0222e18a133216deb061955adc3a54ef4ff6e1b4fe469ff8c404422b61" + }, + { + "bytes": 67127, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/qualification-pilot-v2-identity/IDENTITY-v1.json", + "sha256": "57ac35b03981ef988d7e3cf65ad39908a221c04724bc828fffa6b824eb98dbc9" + }, + { + "bytes": 6173, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/PROPERTY-FRAME-v1.md", + "sha256": "cc25f8cf72498ac0962cd4b2f12dc584f0ee39563304130b76631a99bcfd374a" + }, + { + "bytes": 17423, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/PROPERTY-FRAME-v1.json", + "sha256": "058f40fefd8c06a3867e77e7e95a70d4690bcc34f3ba3f50a7233d121f50546d" + }, + { + "bytes": 6094, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/SOURCE-PINS-v1.json", + "sha256": "4cd178b2ad9e41b5dfbd86661ac9aba60d69f99f320244a7a76cecca48204092" + }, + { + "bytes": 3129, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/SOURCE-FREEZE-v1.json", + "sha256": "955808701850c118409a26caf24bb176340bdf2cab0384fae31ac5562e1c93ef" + } + ], + "retained_package_and_build_provenance": { + "build_metadata_pin": { + "bytes": 1900, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13-x86-64-linux-gnu-BUILD-v1.json", + "sha256": "c776295d23a87c9efdccbd9b43b0cc79f037163b14037a37c2e8f7dcfc714379" + }, + "fresh_package_rehash_or_decode": false, + "independently_parsed_exact_buildinfo_changes_package_rows": [ + { + "document": "source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1_amd64.buildinfo", + "row": { + "bytes": 21084546, + "file": "gcc-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb", + "line": 269, + "sha256": "a134b0319a82d14581b3a14820d2832af4ec9778ed8b9b4ddaeecfb0555ec325" + } + }, + { + "document": "source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1_amd64.changes", + "row": { + "bytes": 21084546, + "file": "gcc-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb", + "line": 262, + "sha256": "a134b0319a82d14581b3a14820d2832af4ec9778ed8b9b4ddaeecfb0555ec325" + } + } + ], + "launchpad_build": 32148542, + "package_member_comparison_scope": "Official downloaded package member hashes compared to original pins; no signature/build reproducibility or configured-rule completeness claim; no package code installed/executed", + "selected_driver_member": [ + { + "bytes": 1023032, + "expected_bytes": 1023032, + "expected_sha256": "1b99826121ae6682a634e5efe09bd3e3df58ce58e0b28f849114ab5b89139c26", + "matches_pin": true, + "mode": 493, + "package_filename": "gcc-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb", + "path": "/usr/bin/x86_64-linux-gnu-gcc-13", + "sha256": "1b99826121ae6682a634e5efe09bd3e3df58ce58e0b28f849114ab5b89139c26" + } + ], + "signature_or_reproducible_build_verified": false, + "source_implementation_equivalence_proven": false, + "source_package": "gcc-13", + "source_version": "13.3.0-6ubuntu2~24.04.1" + }, + "schema": "actual-installed-driver-property-slice-input-v1", + "source_fixed_patterns_and_literal_matches": [ + { + "interpretation": "Literal file-byte occurrences only; no address/section/symbol/initializer/use semantics.", + "matches": [ + { + "file_offset": 702226, + "pattern_end_exclusive": 702244, + "window_bytes": 64, + "window_end_exclusive": 702274, + "window_file_offset": 702210, + "window_hex": "4743435f455845435f505245464958002f7573722f6c6962657865632f6763632f002f7573722f62696e2f004743435f455845435f5052454649583d00434f4d" + } + ], + "more_matches_unretained": false, + "pattern_hex": "2f7573722f6c6962657865632f6763632f00", + "predeclared_ASCII_pattern_including_terminal_NUL": "/usr/libexec/gcc/\\0", + "retained_count": 1 + }, + { + "interpretation": "Literal file-byte occurrences only; no address/section/symbol/initializer/use semantics.", + "matches": [], + "more_matches_unretained": false, + "pattern_hex": "2f7573722f6c6962657865632f6763632d63726f73732f00", + "predeclared_ASCII_pattern_including_terminal_NUL": "/usr/libexec/gcc-cross/\\0", + "retained_count": 0 + }, + { + "interpretation": "Literal file-byte occurrences only; no address/section/symbol/initializer/use semantics.", + "matches": [], + "more_matches_unretained": false, + "pattern_hex": "7374616e646172645f6c6962657865635f70726566697800", + "predeclared_ASCII_pattern_including_terminal_NUL": "standard_libexec_prefix\\0", + "retained_count": 0 + }, + { + "interpretation": "Literal file-byte occurrences only; no address/section/symbol/initializer/use semantics.", + "matches": [], + "more_matches_unretained": false, + "pattern_hex": "6763635f6c6962657865635f70726566697800", + "predeclared_ASCII_pattern_including_terminal_NUL": "gcc_libexec_prefix\\0", + "retained_count": 0 + }, + { + "interpretation": "Literal file-byte occurrences only; no address/section/symbol/initializer/use semantics.", + "matches": [], + "more_matches_unretained": false, + "pattern_hex": "2e73796d74616200", + "predeclared_ASCII_pattern_including_terminal_NUL": ".symtab\\0", + "retained_count": 0 + }, + { + "interpretation": "Literal file-byte occurrences only; no address/section/symbol/initializer/use semantics.", + "matches": [ + { + "file_offset": 1020531, + "pattern_end_exclusive": 1020539, + "window_bytes": 64, + "window_end_exclusive": 1020579, + "window_file_offset": 1020515, + "window_hex": "636b616765002e676e752e68617368002e64796e73796d002e64796e737472002e676e752e76657273696f6e002e676e752e76657273696f6e5f72002e72656c" + } + ], + "more_matches_unretained": false, + "pattern_hex": "2e64796e73796d00", + "predeclared_ASCII_pattern_including_terminal_NUL": ".dynsym\\0", + "retained_count": 1 + } + ], + "source_frame": { + "available_pin_rows": 21, + "competing_patched_recipe": "/usr/libexec/gcc-cross/", + "missing_selected_helpers": [ + "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-base-selected/gcc/prefix.cc", + "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-base-selected/libiberty/make-relative-prefix.c" + ], + "native_recipe_candidate": "/usr/libexec/gcc/", + "pinset_pin": { + "bytes": 6094, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/SOURCE-PINS-v1.json", + "sha256": "4cd178b2ad9e41b5dfbd86661ac9aba60d69f99f320244a7a76cecca48204092" + }, + "premises_not_displaced": [ + "Actual patch/configuration selector/origin/stamp relationship across build phases.", + "Relevant property-preserving environment/command-line flags and applied source/configuration stages.", + "Initializer/reference/reached-use relation in installed code/data.", + "Relocation/update_path/suffix/order and actual query-context/reporting relationship." + ], + "property_frame_json_pin": { + "bytes": 17423, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/PROPERTY-FRAME-v1.json", + "sha256": "058f40fefd8c06a3867e77e7e95a70d4690bcc34f3ba3f50a7233d121f50546d" + }, + "property_frame_md_pin": { + "bytes": 6173, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/frame/PROPERTY-FRAME-v1.md", + "sha256": "cc25f8cf72498ac0962cd4b2f12dc584f0ee39563304130b76631a99bcfd374a" + }, + "scope": "Conditional recipe witness remains installed HOLD; raw literal matches do not settle these known gaps." + }, + "status": "P0_ACTUAL_PINNED_INPUT_AVAILABLE_RAW_LITERAL_STARTING_POINT_ONLY" +} diff --git a/research/h25-gcc-libexec-phase-frame/evidence/reported-driver-input/INPUT-v1.md b/research/h25-gcc-libexec-phase-frame/evidence/reported-driver-input/INPUT-v1.md new file mode 100644 index 0000000000..0c2c1212df --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/reported-driver-input/INPUT-v1.md @@ -0,0 +1,28 @@ +# Actual installed driver: bounded raw-byte property-slice starting input + +The passive P0 assignment began **22:56:19 UTC**, with a fixed **23:04:19 UTC** stop. One regular file, at most2MiB, one stable-descriptor read, six exact source-fixed ASCII/NUL patterns, at most8matches/pattern and64bytes/window were declared before the binary read. No ELF/ISA decoder, disassembler, broad strings census, source execution, original import, process inspection or target query was used. + +**The actual nominated driver is available and still matches its exact pin.** `/usr/bin/x86_64-linux-gnu-gcc-13` is1,023,032bytes, SHA256 `1b99826121ae6682a634e5efe09bd3e3df58ce58e0b28f849114ab5b89139c26`. Descriptor-before/after and after-lookup metadata agree. The JSON retains dev/ino/size/mtime_ns/ctime_ns/mode/uid/gid/nlink, exact observation times and measured passive read/hash/find wall/CPU time. Endpoint agreement is not C07 lifetime. + +Retained package-member evidence matches this driver to `gcc-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb`. Both exact retained buildinfo and changes SHA256 rows independently agree on the21,084,546-byte package SHA256 `a134b0319a82d14581b3a14820d2832af4ec9778ed8b9b4ddaeecfb0555ec325`, associated with build32148542/source gcc-13. Package bytes were not decoded or freshly rehashed here. Signatures, reproducible builds and installed implementation correspondence remain unproved. Earlier exact-hash identity metadata supplies ELF64LE AMD64/type2 classification; this assignment performs no new ELF decode. + +The raw literal results are: + +| Fixed ASCII pattern, including NUL | File offsets, decimal | Retained matches | +|---|---|---:| +| `/usr/libexec/gcc/\0` | 702226 | 1 | +| `/usr/libexec/gcc-cross/\0` | none | 0 | +| `standard_libexec_prefix\0` | none | 0 | +| `gcc_libexec_prefix\0` | none | 0 | +| `.symtab\0` | none | 0 | +| `.dynsym\0` | 1020531 | 1 | + +Exactly two64-byte windows are retained,128bytes total, as exact hex with file offsets in `INPUT-v1.json`/`OBSERVATIONS-v1.json`. No ASCII strings dump or address mapping is supplied. The native-prefix literal is a **concrete nominated starting point** for a future property-specific static certificate investigation on actual build bytes. No certificate or feasibility result for the complete chain exists here. + +The interpretation stops at literal bytes. The prefix match does not prove an initializer, reference, active field, reached use or installed behavior. Absence of the exact gcc-cross/NUL pattern does not rule out computation/concatenation/transformation. The two variable-name patterns' absence says nothing about recovered symbols. `.dynsym` bytes do not prove a section/table; no `.symtab` pattern does not prove stripping or section absence. These are file offsets, not virtual addresses. + +The21-available-pin source frame remains conditional: native recipe `/usr/libexec/gcc/`, competing patched `/usr/libexec/gcc-cross/`, actual patch/configure selector/origin/stamp continuity and later flag/property preservation still open. Missing selected prefix.cc and make-relative-prefix.c are not supplied or searched. Raw matches cannot override those phase premises. + +The precise Pro21 feasibility question is whether a separately bounded independent source/ISA/correspondence argument can connect the actual initialization, references and reached use of this property, with consequential call/configuration effects accounted for. It must start from this raw evidence without assuming a named symbol/section, initializer identity or guessed address. A complete whole-gcc.o record is not imposed; neither is a new GNU conformance axiom adopted. This nomination does not promise that the later certificate fits. + +All artifacts are passive input/data documentation. No alternative artifact/debug/log route, source acquisition/decompression, native/compiler/query/test, process inspection or old-unit reopening occurred. Original C05/V03 and field qualification remain false, original43.5%/denominators unchanged, original credit0. Reported canonical94.550533479 plus local4.4 =98.950533479s is preserved as accounting metadata, not a new budget/debit or complete physical bill. Costs remain **OPEN_NOT_ZERO**. No automatic continuation or execution release. diff --git a/research/h25-gcc-libexec-phase-frame/evidence/reported-driver-input/OBSERVATIONS-v1.json b/research/h25-gcc-libexec-phase-frame/evidence/reported-driver-input/OBSERVATIONS-v1.json new file mode 100644 index 0000000000..21a7eff983 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/reported-driver-input/OBSERVATIONS-v1.json @@ -0,0 +1,115 @@ +{ + "ELF_or_instruction_decode": false, + "actual_bytes_read": 1023032, + "address_or_symbol_interpretation": false, + "descriptor_after": { + "ctime_ns": 1772221733958608818, + "dev": 2114, + "gid": 65534, + "ino": 4065395, + "mode": 33261, + "mtime_ns": 1766091591000000000, + "nlink": 1, + "permission_mode_octal": "0o755", + "size": 1023032, + "uid": 65534 + }, + "descriptor_before": { + "ctime_ns": 1772221733958608818, + "dev": 2114, + "gid": 65534, + "ino": 4065395, + "mode": 33261, + "mtime_ns": 1766091591000000000, + "nlink": 1, + "permission_mode_octal": "0o755", + "size": 1023032, + "uid": 65534 + }, + "descriptor_endpoints_equal": true, + "descriptor_lookup_equal": true, + "finished_utc": "2026-11-02T22:57:06.417876+00:00", + "lookup_after": { + "ctime_ns": 1772221733958608818, + "dev": 2114, + "gid": 65534, + "ino": 4065395, + "mode": 33261, + "mtime_ns": 1766091591000000000, + "nlink": 1, + "permission_mode_octal": "0o755", + "size": 1023032, + "uid": 65534 + }, + "passive_process_cpu_seconds": 0.004843088000000002, + "passive_wall_seconds": 0.004843346992856823, + "path": "/usr/bin/x86_64-linux-gnu-gcc-13", + "patterns": [ + { + "matches": [ + { + "file_offset": 702226, + "pattern_end_exclusive": 702244, + "window_bytes": 64, + "window_end_exclusive": 702274, + "window_file_offset": 702210, + "window_hex": "4743435f455845435f505245464958002f7573722f6c6962657865632f6763632f002f7573722f62696e2f004743435f455845435f5052454649583d00434f4d" + } + ], + "matches_retained": 1, + "more_matches_unretained": false, + "pattern_bytes": 18, + "pattern_hex": "2f7573722f6c6962657865632f6763632f00" + }, + { + "matches": [], + "matches_retained": 0, + "more_matches_unretained": false, + "pattern_bytes": 24, + "pattern_hex": "2f7573722f6c6962657865632f6763632d63726f73732f00" + }, + { + "matches": [], + "matches_retained": 0, + "more_matches_unretained": false, + "pattern_bytes": 24, + "pattern_hex": "7374616e646172645f6c6962657865635f70726566697800" + }, + { + "matches": [], + "matches_retained": 0, + "more_matches_unretained": false, + "pattern_bytes": 19, + "pattern_hex": "6763635f6c6962657865635f70726566697800" + }, + { + "matches": [], + "matches_retained": 0, + "more_matches_unretained": false, + "pattern_bytes": 8, + "pattern_hex": "2e73796d74616200" + }, + { + "matches": [ + { + "file_offset": 1020531, + "pattern_end_exclusive": 1020539, + "window_bytes": 64, + "window_end_exclusive": 1020579, + "window_file_offset": 1020515, + "window_hex": "636b616765002e676e752e68617368002e64796e73796d002e64796e737472002e676e752e76657273696f6e002e676e752e76657273696f6e5f72002e72656c" + } + ], + "matches_retained": 1, + "more_matches_unretained": false, + "pattern_bytes": 8, + "pattern_hex": "2e64796e73796d00" + } + ], + "read_calls": 1, + "schema": "single-driver-fixed-literal-observations-v1", + "sha256": "1b99826121ae6682a634e5efe09bd3e3df58ce58e0b28f849114ab5b89139c26", + "started_utc": "2026-11-02T22:57:06.413049+00:00", + "status": "EXACT_PIN_MATCH_RAW_LITERAL_DATA_ONLY", + "target_execution": false +} diff --git a/research/h25-gcc-libexec-phase-frame/evidence/reported-driver-input/PLAN-v1.json b/research/h25-gcc-libexec-phase-frame/evidence/reported-driver-input/PLAN-v1.json new file mode 100644 index 0000000000..fda8645131 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/evidence/reported-driver-input/PLAN-v1.json @@ -0,0 +1,54 @@ +{ + "costs": "OPEN_NOT_ZERO", + "first_clock_utc": "2026-11-02T22:56:19Z", + "fixed_stop_utc": "2026-11-02T23:04:19Z", + "interpretation": "Raw literal byte data only. No initializer/reference/use/section/symbol/address semantics from a match. No decoder, disassembler, broad strings census, target execution or alternate artifact. Identity mismatch/unavailability STOP.", + "native_or_original_execution": false, + "patterns": [ + { + "ascii_text": "/usr/libexec/gcc/", + "pattern_bytes_hex": "2f7573722f6c6962657865632f6763632f00", + "terminal_NUL": true + }, + { + "ascii_text": "/usr/libexec/gcc-cross/", + "pattern_bytes_hex": "2f7573722f6c6962657865632f6763632d63726f73732f00", + "terminal_NUL": true + }, + { + "ascii_text": "standard_libexec_prefix", + "pattern_bytes_hex": "7374616e646172645f6c6962657865635f70726566697800", + "terminal_NUL": true + }, + { + "ascii_text": "gcc_libexec_prefix", + "pattern_bytes_hex": "6763635f6c6962657865635f70726566697800", + "terminal_NUL": true + }, + { + "ascii_text": ".symtab", + "pattern_bytes_hex": "2e73796d74616200", + "terminal_NUL": true + }, + { + "ascii_text": ".dynsym", + "pattern_bytes_hex": "2e64796e73796d00", + "terminal_NUL": true + } + ], + "predeclared_bounds": { + "max_file_bytes": 2097152, + "max_retained_match_window_bytes": 3072, + "max_retained_matches_per_pattern": 8, + "max_window_bytes_per_match": 64, + "regular_file_count": 1, + "target_read_passes": 1 + }, + "recorded_utc": "2026-11-02T22:56:36.423813+00:00", + "schema": "actual-driver-literal-property-input-plan-v1", + "target": { + "expected_sha256": "1b99826121ae6682a634e5efe09bd3e3df58ce58e0b28f849114ab5b89139c26", + "expected_size_bytes": 1023032, + "path": "/usr/bin/x86_64-linux-gnu-gcc-13" + } +} diff --git a/research/h25-gcc-libexec-phase-frame/integrity.py b/research/h25-gcc-libexec-phase-frame/integrity.py new file mode 100644 index 0000000000..8f444c86d5 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/integrity.py @@ -0,0 +1,173 @@ +# SPDX-License-Identifier: Apache-2.0 +"""Read-only integrity check for this SOURCE-ARCHIVE; no scientific replay. + +Prepared with substantial OpenAI Codex / GPT-6.1 Sol assistance. +Requires an external exact MANIFEST.json SHA256. Archived source is never +imported or executed. No subprocess, network, compiler, decoder or file writes. +Assumes a stable filesystem: separately named reads are not an atomic snapshot +or race-safe custody and do not establish full acquisition provenance. +""" + +import argparse +import hashlib +import json +from pathlib import Path, PurePosixPath +import re +import stat +import sys + + +class IntegrityError(Exception): + pass + + +def require(condition, message): + if not condition: + raise IntegrityError(message) + + +def payload_identity(data): + header = b"blob " + str(len(data)).encode("ascii") + b"\0" + return { + "bytes": len(data), + "sha256": hashlib.sha256(data).hexdigest(), + "git_blob": hashlib.sha1(header + data).hexdigest(), + } + + +def canonical_path(value): + require(isinstance(value, str) and value, "Empty/non-string inventory path") + parsed = PurePosixPath(value) + require(not parsed.is_absolute(), "Absolute inventory path") + require("\\" not in value, "Backslash in inventory path") + require(parsed.as_posix() == value, "Noncanonical inventory path") + require(all(part not in ("", ".", "..") for part in parsed.parts), + "Dot/parent component in inventory path") + return value + + +def read_regular(root, relative): + path = root + for component in PurePosixPath(relative).parts: + path = path / component + require(not path.is_symlink(), "Symlink rejected: " + relative) + info = path.stat() + require(stat.S_ISREG(info.st_mode), "Nonregular file: " + relative) + require(not stat.S_IMODE(info.st_mode) & 0o111, + "Executable payload rejected: " + relative) + require(info.st_size <= 8 * 1024 * 1024, "Payload exceeds 8 MiB bound") + return path.read_bytes() + + +def check(root, manifest_sha256): + require(re.fullmatch(r"[0-9a-f]{64}", manifest_sha256) is not None, + "Manifest SHA256 must be exactly 64 lowercase hex characters") + require(not root.is_symlink(), "Package-root symlink rejected") + manifest_raw = read_regular(root, "MANIFEST.json") + require(len(manifest_raw) <= 2 * 1024 * 1024, "Manifest exceeds 2 MiB bound") + require(hashlib.sha256(manifest_raw).hexdigest() == manifest_sha256, + "External manifest SHA256 mismatch") + manifest = json.loads(manifest_raw) + require(manifest.get("schema") == "h25-gcc-libexec-phase-frame-manifest-v1", + "Unexpected manifest schema") + rows = manifest.get("files") + require(isinstance(rows, list) and 0 < len(rows) <= 256, + "Inventory must contain 1..256 rows") + declared = {} + total_bytes = 0 + for row in rows: + require(isinstance(row, dict), "Non-object manifest row") + relative = canonical_path(row.get("path")) + require(relative != "MANIFEST.json", "Manifest cannot inventory itself") + require(relative not in declared, "Duplicate inventory path: " + relative) + require(row.get("git_mode") == "100644", "Unexpected Git mode: " + relative) + data = read_regular(root, relative) + identity = payload_identity(data) + for key in ("bytes", "sha256", "git_blob"): + require(row.get(key) == identity[key], key + " mismatch: " + relative) + declared[relative] = row + total_bytes += len(data) + observed = set() + for path in root.rglob("*"): + relative = path.relative_to(root).as_posix() + require(not path.is_symlink(), "Symlink rejected: " + relative) + info = path.stat() + if stat.S_ISDIR(info.st_mode): + continue + require(stat.S_ISREG(info.st_mode), "Nonregular path: " + relative) + observed.add(relative) + expected = set(declared) | {"MANIFEST.json"} + require(observed == expected, + "Exact file inventory mismatch; missing=" + repr(sorted(expected-observed)) + + "; extra=" + repr(sorted(observed-expected))) + require("VERIFY.json" not in observed, "This archive has no registered replay hook") + source_map = json.loads(read_regular(root, "SOURCE-MAP.json")) + require(source_map.get("schema") == "h25-gcc-libexec-phase-frame-source-map-v1", + "Unexpected source-map schema") + origin_rows = source_map.get("files") + require(isinstance(origin_rows, list), "Invalid source-map files") + origins = set() + available_pins = 0 + unavailable_pins = 0 + pin_bytes = 0 + for row in origin_rows: + require(isinstance(row, dict), "Non-object source-map row") + origin = row.get("origin_path") + require(isinstance(origin, str) and origin and origin not in origins, + "Missing or duplicate origin identifier") + origins.add(origin) + if row.get("available") is False: + require(row.get("package_path") is None, "Unavailable origin has payload") + require(all(row.get(key) is None for key in ("bytes", "sha256", "git_blob")), + "Unavailable origin has invented identity") + require(row.get("role") == "source-pin-body", "Unexpected unavailable role") + unavailable_pins += 1 + continue + require(row.get("available") is True, "Invalid availability label") + relative = canonical_path(row.get("package_path")) + require(relative in declared, "Source-map payload missing from manifest") + inventory_row = declared[relative] + for key in ("bytes", "sha256", "git_blob"): + require(row.get(key) == inventory_row[key], "Source-map identity mismatch") + require(row.get("package_git_mode") == inventory_row["git_mode"], + "Source-map mode mismatch") + if row.get("role") == "source-pin-body": + require(relative.startswith("snapshots/pinned/") and relative.endswith(".txt"), + "Source-pin body is not an inert .txt snapshot") + available_pins += 1 + pin_bytes += row["bytes"] + require((available_pins, unavailable_pins, pin_bytes) == (21, 2, 880523), + "Declared source-pin inventory mismatch") + return { + "status": "ARCHIVE_BYTE_INTEGRITY_ONLY", + "manifest_sha256": manifest_sha256, + "regular_files": len(observed), + "inventoried_payload_files": len(declared), + "inventoried_payload_bytes": total_bytes, + "manifest_bytes": len(manifest_raw), + "available_source_pin_bodies": available_pins, + "unavailable_source_pin_bodies": unavailable_pins, + "scientific_replay": False, + "source_history_or_binary_correspondence_certified": False, + "custody": "Separately named reads; stable filesystem assumed, no atomic/race-safe custody", + "full_acquisition_provenance_certified": False, + } + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--manifest-sha256", required=True, + help="Externally reviewed exact MANIFEST.json SHA256") + args = parser.parse_args() + root = Path(__file__).absolute().parent + try: + result = check(root, args.manifest_sha256) + except (IntegrityError, OSError, ValueError, TypeError, KeyError) as error: + print("ARCHIVE_INTEGRITY_FAILURE: " + str(error), file=sys.stderr) + return 1 + print(json.dumps(result, sort_keys=True)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/research/h25-gcc-libexec-phase-frame/licenses/Apache-2.0.txt b/research/h25-gcc-libexec-phase-frame/licenses/Apache-2.0.txt new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/licenses/Apache-2.0.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/research/h25-gcc-libexec-phase-frame/licenses/GCC-Runtime-Library-Exception.txt b/research/h25-gcc-libexec-phase-frame/licenses/GCC-Runtime-Library-Exception.txt new file mode 100644 index 0000000000..e1b3c69c17 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/licenses/GCC-Runtime-Library-Exception.txt @@ -0,0 +1,73 @@ +GCC RUNTIME LIBRARY EXCEPTION + +Version 3.1, 31 March 2009 + +Copyright (C) 2009 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + +This GCC Runtime Library Exception ("Exception") is an additional +permission under section 7 of the GNU General Public License, version +3 ("GPLv3"). It applies to a given file (the "Runtime Library") that +bears a notice placed by the copyright holder of the file stating that +the file is governed by GPLv3 along with this Exception. + +When you use GCC to compile a program, GCC may combine portions of +certain GCC header files and runtime libraries with the compiled +program. The purpose of this Exception is to allow compilation of +non-GPL (including proprietary) programs to use, in this way, the +header files and runtime libraries covered by this Exception. + +0. Definitions. + +A file is an "Independent Module" if it either requires the Runtime +Library for execution after a Compilation Process, or makes use of an +interface provided by the Runtime Library, but is not otherwise based +on the Runtime Library. + +"GCC" means a version of the GNU Compiler Collection, with or without +modifications, governed by version 3 (or a specified later version) of +the GNU General Public License (GPL) with the option of using any +subsequent versions published by the FSF. + +"GPL-compatible Software" is software whose conditions of propagation, +modification and use would permit combination with GCC in accord with +the license of GCC. + +"Target Code" refers to output from any compiler for a real or virtual +target processor architecture, in executable form or suitable for +input to an assembler, loader, linker and/or execution +phase. Notwithstanding that, Target Code does not include data in any +format that is used as a compiler intermediate representation, or used +for producing a compiler intermediate representation. + +The "Compilation Process" transforms code entirely represented in +non-intermediate languages designed for human-written code, and/or in +Java Virtual Machine byte code, into Target Code. Thus, for example, +use of source code generators and preprocessors need not be considered +part of the Compilation Process, since the Compilation Process can be +understood as starting with the output of the generators or +preprocessors. + +A Compilation Process is "Eligible" if it is done using GCC, alone or +with other GPL-compatible software, or if it is done without using any +work based on GCC. For example, using non-GPL-compatible Software to +optimize any GCC intermediate representations would not qualify as an +Eligible Compilation Process. + +1. Grant of Additional Permission. + +You have permission to propagate a work of Target Code formed by +combining the Runtime Library with Independent Modules, even if such +propagation would otherwise violate the terms of GPLv3, provided that +all Target Code was generated by Eligible Compilation Processes. You +may then convey such a combination under terms of your choice, +consistent with the licensing of the Independent Modules. + +2. No Weakening of GCC Copyleft. + +The availability of this Exception does not imply any general +presumption that third-party software is unaffected by the copyleft +requirements of the license of GCC. + diff --git a/research/h25-gcc-libexec-phase-frame/licenses/GPL-3-standard-text b/research/h25-gcc-libexec-phase-frame/licenses/GPL-3-standard-text new file mode 100644 index 0000000000..f288702d2f --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/licenses/GPL-3-standard-text @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/research/h25-gcc-libexec-phase-frame/licenses/GPL-3.0-gcc-source.txt b/research/h25-gcc-libexec-phase-frame/licenses/GPL-3.0-gcc-source.txt new file mode 100644 index 0000000000..94a9ed024d --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/licenses/GPL-3.0-gcc-source.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/research/h25-gcc-libexec-phase-frame/licenses/gcc-13-debian-copyright b/research/h25-gcc-libexec-phase-frame/licenses/gcc-13-debian-copyright new file mode 100644 index 0000000000..4e76ab4575 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/licenses/gcc-13-debian-copyright @@ -0,0 +1,1532 @@ +This is the Debian GNU/Linux prepackaged version of the GNU compiler +collection, containing Ada, C, C++, D, Fortran 95, Go, Objective-C, +Objective-C++, and Modula-2 compilers, documentation, and support +libraries. In addition, Debian provides the gm2 compiler, either in +the same source package, or built from a separate same source package. +Packaging is done by the Debian GCC Maintainers +, with sources obtained from: + + ftp://gcc.gnu.org/pub/gcc/releases/ (for full releases) + svn://gcc.gnu.org/svn/gcc/ (for prereleases) + ftp://sourceware.org/pub/newlib/ (for newlib) + git://git.savannah.gnu.org/gm2.git (for Modula-2) + +The current gcc-13 source package is taken from the git gcc-13-branch. + +Changes: See changelog.Debian.gz + +Debian splits the GNU Compiler Collection into packages for each language, +library, and documentation as follows: + +Language Compiler package Library package Documentation +--------------------------------------------------------------------------- +Ada gnat-13 libgnat-13 gnat-13-doc +C gcc-13 gcc-13-doc +C++ g++-13 libstdc++6 libstdc++6-13-doc +D gdc-13 +Fortran 95 gfortran-13 libgfortran5 gfortran-13-doc +Go gccgo-13 libgo0 +Objective C gobjc-13 libobjc4 +Objective C++ gobjc++-13 +Modula-2 gm2-13 libgm2 + +For some language run-time libraries, Debian provides source files, +development files, debugging symbols and libraries containing position- +independent code in separate packages: + +Language Sources Development Debugging Position-Independent +------------------------------------------------------------------------------ +C++ libstdc++6-13-dbg libstdc++6-13-pic +D libphobos-13-dev + +Additional packages include: + +All languages: +libgcc1, libgcc2, libgcc4 GCC intrinsics (platform-dependent) +gcc-13-base Base files common to all compilers +gcc-13-soft-float Software floating point (ARM only) +gcc-13-source The sources with patches + +Ada: +libgnat-util13-dev, libgnat-util13 GNAT version library + +C: +cpp-13, cpp-13-doc GNU C Preprocessor +libssp0-dev, libssp0 GCC stack smashing protection library +libquadmath0 Math routines for the __float128 type +fixincludes Fix non-ANSI header files + +C, C++ and Fortran 95: +libgomp1-dev, libgomp1 GCC OpenMP (GOMP) support library +libitm1-dev, libitm1 GNU Transactional Memory Library + +Biarch support: On some 64-bit platforms which can also run 32-bit code, +Debian provides additional packages containing 32-bit versions of some +libraries. These packages have names beginning with 'lib32' instead of +'lib', for example lib32stdc++6. Similarly, on some 32-bit platforms which +can also run 64-bit code, Debian provides additional packages with names +beginning with 'lib64' instead of 'lib'. These packages contain 64-bit +versions of the libraries. (At this time, not all platforms and not all +libraries support biarch.) The license terms for these lib32 or lib64 +packages are identical to the ones for the lib packages. + + +COPYRIGHT STATEMENTS AND LICENSING TERMS + + +GCC is Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, +1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, +2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 +Free Software Foundation, Inc. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +Files that have exception clauses are licensed under the terms of the +GNU General Public License; either version 3, or (at your option) any +later version. + +On Debian GNU/Linux systems, the complete text of the GNU General +Public License is in `/usr/share/common-licenses/GPL', version 3 of this +license in `/usr/share/common-licenses/GPL-3'. + +The following runtime libraries are licensed under the terms of the +GNU General Public License (v3 or later) with version 3.1 of the GCC +Runtime Library Exception (included in this file): + + - libgcc (libgcc/, gcc/libgcc2.[ch], gcc/unwind*, gcc/gthr*, + gcc/coretypes.h, gcc/crtstuff.c, gcc/defaults.h, gcc/dwarf2.h, + gcc/emults.c, gcc/gbl-ctors.h, gcc/gcov-io.h, gcc/libgcov.c, + gcc/tsystem.h, gcc/typeclass.h). + - libatomic + - libdecnumber + - libgomp + - libitm + - libssp + - libstdc++-v3 + - libobjc + - libgfortran + - The libgnat-13 Ada support library and libgnat-util13 library. + - Various config files in gcc/config/ used in runtime libraries. + - libvtv + +The libbacktrace library is licensed under the following terms: + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + (1) Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + (2) Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + (3) The name of the author may not be used to + endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + + +The libsanitizer libraries (libasan, liblsan, libtsan, libubsan) are +licensed under the following terms: + +Copyright (c) 2009-2019 by the LLVM contributors. + +All rights reserved. + +Developed by: + + LLVM Team + + University of Illinois at Urbana-Champaign + + http://llvm.org + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal with +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimers. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimers in the + documentation and/or other materials provided with the distribution. + + * Neither the names of the LLVM Team, University of Illinois at + Urbana-Champaign, nor the names of its contributors may be used to + endorse or promote products derived from this Software without specific + prior written permission. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +SOFTWARE. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +The libffi library is licensed under the following terms: + + libffi - Copyright (c) 1996-2003 Red Hat, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + +The documentation is licensed under the GNU Free Documentation License (v1.2). +On Debian GNU/Linux systems, the complete text of this license is in +`/usr/share/common-licenses/GFDL-1.2'. + + +GCC RUNTIME LIBRARY EXCEPTION + +Version 3.1, 31 March 2009 + +Copyright (C) 2009 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + +This GCC Runtime Library Exception ("Exception") is an additional +permission under section 7 of the GNU General Public License, version +3 ("GPLv3"). It applies to a given file (the "Runtime Library") that +bears a notice placed by the copyright holder of the file stating that +the file is governed by GPLv3 along with this Exception. + +When you use GCC to compile a program, GCC may combine portions of +certain GCC header files and runtime libraries with the compiled +program. The purpose of this Exception is to allow compilation of +non-GPL (including proprietary) programs to use, in this way, the +header files and runtime libraries covered by this Exception. + +0. Definitions. + +A file is an "Independent Module" if it either requires the Runtime +Library for execution after a Compilation Process, or makes use of an +interface provided by the Runtime Library, but is not otherwise based +on the Runtime Library. + +"GCC" means a version of the GNU Compiler Collection, with or without +modifications, governed by version 3 (or a specified later version) of +the GNU General Public License (GPL) with the option of using any +subsequent versions published by the FSF. + +"GPL-compatible Software" is software whose conditions of propagation, +modification and use would permit combination with GCC in accord with +the license of GCC. + +"Target Code" refers to output from any compiler for a real or virtual +target processor architecture, in executable form or suitable for +input to an assembler, loader, linker and/or execution +phase. Notwithstanding that, Target Code does not include data in any +format that is used as a compiler intermediate representation, or used +for producing a compiler intermediate representation. + +The "Compilation Process" transforms code entirely represented in +non-intermediate languages designed for human-written code, and/or in +Java Virtual Machine byte code, into Target Code. Thus, for example, +use of source code generators and preprocessors need not be considered +part of the Compilation Process, since the Compilation Process can be +understood as starting with the output of the generators or +preprocessors. + +A Compilation Process is "Eligible" if it is done using GCC, alone or +with other GPL-compatible software, or if it is done without using any +work based on GCC. For example, using non-GPL-compatible Software to +optimize any GCC intermediate representations would not qualify as an +Eligible Compilation Process. + +1. Grant of Additional Permission. + +You have permission to propagate a work of Target Code formed by +combining the Runtime Library with Independent Modules, even if such +propagation would otherwise violate the terms of GPLv3, provided that +all Target Code was generated by Eligible Compilation Processes. You +may then convey such a combination under terms of your choice, +consistent with the licensing of the Independent Modules. + +2. No Weakening of GCC Copyleft. + +The availability of this Exception does not imply any general +presumption that third-party software is unaffected by the copyleft +requirements of the license of GCC. + + +libquadmath/ + Copyright (C) 1992-2018 Free Software Foundation, Inc. + + Written by Francois-Xavier Coudert + Written by Tobias Burnus + Contributions by Ulrich Drepper + Conversion to long double by Jakub Jelinek + + This file is part of the libquadmath library. + Libquadmath is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + Libiberty is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + +libquadmath/math: + +atanq.c, expm1q.c, j0q.c, j1q.c, log1pq.c, logq.c: + Copyright 2001 by Stephen L. Moshier + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + +coshq.c, erfq.c, jnq.c, lgammaq.c, powq.c, roundq.c: + Changes for 128-bit __float128 are + Copyright (C) 2001 Stephen L. Moshier + and are incorporated herein by permission of the author. The author + reserves the right to distribute this material elsewhere under different + copying permissions. These modifications are distributed here under + the following terms: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + +libquadmath/math/ + +cosq_kernel.c, expq.c, sincos_table.c, sincosq.c, sincosq_kernel.c, +sinq_kernel.c, truncq.c: + Copyright (C) 1997, 1999 Free Software Foundation, Inc. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + +libquadmath/math/isinfq.c: + Written by J.T. Conklin . + Change for long double by Jakub Jelinek + Public domain. + +libquadmath/math/ + llroundq.c, lroundq.c, tgammaq.c: + + Copyright (C) 1997, 1999, 2002, 2004 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 1997 and + Jakub Jelinek , 1999. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + +libquadmath/math/log10q.c: + Cephes Math Library Release 2.2: January, 1991 + Copyright 1984, 1991 by Stephen L. Moshier + Adapted for glibc November, 2001 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + +libquadmath/math/ + acoshq.c, acosq.c, asinhq.c, asinq.c, atan2q.c, atanhq.c, ceilq.c, + copysignq.c, coshq.c, cosq.c, erfq.c, fabsq.c, finiteq.c, floorq.c, + fmodq.c, frexpq.c, hypotq.c, ilogbq.c, isnanq.c, jnq.c, ldexpq.c, + logbq.c, modfq.c, nearbyintq.c, nextafterq.c, powq.c, remainderq.c, + rem_pio2q.c, rintq.c, scalblnq.c, scalbnq.c, sinhq.c, sinq.c, + tanhq.c, tanq.c, tanq_kernel.c: + + Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + . + Developed at SunPro, a Sun Microsystems, Inc. business. + Permission to use, copy, modify, and distribute this + software is freely granted, provided that this notice + is preserved. + +libquadmath/math/ + acosq.c, asinq.c, coshq.c, erfq.c, jnq.c, powq.c, sinhq.c, tanq_kernel.c: + + In addition to the Sun Microsystems copyright: + + Long double expansions are + Copyright (C) 2001 Stephen L. Moshier + and are incorporated herein by permission of the author. The author + reserves the right to distribute this material elsewhere under different + copying permissions. These modifications are distributed here under + the LGPL 2.1 or later. + + +gcc/go/gofrontend, libgo: + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +D: +gdc-13 GNU D Compiler +libphobos-13-dev D standard runtime library + +The D source package is made up of the following components. + +The D front-end for GCC: + - d/* + +Copyright (C) 2004-2007 David Friedman +Modified by Vincenzo Ampolo, Michael Parrot, Iain Buclaw, (C) 2009, 2010 + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +On Debian GNU/Linux systems, the complete text of the GNU General +Public License is in `/usr/share/common-licenses/GPL', version 2 of this +license in `/usr/share/common-licenses/GPL-2'. + + +The DMD Compiler implementation of the D programming language: + - d/dmd/* + +Copyright (c) 1999-2010 by Digital Mars +All Rights Reserved +written by Walter Bright +http://www.digitalmars.com +License for redistribution is by either the Artistic License or +the GNU General Public License (v1). + +On Debian GNU/Linux systems, the complete text of the GNU General +Public License is in `/usr/share/common-licenses/GPL', the Artistic +license in `/usr/share/common-licenses/Artistic'. + + +The Zlib data compression library: + - d/phobos/etc/c/zlib/* + + (C) 1995-2004 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + +The Phobos standard runtime library: + - d/phobos/* + +Unless otherwise marked within the file, each file in the source +is under the following licenses: + +Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com +Written by Walter Bright + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, in both source and binary form, subject to the following +restrictions: + + o The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + o Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + o This notice may not be removed or altered from any source + distribution. + +By plainly marking modifications, something along the lines of adding to each +file that has been changed a "Modified by Foo Bar" line +underneath the "Written by" line would be adequate. + +gcc/m2: +gcc/m2/gm2-libiberty: +gcc/m2/mc-boot/: +gcc/m2/mc-boot-ch/: +Copyright (C) 2001-2019 Free Software Foundation, Inc. +Contributed by Gaius Mulley . + +This file is part of GNU Modula-2. + +GNU Modula-2 is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GNU Modula-2 is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +gcc/m2/**/*.texi: +Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012, 2012, 2013 Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. + +gcc/m2/gm2-coroutines: +gcc/m2/gm2-libs: +gcc/m2/gm2-libs-min: +gcc/m2/gm2-libs-pim: +gcc/m2/gm2-libs-ch: +Copyright (C) 2002-2019 Free Software Foundation, Inc. + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +gcc/m2/gm2-libs-iso/: +This has a mix of licenses, most as GPL-3+ plus GCC Runtime Library +Exception, version 3.1. + +gcc/m2/gm2-libs-iso/*.def: +Library module defined by the International Standard +Information technology - programming languages +BS ISO/IEC 10514-1:1996E Part 1: Modula-2, Base Language. + +Copyright ISO/IEC (International Organization for Standardization +and International Electrotechnical Commission) 1996, 1997, 1998, +1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 + +Copyright (C) 2001-2019 Free Software Foundation, Inc. +mix of GPL-3.0 and LGPL-2.1/3 + +Copyright (C) 2001-2019 Free Software Foundation, Inc. +mix of GPL-3.0 and LGPL-2.1/3 + +gcc/m2/examples: +Copyright (C) 2005-2015 Free Software Foundation, Inc. +Mix of LGPL-2.1 and GPL-3.0. + +gcc/m2/images: +GPL-3+ + +gcc/m2/el/gm2-mode.el: +;; Everyone is granted permission to copy, modify and redistribute +;; GNU Emacs, but only under the conditions described in the +;; GNU Emacs General Public License. A copy of this license is +;; supposed to have been given to you along with GNU Emacs so you +;; can know your rights and responsibilities. It should be in a +;; file named COPYING. Among other things, the copyright notice +;; and this notice must be preserved on all copies. + +Copyright (C) 2001-2018 Free Software Foundation, Inc. +Contributed by Gaius Mulley . +Mix of GPL-3 and LGPL-2.1. + +gcc/testsuite/gm2/: +Copyright (C) 2001-2019 Free Software Foundation, Inc. +Mix of GPL-2+ and GPL-3+ + +libgm2: + +libgm2/libiso/: +libgm2/libpim/: +libgm2/liblog/: +libgm2/libcor/: +libgm2/libmin/: +Copyright (C) 2002-2019 Free Software Foundation, Inc. + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +newlib-X.Y.Z/: + +Upstream Authors: +newlib@sources.redhat.com +Jeff Johnston +Tom Fitzsimmons + +The newlib subdirectory is a collection of software from several sources. +Each file may have its own copyright/license that is embedded in the source +file. + +This list documents those licenses which are more restrictive than +a BSD-like license or require the copyright notice +to be duplicated in documentation and/or other materials associated with +the distribution. Certain licenses documented here only apply to +specific targets. Certain clauses only apply if you are building the +code as part of your binary. + +Note that this list may omit certain licenses that +only pertain to the copying/modifying of the individual source code. +If you are distributing the source code, then you do not need to +worry about these omitted licenses, so long as you do not modify the +copyright information already in place. + +Parts of this work are licensed under the terms of the GNU General +Public License. On Debian systems, the complete text of this license +can be found in /usr/share/common-licenses/GPL. + +Parts of this work are licensed under the terms of the GNU Library +General Public License. On Debian systems, the complete text of this +license be found in /usr/share/common-licenses/LGPL. + +(1) University of California, Berkeley + +[1a] + +Copyright (c) 1990 The Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms are permitted +provided that the above copyright notice and this paragraph are +duplicated in all such forms and that any documentation, +and other materials related to such distribution and use +acknowledge that the software was developed +by the University of California, Berkeley. The name of the +University may not be used to endorse or promote products derived +from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +[1b] + +Copyright (c) 1990 The Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms are permitted +provided that the above copyright notice and this paragraph are +duplicated in all such forms and that any documentation, +advertising materials, and other materials related to such +distribution and use acknowledge that the software was developed +by the University of California, Berkeley. The name of the +University may not be used to endorse or promote products derived +from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +[1c] + +Copyright (c) 1981, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 +The Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: + This product includes software developed by the University of + California, Berkeley and its contributors. +4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +[1d] + +Copyright (c) 1988, 1990, 1993 Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +[1e] + +Copyright (c) 1982, 1986, 1989, 1991, 1993, 1994 +The Regents of the University of California. All rights reserved. +(c) UNIX System Laboratories, Inc. +All or some portions of this file are derived from material licensed +to the University of California by American Telephone and Telegraph +Co. or Unix System Laboratories, Inc. and are reproduced herein with +the permission of UNIX System Laboratories, Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: + This product includes software developed by the University of + California, Berkeley and its contributors. +4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +[1f] + +Copyright (c) 1987, 1988, 2000 Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms are permitted +provided that: (1) source distributions retain this entire copyright +notice and comment, and (2) distributions including binaries display +the following acknowledgement: ``This product includes software +developed by the University of California, Berkeley and its contributors'' +in the documentation or other materials provided with the distribution +and in all advertising materials mentioning features or use of this +software. Neither the name of the University nor the names of its +contributors may be used to endorse or promote products derived +from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +------------------------------------------------------------- + Please note that in some of the above alternate licenses, there is a + statement regarding that acknowledgement must be made in any + advertising materials for products using the code. This restriction + no longer applies due to the following license change: + + ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change + + In some cases the defunct clause has been removed in modified newlib code and + in some cases, the clause has been left as-is. +------------------------------------------------------------- + +(2) Cygwin (cygwin targets only) + +Copyright 2001 Red Hat, Inc. + +This software is a copyrighted work licensed under the terms of the +Cygwin license. Please consult the file "CYGWIN_LICENSE" for +details. + +(3) David M. Gay at AT&T + +The author of this software is David M. Gay. + +Copyright (c) 1991 by AT&T. + +Permission to use, copy, modify, and distribute this software for any +purpose without fee is hereby granted, provided that this entire notice +is included in all copies of any software which is or includes a copy +or modification of this software and in all copies of the supporting +documentation for such software. + +THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED +WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR AT&T MAKES ANY +REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY +OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + +(4) Advanced Micro Devices + +Copyright 1989, 1990 Advanced Micro Devices, Inc. + +This software is the property of Advanced Micro Devices, Inc (AMD) which +specifically grants the user the right to modify, use and distribute this +software provided this notice is not removed or altered. All other rights +are reserved by AMD. + +AMD MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS +SOFTWARE. IN NO EVENT SHALL AMD BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL +DAMAGES IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, OR +USE OF THIS SOFTWARE. + +So that all may benefit from your experience, please report any problems +or suggestions about this software to the 29K Technical Support Center at +800-29-29-AMD (800-292-9263) in the USA, or 0800-89-1131 in the UK, or +0031-11-1129 in Japan, toll free. The direct dial number is 512-462-4118. + +Advanced Micro Devices, Inc. +29K Support Products +Mail Stop 573 +5900 E. Ben White Blvd. +Austin, TX 78741 +800-292-9263 + +(5) C.W. Sandmann + +Copyright (C) 1993 C.W. Sandmann + +This file may be freely distributed as long as the author's name remains. + +(6) Eric Backus + +(C) Copyright 1992 Eric Backus + +This software may be used freely so long as this copyright notice is +left intact. There is no warrantee on this software. + +(7) Sun Microsystems + +Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + +Developed at SunPro, a Sun Microsystems, Inc. business. +Permission to use, copy, modify, and distribute this +software is freely granted, provided that this notice +is preserved. + +(8) Hewlett Packard + +(c) Copyright 1986 HEWLETT-PACKARD COMPANY + +To anyone who acknowledges that this file is provided "AS IS" +without any express or implied warranty: + permission to use, copy, modify, and distribute this file +for any purpose is hereby granted without fee, provided that +the above copyright notice and this notice appears in all +copies, and that the name of Hewlett-Packard Company not be +used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +Hewlett-Packard Company makes no representations about the +suitability of this software for any purpose. + +(9) Hans-Peter Nilsson + +Copyright (C) 2001 Hans-Peter Nilsson + +Permission to use, copy, modify, and distribute this software is +freely granted, provided that the above copyright notice, this notice +and the following disclaimer are preserved with no changes. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. + +(10) Stephane Carrez (m68hc11-elf/m68hc12-elf targets only) + +Copyright (C) 1999, 2000, 2001, 2002 Stephane Carrez (stcarrez@nerim.fr) + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +(11) Christopher G. Demetriou + +Copyright (c) 2001 Christopher G. Demetriou +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +(12) SuperH, Inc. + +Copyright 2002 SuperH, Inc. All rights reserved + +This software is the property of SuperH, Inc (SuperH) which specifically +grants the user the right to modify, use and distribute this software +provided this notice is not removed or altered. All other rights are +reserved by SuperH. + +SUPERH MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO +THIS SOFTWARE. IN NO EVENT SHALL SUPERH BE LIABLE FOR INDIRECT, SPECIAL, +INCIDENTAL OR CONSEQUENTIAL DAMAGES IN CONNECTION WITH OR ARISING FROM +THE FURNISHING, PERFORMANCE, OR USE OF THIS SOFTWARE. + +So that all may benefit from your experience, please report any problems +or suggestions about this software to the SuperH Support Center via +e-mail at softwaresupport@superh.com . + +SuperH, Inc. +405 River Oaks Parkway +San Jose +CA 95134 +USA + +(13) Royal Institute of Technology + +Copyright (c) 1999 Kungliga Tekniska Hgskolan +(Royal Institute of Technology, Stockholm, Sweden). +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of KTH nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +(14) Alexey Zelkin + +Copyright (c) 2000, 2001 Alexey Zelkin +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +(15) Andrey A. Chernov + +Copyright (C) 1997 by Andrey A. Chernov, Moscow, Russia. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +(16) FreeBSD + +Copyright (c) 1997-2002 FreeBSD Project. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +(17) S. L. Moshier + +Author: S. L. Moshier. + +Copyright (c) 1984,2000 S.L. Moshier + +Permission to use, copy, modify, and distribute this software for any +purpose without fee is hereby granted, provided that this entire notice +is included in all copies of any software which is or includes a copy +or modification of this software and in all copies of the supporting +documentation for such software. + +THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED +WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION +OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS +SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + +(18) Citrus Project + +Copyright (c)1999 Citrus Project, +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +(19) Todd C. Miller + +Copyright (c) 1998 Todd C. Miller +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +(20) DJ Delorie (i386) + +Copyright (C) 1991 DJ Delorie +All rights reserved. + +Redistribution and use in source and binary forms is permitted +provided that the above copyright notice and following paragraph are +duplicated in all such forms. + +This file is distributed WITHOUT ANY WARRANTY; without even the implied +warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +(21) Free Software Foundation LGPL License (*-linux* targets only) + + Copyright (C) 1990-1999, 2000, 2001 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Mark Kettenis , 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA + +(22) Xavier Leroy LGPL License (i[3456]86-*-linux* targets only) + +Copyright (C) 1996 Xavier Leroy (Xavier.Leroy@inria.fr) + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Library General Public License for more details. + +(23) Intel (i960) + +Copyright (c) 1993 Intel Corporation + +Intel hereby grants you permission to copy, modify, and distribute this +software and its documentation. Intel grants this permission provided +that the above copyright notice appears in all copies and that both the +copyright notice and this permission notice appear in supporting +documentation. In addition, Intel grants this permission provided that +you prominently mark as "not part of the original" any modifications +made to this software or documentation, and that the name of Intel +Corporation not be used in advertising or publicity pertaining to +distribution of the software or the documentation without specific, +written prior permission. + +Intel Corporation provides this AS IS, WITHOUT ANY WARRANTY, EXPRESS OR +IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY +OR FITNESS FOR A PARTICULAR PURPOSE. Intel makes no guarantee or +representations regarding the use of, or the results of the use of, +the software and documentation in terms of correctness, accuracy, +reliability, currentness, or otherwise; and you rely on the software, +documentation and results solely at your own risk. + +IN NO EVENT SHALL INTEL BE LIABLE FOR ANY LOSS OF USE, LOSS OF BUSINESS, +LOSS OF PROFITS, INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES +OF ANY KIND. IN NO EVENT SHALL INTEL'S TOTAL LIABILITY EXCEED THE SUM +PAID TO INTEL FOR THE PRODUCT LICENSED HEREUNDER. + +(24) Hewlett-Packard (hppa targets only) + +(c) Copyright 1986 HEWLETT-PACKARD COMPANY + +To anyone who acknowledges that this file is provided "AS IS" +without any express or implied warranty: + permission to use, copy, modify, and distribute this file +for any purpose is hereby granted without fee, provided that +the above copyright notice and this notice appears in all +copies, and that the name of Hewlett-Packard Company not be +used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +Hewlett-Packard Company makes no representations about the +suitability of this software for any purpose. + +(25) Henry Spencer (only *-linux targets) + +Copyright 1992, 1993, 1994 Henry Spencer. All rights reserved. +This software is not subject to any license of the American Telephone +and Telegraph Company or of the Regents of the University of California. + +Permission is granted to anyone to use this software for any purpose on +any computer system, and to alter it and redistribute it, subject +to the following restrictions: + +1. The author is not responsible for the consequences of use of this + software, no matter how awful, even if they arise from flaws in it. + +2. The origin of this software must not be misrepresented, either by + explicit claim or by omission. Since few users ever read sources, + credits must appear in the documentation. + +3. Altered versions must be plainly marked as such, and must not be + misrepresented as being the original software. Since few users + ever read sources, credits must appear in the documentation. + +4. This notice may not be removed or altered. + +(26) Mike Barcroft + +Copyright (c) 2001 Mike Barcroft +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +(27) Konstantin Chuguev (--enable-newlib-iconv) + +Copyright (c) 1999, 2000 + Konstantin Chuguev. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + + iconv (Charset Conversion Library) v2.0 + +(27) Artem Bityuckiy (--enable-newlib-iconv) + +Copyright (c) 2003, Artem B. Bityuckiy, SoftMine Corporation. +Rights transferred to Franklin Electronic Publishers. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +(28) Red Hat Incorporated + +Unless otherwise stated in each remaining newlib file, the remaining +files in the newlib subdirectory default to the following copyright. +It should be noted that Red Hat Incorporated now owns copyrights +belonging to Cygnus Solutions and Cygnus Support. + +Copyright (c) 1994, 1997, 2001, 2002, 2003, 2004 Red Hat Incorporated. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + The name of Red Hat Incorporated may not be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL RED HAT INCORPORATED BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +contrib/unicode: + +UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE + + Unicode Data Files include all data files under the directories +http://www.unicode.org/Public/, http://www.unicode.org/reports/, and +http://www.unicode.org/cldr/data/. Unicode Data Files do not include PDF +online code charts under the directory http://www.unicode.org/Public/. +Software includes any source code published in the Unicode Standard or under +the directories http://www.unicode.org/Public/, +http://www.unicode.org/reports/, and http://www.unicode.org/cldr/data/. + + NOTICE TO USER: Carefully read the following legal agreement. BY +DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA FILES +("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY ACCEPT, AND +AGREE TO BE BOUND BY, ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF +YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA +FILES OR SOFTWARE. + + COPYRIGHT AND PERMISSION NOTICE + + Copyright © 1991-2013 Unicode, Inc. All rights reserved. Distributed under +the Terms of Use in http://www.unicode.org/copyright.html. + + Permission is hereby granted, free of charge, to any person obtaining a +copy of the Unicode data files and any associated documentation (the "Data +Files") or Unicode software and any associated documentation (the "Software") +to deal in the Data Files or Software without restriction, including without +limitation the rights to use, copy, modify, merge, publish, distribute, and/or +sell copies of the Data Files or Software, and to permit persons to whom the +Data Files or Software are furnished to do so, provided that (a) the above +copyright notice(s) and this permission notice appear with all copies of the +Data Files or Software, (b) both the above copyright notice(s) and this +permission notice appear in associated documentation, and (c) there is clear +notice in each modified Data File or in the Software as well as in the +documentation associated with the Data File(s) or Software that the data or +software has been modified. + + THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD +PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN +THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR +PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE +DATA FILES OR SOFTWARE. + + Except as contained in this notice, the name of a copyright holder shall +not be used in advertising or otherwise to promote the sale, use or other +dealings in these Data Files or Software without prior written authorization +of the copyright holder. + +contrib/unicode/from_glibc: + +# Copyright (C) 2014-2019 Free Software Foundation, Inc. +# This file is part of the GNU C Library. +# +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# . diff --git a/research/h25-gcc-libexec-phase-frame/snapshots/pinned/consultation/COMPLETE-RECEIPT-v20.json.txt b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/consultation/COMPLETE-RECEIPT-v20.json.txt new file mode 100644 index 0000000000..520b49d8e1 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/consultation/COMPLETE-RECEIPT-v20.json.txt @@ -0,0 +1,13 @@ +{ + "sent_utc": "2026-11-02T21:59:58.623Z", + "wait_deadline_utc": "2026-11-02T22:14:58.623Z", + "complete_observed_utc": "2026-11-02T22:13:57.564Z", + "complete": true, + "complete_before_deadline": true, + "response_complete_visible": true, + "stop_absent": true, + "url": "https://chatgpt.com/c/6ae7bbbd-5ce0-83ea-beb9-456283ffae81", + "mode": "Pro5of5;GPT-6checked", + "prompt_exact_readback": true, + "scope": "Targeted first-prefix engineering/source-build frame, no query or pilot extension." +} diff --git a/research/h25-gcc-libexec-phase-frame/snapshots/pinned/consultation/RESPONSE-v20-LINKS.json.txt b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/consultation/RESPONSE-v20-LINKS.json.txt new file mode 100644 index 0000000000..dd3ce6cb35 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/consultation/RESPONSE-v20-LINKS.json.txt @@ -0,0 +1,50 @@ +[ + { + "text": "Ubuntu rules2", + "url": "https://github.com/CrocSwap/integer-mult-bounds/blob/120072d58ddb46f0e02886756243174d41fce42e/research/h25-c05-v03-input-constructors/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules2" + }, + { + "text": "generated configargs.h", + "url": "https://github.com/CrocSwap/integer-mult-bounds/blob/97dd394ce1ddf00cc80dfdaad71767fdbc85af47/research/h25-gcc-generated-config-data/unit03/source-artifacts/plugin-members/usr/lib/gcc/x86_64-linux-gnu/13/plugin/include/configargs.h" + }, + { + "text": "embedded configuration record", + "url": "https://github.com/CrocSwap/integer-mult-bounds/blob/120072d58ddb46f0e02886756243174d41fce42e/research/h25-c05-v03-input-constructors/evidence/EMBEDDED-CONFIGURATION-v1.json" + }, + { + "text": "Makefile.in", + "url": "https://github.com/CrocSwap/integer-mult-bounds/blob/120072d58ddb46f0e02886756243174d41fce42e/research/h25-c05-v03-input-constructors/source-artifacts/gcc-base-selected/gcc/Makefile.in" + }, + { + "text": "gcc.cc", + "url": "https://github.com/CrocSwap/integer-mult-bounds/blob/120072d58ddb46f0e02886756243174d41fce42e/research/h25-c05-v03-input-constructors/source-artifacts/gcc-base-selected/gcc/gcc.cc" + }, + { + "text": "amd64 buildinfo", + "url": "https://github.com/CrocSwap/integer-mult-bounds/blob/97dd394ce1ddf00cc80dfdaad71767fdbc85af47/research/h25-gcc-generated-config-data/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1_amd64.buildinfo" + }, + { + "text": "cross-install-location.diff", + "url": "https://github.com/CrocSwap/integer-mult-bounds/blob/120072d58ddb46f0e02886756243174d41fce42e/research/h25-c05-v03-input-constructors/source-artifacts/gcc-debian-patch-inputs/debian/patches/cross-install-location.diff" + }, + { + "text": "rules.patch228–231", + "url": "https://github.com/CrocSwap/integer-mult-bounds/blob/120072d58ddb46f0e02886756243174d41fce42e/research/h25-c05-v03-input-constructors/source-artifacts/gcc-debian-patch-inputs/debian/rules.patch" + }, + { + "text": "rules.defs223–226", + "url": "https://github.com/CrocSwap/integer-mult-bounds/blob/120072d58ddb46f0e02886756243174d41fce42e/research/h25-c05-v03-input-constructors/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules.defs" + }, + { + "text": "top-level rules", + "url": "https://github.com/CrocSwap/integer-mult-bounds/blob/120072d58ddb46f0e02886756243174d41fce42e/research/h25-c05-v03-input-constructors/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules" + }, + { + "text": "relocation implementation", + "url": "https://github.com/gcc-mirror/gcc/blob/releases/gcc-13.3.0/libiberty/make-relative-prefix.c" + }, + { + "text": "prefix implementation", + "url": "https://github.com/gcc-mirror/gcc/blob/releases/gcc-13.3.0/gcc/prefix.cc" + } +] diff --git a/research/h25-gcc-libexec-phase-frame/snapshots/pinned/consultation/RESPONSE-v20.txt.txt b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/consultation/RESPONSE-v20.txt.txt new file mode 100644 index 0000000000..f3505a14ce --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/consultation/RESPONSE-v20.txt.txt @@ -0,0 +1,79 @@ +Decision + +The exact native-recipe candidate is /usr/libexec/gcc/. It is now supported by a specific recipe, generated configuration, and pinned-driver metadata chain. It is not yet an independently qualified installed-driver cell. + +Requiring a complete final gcc.o definitions/undefinitions/forced-includes record as the only acceptable evidence would strengthen the engineering standard unnecessarily. A property-specific build-frame argument plus discriminating installed conformance can suffice. The remaining question is whether this candidate survived the applicable patch and compilation stages, not what value libexecdir probably had. + +I found a concrete competing patch and a useful configure-time discriminator. I also located the precise missing generator interface. I did not locate an independently exposed final record that closes the remaining correspondence within this bounded search. + +1. What the available evidence actually establishes + +The following chain is substantially stronger than an unbound configure string. + +Checked evidence Property established +Exact Ubuntu debian/rules21012–1022 and1054–1062 The ordinary installation prefix is usr. Both single_package branches ultimately assign libexecdir=$(PF)/libexec. In the non-single branch, the earlier $(PF)/$(configured_libdir) assignment is overwritten. +Same-build generated configargs.h The recorded invocation contains --prefix=/usr and --libexecdir=/usr/libexec, the exact Ubuntu package version, native build/host/target, and the recorded build directory. +Published passive record for the pinned driver The same configure text was extracted from the driver identified by SHA256`1b998261…139c26`. This corroborates applicability to those bytes, while remaining binary metadata rather than semantic proof. +GCC Makefile.in635,2331, and2345 The configured libexecdir feeds -DSTANDARD_LIBEXEC_PREFIX=\"$(libexecdir)/gcc/\", which enters CFLAGS-gcc.o. Ordinary substitution therefore yields /usr/libexec/gcc/. +gcc.cc1618 and4697 The source initialises standard_libexec_prefix from that macro and initially assigns it to gcc_libexec_prefix. + +Sources are the exact retained +Ubuntu rules2, +generated configargs.h, +embedded configuration record, +Makefile.in, and +gcc.cc. + +I also read the retained +amd64 buildinfo. Its SHA256 rows associate the plugin package and driver package with the same build. I did not rehash your local executable or authenticate a signature. These records support the stated package association, not a signed semantic attestation. + +2. The consequential override is identifiable + +The retained +cross-install-location.diff changes this exact definition to use /gcc-cross/. +rules.patch228–231 selects it when DEB_CROSS=yes. +rules.defs223–226 permits FORCE_CROSS_LAYOUT=yes to select that branch even when the native triplets agree. Triplet equality alone therefore does not settle applicability. + +There is, however, positive branch evidence already available. In rules2421–428, the Phobos block emits --without-target-system-zlib when DEB_CROSS=yes, and --with-target-system-zlib=auto otherwise. Both the generated header and pinned-driver configuration record contain --enable-libphobos-checking=release together with the auto option. Within the retained, unoverridden recipe, this identifies DEB_CROSS != yes at configuration-argument expansion. + +That does not yet establish the earlier patch-selection value. The +top-level rules read rules.defs and rules.patch, whereas rules2 reads rules.defs and then generated debian/rules.parameters. The generator is explicitly debian/rules.conf. Those phase inputs cannot simply be declared identical. + +There is also a specifically located later override surface. Makefile.in places object-specific flags before CXXFLAGS, with CPPFLAGS subsequently included in compilation. rules2 clears environment-origin compiler flags, but does not thereby exclude command-line-origin replacements. No actual override or defect has been observed. + +3. What would suffice under engineering qualification + +A complete final-object export is one sufficient route, but the narrower engineering route is legitimate: + +Establish the property-specific recipe frame, including the relevant patch-selection/configuration relationship and later preservation of this definition. +Bind that frame to the exact package/member evidence already retained. +Predeclare a discriminating observation of the installed driver’s corresponding effective-prefix behaviour under a separately admitted context. +Evaluate the combined evidence, explicitly retaining its finite scope and residual uncertainty. + +This does not require proving every hypothetical compiler defect impossible. It does require resolving the known, consequential competing recipe rather than treating an approving reviewer or matching package hash as truth. + +The remaining named source input is debian/rules.conf from gcc-13_13.3.0-6ubuntu2~24.04.1, together with whichever generated rules.parameters cells it uses to bridge these phases. Its immediate purpose is to determine whether it changes the layout selection, configuration arguments, or relevant build flags. Finding that file would not automatically prove the installed value, and I am not presenting it as such. + +I did not locate those contents in the checked public packet. Two targeted searches returned no results, and the attempted exact-version Git-Ubuntu file endpoint was inaccessible. Three targeted Launchpad build metadata/page attempts also failed through the research tool. These are bounded retrieval results, not evidence of global absence. No closed build-log or debug route was retried. + +4. Q3 can corroborate this field, but its interpretation must be specific + +Q3 does not print the scalar initializer directly. gcc.cc4703–4709 applies make_relative_prefix; later add_prefix applies update_path, and reporting adds machine-suffix structure. + +I inspected the primary GCC13.3.0 +relocation implementation and +prefix implementation as upstream comparison sources, without claiming new Ubuntu applied-source correspondence. They reveal an important conditional simplification. If the genuine resolved executable directory and configured bindir are both /usr/bin, the relocation function returns null, and the retained driver subsequently adds the configured prefix. The later GCC_ROOT/standard-prefix transformation must also be accounted for. + +A narrow future conformance contract could therefore predict the applicable default machine-suffixed component, such as /usr/libexec/gcc/x86_64-linux-gnu/13/, only after binding the suffix, transformation, and position. Earlier owned -B components remain explicit. The competing cross-layout prediction uses gcc-cross/. + +Rejecting observations must include that competing suffix, unexpected transformation or ordering, changed identity, and unbound context. Missing, truncated, or ambiguous output remains HOLD. An arbitrary matching substring is insufficient. + +A complete independent oracle for every Q3 entry is not mandatory for this limited engineering cross-check. The prediction of this particular component can be independent of the observed output. Nevertheless, a match only corroborates the source/build case. It neither proves the whole list populated correctly nor logically establishes the initializer by itself. Ignored output returns prevent promoting exit0, EOF, or syntactic validity into complete intended emission. + +Decisive next gate + +Close the property-specific build frame around rules.conf/`rules.parameters`, patch selection, and preservation of STANDARD_LIBEXEC_PREFIX. Use the existing configure-time discriminator rather than restarting the search for an unknown libexecdir. + +Success is a bounded explanation of why the native /gcc/ definition applies to this build, with a predeclared field-level conformance relation. STOP if the generator or an indispensable phase value is unavailable or introduces another unbound override. Do not substitute an assumption of GNU correctness, and do not require the entire final gcc.o record merely because that stronger artefact would suffice. + +The current disposition is native-recipe candidate established, installed engineering qualification pending. No query grant, assurance waiver, full C05/V03 result, or original activity credit follows. diff --git a/research/h25-gcc-libexec-phase-frame/snapshots/pinned/driver-prefix-build-frame-v1/input/review/REVIEW-v2.json.txt b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/driver-prefix-build-frame-v1/input/review/REVIEW-v2.json.txt new file mode 100644 index 0000000000..cc5c5b3d99 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/driver-prefix-build-frame-v1/input/review/REVIEW-v2.json.txt @@ -0,0 +1,78 @@ +{ + "archive_provenance_positive_subset": "Retained acquisition record pins official exact-version Debian archive URL/size/SHA; DSC row and archive freshly match. Retained297-member JSON names both regular members at matching sizes. DISTRO-GENERATOR-SOURCES-v1.json separately maps each literal member name to the exact local body path/size/SHA. These are real retained source-selection/provenance records, not invented new authority.", + "automatic_resume": false, + "costs": "OPEN_NOT_ZERO", + "existing_source_hashes_match_records": true, + "fixed_stop_utc": "2026-11-02T22:28:03Z", + "inputs": [ + { + "bytes": 14886, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/DISTRO-GENERATOR-SOURCES-v1.json", + "sha256": "58f4a165bbd0045559eddc79f940eea4672425c0def4d4e12f95069bbbc32fbe" + }, + { + "bytes": 34772, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-MEMBERS.json", + "sha256": "30403263d883340813c39497a89751a15c543937b950e1af2a907041d25c066f" + }, + { + "bytes": 2563, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/ACQUISITION-v2.json", + "sha256": "c287abe845c438ec814cd3a3a807e05df6ec8def764d399fdc1bf5a036c8325d" + }, + { + "bytes": 4280, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/SOURCE-METADATA-CHECK-v1.json", + "sha256": "e34ccce299d6b30d2907ce558d5138b88d65339314382199199fb531d9138514" + }, + { + "bytes": 54432, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.conf", + "sha256": "bd04d88f2b6b39567344df447d03d74b149d8a6c8721c7dd0bbe9dd7b185b546" + }, + { + "bytes": 928, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.parameters", + "sha256": "954623c853cb1c7024f634084edc048a319a7f92527887cb35aacc062abd7610" + } + ], + "no_actions": { + "budget_grant": false, + "decompression": false, + "full_C05": false, + "full_V03": false, + "original_credit": 0, + "query_or_native_release": false, + "source_execution": false, + "tar_listing": false + }, + "parameters_meaning": "928B source-package parameters has SOURCE_VERSION13.3.0-6ubuntu2~24.04, lacks .1 and DEB_CROSS/layout/buildflag cells; not actual build32148542 generated phase record. Generator recipe at rules.conf1369-1418 and definitions/sonames/phase inputs still need property analysis.", + "permitted_claim": "Analyze these exact authenticated retained source bytes conditionally on their recorded source-package membership and retain the provenance limitation. If subsequent inference critically requires stronger body-to-archive equality, parent may separately approve only the bounded comparison; it is not automatic and has not occurred.", + "precise_archive_binding_limit": "The46-row source-selection record is a bare list and does not itself name/archive-bind the compressed646156B SHA. SOURCE-METADATA-CHECK explicitly binds the exact archive but its selected list omits these two members. Thus no single reviewed retained record jointly pins that compressed archive hash and these two member body hashes or replays the extraction. Documentary member/body provenance is positive; independently checked present body-to-archive byte equality has not been established by this no-decode review. Do not infer it solely from matching names/sizes.", + "preserved_v1": { + "bytes": 12817, + "path": "/home/d3lerium/.codex/.chatgpt-projects/g-p-6ad5817fd84881918865926b6fd51453/outputs/c05-v03-completion-20261102T055710Z/driver-prefix-build-frame-v1/input/review/REVIEW-v1.json", + "sha256": "872a81744822335772b2d1ed4ac9f786d63fcf888642ffa0849c0f9461d04f81" + }, + "recommendation": "Read the two already retained exact source copies. Do not decode/list the archive now. No5s decode reserve is needed merely to restore known source availability. The initial v1 conditional extraction recommendation is superseded by this narrower disposition; its EOF/duplicate conditions remain relevant only to any later independently approved archive comparison.", + "recorded_utc": "2026-11-02T22:27:03.754717+00:00", + "schema": "independent-existing-source-input-gate-review-v2", + "selected_body_records": [ + { + "bytes": 54432, + "distro_header_lines": [], + "member": "debian/rules.conf", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.conf", + "sha256": "bd04d88f2b6b39567344df447d03d74b149d8a6c8721c7dd0bbe9dd7b185b546" + }, + { + "bytes": 928, + "distro_header_lines": [], + "member": "debian/rules.parameters", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.parameters", + "sha256": "954623c853cb1c7024f634084edc048a319a7f92527887cb35aacc062abd7610" + } + ], + "start_utc": "2026-11-02T22:23:03Z", + "verdict": "PREFER_EXISTING_FROZEN_SOURCE_TEXT_FOR_CONDITIONAL_PROPERTY_ANALYSIS_NO_NEW_DECODE" +} diff --git a/research/h25-gcc-libexec-phase-frame/snapshots/pinned/evidence/EMBEDDED-CONFIGURATION-v1.json.txt b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/evidence/EMBEDDED-CONFIGURATION-v1.json.txt new file mode 100644 index 0000000000..e81c37aa4f --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/evidence/EMBEDDED-CONFIGURATION-v1.json.txt @@ -0,0 +1,10 @@ +{ + "scope": "Passive data-string extraction from the exact pinned public executable, no execution; embedded configure text is a claim in binary metadata, not proof of complete source/build or semantics.", + "path": "/usr/bin/x86_64-linux-gnu-gcc-13", + "sha256": "1b99826121ae6682a634e5efe09bd3e3df58ce58e0b28f849114ab5b89139c26", + "matches": [ + "../src/configure -v --with-pkgversion='Ubuntu 13.3.0-6ubuntu2~24.04.1' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-EldibY/gcc-13-13.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-13-EldibY/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2" + ], + "compiler_invoked": false, + "full_C05": false +} diff --git a/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/ACQUISITION-v2.json.txt b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/ACQUISITION-v2.json.txt new file mode 100644 index 0000000000..6b78ba2ba5 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/ACQUISITION-v2.json.txt @@ -0,0 +1,46 @@ +[ + { + "url": "https://archive.ubuntu.com/ubuntu/pool/main/g/gcc-13/gcc-13_13.3.0-6ubuntu2~24.04.1.dsc", + "observed_utc": "2026-11-02T06:28:39.766042+00:00", + "scope": "inbound official source metadata only; no target execution or installation", + "http_status": 200, + "final_url": "https://archive.ubuntu.com/ubuntu/pool/main/g/gcc-13/gcc-13_13.3.0-6ubuntu2~24.04.1.dsc", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1.dsc", + "bytes": 39540, + "sha256": "86b4012c312ac13e3e092877719a62a5b5dbab082ae7e9680780a25c6a13ddc6", + "status": "downloaded" + }, + { + "url": "https://archive.ubuntu.com/ubuntu/pool/main/g/gcc-13/gcc-13_13.3.0-6ubuntu2~24.04.1.debian.tar.xz", + "observed_utc": "2026-11-02T06:28:41.347077+00:00", + "scope": "inbound official source metadata only; no target execution or installation", + "http_status": 200, + "final_url": "https://archive.ubuntu.com/ubuntu/pool/main/g/gcc-13/gcc-13_13.3.0-6ubuntu2~24.04.1.debian.tar.xz", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1.debian.tar.xz", + "bytes": 646156, + "sha256": "5523658f272ad6d15a83b6e26d178fbd5cb7709ec7ce2ca52b0c843e19c228e3", + "status": "downloaded" + }, + { + "url": "https://archive.ubuntu.com/ubuntu/pool/main/b/binutils/binutils_2.42-4ubuntu2.10.dsc", + "observed_utc": "2026-11-02T06:28:43.485704+00:00", + "scope": "inbound official source metadata only; no target execution or installation", + "http_status": 200, + "final_url": "https://archive.ubuntu.com/ubuntu/pool/main/b/binutils/binutils_2.42-4ubuntu2.10.dsc", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/binutils_2.42-4ubuntu2.10.dsc", + "bytes": 10152, + "sha256": "a14a8e2efdb3566955476bccd2248cebed5cf2a2f5d28e223d08200ec1a18d75", + "status": "downloaded" + }, + { + "url": "https://archive.ubuntu.com/ubuntu/pool/main/b/binutils/binutils_2.42-4ubuntu2.10.debian.tar.xz", + "observed_utc": "2026-11-02T06:28:44.339115+00:00", + "scope": "inbound official source metadata only; no target execution or installation", + "http_status": 200, + "final_url": "https://archive.ubuntu.com/ubuntu/pool/main/b/binutils/binutils_2.42-4ubuntu2.10.debian.tar.xz", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/binutils_2.42-4ubuntu2.10.debian.tar.xz", + "bytes": 196552, + "sha256": "6acc777971890cb1efaeeb33a0a5358651c71067ced69dcfd59da7d0977f7530", + "status": "downloaded" + } +] diff --git a/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/DISTRO-GENERATOR-SOURCES-v1.json.txt b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/DISTRO-GENERATOR-SOURCES-v1.json.txt new file mode 100644 index 0000000000..627de319fa --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/DISTRO-GENERATOR-SOURCES-v1.json.txt @@ -0,0 +1,353 @@ +[ + { + "member": "debian/changelog", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/changelog", + "bytes": 796565, + "sha256": "7701d2b1283fbf968f79e54de0e5f3522b736f3687ea4eb8496b1ff52b4a76e0", + "distro_header_lines": [ + 2841 + ] + }, + { + "member": "debian/patches/gcc-distro-specs.diff", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/patches/gcc-distro-specs.diff", + "bytes": 17113, + "sha256": "22e7b3c4e7a3437c456bae439501f97c560460b46670700d9e09aafa032ef072", + "distro_header_lines": [ + 12 + ] + }, + { + "member": "debian/rules.conf", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.conf", + "bytes": 54432, + "sha256": "bd04d88f2b6b39567344df447d03d74b149d8a6c8721c7dd0bbe9dd7b185b546", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-ada.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-ada.mk", + "bytes": 10591, + "sha256": "8c135c8ab1e0faa64d2aaa370a4690930915a4174a50e5038ccfb164455632cc", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-base.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-base.mk", + "bytes": 1374, + "sha256": "19925c48e455c44aed35c0d4d3baa3ffdbfa3dd046e8915df3624fda7888fe7a", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-cpp.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-cpp.mk", + "bytes": 3959, + "sha256": "32314496bd6c406c3509dcdb0ab006ee146f41a50561ac9b9d2d5e27654eea90", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-cxx.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-cxx.mk", + "bytes": 3944, + "sha256": "53017c38e90b32d71b2ffca59b6fec239f1f7e9672a5dcc8e8542a4fe00a4357", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-d.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-d.mk", + "bytes": 9211, + "sha256": "4ded6b45adc35113de48a2940e7ba8cd79fce560180fea70bbc96d9ef88a20ec", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-fortran.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-fortran.mk", + "bytes": 9540, + "sha256": "ae208de03e3ced5e97ef1498c348aee5cf96330e66a0545ee3d5b1626e7883c2", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-gcc.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-gcc.mk", + "bytes": 11687, + "sha256": "8f628e2d5ccabc59605a00a85b187bca5ca8395889414ae0817529e8c45d3ba5", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-gcn.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-gcn.mk", + "bytes": 4540, + "sha256": "5f7a1a0e5eb685a8e0a27666270b46c0a44d12c6a8607920e4a7cf8745bf8e20", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-go.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-go.mk", + "bytes": 12476, + "sha256": "08d4b8f6af22ca9c15ab27bd79f0a738b6156436b6eda10ac79bb4fa83d27676", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-hppa64.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-hppa64.mk", + "bytes": 1278, + "sha256": "9f7679c9879538d988a0a15c83960618221a5a4f0ae527d2eebb0ea7cd1ae806", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-libasan.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-libasan.mk", + "bytes": 2583, + "sha256": "f32c80107c5693c9ed67ca50b96c37857625f41343ea6f9a7c80ce43e3e9ec5b", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-libatomic.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-libatomic.mk", + "bytes": 1903, + "sha256": "d967afa6a49a87eecfa1df37fd74b735615419f88070a06e21cc5e8453bad356", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-libcc1.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-libcc1.mk", + "bytes": 755, + "sha256": "901b707d697e5872b68dc42a8596c2ca46393fbb02383b8296ff9ad31181e4c5", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-libgcc.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-libgcc.mk", + "bytes": 11530, + "sha256": "3b3f922c86f0cfa0487fa5a3e3d004fe89a6c5bbad16358eff0c71534076a36d", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-libgccjit.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-libgccjit.mk", + "bytes": 2588, + "sha256": "e2849548252f0a3b9a6954018ba9d2aed73378be003c7af8be2829a57e299d31", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-libgomp.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-libgomp.mk", + "bytes": 1964, + "sha256": "7e56cde7c1e93e05f48b254153a315765ebf5450059b237e8ba6d069bdbacf16", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-libhwasan.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-libhwasan.mk", + "bytes": 2656, + "sha256": "9a197c75a6c159b6195fbbabc856325a4257034559ad8b5bacff54c61d32bcb8", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-libitm.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-libitm.mk", + "bytes": 1877, + "sha256": "22ae8776b1a4f35d4f5a7aa63a172264324887e056d133db7050c34e0492c67d", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-liblsan.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-liblsan.mk", + "bytes": 2355, + "sha256": "2ec8682efca4912429f455655ce23ff4ad05b6d64b8eeb600d02f9f3c9578ec6", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-libobjc.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-libobjc.mk", + "bytes": 4134, + "sha256": "f9dcd3e1e5b2ae42ff1996d143c9cd94062405af99e2624fc9aa14fd7c49bdc4", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-libquadmath.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-libquadmath.mk", + "bytes": 1908, + "sha256": "8e8cdc0e4324266c5c1f2523dd060fa21a003cc61c180da6582febb46cb7e9f4", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-libssp.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-libssp.mk", + "bytes": 4201, + "sha256": "f698b4b329e2ee0965225e72858a176a2555655276ab7ec9fbcf46020bd8b29b", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-libstdcxx.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-libstdcxx.mk", + "bytes": 17613, + "sha256": "cf276f128e0287d9c5502a74ed76dd26f7eb17c9a28260c19bd427dc2f787f54", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-libtsan.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-libtsan.mk", + "bytes": 2376, + "sha256": "b1c148a64f6f8e06ff2a370318f6604f36f74e2fcffeb4a7f7b3a809ae3fa2f8", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-libubsan.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-libubsan.mk", + "bytes": 2392, + "sha256": "5157a626aa4913176184b8746fd716b732e95c3dd564b13208fd9299efa4faf9", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-libvtv.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-libvtv.mk", + "bytes": 2137, + "sha256": "dee12e31cae74c2e759de54d91b08bb4aa0621491f57f9b493815c2fc5400c03", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-m2.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-m2.mk", + "bytes": 9687, + "sha256": "bce21f1dff1a7df75b9c3027a89c17af934395264dabf8873489041015024629", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-nof.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-nof.mk", + "bytes": 1383, + "sha256": "d5db94e73f57fa60e9abc5c12aaf404e25e33344c6ff9df210964ce6606e5ce0", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-nvptx.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-nvptx.mk", + "bytes": 2910, + "sha256": "dae37c0acaa34afec8288e8346cfc0c8574e6ddfbe5a5f09c92a844a50506d37", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-objc.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-objc.mk", + "bytes": 3124, + "sha256": "de3e69f2dc17396519328e53f7b24ae1df201db3b65123afc1bcae23a23fcd8b", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-objcxx.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-objcxx.mk", + "bytes": 3129, + "sha256": "b29b557ef9fc65390f00f3f0208f903a393686436e83994c5766f43cd780b00d", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-rust.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-rust.mk", + "bytes": 9777, + "sha256": "a501eb04389134c366871ce8fda30d9b0361916150375cb1599689c666f5b395", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-snapshot.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-snapshot.mk", + "bytes": 8326, + "sha256": "f6d80692f05f48eab5de7a069c51eafef40ab65b1863f3011aa02052d502ac0a", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-softfloat.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-softfloat.mk", + "bytes": 987, + "sha256": "7ddfb9b56058046265ae2b5f464bc0a851e525e5eec859f4a495f94b537bf3de", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-source.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-source.mk", + "bytes": 1829, + "sha256": "06c48bf20341d7ef7b1061e4495fd04044dedbc2f235647a28a83401337b9742", + "distro_header_lines": [] + }, + { + "member": "debian/rules.d/binary-toolchain.mk", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.d/binary-toolchain.mk", + "bytes": 8271, + "sha256": "356fe2dfc5aaa383e3f8f1360b1c93105e3192811b8c2f58bf783a36ef94a8d3", + "distro_header_lines": [] + }, + { + "member": "debian/rules.defs", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.defs", + "bytes": 70194, + "sha256": "aaf79170f51110b6b9c90d1bee022d2122401fdbbf8840d91baa3e6f13cbeb58", + "distro_header_lines": [] + }, + { + "member": "debian/rules.parameters", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.parameters", + "bytes": 928, + "sha256": "954623c853cb1c7024f634084edc048a319a7f92527887cb35aacc062abd7610", + "distro_header_lines": [] + }, + { + "member": "debian/rules.patch", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.patch", + "bytes": 12473, + "sha256": "6c6d9dc472ee7082c5658030c812436668ffbb99f76966a6cf9081b03732e8dc", + "distro_header_lines": [ + 343, + 344, + 349, + 352, + 356, + 359, + 362, + 369, + 374, + 377, + 379, + 382, + 386, + 394, + 399, + 404, + 408 + ] + }, + { + "member": "debian/rules.sonames", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.sonames", + "bytes": 4270, + "sha256": "5fce0244ae5a0716a8b4558ac880e7a6fa26cb7ffc798c29bab536c133940ea3", + "distro_header_lines": [] + }, + { + "member": "debian/rules.source", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.source", + "bytes": 339, + "sha256": "42b4de1ba3078cc3af703143ceefbc6cf8de1a04b3c3f17d42c0b3ddbbf5b000", + "distro_header_lines": [] + }, + { + "member": "debian/rules.unpack", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules.unpack", + "bytes": 6011, + "sha256": "c494e28ce0052eb136027712121e1b4d57297bb39f9d79e814ad708c2812a6d8", + "distro_header_lines": [] + }, + { + "member": "debian/rules2", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-additional-packaging/debian/rules2", + "bytes": 97853, + "sha256": "c9b1cebada609601ef1fe3bb34babccae572dccc3e86cebfad3927229d3b83ae", + "distro_header_lines": [ + 1802, + 1803, + 1804, + 1807, + 1816, + 1817 + ] + } +] diff --git a/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/SOURCE-METADATA-CHECK-v1.json.txt b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/SOURCE-METADATA-CHECK-v1.json.txt new file mode 100644 index 0000000000..ff5ace1578 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/SOURCE-METADATA-CHECK-v1.json.txt @@ -0,0 +1,100 @@ +[ + { + "stem": "gcc-13_13.3.0-6ubuntu2~24.04.1", + "dsc_archive_checksums": [ + { + "name": "gcc-13_13.3.0.orig.tar.gz", + "expected_sha256": "3b85d91bf38d1b858d9d01134f4046b3359731968ed4e6e912d29717a35d1a46", + "expected_bytes": 92761021, + "available": false + }, + { + "name": "gcc-13_13.3.0-6ubuntu2~24.04.1.debian.tar.xz", + "expected_sha256": "5523658f272ad6d15a83b6e26d178fbd5cb7709ec7ce2ca52b0c843e19c228e3", + "expected_bytes": 646156, + "available": true, + "observed_sha256": "5523658f272ad6d15a83b6e26d178fbd5cb7709ec7ce2ca52b0c843e19c228e3", + "observed_bytes": 646156, + "checksum_match": true + } + ], + "selected": [ + { + "member": "debian/changelog", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/changelog", + "bytes": 796565, + "sha256": "7701d2b1283fbf968f79e54de0e5f3522b736f3687ea4eb8496b1ff52b4a76e0" + }, + { + "member": "debian/rules", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules", + "bytes": 2984, + "sha256": "2e0afdc6303e407f344d2f6724be731ae84b8fd59758f172491c25348432d75a" + }, + { + "member": "debian/rules.defs", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules.defs", + "bytes": 70194, + "sha256": "aaf79170f51110b6b9c90d1bee022d2122401fdbbf8840d91baa3e6f13cbeb58" + }, + { + "member": "debian/rules2", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules2", + "bytes": 97853, + "sha256": "c9b1cebada609601ef1fe3bb34babccae572dccc3e86cebfad3927229d3b83ae" + } + ], + "members": 297, + "signature_verification": "NOT_PERFORMED; descriptor checksum equality is not signed binary/build correspondence", + "execution": "None; selected ordinary text only; no scripts/imports/compiler" + }, + { + "stem": "binutils_2.42-4ubuntu2.10", + "dsc_archive_checksums": [ + { + "name": "binutils_2.42.orig.tar.xz", + "expected_sha256": "f6e4d41fd5fc778b06b7891457b3620da5ecea1006c6a4a41ae998109f85a800", + "expected_bytes": 27567160, + "available": false + }, + { + "name": "binutils_2.42-4ubuntu2.10.debian.tar.xz", + "expected_sha256": "6acc777971890cb1efaeeb33a0a5358651c71067ced69dcfd59da7d0977f7530", + "expected_bytes": 196552, + "available": true, + "observed_sha256": "6acc777971890cb1efaeeb33a0a5358651c71067ced69dcfd59da7d0977f7530", + "observed_bytes": 196552, + "checksum_match": true + } + ], + "selected": [ + { + "member": "debian/changelog", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/binutils_2.42-4ubuntu2.10-selected/debian/changelog", + "bytes": 377124, + "sha256": "c3e5c0942bb192fa2ce54323b7ab958d85fb8234c1cf255caa8ce613aee8e758" + }, + { + "member": "debian/patches/series", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/binutils_2.42-4ubuntu2.10-selected/debian/patches/series", + "bytes": 1573, + "sha256": "471736d5ca682f59e71bd3a3eb6b3d8f2913cde6df64358ade1fc1f5b2c32a39" + }, + { + "member": "debian/rules", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/binutils_2.42-4ubuntu2.10-selected/debian/rules", + "bytes": 74935, + "sha256": "4e63c6a968412dc4e804e7e5917dd722a10adce9b4d1326a0881e27fc09b7e6b" + }, + { + "member": "debian/rules.defs", + "path": "outputs/c05-v03-completion-20261102T055710Z/source-artifacts/binutils_2.42-4ubuntu2.10-selected/debian/rules.defs", + "bytes": 7318, + "sha256": "7e95a7b7486317b0217dce1a599da80ee0832ffbe9f06978a751fccf441f0cc7" + } + ], + "members": 110, + "signature_verification": "NOT_PERFORMED; descriptor checksum equality is not signed binary/build correspondence", + "execution": "None; selected ordinary text only; no scripts/imports/compiler" + } +] diff --git a/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-MEMBERS.json.txt b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-MEMBERS.json.txt new file mode 100644 index 0000000000..77fb1c4f3c --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-MEMBERS.json.txt @@ -0,0 +1,1784 @@ +[ + { + "name": "debian", + "bytes": 0, + "regular": false, + "symlink": false + }, + { + "name": "debian/NEWS.gcc", + "bytes": 23100, + "regular": true, + "symlink": false + }, + { + "name": "debian/NEWS.html", + "bytes": 40128, + "regular": true, + "symlink": false + }, + { + "name": "debian/README.Bugs.m4", + "bytes": 12231, + "regular": true, + "symlink": false + }, + { + "name": "debian/README.C++", + "bytes": 1217, + "regular": true, + "symlink": false + }, + { + "name": "debian/README.Debian", + "bytes": 1744, + "regular": true, + "symlink": false + }, + { + "name": "debian/README.cross", + "bytes": 581, + "regular": true, + "symlink": false + }, + { + "name": "debian/README.libstdc++-baseline.in", + "bytes": 84, + "regular": true, + "symlink": false + }, + { + "name": "debian/README.maintainers", + "bytes": 6816, + "regular": true, + "symlink": false + }, + { + "name": "debian/README.snapshot", + "bytes": 1431, + "regular": true, + "symlink": false + }, + { + "name": "debian/README.source", + "bytes": 1288, + "regular": true, + "symlink": false + }, + { + "name": "debian/README.ssp", + "bytes": 1165, + "regular": true, + "symlink": false + }, + { + "name": "debian/TODO", + "bytes": 2212, + "regular": true, + "symlink": false + }, + { + "name": "debian/ada", + "bytes": 0, + "regular": false, + "symlink": false + }, + { + "name": "debian/ada/README.gnat", + "bytes": 1611, + "regular": true, + "symlink": false + }, + { + "name": "debian/ada/confirm_debian_bugs.py", + "bytes": 23372, + "regular": true, + "symlink": false + }, + { + "name": "debian/ada/gnatgcc", + "bytes": 508, + "regular": true, + "symlink": false + }, + { + "name": "debian/ada/libgnat_alihash", + "bytes": 1066, + "regular": true, + "symlink": false + }, + { + "name": "debian/ada/test_ada_source_date_epoch.sh", + "bytes": 2682, + "regular": true, + "symlink": false + }, + { + "name": "debian/bin-wrapper.in", + "bytes": 308, + "regular": true, + "symlink": false + }, + { + "name": "debian/changelog", + "bytes": 796565, + "regular": true, + "symlink": false + }, + { + "name": "debian/compat", + "bytes": 2, + "regular": true, + "symlink": false + }, + { + "name": "debian/control", + "bytes": 242454, + "regular": true, + "symlink": false + }, + { + "name": "debian/control.m4", + "bytes": 232003, + "regular": true, + "symlink": false + }, + { + "name": "debian/copyright", + "bytes": 69100, + "regular": true, + "symlink": false + }, + { + "name": "debian/copyright.in", + "bytes": 69157, + "regular": true, + "symlink": false + }, + { + "name": "debian/cpp-BV-CRB.preinst.in", + "bytes": 180, + "regular": true, + "symlink": false + }, + { + "name": "debian/cpp-BV-doc.doc-base.cpp", + "bytes": 556, + "regular": true, + "symlink": false + }, + { + "name": "debian/cpp-BV-doc.doc-base.cppint", + "bytes": 652, + "regular": true, + "symlink": false + }, + { + "name": "debian/dh_doclink", + "bytes": 345, + "regular": true, + "symlink": false + }, + { + "name": "debian/dh_rmemptydirs", + "bytes": 251, + "regular": true, + "symlink": false + }, + { + "name": "debian/dummy-man.1", + "bytes": 1188, + "regular": true, + "symlink": false + }, + { + "name": "debian/dummy.texi", + "bytes": 82, + "regular": true, + "symlink": false + }, + { + "name": "debian/g++-BV-CRB.preinst.in", + "bytes": 180, + "regular": true, + "symlink": false + }, + { + "name": "debian/gcc-BV-CRB.preinst.in", + "bytes": 263, + "regular": true, + "symlink": false + }, + { + "name": "debian/gcc-BV-doc.doc-base.gcc", + "bytes": 436, + "regular": true, + "symlink": false + }, + { + "name": "debian/gcc-BV-doc.doc-base.gccint", + "bytes": 598, + "regular": true, + "symlink": false + }, + { + "name": "debian/gcc-BV-doc.doc-base.gomp", + "bytes": 529, + "regular": true, + "symlink": false + }, + { + "name": "debian/gcc-BV-doc.doc-base.itm", + "bytes": 583, + "regular": true, + "symlink": false + }, + { + "name": "debian/gcc-BV-doc.doc-base.qmath", + "bytes": 479, + "regular": true, + "symlink": false + }, + { + "name": "debian/gcc-BV-hppa64-linux-gnu.overrides", + "bytes": 173, + "regular": true, + "symlink": false + }, + { + "name": "debian/gcc-BV-multilib.overrides", + "bytes": 57, + "regular": true, + "symlink": false + }, + { + "name": "debian/gcc-BV-source.overrides", + "bytes": 187, + "regular": true, + "symlink": false + }, + { + "name": "debian/gcc-XX-BV.1", + "bytes": 446, + "regular": true, + "symlink": false + }, + { + "name": "debian/gcc-dummy.texi", + "bytes": 963, + "regular": true, + "symlink": false + }, + { + "name": "debian/gcc-snapshot.overrides", + "bytes": 548, + "regular": true, + "symlink": false + }, + { + "name": "debian/gcc-snapshot.prerm", + "bytes": 194, + "regular": true, + "symlink": false + }, + { + "name": "debian/gcc.css", + "bytes": 4618, + "regular": true, + "symlink": false + }, + { + "name": "debian/gccgo-BV-doc.doc-base", + "bytes": 607, + "regular": true, + "symlink": false + }, + { + "name": "debian/gen-libstdc-breaks.sh", + "bytes": 2447, + "regular": true, + "symlink": false + }, + { + "name": "debian/gfortran-BV-CRB.preinst.in", + "bytes": 190, + "regular": true, + "symlink": false + }, + { + "name": "debian/gfortran-BV-doc.doc-base", + "bytes": 478, + "regular": true, + "symlink": false + }, + { + "name": "debian/gm2-BV-doc.doc-base", + "bytes": 450, + "regular": true, + "symlink": false + }, + { + "name": "debian/gnat-BV-doc.doc-base.rm", + "bytes": 553, + "regular": true, + "symlink": false + }, + { + "name": "debian/gnat-BV-doc.doc-base.style", + "bytes": 550, + "regular": true, + "symlink": false + }, + { + "name": "debian/gnat-BV-doc.doc-base.ug", + "bytes": 568, + "regular": true, + "symlink": false + }, + { + "name": "debian/gnat.1", + "bytes": 1842, + "regular": true, + "symlink": false + }, + { + "name": "debian/lib32asan8.symbols", + "bytes": 374, + "regular": true, + "symlink": false + }, + { + "name": "debian/lib32gccLC.postinst", + "bytes": 199, + "regular": true, + "symlink": false + }, + { + "name": "debian/lib32stdc++CXX.postinst", + "bytes": 203, + "regular": true, + "symlink": false + }, + { + "name": "debian/lib64asan8.symbols", + "bytes": 249, + "regular": true, + "symlink": false + }, + { + "name": "debian/lib64gccLC.postinst", + "bytes": 199, + "regular": true, + "symlink": false + }, + { + "name": "debian/lib64stdc++CXX.postinst", + "bytes": 203, + "regular": true, + "symlink": false + }, + { + "name": "debian/libasan.symbols.16", + "bytes": 1821, + "regular": true, + "symlink": false + }, + { + "name": "debian/libasan.symbols.32", + "bytes": 2000, + "regular": true, + "symlink": false + }, + { + "name": "debian/libasan.symbols.64", + "bytes": 378, + "regular": true, + "symlink": false + }, + { + "name": "debian/libasan.symbols.common", + "bytes": 69440, + "regular": true, + "symlink": false + }, + { + "name": "debian/libasan8.symbols", + "bytes": 1388, + "regular": true, + "symlink": false + }, + { + "name": "debian/libatomic.symbols", + "bytes": 113, + "regular": true, + "symlink": false + }, + { + "name": "debian/libcc1-0.symbols", + "bytes": 2846, + "regular": true, + "symlink": false + }, + { + "name": "debian/libgcc-s.symbols", + "bytes": 1268, + "regular": true, + "symlink": false + }, + { + "name": "debian/libgcc-s2.symbols.m68k", + "bytes": 4547, + "regular": true, + "symlink": false + }, + { + "name": "debian/libgcc-s4.symbols.hppa", + "bytes": 2867, + "regular": true, + "symlink": false + }, + { + "name": "debian/libgcc.symbols.aeabi", + "bytes": 1904, + "regular": true, + "symlink": false + }, + { + "name": "debian/libgccjit0.symbols", + "bytes": 745, + "regular": true, + "symlink": false + }, + { + "name": "debian/libgfortran.symbols", + "bytes": 260, + "regular": true, + "symlink": false + }, + { + "name": "debian/libgm2.symbols", + "bytes": 46587, + "regular": true, + "symlink": false + }, + { + "name": "debian/libgomp.symbols", + "bytes": 815, + "regular": true, + "symlink": false + }, + { + "name": "debian/libgphobos.symbols", + "bytes": 72, + "regular": true, + "symlink": false + }, + { + "name": "debian/libgphobos4.symbols.amd64", + "bytes": 1945824, + "regular": true, + "symlink": false + }, + { + "name": "debian/libhwasan0.symbols", + "bytes": 7890, + "regular": true, + "symlink": false + }, + { + "name": "debian/libitm.symbols", + "bytes": 77, + "regular": true, + "symlink": false + }, + { + "name": "debian/liblsan0.symbols", + "bytes": 5967, + "regular": true, + "symlink": false + }, + { + "name": "debian/libobjc.symbols", + "bytes": 357, + "regular": true, + "symlink": false + }, + { + "name": "debian/libobjc.symbols.common", + "bytes": 6631, + "regular": true, + "symlink": false + }, + { + "name": "debian/libobjc.symbols.gc", + "bytes": 14359, + "regular": true, + "symlink": false + }, + { + "name": "debian/libquadmath.symbols", + "bytes": 110, + "regular": true, + "symlink": false + }, + { + "name": "debian/libstdc++-BV-doc.doc-base", + "bytes": 562, + "regular": true, + "symlink": false + }, + { + "name": "debian/libstdc++-BV-doc.overrides", + "bytes": 263, + "regular": true, + "symlink": false + }, + { + "name": "debian/libstdc++.symbols", + "bytes": 2164, + "regular": true, + "symlink": false + }, + { + "name": "debian/libstdc++CXX.prerm", + "bytes": 435, + "regular": true, + "symlink": false + }, + { + "name": "debian/libtsan2.symbols", + "bytes": 75140, + "regular": true, + "symlink": false + }, + { + "name": "debian/libubsan1.symbols", + "bytes": 6018, + "regular": true, + "symlink": false + }, + { + "name": "debian/libvtv0.symbols", + "bytes": 6163, + "regular": true, + "symlink": false + }, + { + "name": "debian/libx32asan8.symbols", + "bytes": 224, + "regular": true, + "symlink": false + }, + { + "name": "debian/locale-gen", + "bytes": 1163, + "regular": true, + "symlink": false + }, + { + "name": "debian/logwatch.sh", + "bytes": 1983, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches", + "bytes": 0, + "regular": false, + "symlink": false + }, + { + "name": "debian/patches/0001-Ada-remove-conversions-with-C-struct-timeval-from-GN.diff", + "bytes": 4294, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/0002-Ada-remove-C-conversions-with-C-struct-timespec-from.diff", + "bytes": 4554, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/0003-Ada-define-time_t-timeval-timespec-C-types-in-a-sing.diff", + "bytes": 127291, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/0003-Ada-remove-conversions-with-C-time_t-from-System.OS_.diff", + "bytes": 2189, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/0005-Ada-import-nanosleep-from-System.OS_Primitives.Timed_.diff", + "bytes": 2087, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/0006-Ada-select-64-bits-time-functions-from-GNU-libc-when-.diff", + "bytes": 9481, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/ada-749574.diff", + "bytes": 4994, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/ada-armel-libatomic.diff", + "bytes": 2092, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/ada-gcc-name.diff", + "bytes": 10800, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/ada-gnattools-cross.diff", + "bytes": 9635, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/ada-kfreebsd.diff", + "bytes": 2879, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/ada-lib-info-source-date-epoch.diff", + "bytes": 4459, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/ada-link-lib.diff", + "bytes": 6044, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/ada-nobiarch-check.diff", + "bytes": 902, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/ada-perl-shebang.diff", + "bytes": 327, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/ada-sjlj.diff", + "bytes": 15733, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/ada-verbose.diff", + "bytes": 2233, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/alpha-ieee-doc.diff", + "bytes": 1087, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/alpha-ieee.diff", + "bytes": 504, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/alpha-no-ev4-directive.diff", + "bytes": 815, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/arc-stddef.diff", + "bytes": 783, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/arm-multilib-defaults.diff", + "bytes": 2704, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/arm-multilib-soft-cross.diff", + "bytes": 1177, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/arm-multilib-soft-float.diff", + "bytes": 1204, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/arm-multilib-soft.diff", + "bytes": 1088, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/arm-multilib-softfp-cross.diff", + "bytes": 1241, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/arm-multilib-softfp.diff", + "bytes": 1261, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/asan-allocator-base.diff", + "bytes": 999, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/bootstrap-no-unneeded-libs.diff", + "bytes": 1234, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/canonical-cpppath.diff", + "bytes": 768, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/config-ml.diff", + "bytes": 1667, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/cross-biarch.diff", + "bytes": 4537, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/cross-fixes.diff", + "bytes": 1758, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/cross-install-location.diff", + "bytes": 22890, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/cross-no-locale-include.diff", + "bytes": 580, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/cuda-float128.diff", + "bytes": 2436, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/disable-gdc-tests.diff", + "bytes": 529, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/dwarf5-revert-default-doc.diff", + "bytes": 541, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/dwarf5-revert-default.diff", + "bytes": 886, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/g++-multiarch-incdir.diff", + "bytes": 5131, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gcc-arm-disable-guality-tests.diff", + "bytes": 1164, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gcc-as-needed-gold.diff", + "bytes": 4492, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gcc-as-needed.diff", + "bytes": 11789, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gcc-auto-build.diff", + "bytes": 592, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gcc-distro-specs-ubuntu-doc.diff", + "bytes": 3428, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gcc-distro-specs.diff", + "bytes": 17113, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gcc-driver-extra-langs.diff", + "bytes": 1111, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gcc-foffload-default.diff", + "bytes": 4196, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gcc-force-cross-layout.diff", + "bytes": 2090, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gcc-gfdl-build.diff", + "bytes": 1741, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gcc-hash-style-gnu.diff", + "bytes": 5837, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gcc-ice-apport.diff", + "bytes": 1177, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gcc-ice-dump.diff", + "bytes": 3388, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gcc-multiarch.diff", + "bytes": 11141, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gcc-multilib-multiarch.diff", + "bytes": 5721, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gcc-search-prefixed-as-ld.diff", + "bytes": 1366, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gcc-target-include-asm.diff", + "bytes": 791, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gcc-textdomain.diff", + "bytes": 2712, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gcc-verbose-lto-link.diff", + "bytes": 358, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gcc-vhdl.diff", + "bytes": 605, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gccrs-bootstrap-mipsel.diff", + "bytes": 583, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gdc-dynamic-link-phobos.diff", + "bytes": 594, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gdc-multiarch.diff", + "bytes": 492, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gdc-texinfo.diff", + "bytes": 1285, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/git-doc-updates.diff", + "bytes": 1766, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/git-updates.diff", + "bytes": 464763, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gm2-bootstrap-compare.diff", + "bytes": 616, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/gm2-texinfo.diff", + "bytes": 711, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/go-testsuite.diff", + "bytes": 507, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/hppa64-libgcov-fallback.diff", + "bytes": 348, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/hurd-amd64.diff", + "bytes": 4911, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/hurd-changes.diff", + "bytes": 649, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/hurd-multiarch.diff", + "bytes": 738, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/hurd-multilib-multiarch.diff", + "bytes": 1264, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/ia64-disable-selective-scheduling.diff", + "bytes": 517, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/ignore-pie-specs-when-not-enabled.diff", + "bytes": 1585, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/kfreebsd-decimal-float.diff", + "bytes": 1213, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libasan-sparc.diff", + "bytes": 5174, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libffi-race-condition.diff", + "bytes": 1107, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libffi-ro-eh_frame_sect.diff", + "bytes": 388, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libgo-cleanfiles.diff", + "bytes": 913, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libgo-hurd-hack.diff", + "bytes": 1043, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libgo-revert-timeout-exp.diff", + "bytes": 292, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libgo-setcontext-config.diff", + "bytes": 675, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libgo-testsuite.diff", + "bytes": 2413, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libgomp-kfreebsd-testsuite.diff", + "bytes": 292, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libgomp-omp_h-multilib.diff", + "bytes": 904, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libiberty-sha1-1.diff", + "bytes": 14327, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libiberty-sha1-2.diff", + "bytes": 7283, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libitm-no-fortify-source.diff", + "bytes": 465, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libphobos-zlib.diff", + "bytes": 2141, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libsanitizer-no-crypt.diff", + "bytes": 5689, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libsanitizer-timebits.diff", + "bytes": 792, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libstdc++-doclink.diff", + "bytes": 2356, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libstdc++-doxygen-SOURCE_DATE_EPOCH.diff", + "bytes": 565, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libstdc++-hurd.diff", + "bytes": 1741, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libstdc++-man-3cxx.diff", + "bytes": 2587, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libstdc++-no-testsuite.diff", + "bytes": 513, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libstdc++-nothumb-check.diff", + "bytes": 1490, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libstdc++-pic.diff", + "bytes": 3765, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libstdc++-pythondir.diff", + "bytes": 819, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/libstdc++-test-installed.diff", + "bytes": 2574, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/musl-ssp.diff", + "bytes": 905, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/newlib-amdgcn-locks.diff", + "bytes": 13055, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/note-gnu-stack.diff", + "bytes": 3266, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/pr100067-revert.diff", + "bytes": 5506, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/pr104290-followup.diff", + "bytes": 478, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/pr107475.diff", + "bytes": 370, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/pr110934.diff", + "bytes": 3661, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/pr113030.diff", + "bytes": 2117, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/pr11897.diff", + "bytes": 2212, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/pr39491.diff", + "bytes": 3067, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/pr66368.diff", + "bytes": 875, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/pr67590.diff", + "bytes": 1197, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/pr67899.diff", + "bytes": 941, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/pr79724-revert.diff", + "bytes": 722, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/pr81829.diff", + "bytes": 8647, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/pr87808.diff", + "bytes": 1684, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/pr88552.diff", + "bytes": 1418, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/pr94253.diff", + "bytes": 2042, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/pr99832-distro.diff", + "bytes": 1366, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/rename-info-files.diff", + "bytes": 26988, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/rust-enabled.diff", + "bytes": 744, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/skip-bootstrap-multilib.diff", + "bytes": 844, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/sparc64-biarch-long-double-128.diff", + "bytes": 1391, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/sys-auxv-header.diff", + "bytes": 1117, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/t-libunwind-elf-Wl-z-defs.diff", + "bytes": 575, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/testsuite-glibc-warnings.diff", + "bytes": 741, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/testsuite-hardening-format.diff", + "bytes": 11357, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/testsuite-hardening-printf-types.diff", + "bytes": 23599, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/testsuite-hardening-updates.diff", + "bytes": 4558, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/toplevel-add-gprofng.diff", + "bytes": 31074, + "regular": true, + "symlink": false + }, + { + "name": "debian/patches/toplevel-add-libsframe.diff", + "bytes": 2679, + "regular": true, + "symlink": false + }, + { + "name": "debian/porting.html", + "bytes": 1002, + "regular": true, + "symlink": false + }, + { + "name": "debian/reduce-test-diff.awk", + "bytes": 355, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules", + "bytes": 2984, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.conf", + "bytes": 54432, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d", + "bytes": 0, + "regular": false, + "symlink": false + }, + { + "name": "debian/rules.d/binary-ada.mk", + "bytes": 10591, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-base.mk", + "bytes": 1374, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-cpp.mk", + "bytes": 3959, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-cxx.mk", + "bytes": 3944, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-d.mk", + "bytes": 9211, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-fortran.mk", + "bytes": 9540, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-gcc.mk", + "bytes": 11687, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-gcn.mk", + "bytes": 4540, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-go.mk", + "bytes": 12476, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-hppa64.mk", + "bytes": 1278, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-libasan.mk", + "bytes": 2583, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-libatomic.mk", + "bytes": 1903, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-libcc1.mk", + "bytes": 755, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-libgcc.mk", + "bytes": 11530, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-libgccjit.mk", + "bytes": 2588, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-libgomp.mk", + "bytes": 1964, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-libhwasan.mk", + "bytes": 2656, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-libitm.mk", + "bytes": 1877, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-liblsan.mk", + "bytes": 2355, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-libobjc.mk", + "bytes": 4134, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-libquadmath.mk", + "bytes": 1908, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-libssp.mk", + "bytes": 4201, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-libstdcxx.mk", + "bytes": 17613, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-libtsan.mk", + "bytes": 2376, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-libubsan.mk", + "bytes": 2392, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-libvtv.mk", + "bytes": 2137, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-m2.mk", + "bytes": 9687, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-nof.mk", + "bytes": 1383, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-nvptx.mk", + "bytes": 2910, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-objc.mk", + "bytes": 3124, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-objcxx.mk", + "bytes": 3129, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-rust.mk", + "bytes": 9777, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-snapshot.mk", + "bytes": 8326, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-softfloat.mk", + "bytes": 987, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-source.mk", + "bytes": 1829, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.d/binary-toolchain.mk", + "bytes": 8271, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.defs", + "bytes": 70194, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.parameters", + "bytes": 928, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.patch", + "bytes": 12473, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.sonames", + "bytes": 4270, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.source", + "bytes": 339, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules.unpack", + "bytes": 6011, + "regular": true, + "symlink": false + }, + { + "name": "debian/rules2", + "bytes": 97853, + "regular": true, + "symlink": false + }, + { + "name": "debian/runcheck.sh", + "bytes": 305, + "regular": true, + "symlink": false + }, + { + "name": "debian/source", + "bytes": 0, + "regular": false, + "symlink": false + }, + { + "name": "debian/source/format", + "bytes": 12, + "regular": true, + "symlink": false + }, + { + "name": "debian/source/lintian-overrides", + "bytes": 249, + "regular": true, + "symlink": false + }, + { + "name": "debian/tests", + "bytes": 0, + "regular": false, + "symlink": false + }, + { + "name": "debian/tests/control", + "bytes": 516, + "regular": true, + "symlink": false + }, + { + "name": "debian/tests/libc-link", + "bytes": 585, + "regular": true, + "symlink": false + }, + { + "name": "debian/tests/libgfortran-link", + "bytes": 476, + "regular": true, + "symlink": false + }, + { + "name": "debian/tests/libgm2-link", + "bytes": 496, + "regular": true, + "symlink": false + }, + { + "name": "debian/tests/libgnat-link", + "bytes": 512, + "regular": true, + "symlink": false + }, + { + "name": "debian/tests/libgo-link", + "bytes": 459, + "regular": true, + "symlink": false + }, + { + "name": "debian/tests/libgomp-link", + "bytes": 1617, + "regular": true, + "symlink": false + }, + { + "name": "debian/tests/libgphobos-link", + "bytes": 666, + "regular": true, + "symlink": false + }, + { + "name": "debian/tests/libstdcxx-link", + "bytes": 491, + "regular": true, + "symlink": false + }, + { + "name": "debian/tests/runtime-libs", + "bytes": 582, + "regular": true, + "symlink": false + }, + { + "name": "debian/tests/shlib-build", + "bytes": 884, + "regular": true, + "symlink": false + }, + { + "name": "debian/usage-wrapper.py", + "bytes": 13822, + "regular": true, + "symlink": false + }, + { + "name": "debian/watch", + "bytes": 112, + "regular": true, + "symlink": false + } +] diff --git a/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules.defs.txt b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules.defs.txt new file mode 100644 index 0000000000..f7163f2188 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules.defs.txt @@ -0,0 +1,2366 @@ +# -*- makefile -*- +# definitions used in more than one Makefile / rules file + +# common vars +COMMA = , +SPACE = $(EMPTY) $(EMPTY) +SHELL = /bin/bash -e # brace expansion used in rules file +srcdir = $(CURDIR)/src +builddir = $(CURDIR)/build +builddir_jit = $(CURDIR)/build-jit +builddir_nvptx = $(CURDIR)/build-nvptx +builddir_gcn = $(CURDIR)/build-gcn +builddir_hppa64 = $(CURDIR)/build-hppa64 +stampdir = stamps + +distribution := $(shell lsb_release -is) +distrelease := $(shell lsb_release -cs) +derivative := $(shell if dpkg-vendor --derives-from Ubuntu; then echo Ubuntu; \ + elif dpkg-vendor --derives-from Debian; then echo Debian; \ + else echo Unknown; fi) + +# On non official archives, "lsb_release -cs" default to "n/a". Assume +# sid in that case +ifeq ($(distrelease),n/a) +distrelease := sid +endif + +on_buildd := $(shell [ -f /CurrentlyBuilding -o "$$LOGNAME" = buildd ] && echo yes) + +# creates {srcdir,builddir}_hppa64 +$(foreach x,srcdir builddir,$(foreach target,hppa64,$(eval \ + $(x)_$(target) := $($(x))-$(target)))) + +# for architecture dependent variables and changelog vars +vafilt = $(subst $(2)=,,$(filter $(2)=%,$(1))) +# for rules.sonames +vafilt_defined = 1 + +dpkg_target_vars := $(shell (dpkg-architecture | grep -q DEB_TARGET) && echo yes) +ifeq ($(dpkg_target_vars),yes) + DEB_TARGET_ARCH= + DEB_TARGET_ARCH_BITS= + DEB_TARGET_ARCH_CPU= + DEB_TARGET_ARCH_ENDIAN= + DEB_TARGET_ARCH_OS= + DEB_TARGET_GNU_CPU= + DEB_TARGET_GNU_SYSTEM= + DEB_TARGET_GNU_TYPE= + DEB_TARGET_MULTIARCH= +endif + +DPKG_VARS := $(shell dpkg-architecture) +ifeq ($(dpkg_target_vars),yes) + DPKG_VARS := $(filter-out DEB_TARGET_%, $(DPKG_VARS)) +endif +DEB_BUILD_ARCH ?= $(call vafilt,$(DPKG_VARS),DEB_BUILD_ARCH) +DEB_BUILD_GNU_TYPE ?= $(call vafilt,$(DPKG_VARS),DEB_BUILD_GNU_TYPE) +DEB_BUILD_MULTIARCH ?= $(call vafilt,$(DPKG_VARS),DEB_BUILD_MULTIARCH) +DEB_HOST_ARCH ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_ARCH) +DEB_HOST_GNU_CPU ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_CPU) +DEB_HOST_GNU_SYSTEM ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_SYSTEM) +DEB_HOST_GNU_TYPE ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_TYPE) +DEB_HOST_MULTIARCH ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_MULTIARCH) + +ifeq ($(derivative),Ubuntu) + ifeq (,$(filter $(distrelease), precise trusty)) + ifeq ($(DEB_BUILD_GNU_TYPE),i486-linux-gnu) + DEB_BUILD_GNU_TYPE = i686-linux-gnu + endif + ifeq ($(DEB_HOST_GNU_TYPE),i486-linux-gnu) + DEB_HOST_GNU_TYPE = i686-linux-gnu + endif + endif +else + ifneq (,$(filter $(distrelease),jessie)) + ifeq ($(DEB_HOST_GNU_TYPE),i486-linux-gnu) + DEB_HOST_GNU_TYPE = i586-linux-gnu + endif + else + # stretch and newer ... + DEB_BUILD_GNU_TYPE := $(subst i586,i686,$(DEB_BUILD_GNU_TYPE)) + DEB_HOST_GNU_TYPE := $(subst i586,i686,$(DEB_HOST_GNU_TYPE)) + endif +endif + +CHANGELOG_VARS := $(shell dpkg-parsechangelog | \ + sed -n 's/ /_/g;/^[^_]/s/^\([^:]*\):_\(.*\)/\1=\2/p') + +# the name of the source package +PKGSOURCE := $(call vafilt,$(CHANGELOG_VARS),Source) +# those are required here too +SOURCE_VERSION := $(call vafilt,$(CHANGELOG_VARS),Version) +DEB_VERSION := $(strip $(shell echo $(SOURCE_VERSION) | \ + sed -e 's/.*://' -e 's/ds[0-9][0-9]*//')) +# epoch used for gcc versions up to 3.3.x, now used for some remaining +# libraries: libgcc1, libobjc1 +EPOCH := 1 +DEB_EVERSION := $(EPOCH):$(DEB_VERSION) +BASE_VERSION := $(shell echo $(DEB_VERSION) | sed -e 's/\([0-9][0-9]*\).*-.*/\1/') + +NJOBS := +USE_CPUS := 1 +ifneq (,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS)))) + USE_CPUS := $(subst parallel=,,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS)))) + NJOBS := -j $(USE_CPUS) + NJOBS_TESTS := -j $(USE_CPUS) +endif + +CPUS_LTOLINK := $(if $(filter 1, $(USE_CPUS)),1,$(shell expr $(USE_CPUS) / 2)) +ifeq ($(derivative)-$(DEB_BUILD_ARCH),Ubuntu-ppc64el) + CPUS_LTOLINK := 1 +else ifeq ($(derivative)-$(DEB_BUILD_ARCH),Debian-sparc64) + CPUS_LTOLINK := $(shell if test $(CPUS_LTOLINK) -gt 4; then echo 4; else echo $(CPUS_LTOLINK); fi) +endif + +ifneq (,$(findstring gcc-snapshot, $(PKGSOURCE))) + single_package = yes + trunk_build = yes +else ifneq (,$(findstring gcc-toolchain, $(PKGSOURCE))) + single_package = yes + with_binutils = yes +else + # --program-suffix=-$(BASE_VERSION) + versioned_packages := yes +endif + +# push glibc stack traces into stderr +export LIBC_FATAL_STDERR_=1 + +# --------------------------------------------------------------------------- +# set target +# - GNU triplet via DEB_TARGET_GNU_TYPE +# - Debian arch in debian/target +# - Debian arch via DEB_GCC_TARGET or GCC_TARGET +# +# alias +ifdef GCC_TARGET + DEB_GCC_TARGET := $(GCC_TARGET) +endif +ifdef DEB_TARGET_GNU_TYPE + TARGET_VARS := $(shell dpkg-architecture -f -t$(DEB_TARGET_GNU_TYPE) 2>/dev/null) +else + # allow debian/target to be used instead of DEB_GCC_TARGET - this was requested + # by toolchain-source maintainer + DEBIAN_TARGET_FILE := $(strip $(if $(wildcard debian/target),$(shell cat debian/target 2>/dev/null))) + ifndef DEB_TARGET_ARCH + ifneq (,$(DEBIAN_TARGET_FILE)) + DEB_TARGET_ARCH := $(DEBIAN_TARGET_FILE) + else + ifdef DEB_GCC_TARGET + DEB_TARGET_ARCH := $(DEB_GCC_TARGET) + else + DEB_TARGET_ARCH := $(DEB_HOST_ARCH) + endif + endif + endif + TARGET_VARS := $(shell dpkg-architecture -f -a$(DEB_TARGET_ARCH) 2>/dev/null) +endif +ifeq ($(dpkg_target_vars),yes) + TARGET_VARS := $(filter-out DEB_TARGET_%, $(TARGET_VARS)) +endif + +DEB_TARGET_ARCH := $(call vafilt,$(TARGET_VARS),DEB_HOST_ARCH) +DEB_TARGET_ARCH_OS := $(call vafilt,$(TARGET_VARS),DEB_HOST_ARCH_OS) +DEB_TARGET_ARCH_CPU := $(call vafilt,$(TARGET_VARS),DEB_HOST_ARCH_CPU) +DEB_TARGET_GNU_CPU := $(call vafilt,$(TARGET_VARS),DEB_HOST_GNU_CPU) +DEB_TARGET_GNU_TYPE := $(call vafilt,$(TARGET_VARS),DEB_HOST_GNU_TYPE) +DEB_TARGET_GNU_SYSTEM := $(call vafilt,$(TARGET_VARS),DEB_HOST_GNU_SYSTEM) +DEB_TARGET_MULTIARCH := $(call vafilt,$(TARGET_VARS),DEB_HOST_MULTIARCH) +DEB_TARGET_ARCH_ABI := $(call vafilt,$(TARGET_VARS),DEB_HOST_ARCH_ABI) +DEB_TARGET_ARCH_BITS := $(call vafilt,$(TARGET_VARS),DEB_HOST_ARCH_BITS) +DEB_TARGET_ARCH_ENDIAN := $(call vafilt,$(TARGET_VARS),DEB_HOST_ARCH_ENDIAN) +DEB_TARGET_ARCH_LIBC := $(call vafilt,$(TARGET_VARS),DEB_HOST_ARCH_LIBC) +export DEB_TARGET_ARCH DEB_TARGET_ARCH_ABI DEB_TARGET_ARCH_BITS \ + DEB_TARGET_ARCH_CPU DEB_TARGET_ARCH_OS DEB_TARGET_ARCH_ENDIAN \ + DEB_TARGET_ARCH_LIBC DEB_TARGET_GNU_CPU DEB_TARGET_GNU_TYPE \ + DEB_TARGET_GNU_SYSTEM DEB_TARGET_MULTIARCH + +ifneq (,$(filter $(distrelease),stretch)) + DEB_TARGET_GNU_TYPE := $(subst i586,i686,$(DEB_TARGET_GNU_TYPE)) + i586_symlinks = $(if $(findstring i686,$(DEB_TARGET_GNU_TYPE)),yes) +endif + +ifeq ($(DEB_TARGET_ARCH),) + $(error Invalid architecure.) +endif + +# Force this, people get confused about the default. See #760770. +override with_deps_on_target_arch_pkgs := + +# including unversiond symlinks for binaries +#with_unversioned = yes + +# package metadata information +ifeq (,$(ELF_PACKAGE_METADATA)) + ELF_PACKAGE_METADATA := $(subst $(SPACE),,{ \ + "type":"deb", \ + "os":"$(shell awk -F= '/^ID=/ {print $$2}' /etc/os-release)", \ + "name":"$(PKGSOURCE)", \ + "version":"$(DEB_VERSION)", \ + "architecture":"$(DEB_HOST_ARCH)" \ + $(if $(DEB_BUILD_DEBUG_INFO_URL),$(COMMA)"debugInfoUrl":"$(DEB_BUILD_DEBUG_INFO_URL)") \ + }) + export ELF_PACKAGE_METADATA +endif + +# --------------------------------------------------------------------------- +# cross-compiler config +ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE)) + ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_TARGET_GNU_TYPE)) + # cross building a cross compiler, untested. + DEB_CROSS = yes + build_type = cross-build-cross + else + # cross building the native compiler + build_type = cross-build-native + endif +else + ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_TARGET_GNU_TYPE)) + # cross compiler, sets WITH_SYSROOT on it's own + DEB_CROSS = yes + build_type = build-cross + else ifeq ($(FORCE_CROSS_LAYOUT),yes) + # a native build with a cross layout + DEB_CROSS = yes + build_type = build-cross + else + # native build + build_type = build-native + endif +endif + +# --------------------------------------------------------------------------- +# cross compiler support +ifeq ($(DEB_CROSS),yes) + # TARGET: Alias to DEB_TARGET_ARCH (Debian arch name) + # TP: Target Prefix. Used primarily as a prefix for cross tool + # names (e.g. powerpc-linux-gcc). + # TS: Target Suffix. Used primarily at the end of cross compiler + # package names (e.g. gcc-powerpc). + # LS: Library Suffix. Used primarily at the end of cross compiler + # library package names (e.g. libgcc-powerpc-cross). + # AQ: Arch Qualifier. Used for cross-arch dependencies + DEB_TARGET_ALIAS ?= $(DEB_TARGET_GNU_TYPE) + TARGET := $(DEB_TARGET_ARCH) + TP := $(subst _,-,$(DEB_TARGET_GNU_TYPE))- + TS := -$(subst _,-,$(DEB_TARGET_ALIAS)) + LS := -$(subst _,-,$(DEB_TARGET_ARCH))-cross + AQ := + + cross_bin_arch := -$(subst _,-,$(DEB_TARGET_ALIAS)) + cross_lib_arch := -$(subst _,-,$(DEB_TARGET_ARCH))-cross + cmd_prefix := $(DEB_TARGET_GNU_TYPE)- + + TARGET_ALIAS := $(DEB_TARGET_ALIAS) + + lib_binaries := indep_binaries + cross_shlibdeps = DEB_HOST_ARCH=$(TARGET) ARCH=$(DEB_TARGET_ARCH) MAKEFLAGS="CC=something" + cross_gencontrol = DEB_HOST_ARCH=$(TARGET) + cross_makeshlibs = DEB_HOST_ARCH=$(TARGET) + cross_clean = DEB_HOST_ARCH=$(TARGET) +else + TARGET_ALIAS := $(DEB_TARGET_GNU_TYPE) + + ifeq ($(TARGET_ALIAS),i386-gnu) + TARGET_ALIAS := i586-gnu + endif + + ifeq ($(single_package),yes) + cmd_prefix := + unprefixed_names := + else + cmd_prefix := $(DEB_TARGET_GNU_TYPE)- + unprefixed_names := yes + endif + + #ifeq ($(TARGET_ALIAS),i486-linux-gnu) + # TARGET_ALIAS := i686-linux-gnu + #endif + + TARGET_ALIAS := $(subst i386,i486,$(TARGET_ALIAS)) + + # configure as linux-gnu, not linux + #ifeq ($(findstring linux,$(TARGET_ALIAS))/$(findstring linux-gnu,$(TARGET_ALIAS)),linux/) + # TARGET_ALIAS := $(TARGET_ALIAS)-gnu + #endif + + # configure as linux, not linux-gnu + #TARGET_ALIAS := $(subst linux-gnu,linux,$(TARGET_ALIAS)) + + lib_binaries := arch_binaries + cross_shlibdeps := + cross_gencontrol := + cross_makeshlibs := + # FIXME: Ignore missing symbols for a first build ... + cross_makeshlibs := - + cross_clean := +endif + +printarch: + @echo DEB_TARGET_ARCH: $(DEB_TARGET_ARCH) + @echo DEB_TARGET_ARCH_OS: $(DEB_TARGET_ARCH_OS) + @echo DEB_TARGET_ARCH_CPU: $(DEB_TARGET_ARCH_CPU) + @echo DEB_TARGET_GNU_SYSTEM: $(DEB_TARGET_GNU_SYSTEM) + @echo DEB_TARGET_MULTIARCH: $(DEB_TARGET_MULTIARCH) + @echo MULTIARCH_CONFARG: $(MULTIARCH_CONFARG) + @echo TARGET_ALIAS: $(TARGET_ALIAS) + @echo TP: $(TP) + @echo TS: $(TS) + +# reaching the 50GB limit ... +ifeq ($(derivative)-$(build_type),Ubuntu-build-native) + ifneq (,$(filter $(DEB_HOST_ARCH),amd64)) + save_disk_space = yes + endif +endif + +# ------------------------------------------------------------------- +# bootstrap options +ifdef WITH_BOOTSTRAP + # "yes" is the default and causes a 3-stage bootstrap. + # "off" runs a complete build with --disable-bootstrap + # "no" means to just build the first stage, and not create the stage1 + # directory. + # "lean" means a lean 3-stage bootstrap, i.e. delete each stage when no + # longer needed. + with_bootstrap = $(WITH_BOOTSTRAP) +endif + +# gcc-snapshot ... +ifeq ($(trunk_build),yes) + ifeq ($(build_type),build-native) + ifneq (,$(filter $(DEB_HOST_ARCH), amd64 i386 armhf arm64 powerpc ppc64 ppc64el riscv64 s390x sparc64)) + with_bootstrap := profiled + endif + endif + + # Enable LTO only for 64bit builds + ifeq ($(DEB_BUILD_ARCH_BITS)-$(DEB_HOST_ARCH_BITS),64-64) + with_lto_build := yes + endif + + # FIXME, disable LTO build for some archs + ifneq (,$(filter $(DEB_HOST_ARCH), alpha ia64 mips64el hurd-amd64)) + with_lto_build := yes + endif +endif + +ifneq ($(trunk_build),yes) + ifeq ($(build_type),build-native) + ifeq (,$(DEB_STAGE)) + ifeq (,$(filter $(distrelease), jessie stretch precise trusty xenial bionic)) + ifneq (,$(filter $(DEB_HOST_ARCH), amd64 i386 armhf arm64 powerpc ppc64 ppc64el s390x sparc64)) + with_bootstrap := profiled + endif + endif + endif + endif + + # Enable LTO only for 64bit builds + ifeq ($(DEB_BUILD_ARCH_BITS)-$(DEB_HOST_ARCH_BITS),64-64) + with_lto_build := yes + endif + + # FIXME: hppa has issues with parsing the jobs output. + # FIXME: m68k and sh4 running on simulators, don't care ... + # FIXME: buildds not powerful ebough: mips* + # FIXME: just let it build, takes too long: hurd-amd64 hurd-i386 + # FIXME: not yet tried to build: alpha + # FIXME: ia64, see https://gcc.gnu.org/PR98504 + # FIXME: mips64el requested by syq + ifneq (,$(filter $(DEB_HOST_ARCH), alpha hppa ia64 m68k mips mipsel mips64el sh4 sparc64 hurd-amd64 hurd-i386)) + with_lto_build := + endif + + # FIXME: newer binutils needed? + ifneq (,$(filter $(distrelease),stretch precise trusty xenial bionic focal)) + with_bootstrap := + with_lto_build := + endif +endif + +#with_lto_build := disabled for GCC 13 + +ifneq ($(findstring nostrap, $(DEB_BUILD_OPTIONS)),) + with_bootstrap := off +endif + +ifneq ($(findstring nolto, $(DEB_BUILD_OPTIONS)),) + with_lto_build := +endif + +ifneq ($(findstring nopgo, $(DEB_BUILD_OPTIONS)),) + ifeq ($(with_bootstrap),profiled) + with_bootstrap := + endif +endif + +ifneq ($(findstring gccdebug, $(DEB_BUILD_OPTIONS)),) + with_bootstrap := off + with_lto_build := + DEB_BUILD_OPTIONS := $(DEB_BUILD_OPTIONS) nostrip + export DEB_BUILD_OPTIONS +endif + +ifeq ($(build_type),build-native) + usage_stats = yes + ifeq ($(derivative),Ubuntu) + no_usage_archs = i386 + else ifeq ($(derivative),Debian) + no_usage_archs = alpha hppa ia64 m68k mipsel mips64el sh4 sparc64 x32 \ + hurd-amd64 hurd-i386 kfreebsd-amd64 kfreebsd-i386 + endif + ifneq (,$(filter $(DEB_HOST_ARCH),$(no_usage_archs))) + usage_stats = + endif +endif +usage_stats = disabled for release builds + +# ------------------------------------------------------------------- +# stage options +ifdef DEB_STAGE + with_cdev := yes + separate_lang := yes + # "stage1" is minimal compiler with static libgcc + # "stage2" is minimal compiler with shared libgcc + # "rtlibs" is a subset of target libraries, without compilers + ifeq ($(DEB_STAGE),stage1) + with_shared_libgcc := no + endif + ifeq ($(DEB_STAGE),stage2) + with_libgcc := yes + with_shared_libgcc := yes + endif + ifeq ($(DEB_STAGE),rtlibs) + with_rtlibs := libgcc libgomp libstdc++ libgfortran libquadmath + ifeq ($(DEB_CROSS),yes) + LS := + TS := + cross_lib_arch := + endif + endif +endif + +ifeq ($(BACKPORT),true) + with_dev := no + with_source := yes + with_base_only := yes +endif + +# ------------------------------------------------------------------- +# sysroot options +ifdef WITH_SYSROOT + with_sysroot = $(WITH_SYSROOT) +endif +ifdef WITH_BUILD_SYSROOT + with_build_sysroot = $(WITH_BUILD_SYSROOT) +endif + +# ------------------------------------------------------------------- +# for components configuration + +# lang= overwrites all of nolang=, overwrites all of WITHOUT_LANG + +DEB_LANG_OPT := $(filter lang=%,$(DEB_BUILD_OPTIONS)) +DEB_LANG := $(strip $(subst $(COMMA), ,$(patsubst lang=%,%,$(DEB_LANG_OPT)))) +DEB_NOLANG_OPT := $(filter nolang=%,$(DEB_BUILD_OPTIONS)) +DEB_NOLANG := $(strip $(subst $(COMMA), ,$(patsubst nolang=%,%,$(DEB_NOLANG_OPT)))) +lfilt = $(strip $(if $(DEB_LANG), \ + $(if $(filter $(1) $(2),$(DEB_LANG)),yes),$(3))) +nlfilt = $(strip $(if $(DEB_NOLANG), \ + $(if $(filter $(1) $(2),$(DEB_NOLANG)),disabled by $(DEB_NOLANG_OPT),$(3)))) +wlfilt = $(strip $(if $(filter $(1) $(2), $(subst $(COMMA), ,$(WITHOUT_LANG))), \ + disabled by WITHOUT_LANG=$(WITHOUT_LANG),$(3))) +envfilt = $(strip $(or $(call lfilt,$(1),$(2)),$(call nlfilt,$(1),$(3)),$(call wlfilt,$(1),$(3)),$(4))) + +# ------------------------------------------------------------------- +# architecture specific config + +ifneq (,$(filter $(DEB_TARGET_ARCH), amd64 arm64 i386 ppc64 ppc64el s390x x32)) + with_async_unwind = yes +endif + +ifeq ($(derivative),Ubuntu) + ifeq (,$(filter $(distrelease),precise trusty xenial bionic)) + ifneq (,$(filter $(DEB_TARGET_ARCH), amd64 arm64 i386 ppc64 ppc64el s390x x32)) + with_stack_clash := yes + endif + endif + ifeq (,$(filter $(distrelease),precise trusty xenial bionic)) + ifneq (,$(filter $(DEB_TARGET_ARCH), amd64 i386 x32)) + with_cf_protection := yes + endif + endif +endif + +ifeq ($(DEB_TARGET_ARCH),armhf) + ifeq ($(distribution),Raspbian) + with_arm_thumb := no + else + with_arm_thumb := yes + endif +else + ifeq ($(derivative)-$(DEB_TARGET_ARCH),Ubuntu-armel) + ifneq (,$(filter $(distrelease), precise)) + with_arm_thumb := yes + endif + endif +endif + +timet64_archs = armel armhf hppa m68k mips mipsel powerpc sh4 +no_timet64_distreleases = jessy stretch buster bullseye bookworm \ + precise trusty xenial bionic focal jammy kinetic lunar mantic + +ifneq (,$(filter $(DEB_TARGET_ARCH), $(timet64_archs))) + ifeq (,$(filter $(distrelease),$(no_timet64_distreleases))) + with_timet64 = yes + endif +endif + +# build using fsf or the ibm branch +ifeq ($(distribution),Ubuntu) + ifneq (,$(findstring $(DEB_TARGET_ARCH),ppc64el)) + #with_ibm_branch = yes + endif +endif + +ifneq (,$(findstring gcc-snapshot, $(PKGSOURCE))) + with_ibm_branch = +endif + +# check if we're building for armel or armhf +ifneq (,$(filter %eabihf,$(DEB_TARGET_GNU_SYSTEM))) + float_abi := hard +else ifneq (,$(filter $(distribution)-$(DEB_TARGET_ARCH), Ubuntu-armel)) + ifneq (,$(filter $(distrelease), precise)) + float_abi := softfp + else + float_abi := soft + endif +else ifneq (,$(filter $(DEB_TARGET_ARCH), arm armel)) + float_abi := soft +endif + +# ------------------------------------------------------------------- +# basic config + +# allows to wrote backtraces for ICEs +unstripped_exe = +#ifneq (,$(filter $(DEB_TARGET_ARCH), amd64 armel armhf arm64 mipsel mips64el ppc64el s390x)) +# unstripped_exe = yes +#endif + +# common things --------------- +# build common packages, where package names don't differ in different +# gcc versions (fixincludes, ...) +#with_common_pkgs := yes +# ... and some libraries, which do not change (libgcc1, libssp0). +#with_common_libs := yes +# XXX: should with_common_libs be "yes" only if this is the default compiler +# version on the targeted arch? + +# build -dbg packages (with_dbg is empty when -dbg package are not built) +ifneq (,$(filter $(distrelease), jessie stretch buster precise trusty xenial bionic)) + with_dbg = yes +else + ifeq ($(derivative),Ubuntu) + v_dbg = 9.2.1-21ubuntu1 + else ifeq ($(derivative),Debian) + v_dbg = 9.2.1-21 + else + $(error unknown version for -dbgsym package migration) + endif +endif + +# is this a multiarch-enabled build? +#ifneq (,$(filter $(distrelease), FIXME when removing multilib)) + with_multiarch_lib := yes +#endif + +ifeq ($(with_multiarch_lib),yes) + ifneq ($(single_package),yes) + ifneq ($(DEB_CROSS),yes) + with_multiarch_cxxheaders := yes + endif + endif +endif + +multiarch_stage1 := yes + +MIPS_R6_ENABLED = no +ifeq (,$(filter $(distrelease), jessie precise trusty xenial)) + MIPS_R6_ENABLED = yes +endif + +# mapping for the non-default biarch multilib / multiarch names +multiarch_xarch_map = \ + amd64=i386-linux-gnu,x86_64-linux-gnux32 \ + armel=arm-linux-gnueabi \ + armhf=arm-linux-gnueabihf \ + i386=x86_64-linux-gnu,x86_64-linux-gnux32 \ + powerpc=powerpc64-linux-gnu \ + ppc64=powerpc-linux-gnu \ + sparc=sparc64-linux-gnu \ + sparc64=sparc-linux-gnu \ + s390=s390x-linux-gnu \ + s390x=s390-linux-gnu \ + mips=mips64-linux-gnuabin32,mips64-linux-gnuabi64 \ + mipsel=mips64el-linux-gnuabin32,mips64el-linux-gnuabi64 \ + mipsn32=mips-linux-gnu,mips64-linux-gnuabi64 \ + mipsn32el=mipsel-linux-gnu,mips64el-linux-gnuabi64 \ + mips64=mips-linux-gnu,mips64-linux-gnuabin32 \ + mips64el=mipsel-linux-gnu,mips64el-linux-gnuabin32 \ + mipsr6=mipsisa64r6-linux-gnuabin32,mipsisa64r6-linux-gnuabi64 \ + mipsr6el=mipsisa64r6el-linux-gnuabin32,mipsisa64r6el-linux-gnuabi64 \ + mipsn32r6=mipsisa32r6-linux-gnu,mipsisa64r6-linux-gnuabi64 \ + mipsn32r6el=mipsisa32r6el-linux-gnu,mipsisa64r6el-linux-gnuabi64 \ + mips64r6=mipsisa32r6-linux-gnu,mipsisa64r6-linux-gnuabin32 \ + mips64r6el=mipsisa32r6el-linux-gnu,mipsisa64r6el-linux-gnuabin32 \ + x32=x86_64-linux-gnu,i386-linux-gnu \ + kfreebsd-amd64=i386-kfreebsd-gnu +xarch_multiarch_names = $(subst $(COMMA),$(SPACE),$(patsubst $(DEB_TARGET_ARCH)=%,%, \ + $(filter $(DEB_TARGET_ARCH)=%,$(multiarch_xarch_map)))) + +multilib_multiarch_map = \ + $(DEB_TARGET_ARCH)/=$(DEB_TARGET_MULTIARCH) \ + amd64/32=i386-linux-gnu \ + amd64/x32=x86_64-linux-gnux32 \ + armel/hf=arm-linux-gnueabihf \ + armhf/sf=arm-linux-gnueabi \ + i386/64=x86_64-linux-gnu \ + i386/x32=x86_64-linux-gnux32 \ + powerpc/64=powerpc64-linux-gnu \ + ppc64/32=powerpc-linux-gnu \ + sparc/64=sparc64-linux-gnu \ + sparc64/32=sparc-linux-gnu \ + s390/64=s390x-linux-gnu \ + s390x/32=s390-linux-gnu \ + mips/n32=mips64-linux-gnuabin32 \ + mips/64=mips64-linux-gnuabi64 \ + mipsel/n32=mips64el-linux-gnuabin32 \ + mipsel/64=mips64el-linux-gnuabi64 \ + mipsn32/32=mips-linux-gnu \ + mipsn32/64=mips64-linux-gnuabi64 \ + mipsn32el/32=mipsel-linux-gnu \ + mipsn32el/64=mips64el-linux-gnuabi64 \ + mips64/32=mips-linux-gnu \ + mips64/n32=mips64-linux-gnuabin32 \ + mips64el/32=mipsel-linux-gnu \ + mips64el/n32=mips64el-linux-gnuabin32 \ + mipsr6/n32=mipsisa64r6-linux-gnuabin32 \ + mipsr6/64=mipsisa64r6-linux-gnuabi64 \ + mipsr6el/n32=mipsisa64r6el-linux-gnuabin32 \ + mipsr6el/64=mipsisa64r6el-linux-gnuabi64 \ + mipsn32r6/32=mipsisa32r6-linux-gnu \ + mipsn32r6/64=mipsisa64r6-linux-gnuabi64 \ + mipsn32r6el/32=mipsisa32r6el-linux-gnu \ + mipsn32r6el/64=mipsisa64r6el-linux-gnuabi64 \ + mips64r6/32=mipsisa32r6-linux-gnu \ + mips64r6/n32=mipsisa64r6-linux-gnuabin32 \ + mips64r6el/32=mipsisa32r6el-linux-gnu \ + mips64r6el/n32=mipsisa64r6el-linux-gnuabin32 \ + x32/32=i386-linux-gnu \ + x32/64=x86_64-linux-gnu \ + kfreebsd-amd64/32=i386-kfreebsd-gnu +# $(call mlib_to_march,|32|64|n32|x32|hf|sf) +mlib_to_march = $(patsubst $(DEB_TARGET_ARCH)/$(1)=%,%, \ + $(filter $(DEB_TARGET_ARCH)/$(1)=%,$(multilib_multiarch_map))) + +multilib_arch_map = \ + $(DEB_TARGET_ARCH)/=$(DEB_TARGET_ARCH) \ + amd64/32=i386 \ + amd64/x32=x32 \ + armel/hf=armhf \ + armhf/sf=armel \ + i386/64=amd64 \ + i386/x32=x32 \ + powerpc/64=ppc64 \ + ppc64/32=powerpc \ + sparc/64=sparc64 \ + sparc64/32=sparc \ + s390/64=s390x \ + s390x/32=s390 \ + mips/n32=mipsn32 \ + mips/64=mips64 \ + mipsel/n32=mipsn32el \ + mipsel/64=mips64el \ + mipsn32/32=mips \ + mipsn32/64=mips64 \ + mipsn32el/32=mipsel \ + mipsn32el/64=mips64el \ + mips64/32=mips \ + mips64/n32=mipsn32 \ + mips64el/32=mipsel \ + mips64el/n32=mipsn32el \ + mipsr6/n32=mipsn32r6 \ + mipsr6/64=mips64r6 \ + mipsr6el/n32=mipsn32r6el \ + mipsr6el/64=mips64r6el \ + mipsn32r6/32=mipsr6 \ + mipsn32r6/64=mips64r6 \ + mipsn32r6el/32=mipsr6el \ + mipsn32r6el/64=mips64r6el \ + mips64r6/32=mipsr6 \ + mips64r6/n32=mipsn32r6 \ + mips64r6el/32=mipsr6el \ + mips64r6el/n32=mipsn32r6el \ + x32/32=i386 \ + x32/64=amd64 \ + kfreebsd-amd64/32=kfreebsd-i386 +# $(call mlib_to_arch,|32|64|n32|x32|hf|sf) +mlib_to_arch = $(patsubst $(DEB_TARGET_ARCH)/$(1)=%,%, \ + $(filter $(DEB_TARGET_ARCH)/$(1)=%,$(multilib_arch_map))) + +# build -base packages +with_gccbase := yes +ifeq ($(build_type),build-cross) + ifneq ($(DEB_STAGE),rtlibs) + with_gcclbase := yes + endif +endif + +# build dev packages. +ifneq ($(DEB_STAGE),rtlibs) + with_dev := yes +endif + +with_cpp := yes + +# set lang when built from a different source package. +separate_lang := no + +#no_dummy_cpus := ia64 i386 hppa s390 sparc +#ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),$(no_dummy_cpus))) +# with_base_only := no +# with_common_libs := yes +# with_common_pkgs := yes +#else +# with_base_only := yes +# with_common_libs := no +# with_common_pkgs := no +# with_dev := no +#endif + +ifeq ($(versioned_packages),yes) + pkg_ver := -$(BASE_VERSION) + PV := $(pkg_ver) +endif + +# ------------------------------------------------------------------- +# configure languages + +# C --------------------------- +enabled_languages := c + +with_jit = yes + +# FIXME: compiler bug +# m68k: PR 95381 +jit_no_cpus := ia64 + +ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),$(jit_no_cpus))) + with_jit := disabled for cpu $(DEB_TARGET_ARCH_CPU) +endif +# FIXME: see #994035, strange tar behavior +ifneq (,$(filter $(DEB_TARGET_ARCH_OS), kfreebsd)) + with_jit := disabled for os $(DEB_TARGET_ARCH_OS) +endif +ifneq (,$(with_rtlibs)) + with_jit := disabled for rtlibs stage +endif +ifneq ($(findstring nojit, $(DEB_BUILD_OPTIONS)),) + with_jit := disabled by DEB_BUILD_OPTIONS +endif +with_jit := $(call envfilt, jit, , , $(with_jit)) + +ifeq (,$(findstring gcc-,$(PKGSOURCE))) + with_jit := +endif + +# this fails when installing the jit build +# libtool: install: /home/packages/gcc/13/tc/gcc-toolchain-13-13.2.0+2.41/build-jit/./binutils/ranlib /home/packages/gcc/13/tc/gcc-toolchain-13-13.2.0+2.41/debian/tmp-jit/usr/lib/gcc-toolchain-13/lib/../lib/libgomp.a +# /home/packages/gcc/13/tc/gcc-toolchain-13-13.2.0+2.41/build-jit/binutils/.libs/ranlib: error while loading shared libraries: /home/packages/gcc/13/tc/gcc-toolchain-13-13.2.0+2.41/build-jit/bfd/.libs/libbfd-2.41-tc13.so: file too short +# /home/packages/gcc/13/tc/gcc-toolchain-13-13.2.0+2.41/build-jit/binutils/.libs/ranlib: error while loading shared libraries: /home/packages/gcc/13/tc/gcc-toolchain-13-13.2.0+2.41/build-jit/bfd/.libs/libbfd-2.41-tc13.so: file too short + +ifneq (,$(findstring gcc-toolchain,$(PKGSOURCE))) + with_jit := disabled for $(PKGSOURCE) builds +endif + +ifneq (,$(findstring build-cross, $(build_type))) + with_jit := disabled for cross builds +endif + +ifeq ($(with_jit),yes) + ifeq ($(with_common_libs),yes) + with_libgccjit := yes + endif +endif + +nvptx_archs := amd64 arm64 ppc64el +# arm64, see PR target/96265 +ifneq (,$(filter $(DEB_TARGET_ARCH),$(nvptx_archs))) + offload_targets += nvptx-none + with_offload_nvptx := yes +endif +ifneq (,$(filter $(distrelease), precise)) + offload_targets := + with_offload_nvptx := +endif +ifneq (,$(findstring build-cross, $(build_type))) + offload_targets := + with_offload_nvptx := disabled for cross builds +endif + +ifeq ($(single_package),yes) + ifneq ($(trunk_build),yes) + offload_targets := + with_offload_nvptx := disabled for $(PKGSOURCE) builds + endif +endif +ifneq ($(findstring nonvptx, $(DEB_BUILD_OPTIONS)),) + offload_targets := + with_offload_nvptx := disabled by DEB_BUILD_OPTIONS +endif +with_offload_nvptx := $(call envfilt, nvptx, , , $(with_offload_nvptx)) +#with_offload_nvptx := not yet built for GCC 13 + +gcn_archs := amd64 +gcn_target_name = amdgcn-amdhsa + +ifneq (,$(filter $(distrelease),buster xenial bionic focal groovy)) + gcn_tools_llvm_version = 9 +else ifneq (,$(filter $(distrelease),focal groovy)) + gcn_tools_llvm_version = 11 +else + gcn_tools_llvm_version = tools +endif + +ifneq (,$(filter $(DEB_TARGET_ARCH),$(gcn_archs))) + offload_targets += $(gcn_target_name) + with_offload_gcn := yes +endif +ifneq (,$(filter $(distrelease), precise bionic focal)) + offload_targets := $(filter-out $(gcn_target_name), $(offload_targets)) + with_offload_gcn := +endif +ifneq (,$(findstring build-cross, $(build_type))) + offload_targets := $(filter-out $(gcn_target_name), $(offload_targets)) + with_offload_gcn := disabled for cross builds +endif + +ifeq ($(single_package),yes) + ifneq ($(trunk_build),yes) + offload_targets := $(filter-out $(gcn_target_name), $(offload_targets)) + with_offload_gcn := disabled for $(PKGSOURCE) builds + endif +endif +ifneq ($(findstring nogcn, $(DEB_BUILD_OPTIONS)),) + offload_targets := $(filter-out $(gcn_target_name), $(offload_targets)) + with_offload_gcn := disabled by DEB_BUILD_OPTIONS +endif +with_offload_gcn := $(call envfilt, gcn, , , $(with_offload_gcn)) +#with_offload_gcn := not yet built for GCC 13 + +with_cc1 := yes +with_cc1 := $(call envfilt, cc1, , , $(with_cc1)) + +ifeq ($(with_cc1),yes) + ifeq ($(with_common_libs),yes) + with_libcc1 := yes + endif + with_libcc1_plugin := yes +endif + +ifneq (,$(with_rtlibs)) + with_libcc1 := disabled for rtlibs stage + with_libcc1_plugin := disabled for rtlibs stage +endif +ifneq (,$(findstring build-cross, $(build_type))) + with_libcc1 := disabled for cross builds +endif + +# Build all packages needed for C development +ifneq ($(with_base_only),yes) + ifeq ($(with_dev),yes) + with_cdev := yes + endif +endif + +ifeq (,$(filter $(DEB_STAGE),stage1 stage2)) +# Ada -------------------- +ada_no_cpus := arc ia64 loong64 sh3 sh3eb sh4eb +ada_no_systems := +ada_no_cross := no +ada_no_snap := no +#ifeq ($(single_package),yes) +# ifneq (,$(filter $(DEB_TARGET_ARCH),alpha)) +# ada_no_snap := yes +# endif +#endif +#ifeq ($(DEB_CROSS),yes) +# ifneq (,$(filter $(DEB_TARGET_ARCH),alpha)) +# ada_no_cross := yes +# endif +#endif + +ifeq ($(with_dev),yes) + ifneq ($(separate_lang),yes) + with_ada := yes + endif +endif +ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),$(ada_no_cpus))) + with_ada := disabled for cpu $(DEB_TARGET_ARCH_CPU) +endif +ifneq (,$(findstring $(DEB_TARGET_GNU_SYSTEM),$(ada_no_systems))) + with_ada := disabled for system $(DEB_TARGET_GNU_SYSTEM) +endif +ifeq ($(ada_no_cross)-$(DEB_CROSS),yes-yes) + with_ada := disabled for cross compiler package +endif +ifeq ($(ada_no_snap)-$(single_package),yes-yes) + with_ada := disabled for snapshot build +endif +ifneq (,$(findstring gccgo,$(PKGSOURCE))) + with_ada := +endif +ifneq (,$(filter $(distrelease), precise)) + with_ada := +endif +with_ada := $(call envfilt, ada, , , $(with_ada)) + +ifeq ($(DEB_STAGE)-$(filter libgnat, $(with_rtlibs)),rtlibs-) + with_ada := disabled for rtlibs stage +endif +#with_ada := disabled for GCC 13 + +#ifneq ($(single_package),yes) +# with_separate_gnat := yes +#endif + +ifneq ($(with_separate_gnat),yes) + ifeq ($(with_ada),yes) + ifneq (,$(filter $(distrelease), precise)) + with_ada := + endif + endif +endif + +ifeq ($(with_ada)-$(with_separate_gnat),yes-yes) + ifneq (,$(findstring gnat,$(PKGSOURCE))) + languages := c + separate_lang := yes + with_mudflap := no + with_gccbase := no + with_cdev := no + with_cc1 := no + with_libcc1 := no + else + debian_extra_langs += ada + with_ada := built from separate source + with_libgnat := built from separate source + endif +endif + +ifeq ($(with_ada),yes) + enabled_languages += ada + with_libgnat := yes + #with_gnatsjlj := yes +endif + +# C++ ------------------------- +cxx_no_cpus := avr +ifneq ($(with_base_only),yes) + ifneq ($(separate_lang),yes) + with_cxx := yes + endif +endif +ifneq (,$(findstring $(DEB_TARGET_ARCH_CPU),$(cxx_no_cpus))) + with_cxx := disabled for cpu $(DEB_TARGET_ARCH_CPU) +endif +with_cxx := $(call envfilt, c++, obj-c++, , $(with_cxx)) + +# Set the default libstdc++ ABI. libstdc++ provides both ABI's. +# Existing code still runs with the new c++11 ABI, however link +# errors are seen when one object is compiled with the new std::string in scope, +# another object is compiled with the old std::string in scope. both can link +# to libstdc++.so but not to each other. +# two objects (which might be some system library and a user's program) need to +# agree on the version of std::string they're using + +libstdcxx_abi = new +# backports default to the old ABI +ifneq (,$(filter $(distrelease), jessie precise trusty)) + libstdcxx_abi = gcc4-compatible +endif + +# Build all packages needed for C++ development +ifeq ($(with_cxx),yes) + ifeq ($(with_dev),yes) + with_cxxdev := yes + with_libcxxdbg := yes + endif + ifeq ($(with_common_libs),yes) + with_libcxx := yes + endif + + # debugging versions of libstdc++ + ifneq (,$(findstring gcc-, $(PKGSOURCE))) + ifeq ($(with_cxxdev),yes) + with_cxx_debug := yes + debug_no_cpus := + ifneq (,$(findstring $(DEB_TARGET_ARCH_CPU),$(debug_no_cpus))) + with_cxx_debug := disabled for cpu $(DEB_TARGET_GNU_CPU) + endif + endif + endif + with_cxx_debug := $(call envfilt, debug, , , $(with_cxx_debug)) + + enabled_languages += c++ + + with_libcxx_doc := yes + ifneq (,$(findstring nodoc, $(DEB_BUILD_OPTIONS) $(DEB_BUILD_PROFILES))) + with_libcxx_doc := + endif +endif + +# Go ------------------- +# - To build a standalone gccgo package (with no corresponding gcc +# package): with_separate_libgo=yes, with_standalone_go=yes +# - To build the go packages from the gcc source package: +# with_separate_libgo=no, with_standalone_go=no +# - To build gcc and go from separate sources: +# with_separate_libgo=yes, with_standalone_go=no + +go_no_cross := yes +go_no_cross := no + +ifneq (,$(findstring gccgo, $(PKGSOURCE))) + with_separate_libgo := yes + with_standalone_go := yes + with_cc1 := + with_libcc1 := +endif + +go_no_cpus := arc avr hppa loong64 +go_no_cpus += m68k # See PR 79281 / PR 83314 +go_no_systems := kfreebsd-gnu +ifneq (,$(filter $(distrelease),precise)) + go_no_cpus = armhf + go_no_archs = armhf +endif +# Debian #969221 +go_no_cpus += sh4 +go_no_archs += sh4 + +ifneq ($(with_base_only),yes) + ifneq ($(separate_lang),yes) + with_go := yes + endif +endif +ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),$(go_no_cpus))) + with_go := disabled for cpu $(DEB_TARGET_ARCH_CPU) +endif +ifneq (,$(findstring $(DEB_TARGET_GNU_SYSTEM),$(go_no_systems))) + with_go := disabled for system $(DEB_TARGET_GNU_SYSTEM) +endif +ifneq (,$(filter $(DEB_TARGET_ARCH),$(go_no_archs))) + with_go := disabled for architecture $(DEB_TARGET_ARCH) +endif +ifeq ($(go_no_cross)-$(DEB_CROSS),yes-yes) + with_go := disabled for cross compiler package +endif +ifeq ($(DEB_STAGE)-$(filter libgo, $(with_rtlibs)),rtlibs-) + with_go := disabled for rtlibs stage +endif +with_go := $(call envfilt, go, , , $(with_go)) + +# Build all packages needed for Go development +ifneq (,$(findstring gcc, $(PKGSOURCE))) + ifeq ($(with_go),yes) + ifeq ($(with_dev),yes) + with_godev := yes + endif + with_libgo := yes + enabled_languages += go + endif +endif + +ifeq ($(with_go)-$(with_separate_libgo),yes-yes) + ifneq (,$(findstring gccgo, $(PKGSOURCE))) + languages := c c++ go + separate_lang := yes + with_libgcc := yes + with_shared_libgcc := yes + else + debian_extra_langs += go + with_go := built from separate source + with_libgo := buit from separate source + endif +endif + +# D --------------------------- +d_no_cross := yes +d_no_snap := +d_no_cpus := alpha arc ia64 loong64 m68k sh4 s390 sparc64 +d_no_systems := gnu kfreebsd-gnu + +ifneq ($(single_package),yes) + with_separate_gdc := yes +endif +with_separate_gdc := no + +ifneq ($(separate_lang),yes) + with_d := yes +endif + +ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),$(d_no_cpus))) + with_d := disabled for cpu $(DEB_TARGET_ARCH_CPU) +endif +ifneq (,$(filter $(DEB_TARGET_GNU_SYSTEM),$(d_no_systems))) + with_d := disabled for system $(DEB_TARGET_GNU_SYSTEM) +endif +ifneq (,$(filter $(DEB_TARGET_ARCH),$(d_no_archs))) + with_d := disabled for architecture $(DEB_TARGET_ARCH) +endif +ifeq ($(d_no_snap)-$(single_package),yes-yes) + with_d := disabled for snapshot build +endif +ifeq ($(DEB_STAGE)-$(filter libphobos, $(with_rtlibs)),rtlibs-) + with_d := disabled for rtlibs stage +endif +ifeq ($(GENERATE_DFSG_TARBALL),yes) + with_d := disabled while generating the dfsg tarball +endif +with_d := $(call envfilt, d, , , $(with_d)) +#with_d := not yet built for GCC 13 + +ifeq ($(with_base_only),yes) + with_d := no +endif + +ifeq ($(with_d)-$(with_separate_gdc),yes-yes) + ifneq (,$(findstring gdc,$(PKGSOURCE))) + languages := c c++ + separate_lang := yes + + # FIXME: language selection needs improvement. + with_go := disabled for d + else + debian_extra_langs += d + with_d := built from separate source + endif +endif + +ifeq ($(with_d),yes) + druntime_only_archs = powerpc ppc64 ppc64el + phobos_archs = amd64 arm64 armel armhf i386 x32 + phobos_archs += hppa + phobos_archs += mips mips64 mipsel mips64el + phobos_archs += mipsn32 mipsn32el + phobos_archs += mipsr6 mipsr6el mipsn32r6 mipsn32r6el mips64r6 mips64r6el + phobos_archs += riscv64 s390x + phobos_archs += $(druntime_only_archs) + #phobos_archs += kfreebsd-amd64 kfreebsd-i386 + ifneq (,$(filter $(DEB_TARGET_ARCH), $(phobos_archs))) + with_phobos := yes + endif + + phobos_no_systems := gnu kfreebsd-gnu + ifneq (,$(filter $(DEB_TARGET_GNU_SYSTEM),$(phobos_no_systems))) + with_phobos := disabled for system $(DEB_TARGET_GNU_SYSTEM) + endif + with_libphobosdev := $(with_phobos) + + enabled_languages += d +endif + +# Fortran 95 ------------------- +fortran_no_cross := yes +fortran_no_cross := no + +ifneq ($(with_base_only),yes) + ifneq ($(separate_lang),yes) + with_fortran := yes + endif +endif +ifeq ($(fortran_no_cross)-$(DEB_CROSS),yes-yes) + with_fortran := disabled for cross compiler package +endif +ifeq ($(DEB_STAGE)-$(filter libgfortran libquadmath, $(with_rtlibs)),rtlibs-) + with_fortran := disabled for rtlibs stage +endif + +with_fortran := $(call envfilt, fortran, , , $(with_fortran)) + +# Build all packages needed for Fortran development +ifeq ($(with_fortran),yes) + ifeq ($(with_dev),yes) + ifneq ($(DEB_STAGE)-$(filter libgfortran libquadmath, $(with_rtlibs)),rtlibs-) + with_fdev := yes + endif + endif + ifeq ($(with_common_libs),yes) + with_libgfortran := yes + endif + enabled_languages += fortran +endif + +# libquadmath ------------------- + +quadmath_targets = amd64 ia64 i386 x32 \ + hurd-amd64 hurd-i386 kfreebsd-i386 kfreebsd-amd64 \ + ppc64el +# powerpc and ppc64 don't have power7 CPU defaults ... +ifneq (,$(filter $(DEB_TARGET_ARCH), $(quadmath_targets))) + # FIXME: upstream build tied to gfortran build + ifeq ($(with_fortran),yes) + with_qmath := yes + ifneq (,$(findstring gcc-13,$(PKGSOURCE))) + ifeq ($(with_common_libs),yes) + with_libqmath := yes + endif + endif + endif +endif + +# ObjC ------------------------ +objc_no_cross := no + +ifneq ($(with_base_only),yes) + ifneq ($(separate_lang),yes) + with_objc := yes + objc_no_archs = + ifneq (,$(filter $(DEB_TARGET_ARCH),$(objc_no_archs))) + with_objc := + endif + endif +endif +ifeq ($(objc_no_cross)-$(DEB_CROSS),yes-yes) + with_objc := disabled for cross compiler package +endif +ifeq ($(DEB_STAGE)-$(filter libobjc, $(with_rtlibs)),rtlibs-) + with_objc := disabled for rtlibs stage +endif +with_objc := $(call envfilt, objc, obj-c++, , $(with_objc)) + +ifeq ($(with_objc),yes) + # the ObjC runtime with garbage collection enabled needs the Boehm GC + with_objc_gc := yes + + # disable ObjC garbage collection library (needs libgc) + libgc_no_cpus := avr + libgc_no_systems := knetbsd-gnu + ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),$(libgc_no_cpus))) + with_objc_gc := disabled for cpu $(DEB_TARGET_ARCH_CPU) + endif + ifneq (,$(findstring $(DEB_TARGET_GNU_SYSTEM),$(libgc_no_systems))) + with_objc_gc := disabled for system $(DEB_TARGET_GNU_SYSTEM) + endif + ifneq (,$(findstring build-cross, $(build_type))) + with_objc_gc := disabled for cross builds + endif + # Build all packages needed for Objective-C development + ifeq ($(with_dev),yes) + with_objcdev := yes + endif + ifeq ($(with_common_libs),yes) + with_libobjc := yes + endif + + enabled_languages += objc +endif + +# ObjC++ ---------------------- +objcxx_no_cross := no + +ifeq ($(with_objc),yes) + ifneq ($(with_base_only),yes) + ifneq ($(separate_lang),yes) + with_objcxx := yes + endif + endif +endif +ifeq ($(objcxx_no_cross)-$(DEB_CROSS),yes-yes) + with_objcxx := disabled for cross compiler package +endif +with_objcxx := $(call envfilt, obj-c++, , c++ objc, $(with_objcxx)) + +ifeq ($(with_objcxx),yes) + enabled_languages += obj-c++ +endif + +# Modula-2 ------------------- +m2_no_cross := yes +m2_no_cross := no + +ifneq ($(with_base_only),yes) + ifneq ($(separate_lang),yes) + with_m2 := yes + endif +endif +m2_no_cpus = loong64 powerpc ppc64 sh4 +m2_no_systems = gnu kfreebsd-gnu +ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),$(m2_no_cpus))) + with_m2 := disabled for cpu $(DEB_TARGET_ARCH_CPU) +endif +ifneq (,$(findstring $(DEB_TARGET_GNU_SYSTEM),$(m2_no_systems))) + with_m2 := disabled for system $(DEB_TARGET_GNU_SYSTEM) +endif +ifeq ($(m2_no_cross)-$(DEB_CROSS),yes-yes) + with_m2 := disabled for cross compiler package +endif +ifeq ($(DEB_STAGE)-$(filter libgm2, $(with_rtlibs)),rtlibs-) + with_m2 := disabled for rtlibs stage +endif +ifneq (,$(filter $(distrelease),precise)) + with_m2 := disabled for $(distrelease) backport +endif +#with_m2 := disabled for GCC 13 + +with_m2 := $(call envfilt, m2, , , $(with_m2)) + +# Build all packages needed for Modula-2 development +ifeq ($(with_m2),yes) + ifeq ($(with_dev),yes) + with_m2dev := yes + endif + with_libgm2 := yes + enabled_languages += m2 +endif + +# Rust ------------------- +rs_no_cross := yes +rs_no_cross := no + +ifneq ($(with_base_only),yes) + ifneq ($(separate_lang),yes) + with_rs := yes + endif +endif +#rs_no_cpus = s390x +ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),$(rs_no_cpus))) + with_rs := disabled for cpu $(DEB_TARGET_ARCH) +endif +ifeq ($(rs_no_cross)-$(DEB_CROSS),yes-yes) + with_rs := disabled for cross compiler package +endif +#ifeq ($(DEB_STAGE)-$(filter libgrs, $(with_rtlibs)),rtlibs-) +# with_rs := disabled for rtlibs stage +#endif + +ifneq (,$(filter $(distrelease),lunar)) + with_rs := yes +else + with_rs := disabled for GCC 13 +endif +#with_rs := disabled for GCC 13 + +with_rs := $(call envfilt, rust, , , $(with_rs)) + +# Build all packages needed for Rust development +ifeq ($(with_rs),yes) + ifeq ($(with_dev),yes) + with_rsdev := yes + endif + ifeq ($(with_common_libs),yes) + with_libgrs := yes + endif + enabled_languages += rust +endif + +# ------------------------------------------------------------------- +# other config + +# not built from the main source package +ifeq (,$(findstring gcc-,$(PKGSOURCE))) + extra_package := yes +endif + +with_nls := yes +ifeq ($(trunk_build),yes) + with_nls := no +endif +with_nls := $(call envfilt, nls, , , $(with_nls)) + +# powerpc nof libraries ----- +with_libnof := no + +ifneq (,$(findstring gcc-13,$(PKGSOURCE))) + ifeq (,$(with_rtlibs)) + with_source := yes + endif +endif +with_source := $(call envfilt, source, , , $(with_source)) + +ifeq ($(with_cdev),yes) + +# ssp & libssp ------------------------- +with_ssp := yes +ssp_no_archs = alpha hppa ia64 m68k +ifneq (, $(filter $(DEB_TARGET_ARCH),$(ssp_no_archs) $(ssp_no_archs:%=uclibc-%))) + with_ssp := not available on $(DEB_TARGET_ARCH) +endif +with_ssp := $(call envfilt, ssp, , , $(with_ssp)) + +ifeq ($(with_ssp),yes) + ifneq ($(derivative),Debian) + ifneq (,$(findstring gcc-13, $(PKGSOURCE))) + with_ssp_default := yes + endif + endif +endif + +# gomp -------------------- +with_gomp := yes +with_gomp := $(call envfilt, gomp, , , $(with_gomp)) +gomp_no_archs = +ifneq (,$(filter $(DEB_TARGET_ARCH),$(gomp_no_archs))) + with_gomp := +endif + +# itm -------------------- +itm_archs = alpha amd64 arm64 i386 x32 loong64 ppc64 ppc64el riscv64 s390x sh4 sparc64 +ifneq (,$(filter $(DEB_TARGET_ARCH),$(itm_archs))) + with_itm := yes +endif +with_itm := $(call envfilt, itm, , , $(with_itm)) + +# atomic -------------------- +with_atomic := yes +atomic_no_archs = +ifneq (,$(filter $(DEB_TARGET_ARCH),$(atomic_no_archs))) + with_atomic := +endif + +# backtrace -------------------- +with_backtrace := yes +backtrace_no_archs = m68k +ifneq (,$(filter $(DEB_TARGET_ARCH),$(backtrace_no_archs))) + with_backtrace := +endif + +strip_sanitizer = +ifneq (,$(filter $(distrelease),jessie stretch buster precise xenial bionic)) + strip_sanitizer = yes +endif + +# asan / sanitizer -------------------- +with_asan := +with_asan := $(call envfilt, asan, , , $(with_asan)) +asan_archs = amd64 armel armhf arm64 i386 powerpc ppc64 ppc64el \ + riscv64 s390x sparc sparc64 x32 +ifneq (,$(filter $(DEB_TARGET_ARCH),$(asan_archs))) + with_asan := yes +endif + +# lsan / sanitizer -------------------- +with_lsan := +with_lsan := $(call envfilt, lsan, , , $(with_lsan)) +lsan_archs = arm64 amd64 ppc64 ppc64el +ifneq (,$(filter $(DEB_TARGET_ARCH),$(lsan_archs))) + with_lsan := yes +endif + +# tsan / sanitizer -------------------- +with_tsan := +with_tsan := $(call envfilt, tsan, , , $(with_tsan)) +tsan_archs = arm64 amd64 ppc64 ppc64el +ifneq (,$(filter $(DEB_TARGET_ARCH),$(tsan_archs))) + with_tsan := yes +endif + +# hwasan / sanitizer -------------------- +with_hwasan := +with_hwasan := $(call envfilt, hwasan, , , $(with_hwasan)) +hwasan_archs = amd64 arm64 +ifneq (,$(filter $(DEB_TARGET_ARCH),$(hwasan_archs))) + with_hwasan := yes +endif + +# ubsan / sanitizer -------------------- +with_ubsan := +with_ubsan := $(call envfilt, ubsan, , , $(with_ubsan)) +ubsan_archs = amd64 armel armhf arm64 i386 powerpc ppc64 ppc64el x32 \ + riscv64 s390x sparc sparc64 +ifneq (,$(filter $(DEB_TARGET_ARCH),$(ubsan_archs))) + with_ubsan := yes +endif + +endif # with_cdev + +# libvtv -------------------- +with_vtv := +with_vtv := $(call envfilt, vtv, , , $(with_vtv)) +vtv_archs = amd64 i386 x32 +ifneq (,$(filter $(DEB_TARGET_ARCH),$(vtv_archs))) + with_vtv := yes + with_libvtv := yes +endif +# libvtv builds a modified libstdc++, don't enable it by default +with_vtv := +with_libvtv := + +# pie by default -------------------- +with_pie := +ifeq ($(distribution),Debian) + ifeq (,$(filter $(distrelease), jessie)) + pie_archs = amd64 arm64 armel armhf i386 \ + mips mipsel mips64 mips64el mipsn32 mipsn32el \ + mipsr6 mipsr6el mips64r6 mips64r6el mipsn32r6 mipsn32r6el \ + ppc64el s390x sparc sparc64 kfreebsd-amd64 kfreebsd-i386 \ + hurd-amd64 hurd-i386 riscv64 loong64 + endif + ifeq (,$(filter $(distrelease), jessie stretch)) + pie_archs += powerpc ppc64 + endif +else ifeq ($(distribution),Ubuntu) + ifeq (,$(filter $(distrelease), precise trusty)) + pie_archs = s390x + endif + ifeq (,$(filter $(distrelease), precise trusty xenial)) + pie_archs += amd64 ppc64el + endif + ifeq (,$(filter $(distrelease), precise trusty xenial)) + pie_archs += armhf arm64 i386 + endif + pie_archs += riscv64 +endif +ifneq (,$(filter $(DEB_TARGET_ARCH),$(pie_archs))) + with_pie := yes +endif +ifeq ($(trunk_build),yes) + with_pie := disabled for trunk builds +endif + +# gold -------------------- +# armel with binutils 2.20.51 only +gold_archs = amd64 armel armhf i386 powerpc ppc64 ppc64el s390x sparc sparc64 x32 hurd-amd64 hurd-i386 +ifneq (,$(filter $(DEB_TARGET_ARCH),$(gold_archs))) + with_gold := yes +endif + +# plugins -------------------- +with_plugins := yes +ifneq (,$(with_rtlibs)) + with_plugins := disabled for rtlibs stage +endif + +endif # ifeq (,$(filter $(DEB_STAGE),stage1 stage2)) + +# Don't include docs with GFDL invariant sections +GFDL_INVARIANT_FREE := yes +ifeq ($(derivative),Ubuntu) + GFDL_INVARIANT_FREE := no +endif + +# ------------------------------------------------------------------- +# non-extra config +ifeq ($(extra_package),yes) + ifeq ($(with_separate_libgo),yes) + # package stuff + with_gccbase := yes + with_cdev := no + with_cxx := no + with_cxxdev := no + endif +else + # libssp ------------------ + ifeq ($(with_ssp)-$(with_common_libs),yes-yes) + #ifneq ($(DEB_CROSS),yes) + with_libssp := $(if $(wildcard $(builddir)/gcc/auto-host.h),$(shell if grep -qs '^\#define TARGET_LIBC_PROVIDES_SSP 1' $(builddir)/gcc/auto-host.h; then echo 'libc provides ssp'; else echo 'yes'; fi)) + #endif + with_libssp := libc provides ssp + endif + + # libgomp ----------------- + ifeq ($(with_gomp)-$(with_common_libs),yes-yes) + with_libgomp := yes + endif + + # libitm ----------------- + ifeq ($(with_itm)-$(with_common_libs),yes-yes) + with_libitm := yes + endif + + # libatomic ----------------- + ifeq ($(with_atomic)-$(with_common_libs),yes-yes) + with_libatomic := yes + endif + + # libbacktrace ----------------- + ifeq ($(with_backtrace)-$(with_common_libs),yes-yes) + # currently not a shared library + #with_libbacktrace := yes + endif + + # libasan ----------------- + ifeq ($(with_asan)-$(with_common_libs),yes-yes) + ifeq ($(with_asan),yes) + with_libasan := yes + endif + endif + + # liblsan ----------------- + ifeq ($(with_lsan)-$(with_common_libs),yes-yes) + #ifneq ($(DEB_CROSS),yes) + with_liblsan := yes + #endif + endif + + # libtsan ----------------- + ifeq ($(with_tsan)-$(with_common_libs),yes-yes) + with_libtsan := yes + endif + + # libubsan ----------------- + ifeq ($(with_ubsan)-$(with_common_libs),yes-yes) + ifeq ($(with_ubsan),yes) + with_libubsan := yes + endif + endif + + # libhwasan ----------------- + ifeq ($(with_hwasan)-$(with_common_libs),yes-yes) + ifeq ($(with_hwasan),yes) + with_libhwasan := yes + endif + endif + + # libvtv ----------------- + ifeq ($(with_vtv)-$(with_common_libs),yes-yes) + with_libvtv := yes + endif + + # libquadmath ----------------- + ifeq ($(with_qmath)-$(with_common_libs),yes-yes) + with_libqmath := yes + endif + + # libunwind ----------------- + with_internal_libunwind = + ifeq ($(DEB_HOST_ARCH),ia64) + ifeq ($(DEB_STAGE),stage1) + ifeq ($(DEB_CROSS),yes) + with_internal_libunwind = yes + endif + endif + endif + + # Shared libgcc -------------------- + ifneq ($(DEB_STAGE),stage1) + with_shared_libgcc := yes + ifeq ($(with_common_libs),yes) + with_libgcc := yes + ifneq (,$(filter $(distrelease), jessie stretch buster lucid precise trusty xenial bionic focal)) + ifneq (,$(filter $(build_type), build-native cross-build-native)) + with_libcompatgcc := yes + endif + endif + endif + endif + + # libphobos ----------------- + #ifeq ($(with_common_libs),yes) + ifeq ($(with_phobos),yes) + with_libphobos := yes + endif + #endif + + # libgcc-math -------------------- + with_libgmath := no + ifneq (,$(findstring i486,$(DEB_TARGET_ARCH))) + #with_libgccmath := yes + #with_lib64gmath := yes + #with_libgmathdev := yes + endif + ifeq ($(DEB_TARGET_ARCH),amd64) + #with_libgccmath := yes + #with_lib32gmath := yes + #with_libgmathdev := yes + endif + + # hppa64 build ---------------- + hppa64_no_snap := no + hppa64_archs := hppa + ifneq (,$(filter $(build_type), build-native cross-build-native)) + ifneq (,$(filter $(distrelease), jessie precise trusty)) + binutils_hppa64 := binutils-hppa64 + else + ifneq ($(single_package),yes) + hppa64_archs += amd64 i386 x32 + endif + binutils_hppa64 := binutils-hppa64-linux-gnu + endif + ifneq (,$(filter $(DEB_TARGET_ARCH),$(hppa64_archs))) + with_hppa64 := yes + endif + endif + ifneq (,$(findstring gcc-toolchain, $(PKGSOURCE))) + with_hppa64 := disabled for backports/toolchain builds + endif + ifeq ($(hppa64_no_snap)-$(trunk_build),yes-yes) + with_hppa64 := disabled for snapshot build + endif + ifneq ($(findstring nohppa64, $(DEB_BUILD_OPTIONS)),) + with_hppa64 := disabled by DEB_BUILD_OPTIONS + endif + with_hppa64 := $(call envfilt, hppa64, , , $(with_hppa64)) + + ifeq ($(DEB_STAGE),rtlibs) + with_libasan := disabled for rtlibs stage + with_liblsan := disabled for rtlibs stage + with_libtsan := disabled for rtlibs stage + with_libubsan := disabled for rtlibs stage + with_libhwasan := disabled for rtlibs stage + with_hppa64 := disabled for rtlibs stage + endif +endif + +# run testsuite --------------- +with_check := yes +# if you don't want to run the gcc testsuite, uncomment the next line +#with_check := disabled by hand +ifeq ($(with_base_only),yes) + with_check := no +endif +ifeq ($(DEB_CROSS),yes) + with_check := disabled for cross compiler package +endif +ifneq (,$(findstring cross-build-,$(build_type))) + with_check := disabled for cross building the compiler +endif +ifneq (,$(with_rtlibs)) + with_check := disabled for rtlibs stage +endif +#check_no_cpus := m68k +ifeq ($(derivative),Ubuntu) + # test suite times out on the buildds + check_no_cpus := arm64 +endif +check_no_systems := # gnu kfreebsd-gnu +ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),$(check_no_cpus))) + with_check := disabled for cpu $(DEB_TARGET_ARCH_CPU) +endif +#ifneq (,$(findstring $(DEB_TARGET_GNU_SYSTEM),$(check_no_systems))) +# with_check := disabled for system $(DEB_TARGET_GNU_SYSTEM) +#endif +ifneq (,$(findstring gdc,$(PKGSOURCE))) + with_check := disabled for D +endif +with_check := $(call envfilt, check, , , $(with_check)) +ifdef WITHOUT_CHECK + with_check := disabled by environment +endif +ifneq ($(findstring nocheck, $(DEB_BUILD_OPTIONS)),) + with_check := disabled by DEB_BUILD_OPTIONS +endif +ifneq (,$(filter $(DEB_HOST_ARCH), mipsel mips64el)) + ifneq ($(single_package),yes) + with_check := disabled for $(DEB_HOST_ARCH), testsuite timeouts + endif +endif +# override the Debian porters, we need to know about the test results +ifeq ($(distribution),Debian) + ifneq (,$(filter $(DEB_HOST_ARCH), m68k sh4)) +# with_check := yes + endif +endif +ifeq ($(distribution)-$(DEB_HOST_ARCH),Ubuntu-riscv64) + with_check := disabled for $(DEB_HOST_ARCH) on Ubuntu, qemu builders +endif +#with_check := disabled for this upload + +# not a dependency on all archs, but if available, use it for the testsuite +ifneq (,$(wildcard /usr/bin/localedef)) + locale_data = generate +endif +# try to b-d on locales-all +locale_data = + +ifneq (,$(filter $(build_type), build-cross cross-build-cross)) + ldconfig_arg = --noscripts +endif + +all_enabled_languages := $(enabled_languages) +languages_without_lang_opt := c++ objc obj-c++ + +debian_extra_langs := $(subst obj-c++,objcp,$(debian_extra_langs)) +export debian_extra_langs + +# multilib +biarch_map := i686=x86_64 powerpc=powerpc64 sparc=sparc64 sparc64=sparc s390=s390x s390x=s390 \ + x86_64=i686 powerpc64=powerpc mips=mips64 mipsel=mips64el \ + mips64=mips mips64el=mipsel mipsn32=mips mipsn32el=mipsel \ + mipsr6=mips64r6 mipsr6el=mips64r6el mips64r6=mipsr6 mips64r6el=mipsr6el \ + mipsn32r6=mipsr6 mipsn32r6el=mipsr6el +# FIXME: why still? +biarch_map := $(subst i686=,i486=,$(biarch_map)) + +ifeq ($(derivative),Ubuntu) + ifneq (,$(filter $(distrelease), precise trusty xenial bionic focal groovy hirsute)) + biarch_map += arm=arm + endif +endif +biarch_cpu := $(strip $(patsubst $(DEB_TARGET_GNU_CPU)=%,%, \ + $(filter $(DEB_TARGET_GNU_CPU)=%,$(biarch_map)))) + +biarch64 := no +biarch32 := no +biarchn32 := no +biarchx32 := no +biarchhf := no +biarchsf := no +flavours := +define gen_biarch + ifneq (yes,$$(call envfilt, biarch, , ,yes)) + biarch$1archs := + endif + ifneq (,$$(findstring /$$(DEB_TARGET_ARCH)/,$$(biarch$1archs))) + biarch$1 := yes + flavours += $1 + #biarch$1subdir = $$(biarch_cpu)-$$(DEB_TARGET_GNU_SYSTEM) + biarch$1subdir = $1 + ifeq ($$(with_libgcc),yes) + with_lib$1gcc := yes + endif + ifeq ($$(with_cdev),yes) + with_lib$1gccdev := yes + endif + ifeq ($$(with_libcxx),yes) + with_lib$1cxx := yes + endif + ifeq ($$(with_libcxxdbg),yes) + with_lib$1cxxdbg := yes + endif + ifeq ($$(with_cxxdev),yes) + with_lib$1cxxdev := yes + endif + ifeq ($$(with_libobjc),yes) + with_lib$1objc := yes + endif + ifeq ($$(with_objcdev),yes) + with_lib$1objcdev := yes + endif + ifeq ($$(with_libgfortran),yes) + with_lib$1gfortran := yes + endif + ifeq ($$(with_fdev),yes) + with_lib$1gfortrandev := yes + endif + ifeq (,$(filter $1, hf)) + ifeq ($$(with_libphobos),yes) + with_lib$1phobos := yes + endif + ifeq ($$(with_libphobosdev),yes) + with_lib$1phobosdev := yes + endif + endif + ifeq ($$(with_libssp),yes) + with_lib$1ssp := yes + endif + ifeq ($$(with_libgomp),yes) + with_lib$1gomp:= yes + endif + ifeq ($$(with_libitm),yes) + with_lib$1itm:= yes + endif + ifeq ($$(with_libatomic),yes) + with_lib$1atomic:= yes + endif + ifeq ($$(with_libbacktrace),yes) + with_lib$1backtrace:= yes + endif + ifeq ($$(with_libasan),yes) + with_lib$1asan:= yes + endif + ifeq ($$(with_liblsan),yes) + ifneq (,$$(filter $$(distrelease),lunar jammy focal)) + with_lib$1lsan := yes + endif + endif + ifeq ($$(with_libtsan),yes) + with_lib$1tsan:= yes + endif + ifeq ($$(with_libubsan),yes) + with_lib$1ubsan := yes + endif + ifeq ($$(with_libhwasan),yes) + ifeq ($$(DEB_TARGET_ARCH)-$1,i386-64) + with_lib$1hwasan:= yes + endif + ifeq ($$(DEB_TARGET_ARCH)-$1,x32-64) + with_lib$1hwasan:= yes + endif + endif + ifeq ($$(with_libvtv),yes) + with_lib$1vtv := yes + endif + ifeq ($$(with_libqmath),yes) + with_lib$1qmath := yes + endif + ifeq ($$(with_libgo),yes) + with_lib$1go := yes + endif + ifeq ($$(with_godev),yes) + with_lib$1godev := yes + endif + + biarch_multidir_names = libiberty libgcc libbacktrace libatomic libgomp + ifneq (,$$(findstring gcc-, $$(PKGSOURCE))) + biarch_multidir_names += libstdc++-v3 libobjc libgfortran libssp \ + zlib libitm libsanitizer + ifeq ($$(with_objc_gc),yes) + biarch_multidir_names += boehm-gc + endif + endif + ifneq (,$(findstring yes, $(with_go))) + biarch_multidir_names += libffi + endif + ifeq ($(with_fortran),yes) + biarch_multidir_names += libquadmath + endif + ifeq ($(with_go),yes) + biarch_multidir_names += libgo + endif + ifeq ($(with_phobos),yes) + ifeq (,$(filter $1, hf)) + biarch_multidir_names += libphobos + endif + endif + # FIXME: it now builds, but installs everything into the same $libdir + #ifeq ($(with_m2),yes) + # biarch_multidir_names += libgm2 + #endif + ifneq (,$$(findstring 32,$1)) + TARGET64_MACHINE := $$(strip $$(subst $$(DEB_TARGET_GNU_CPU),$$(biarch_cpu), \ + $$(TARGET_ALIAS))) + TARGET32_MACHINE := $$(TARGET_ALIAS) + else + TARGET64_MACHINE := $$(TARGET_ALIAS) + TARGET64_MACHINE := $$(strip $$(subst $$(DEB_TARGET_GNU_CPU),$$(biarch_cpu), \ + $$(TARGET_ALIAS))) + endif + export TARGET32_MACHINE + export TARGET64_MACHINE + endif +endef +biarch32archs := /amd64/ppc64/kfreebsd-amd64/s390x/sparc64/x32/mipsn32/mipsn32el/mips64/mips64el/ +ifeq ($(derivative),Ubuntu) + ifeq (,$(filter $(distrelease),trusty xenial bionic focal jammy mantic noble)) + biarch32archs := $(subst s390x/,,$(biarch32archs)) + endif +endif +biarch64archs := /i386/powerpc/sparc/s390/mips/mipsel/mipsn32/mipsn32el/ +biarchn32archs := /mips/mipsel/mips64/mips64el/ +ifeq (yes,$(MIPS_R6_ENABLED)) + biarch32archs += /mipsn32r6/mipsn32r6el/mips64r6/mips64r6el/ + biarch64archs += /mipsr6/mipsr6el/mipsn32r6/mipsn32r6el/x32/ + biarchn32archs += /mipsr6/mipsr6el/mips64r6/mips64r6el/ +endif + +ifeq ($(derivative),Ubuntu) + ifneq (,$(filter $(distrelease),precise xenial bionic focal groovy hirsute)) + biarchhfarchs := /armel/ + biarchsfarchs := /armhf/ + endif + ifeq (,$(filter $(distrelease), precise)) + biarchx32archs := /amd64/i386/ + endif +else ifeq ($(derivative),Debian) + biarchx32archs := /amd64/i386/ +endif +$(foreach x,32 64 n32 x32 hf sf,$(eval $(call gen_biarch,$(x)))) + +ifeq ($(DEB_TARGET_ARCH),sh4) + biarch_multidir_names=none +endif +export biarch_multidir_names + +#ifeq ($(trunk_build),yes) +# no_biarch_libs := yes +#endif +no_biarch_libs := + +ifeq ($(no_biarch_libs),yes) + with_lib64gcc := no + with_lib64cxx := no + with_lib64cxxdbg := no + with_lib64objc := no + with_lib64ffi := no + with_lib64gfortran := no + with_lib64ssp := no + with_lib64go := no + with_lib64gomp := no + with_lib64itm := no + with_lib64qmath := no + with_lib64atomic := no + with_lib64backtrace := no + with_lib64asan := no + with_lib64lsan := no + with_lib64tsan := no + with_lib64ubsan := no + with_lib64hwasan := no + with_lib64vtv := no + with_lib64gccdev := no + with_lib64cxxdev := no + with_lib64objcdev := no + with_lib64gfortrandev := no + with_lib64phobosdev := no + + with_lib32gcc := no + with_lib32cxx := no + with_lib32cxxdbg := no + with_lib32objc := no + with_lib32ffi := no + with_lib32gfortran := no + with_lib32ssp := no + with_lib32go := no + with_lib32gomp := no + with_lib32itm := no + with_lib32qmath := no + with_lib32atomic := no + with_lib32backtrace := no + with_lib32asan := no + with_lib32lsan := no + with_lib32tsan := no + with_lib32ubsan := no + with_lib32hwasan := no + with_lib32vtv := no + with_lib32gccdev := no + with_lib32cxxdev := no + with_lib32objcdev := no + with_lib32gfortrandev := no + with_lib32phobosdev := no + + with_libn32gcc := no + with_libn32cxx := no + with_libn32cxxdbg := no + with_libn32objc := no + with_libn32ffi := no + with_libn32gfortran := no + with_libn32ssp := no + with_libn32go := no + with_libn32gomp := no + with_libn32itm := no + with_libn32qmath := no + with_libn32atomic := no + with_libn32backtrace := no + with_libn32asan := no + with_libn32lsan := no + with_libn32tsan := no + with_libn32ubsan := no + with_libn32hwasan := no + with_libn32gccdev := no + with_libn32cxxdev := no + with_libn32objcdev := no + with_libn32gfortrandev:= no + with_libn32phobosdev := no + + with_libx32gcc := no + with_libx32cxx := no + with_libx32cxxdbg := no + with_libx32objc := no + with_libx32ffi := no + with_libx32gfortran := no + with_libx32ssp := no + with_libx32go := no + with_libx32gomp := no + with_libx32itm := no + with_libx32qmath := no + with_libx32atomic := no + with_libx32backtrace := no + with_libx32asan := no + with_libx32lsan := no + with_libx32tsan := no + with_libx32ubsan := no + with_libx32hwasan := no + with_libx32vtv := no + with_libx32gccdev := no + with_libx32cxxdev := no + with_libx32objcdev := no + with_libx32gfortrandev:= no + with_libx32phobosdev := no + + with_libhfgcc := no + with_libhfcxx := no + with_libhfcxxdbg := no + with_libhfobjc := no + with_libhfffi := no + with_libhfgfortran := no + with_libhfssp := no + with_libhfgo := no + with_libhfgomp := no + with_libhfitm := no + with_libhfqmath := no + with_libhfatomic := no + with_libhfbacktrace := no + with_libhfasan := no + with_libhflsan := no + with_libhftsan := no + with_libhfubsan := no + with_libhfhwasan := no + with_libhfgccdev := no + with_libhfcxxdev := no + with_libhfobjcdev := no + with_libhfgfortrandev := no + with_libhfphobosdev := no + + with_libsfgcc := no + with_libsfcxx := no + with_libsfcxxdbg := no + with_libsfobjc := no + with_libsfffi := no + with_libsfgfortran := no + with_libsfssp := no + with_libsfgo := no + with_libsfgomp := no + with_libsfitm := no + with_libsfqmath := no + with_libsfatomic := no + with_libsfbacktrace := no + with_libsfasan := no + with_libsflsan := no + with_libsftsan := no + with_libsfubsan := no + with_libsfhwasan := no + with_libsfgccdev := no + with_libsfcxxdev := no + with_libsfobjcdev := no + with_libsfgfortrandev := no + with_libsfphobosdev := no + + ifeq ($(with_ada)-$(with_separate_gnat),yes-yes) + biarchhf := disabled for Ada + biarchsf := disabled for Ada + endif + +endif + +ifneq (,$(filter yes,$(biarch32) $(biarch64) $(biarchn32) $(biarchx32) $(biarchhf) $(biarchsf))) + multilib := yes +endif + +multilib_archs = $(sort $(subst /, , $(biarch64archs) $(biarch32archs) $(biarchn32archs) $(biarchx32archs) $(biarchhfarchs) $(biarchsfarchs))) + +biarchsubdirs := \ + $(if $(filter yes,$(biarch64)),$(biarch64subdir),) \ + $(if $(filter yes,$(biarch32)),$(biarch32subdir),) \ + $(if $(filter yes,$(biarchn32)),$(biarchn32subdir),) \ + $(if $(filter yes,$(biarchx32)),$(biarchx32subdir),) \ + $(if $(filter yes,$(biarchhf)),$(biarchhfsubdir),) \ + $(if $(filter yes,$(biarchsf)),$(biarchsfsubdir),) +biarchsubdirs := {$(strip $(shell echo $(biarchsubdirs) | tr " " ","))} + +# GNU locales +force_gnu_locales := yes +locale_no_cpus := +locale_no_systems := +ifneq (,$(findstring $(DEB_TARGET_GNU_SYSTEM),$(locale_no_systems))) + force_gnu_locales := disabled for system $(DEB_TARGET_GNU_SYSTEM) +endif + +gcc_tarpath := $(firstword $(wildcard gcc-*.tar.* /usr/src/gcc-13/gcc-*.tar.*)) +gcc_tarball := $(notdir $(gcc_tarpath)) +gcc_srcdir := $(subst -dfsg,,$(patsubst %.tar.xz,%,$(patsubst %.tar.lzma,%,$(patsubst %.tar.gz,%,$(gcc_tarball:.tar.bz2=))))) + +binutils_dsc := $(notdir $(firstword $(wildcard binutils_*.dsc))) +binutils_srcdir := $(shell echo $(binutils_dsc) | sed 's/-.*//;s/_/-/') + +ifneq (,$(filter yes, $(with_offload_nvptx) $(with_offload_gcn))) + newlib_tarpath := $(firstword $(wildcard newlib-*.tar.* /usr/src/gcc-$(BASE_VERSION)/newlib-*.tar.*)) + newlib_tarball := $(notdir $(newlib_tarpath)) + newlib_srcdir := $(patsubst %.tar.xz,%,$(patsubst %.tar.lzma,%,$(patsubst %.tar.gz,%,$(newlib_tarball:.tar.bz2=)))) +endif + +# NOTE: This is not yet used. when building gdc or gnat using the +# gcc-source package, we don't require an exact binary dependency. +ifneq ($(dir $(gcc_tarpath)),./) + built_using_external_source := yes +else + built_using_external_source := +endif +ifeq ($(DEB_CROSS),yes) + add_built_using = yes +endif +ifeq ($(with_ada)-$(with_separate_gnat),yes-yes) + add_built_using = yes +endif + +unpack_stamp := $(stampdir)/01-unpack-stamp +pre_patch_stamp := $(stampdir)/02-pre-patch-stamp +patch_stamp := $(stampdir)/02-patch-stamp +control_stamp := $(stampdir)/03-control-stamp +configure_stamp := $(stampdir)/04-configure-stamp +build_stamp := $(stampdir)/05-build-stamp +build_arch_stamp := $(stampdir)/05-build-arch-stamp +build_indep_stamp := $(stampdir)/05-build-indep-stamp +build_html_stamp := $(stampdir)/05-build-html-stamp +build_locale_stamp := $(stampdir)/05-build-locale-stamp +build_doxygen_stamp := $(stampdir)/05-build-doxygen-stamp +build_gnatdoc_stamp := $(stampdir)/05-build-gnatdoc-stamp +check_stamp := $(stampdir)/06-check-stamp +check_inst_stamp := $(stampdir)/06-check-inst-stamp +install_stamp := $(stampdir)/07-install-stamp +install_snap_stamp := $(stampdir)/07-install-snap-stamp +install_tc_stamp := $(stampdir)/07-install-tc-stamp +binary_stamp := $(stampdir)/08-binary-stamp + +configure_dummy_stamp := $(stampdir)/04-configure-dummy-stamp +build_dummy_stamp := $(stampdir)/05-build-dummy-stamp +install_dummy_stamp := $(stampdir)/07-install-dummy-stamp + +configure_jit_stamp := $(stampdir)/04-configure-jit-stamp +build_jit_stamp := $(stampdir)/05-build-jit-stamp +install_jit_stamp := $(stampdir)/07-install-jit-stamp + +# installation of the offload compilers is required for the check target +# name it 06-install-*-stamp +configure_nvptx_stamp := $(stampdir)/04-configure-nvptx-stamp +build_nvptx_stamp := $(stampdir)/05-build-nvptx-stamp +install_nvptx_stamp := $(stampdir)/06-install-nvptx-stamp + +configure_gcn_stamp := $(stampdir)/04-configure-gcn-stamp +build_gcn_stamp := $(stampdir)/05-build-gcn-stamp +install_gcn_stamp := $(stampdir)/06-install-gcn-stamp + +configure_hppa64_stamp := $(stampdir)/04-configure-hppa64-stamp +build_hppa64_stamp := $(stampdir)/05-build-hppa64-stamp +install_hppa64_stamp := $(stampdir)/07-install-hppa64-stamp + +control_dependencies := $(patch_stamp) + +ifeq ($(single_package),yes) + ifneq (,$(findstring gcc-snapshot, $(PKGSOURCE))) + configure_dependencies = $(configure_stamp) + build_dependencies = $(build_stamp) + install_dependencies = $(install_snap_stamp) + ifeq ($(with_check),yes) + check_dependencies += $(check_stamp) + endif + else ifneq (,$(findstring gcc-toolchain, $(PKGSOURCE))) + configure_dependencies = $(configure_stamp) + build_dependencies = $(build_stamp) + install_dependencies = $(install_tc_stamp) + ifeq ($(with_check),yes) + check_dependencies += $(check_stamp) + endif + else + $(error Unknown single-package $(PKGSOURCE)) + endif +else + ifeq ($(with_base_only),yes) + configure_dependencies = $(configure_dummy_stamp) + build_dependencies = $(build_dummy_stamp) + install_dependencies = $(install_dummy_stamp) + else + configure_dependencies = $(configure_stamp) + build_dependencies = $(build_stamp) + install_dependencies = $(install_stamp) + ifeq ($(with_check),yes) + check_dependencies += $(check_stamp) + endif + endif +endif + +ifeq ($(with_jit),yes) + build_dependencies += $(build_jit_stamp) + install_dependencies += $(install_jit_stamp) +endif + +ifeq ($(with_offload_nvptx),yes) + build_dependencies += $(build_nvptx_stamp) + install_dependencies += $(install_nvptx_stamp) +endif + +ifeq ($(with_offload_gcn),yes) + build_dependencies += $(build_gcn_stamp) + install_dependencies += $(install_gcn_stamp) +endif + +ifeq ($(with_hppa64),yes) + build_dependencies += $(build_hppa64_stamp) + ifneq ($(trunk_build),yes) + install_dependencies += $(install_hppa64_stamp) + endif +endif + +build_dependencies += $(check_dependencies) + +build_arch_dependencies = $(build_dependencies) +build_indep_dependencies = $(build_dependencies) + +ifneq (,$(findstring build-native, $(build_type))) + ifneq ($(single_package),yes) + build_indep_dependencies += $(build_html_stamp) + ifeq ($(with_cxx),yes) + build_indep_dependencies += $(build_doxygen_stamp) + endif + ifeq ($(with_ada),yes) + build_indep_dependencies += $(build_gnatdoc_stamp) + endif + endif +endif + +stamp-dir: + mkdir -p $(stampdir) + +ifeq ($(DEB_CROSS),yes) + define cross_mangle_shlibs + if [ -f debian/$(1)/DEBIAN/shlibs ]; then \ + sed -i s/$(cross_lib_arch)/:$(DEB_TARGET_ARCH)/g debian/$(1)/DEBIAN/shlibs; \ + fi + endef + define cross_mangle_substvars + if [ -f debian/$(1).substvars ]; then \ + sed -i \ + -e 's/:$(DEB_TARGET_ARCH)/$(cross_lib_arch)/g' \ + -e 's/\(libc[.0-9]*-[^:]*\):\([a-z0-9-]*\)/\1-\2-cross/g' \ + $(if $(filter armel,$(DEB_TARGET_ARCH)),-e 's/:armhf/-armhf-cross/g') \ + $(if $(filter armhf,$(DEB_TARGET_ARCH)),-e 's/:armel/-armel-cross/g') \ + debian/$(1).substvars; \ + fi + endef +else + define cross_mangle_shlibs + endef + define cross_mangle_substvars + endef + # precise's dh_shlibdeps doesn't work well for ARM multilibs + # and dh_shlibdeps doesn't work well for cross builds, see #698881. + ifneq (,$(filter $(distrelease),precise quantal raring)) + ifneq (,$(filter $(DEB_TARGET_ARCH), armel armhf arm64)) + ignshld = - + endif + endif + # FIXME: don't stop at the first shlibdeps failure ... + ignshld = - +endif +ifeq ($(DEB_STAGE),rtlibs) + define cross_mangle_shlibs + endef + define cross_mangle_substvars + endef +endif + +# takes a *list* of package names as $1, the multilib dirname as $2 +_shlibdirs = \ + $(if $(strip $(1)), \ + $(shell find $(foreach p,$(1),$(CURDIR)/debian/$(p)) \ + -name '*.so.*' -printf '%h ' | uniq)) \ + $(with_build_sysroot)/lib/$(call mlib_to_march,$(2)) \ + $(with_build_sysroot)/usr/lib/$(call mlib_to_march,$(2)) \ + $(with_build_sysroot)$(subst /usr,,/$(usr_lib$(2))) \ + $(with_build_sysroot)/$(usr_lib$(2)) \ + $(if $(findstring mips64,$(DEB_TARGET_ARCH)), \ + $(with_build_sysroot)/$(usr_lib64)) \ + $(if $(findstring mipsn32,$(DEB_TARGET_ARCH)), \ + $(with_build_sysroot)/$(usr_libn32)) \ + $(if $(filter sparc64,$(DEB_TARGET_ARCH)), \ + $(with_build_sysroot)/$(usr_lib64)) \ + $(if $(filter yes,$(biarchsf) $(biarchhf)), \ + $(with_build_sysroot)/usr/$(call mlib_to_march,$(2))/lib) \ + $(if $(filter yes, $(with_common_libs)),, \ + $(CURDIR)/$(d)/$(usr_lib$(2)) \ + $(CURDIR)/$(d)/usr/$(call mlib_to_march,$(2))/lib) +shlibdirs_to_search = -l$(subst $(SPACE),:,$(foreach d,$(_shlibdirs),$(d))) diff --git a/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules.txt b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules.txt new file mode 100644 index 0000000000..81e5581108 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules.txt @@ -0,0 +1,100 @@ +#! /usr/bin/make -f +# -*- makefile -*- +# Build rules for gcc (>= 2.95) and gcc-snapshot +# Targets found in this makefile: +# - unpack tarballs +# - patch sources +# - (re)create the control file +# - create a debian/rules.parameters file, which is included +# by debian/rules2 +# All other targets are passed to the debian/rules2 file + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +unexport LANG LC_ALL LC_CTYPE LC_COLLATE LC_TIME LC_NUMERIC LC_MESSAGES + +default: build + +include debian/rules.defs +include debian/rules.unpack +include debian/rules.patch + +control: $(control_dependencies) + @echo "Build environment: derivative=$(derivative), release=$(distrelease)" + -mkdir -p $(stampdir) + $(MAKE) -f debian/rules.conf $@ + +configure: control $(unpack_stamp) $(patch_stamp) + $(MAKE) -f debian/rules2 $@ + +pre-build: +# no backport support for these releases ..., keep conditionals for +# Debian: jessie stretch buster bullseye ... +# UBuntu: precise trusty xenial bionic focal groovy hirsute ... +ifneq (,$(filter $(distrelease),lenny squeeze wheezy hardy lucid)) + @echo explicitely fail the build for $(distribution)/$(distrelease) on $(DEB_TARGET_ARCH). + @echo no bug report required. please figure out the back port yourself. + false +endif +#ifeq ($(PKGSOURCE),gcc-13) +# ifneq (,$(findstring native, $(build_type))) +# ifneq (,$(findstring mips, $(TARGET_ALIAS))) +# @echo "native compiler for $(TARGET_ALIAS) not built from this source." +# @echo "See https://lists.debian.org/debian-gcc/2021/05/msg00011.html" +# false +# endif +# endif +#endif + +build: pre-build control + $(MAKE) $(NJOBS) -f debian/rules2 $@ +build-arch: pre-build control + $(MAKE) $(NJOBS) -f debian/rules2 $@ +build-indep: pre-build control + DEB_BUILD_OPTIONS="$(DEB_BUILD_OPTIONS) nostrap nohppa64 nonvptx nocheck nopgo nolto" \ + $(MAKE) $(NJOBS) -f debian/rules2 $@ + +check: $(check_stamp) +$(check_stamp): $(build_stamp) + $(MAKE) -f debian/rules2 $@ + +clean: + rm -rf $(stampdir) +# remove temporary dirs used for unpacking + rm -rf $(gcc_srcdir) $(gdc_srcdir) $(newlib_srcdir) $(binutils_srcdir) + -$(MAKE) -f debian/rules2 $@ + rm -rf $(srcdir)* $(builddir)* debian/tmp* html + rm -f bootstrap-* test-protocol* first-move-stamp + rm -f debian/*.tmp + rm -f debian/soname-cache + find debian -name '.#*' | xargs -r rm -f + rm -f $(series_file)* + rm -rf .pc + dh_clean + +install: + $(MAKE) -f debian/rules2 $@ + +html-docs doxygen-docs update-doxygen-docs update-ada-files xxx: + $(MAKE) -f debian/rules2 $@ + +binary-arch binary: + $(MAKE) -f debian/rules2 $@ + +binary-indep: + DEB_BUILD_OPTIONS="$(DEB_BUILD_OPTIONS) nostrap nohppa64 nonvptx nocheck nopgo nolto" \ + $(MAKE) -f debian/rules2 $@ + +source diff: + @echo >&2 'source and diff are obsolete - use dpkg-source -b'; false + +release: + foo=$(shell basename $(CURDIR)); \ + if [ "$$foo" != "gcc-3.4" ]; then \ + find -name CVS -o -name .cvsignore -o -name '.#*' | \ + xargs rm -rf; \ + fi + +.NOTPARALLEL: +.PHONY: build clean binary-indep binary-arch binary release diff --git a/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules2.txt b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules2.txt new file mode 100644 index 0000000000..552f7a5d24 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1-selected/debian/rules2.txt @@ -0,0 +1,3117 @@ +#! /usr/bin/make -f +# -*- makefile -*- + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +.SUFFIXES: + +include debian/rules.defs +include debian/rules.parameters + +ifneq (,$(findstring gcc-toolchain, $(PKGSOURCE))) + -include $(binutils_srcdir)/debian/rules.defs +endif + +dh_compat2 := $(shell dpkg --compare-versions "$$(dpkg-query -f '$${Version}' -W debhelper)" lt 9.20150811ubuntu2 \ + && echo DH_COMPAT=2) + +# some tools +SHELL = /bin/bash -e # brace expansion in rules file +IR = install -m 644 # Install regular file +IP = install -m 755 # Install program +IS = install -m 755 # Install script + +DWZ = dwz +ifneq (,$(filter $(distrelease),jessie stretch trusty xenial)) + DWZ = : dwz +endif + +# dwz: debian/gccgo-11/usr/lib/gcc/mips64el-linux-gnuabi64/11/go1: Found two copies of .debug_line_str section +ifneq (,$(filter $(DEB_HOST_ARCH),mips64el)) + DWZ = : dwz +endif + +# kernel-specific ulimit hack +ifeq ($(findstring linux,$(DEB_HOST_GNU_SYSTEM)),linux) + ULIMIT_M = if [ -e /proc/meminfo ]; then \ + m=`awk '/^((Mem|Swap)Free|Cached)/{m+=$$2}END{print int(m*.9)}' \ + /proc/meminfo`; \ + else \ + m=`vmstat --free --swap-free --kilobytes|awk '{m+=$$2}END{print int(m*.9)}'`; \ + fi; \ + echo "Limiting memory for test runs to $${m}kB"; \ + if ulimit -m $$m; then \ + echo " limited to `ulimit -m`kB"; \ + else \ + echo " failed"; \ + fi +else + ULIMIT_M = true +endif + +#time_command = /usr/bin/time -v +ifeq ($(usage_stats),yes) + time_command += $(CURDIR)/debian/usage-wrapper.py $(NJOBS) --base-memory -m 2.0 -o usage-$(shell echo $@ | sed 's/.*0[1-9]-//;s/-stamp//').svg +endif + +ifeq ($(locale_data),generate) + SET_LOCPATH = LOCPATH=$(CURDIR)/locales +endif + +SET_PATH = PATH=$(CURDIR)/bin:/usr/$(libdir)/gcc/bin:$$PATH +ifeq ($(trunk_build),yes) + ifneq (,$(findstring sparc64-linux,$(DEB_TARGET_GNU_TYPE))) + SET_PATH = PATH=/usr/lib/gcc-snapshot/bin:$(CURDIR)/bin:/usr/$(libdir)/gcc/bin:$$PATH + endif + ifneq (,$(findstring ppc64-linux,$(DEB_TARGET_GNU_TYPE))) + SET_PATH = PATH=/usr/lib/gcc-snapshot/bin:$(CURDIR)/bin:/usr/$(libdir)/gcc/bin:$$PATH + endif +endif + +# the recipient for the test summaries. Send with: debian/rules mail-summary +S_EMAIL = gcc@packages.debian.org gcc-testresults@gcc.gnu.org + +# build not yet prepared to take variables from the environment +define unsetenv + unexport $(1) + $(1) = +endef +$(foreach v, CPPFLAGS CFLAGS CXXFLAGS DFLAGS FFLAGS FCFLAGS LDFLAGS OBJCFLAGS OBJCXXFLAGS, $(if $(filter environment,$(origin $(v))),$(eval $(call unsetenv, $(v))))) + +CC = $(notdir $(firstword $(wildcard \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-gcc-13 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-gcc-12 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-gcc-11 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-gcc-10 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-gcc-9 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-gcc-8 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-gcc))) +CXX = $(notdir $(firstword $(wildcard \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-g++-13 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-g++-12 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-g++-11 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-g++-10 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-g++-9 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-g++-8 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-g++))) +GDC = $(notdir $(firstword $(wildcard \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-gdc-13 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-gdc-12 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-gdc-11 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-gdc-10 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-gdc-9 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-gdc))) +ifeq ($(with_ada),yes) + GNAT = $(notdir $(firstword $(wildcard \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-gnat-13 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-gnat-12 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-gnat-11 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-gnat-10 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-gnat-9 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-gnat-8 \ + /usr/bin/$(DEB_HOST_GNU_TYPE)-gnat /usr/bin/gnatgcc))) + ifeq ($(GNAT),gnatgcc) + CC := $(shell readlink /usr/bin/gnatgcc) + else ifneq (,$(GNAT)) + CC = $(subst gnat,gcc,$(GNAT)) + else ifneq (,$(filter $(distrelease), trusty)) + CC = gcc-4.8 + else ifneq (,$(wildcard /usr/bin/$(DEB_HOST_GNU_TYPE)-gcc)) + CC = $(DEB_HOST_GNU_TYPE)-gcc + else + CC = gcc + endif + CXX = $(subst gcc,g++,$(CC)) + GDC = $(subst gcc,gdc,$(CC)) + GNATBIND = $(subst gnat,gnatbind,$(GNAT)) + GNATMAKE = $(subst gnat,gnatmake,$(GNAT)) +endif + +ifneq (,$(filter $(build_type),cross-build-native cross-build-cross)) + SET_TARGET_TOOLS = \ + CC_FOR_TARGET=$(DEB_TARGET_GNU_TYPE)-gcc-$(BASE_VERSION) \ + CXX_FOR_TARGET=$(DEB_TARGET_GNU_TYPE)-g++-$(BASE_VERSION) \ + GFORTRAN_FOR_TARGET=$(DEB_TARGET_GNU_TYPE)-gfortran-$(BASE_VERSION) \ + GOC_FOR_TARGET=$(DEB_TARGET_GNU_TYPE)-gccgo-$(BASE_VERSION) \ + GNAT_FOR_TARGET=$(DEB_TARGET_GNU_TYPE)-gnat-$(BASE_VERSION) \ + GDC_FOR_TARGET=$(DEB_TARGET_GNU_TYPE)-gdc-$(BASE_VERSION) \ + GM2_FOR_TARGET=$(DEB_TARGET_GNU_TYPE)-gm2-$(BASE_VERSION) +endif + +ifeq ($(DEB_BUILD_GNU_TYPE),$(DEB_TARGET_GNU_TYPE)) + CC_FOR_TARGET = $(builddir)/gcc/xgcc -B$(builddir)/gcc/ +else + CC_FOR_TARGET = $(DEB_TARGET_GNU_TYPE)-gcc +endif + +ifneq ($(derivative),Ubuntu) + ifneq (,$(filter $(DEB_TARGET_ARCH), arm armel mips mipsel)) + STAGE1_CFLAGS = -g -O2 + endif +endif + +ifeq ($(with_ssp_default),yes) + STAGE1_CFLAGS = -g + ifeq (,$(BOOT_CFLAGS)) + BOOT_CFLAGS = -g -O2 + endif + LIBCFLAGS = -g -O2 + LIBCXXFLAGS = -g -O2 -fno-implicit-templates + # Only use -fno-stack-protector when known to the stage1 compiler. + cc-fno-stack-protector := $(shell if $(CC) $(CFLAGS) -fno-stack-protector \ + -S -o /dev/null -xc /dev/null > /dev/null 2>&1; \ + then echo "-fno-stack-protector"; fi;) + $(foreach var,STAGE1_CFLAGS BOOT_CFLAGS LIBCFLAGS LIBCXXFLAGS,$(eval \ + $(var) += $(cc-fno-stack-protector))) +endif + +# FIXME: passing LDFLAGS for native doesn't do anything +ifneq (,$(filter $(build_type), build-cross cross-build-cross)) + CFLAGS = -g -O2 + LDFLAGS = -Wl,-z,relro + ifeq ($(DEB_TARGET_ARCH),alpha) + LDFLAGS += -Wl,--no-relax + endif +else + BOOT_LDFLAGS = -Wl,-z,relro + ifeq ($(DEB_TARGET_ARCH),alpha) + BOOT_LDFLAGS += -Wl,--no-relax + endif +endif +LDFLAGS_FOR_TARGET = -Wl,-z,relro +ifeq ($(DEB_TARGET_ARCH),alpha) + LDFLAGS := $(filter-out -Wl$(COMMA)--no-relax, $(LDFLAGS)) -Wl,--no-relax +endif + +ifneq (,$(findstring static,$(DEB_BUILD_OPTIONS))) + LDFLAGS += -static +endif + +ifneq ($(findstring gccdebug, $(DEB_BUILD_OPTIONS)),) + CFLAGS = -O0 -g3 -fno-inline + CXXFLAGS = -O0 -g3 -fno-inline + CFLAGS_FOR_BUILD = -O0 -g3 -fno-inline + CXXFLAGS_FOR_BUILD = -O0 -g3 -fno-inline + CFLAGS_FOR_TARGET = -O0 -g3 -fno-inline + CXXFLAGS_FOR_TARGET = -O0 -g3 -fno-inline + BOOT_CFLAGS = + BOOT_LDFLAGS = + STAGE1_CFLAGS = + STAGE1_LDFLAGS = +endif + +ifeq ($(DEB_TARGET_ARCH),arm64) + # Build with PAC/BTI support if enabled in the build flags + # https://wiki.debian.org/ToolChain/PACBTI + ifneq (,$(findstring -mbranch-protection=standard,$(shell DEB_HOST_ARCH=$(DEB_TARGET_ARCH) dpkg-buildflags --get CFLAGS))) + CFLAGS_SECURE = -mbranch-protection=standard + else + CFLAGS_SECURE = + endif + + ifeq ($(DEB_CROSS),yes) + # Building cross compilers + CFLAGS_FOR_TARGET += $(CFLAGS_SECURE) + CXXFLAGS_FOR_TARGET += $(CFLAGS_SECURE) + else ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE)) + # Cross build of the native compiler + CFLAGS_FOR_TARGET += $(CFLAGS_SECURE) + CXXFLAGS_FOR_TARGET += $(CFLAGS_SECURE) + else + # Native build + CFLAGS += $(CFLAGS_SECURE) + CXXFLAGS += $(CFLAGS_SECURE) + endif +endif + +ifneq (,$(findstring -fno-omit-frame-pointer,$(shell DEB_HOST_ARCH=$(DEB_TARGET_ARCH) dpkg-buildflags --get CFLAGS))) + CFLAGS_FRAME_POINTER = -fno-omit-frame-pointer +else + CFLAGS_FRAME_POINTER = +endif + +ifeq ($(DEB_CROSS),yes) + # Building cross compilers + CFLAGS_FOR_TARGET += $(CFLAGS_FRAME_POINTER) + CXXFLAGS_FOR_TARGET += $(CFLAGS_FRAME_POINTER) +else ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE)) + # Cross build of the native compiler + CFLAGS_FOR_TARGET += $(CFLAGS_FRAME_POINTER) + CXXFLAGS_FOR_TARGET += $(CFLAGS_FRAME_POINTER) +else + # Native build + CFLAGS += $(CFLAGS_FRAME_POINTER) + CXXFLAGS += $(CFLAGS_FRAME_POINTER) +endif + +# set CFLAGS/LDFLAGS for the configure step only, maybe be modifed for some target +# all other flags are passed to the make step. +pass_vars = $(foreach v,$(1),$(if $($(v)),$(v)="$($(v))")) +flags_to_pass := CFLAGS CXXFLAGS LIBCFLAGS LIBCXXFLAGS LDFLAGS + +docdir = usr/share/doc + +# no prefix for regular builds, would disable searching for as / ld +binutils_prefix = +ifneq (,$(with_build_sysroot)) + binutils_prefix = $(with_build_sysroot)/usr/bin +endif + +CONFARGS = -v \ + --with-pkgversion='$(distribution)$(if $(with_ibm_branch),/IBM)___$(DEB_VERSION)' \ + --with-bugurl='file:///usr/share/doc/$(PKGSOURCE)/README.Bugs' + +CONFARGS += \ + --enable-languages=$(subst $(SPACE),$(COMMA),$(enabled_languages)) \ + --prefix=/$(PF) \ + --with-gcc-major-version-only \ + +ifneq (,$(with_build_sysroot)) + CONFARGS += \ + --with-as=$(binutils_prefix)/$(DEB_TARGET_GNU_TYPE)-as \ + --with-ld=$(binutils_prefix)/$(DEB_TARGET_GNU_TYPE)-ld +endif + +ifeq ($(versioned_packages),yes) + CONFARGS += --program-suffix=-$(BASE_VERSION) +endif +ifneq (,$(filter $(build_type),build-native cross-build-native)) + CONFARGS += --program-prefix=$(cmd_prefix) +endif + +ifneq (,$(filter $(DEB_STAGE),stage1 stage2)) + CONFARGS += \ + --disable-decimal-float \ + --disable-libatomic \ + --disable-libgomp \ + --disable-libssp \ + --disable-libquadmath \ + --disable-libsanitizer \ + --disable-threads \ + --disable-bootstrap \ + --libexecdir=/$(libexecdir) \ + --libdir=/$(PF)/$(configured_libdir) \ + $(if $(with_build_sysroot),--with-build-sysroot=$(with_build_sysroot)) \ + $(if $(findstring build-cross, $(build_type)), \ + $(if $(with_sysroot),--with-sysroot=$(with_sysroot))) \ + --enable-linker-build-id + + ifeq ($(with_multiarch_lib),yes) + CONFARGS += \ + --enable-multiarch + endif + + ifeq ($(DEB_STAGE),stage1) + CONFARGS += \ + --disable-shared \ + --with-newlib \ + --without-headers + else + # stage2 + CONFARGS += \ + --enable-shared + endif +else + CONFARGS += \ + --enable-shared \ + --enable-linker-build-id \ + +ifneq ($(single_package),yes) + CONFARGS += \ + --libexecdir=/$(libexecdir) \ + --without-included-gettext \ + --enable-threads=posix \ + --libdir=/$(PF)/$(configured_libdir) +endif + +ifneq ($(with_cpp),yes) + CONFARGS += --disable-cpp +endif + +ifeq ($(with_nls),yes) + CONFARGS += --enable-nls +else + CONFARGS += --disable-nls +endif + +ifeq ($(with_bootstrap),off) + CONFARGS += --disable-bootstrap +else ifneq ($(with_bootstrap),) + CONFARGS += --enable-bootstrap +endif + +ifneq ($(with_sysroot),) + CONFARGS += --with-sysroot=$(with_sysroot) +endif +ifneq ($(with_build_sysroot),) + CONFARGS += --with-build-sysroot=$(with_build_sysroot) +endif + +ifeq ($(force_gnu_locales),yes) + CONFARGS += --enable-clocale=gnu +endif + +ifeq ($(with_cxx)-$(with_cxx_debug),yes-yes) + CONFARGS += --enable-libstdcxx-debug +endif +CONFARGS += --enable-libstdcxx-time=yes +CONFARGS += --with-default-libstdcxx-abi=$(libstdcxx_abi) +ifeq ($(libstdcxx_abi),gcc4-compatible) + CONFARGS += --disable-libstdcxx-dual-abi +endif +CONFARGS += --enable-libstdcxx-backtrace + +ifeq (,$(filter $(DEB_TARGET_ARCH), hurd-amd64 hurd-i386 kfreebsd-amd64 kfreebsd-i386)) + CONFARGS += --enable-gnu-unique-object +endif + +ifneq ($(with_ssp),yes) + CONFARGS += --disable-libssp +endif + +ifneq ($(with_gomp),yes) + CONFARGS += --disable-libgomp +endif + +ifneq ($(with_itm),yes) + CONFARGS += --disable-libitm +endif + +ifneq ($(with_atomic),yes) + CONFARGS += --disable-libatomic +endif + +ifneq (,$(filter $(DEB_TARGET_ARCH),$(vtv_archs))) + ifeq ($(with_vtv),yes) + CONFARGS += --enable-vtable-verify + else + CONFARGS += --disable-vtable-verify + endif +endif + +ifneq ($(with_asan),yes) + CONFARGS += --disable-libsanitizer +endif + +ifneq ($(with_qmath),yes) + CONFARGS += --disable-libquadmath --disable-libquadmath-support +endif + +ifeq ($(with_plugins),yes) + CONFARGS += --enable-plugin +endif + +#ifeq ($(with_gold),yes) +# CONFARGS += --enable-gold --enable-ld=default +#endif + +#CONFARGS += --with-plugin-ld=ld.gold +#CONFARGS += --with-plugin-ld + +# enable pie-by-default on pie_archs +ifeq ($(with_pie),yes) + CONFARGS += --enable-default-pie +endif + +endif # !DEB_STAGE + +CONFARGS += --with-system-zlib + +ifeq ($(with_phobos),yes) + CONFARGS += --enable-libphobos-checking=release + ifeq ($(DEB_CROSS),yes) + CONFARGS += --without-target-system-zlib + else + CONFARGS += --with-target-system-zlib=auto + endif +endif + +ifeq ($(with_d),yes) + ifneq (,$(filter $(DEB_TARGET_ARCH), $(druntime_only_archs))) + CONFARGS += --with-libphobos-druntime-only=yes + else ifneq ($(with_phobos),yes) + CONFARGS += --disable-libphobos + endif +endif + +ifeq ($(with_objc)-$(with_objc_gc),yes-yes) + CONFARGS += --enable-objc-gc=auto +endif + +ifneq (,$(filter $(DEB_TARGET_GNU_TYPE), i486-linux-gnu i586-linux-gnu i686-linux-gnu)) + ifeq ($(multilib),yes) + ifeq ($(biarch64),yes) + CONFARGS += --enable-targets=all + endif + endif +endif + +ifneq (,$(filter $(DEB_TARGET_GNU_TYPE), x86_64-linux-gnu x86_64-linux-gnux32 x86_64-gnu x86_64-kfreebsd-gnu s390x-linux-gnu sparc64-linux-gnu)) + ifneq ($(biarch32),yes) + CONFARGS += --disable-multilib + endif +endif + +ifneq (,$(filter $(DEB_TARGET_GNU_TYPE), powerpc-linux-gnu powerpc-linux-gnuspe)) + CONFARGS += --enable-secureplt + ifeq ($(biarch64),yes) + CONFARGS += --disable-softfloat --with-cpu=default32 + ifeq ($(multilib),yes) + CONFARGS += --disable-softfloat \ + --enable-targets=powerpc-linux,powerpc64-linux + endif + else + CONFARGS += --disable-multilib + endif +endif + +ifneq (,$(findstring powerpc64le-linux,$(DEB_TARGET_GNU_TYPE))) + CONFARGS += --enable-secureplt + ifeq ($(derivative),Ubuntu) + ifneq (,$(filter $(distrelease), jessie trusty)) + CONFARGS += --with-cpu=power7 --with-tune=power8 + else ifneq (,$(filter $(distrelease), xenial bionic focal hirsute impish)) + CONFARGS += --with-cpu=power8 + else + CONFARGS += --with-cpu=power9 + endif + endif + CONFARGS += --enable-targets=powerpcle-linux + CONFARGS += --disable-multilib +endif + +ifneq (,$(findstring powerpc64-linux,$(DEB_TARGET_GNU_TYPE))) + CONFARGS += --enable-secureplt + ifeq ($(biarch32),yes) + ifeq ($(multilib),yes) + CONFARGS += --disable-softfloat --enable-targets=powerpc64-linux,powerpc-linux + endif + else + CONFARGS += --disable-multilib + endif + ifeq ($(derivative),Ubuntu) + CONFARGS += --with-cpu-32=power7 --with-cpu-64=power7 + endif +endif + +# FIXME: only needed for isl-0.13 for now +#CONFARGS += --disable-isl-version-check + +ifneq (,$(findstring cross-build-,$(build_type))) + # FIXME: requires isl headers for the target + #CONFARGS += --without-isl + # FIXME: build currently fails build the precompiled headers + CONFARGS += --disable-libstdcxx-pch +endif + +ifeq ($(with_multiarch_lib),yes) + CONFARGS += --enable-multiarch +endif + +ifneq (,$(findstring alpha,$(DEB_TARGET_GNU_CPU))) + CONFARGS += --with-cpu=ev56 +endif + +ifneq (,$(findstring aarch64,$(DEB_TARGET_GNU_CPU))) + # requires binutils 2.25.90 or newer + ifeq (,$(filter $(distrelease), precise trusty)) + CONFARGS += --enable-fix-cortex-a53-843419 + endif +endif + +ifneq (,$(findstring softfloat,$(DEB_TARGET_GNU_CPU))) + CONFARGS += --with-float=soft +endif + +ifneq (,$(findstring arc-linux,$(DEB_TARGET_GNU_TYPE))) + CONFARGS += --disable-multilib +endif + +ifneq (,$(findstring arm-vfp,$(DEB_TARGET_GNU_CPU))) + CONFARGS += --with-fpu=vfp +endif + +ifneq (,$(findstring arm, $(DEB_TARGET_GNU_CPU))) + ifeq ($(multilib),yes) + CONFARGS += --enable-multilib + endif + CONFARGS += --disable-sjlj-exceptions + ifneq (,$(filter %armhf,$(DEB_TARGET_ARCH))) + ifeq ($(distribution),Raspbian) + with_arm_arch = armv6+fp + else + ifneq (,$(filter $(distrelease), jessie stretch buster bullseye xenial bionic focal hirsute)) + with_arm_fpu = vfpv3-d16 + with_arm_arch = armv7-a + else + with_arm_fpu = + with_arm_arch = armv7-a+fp + endif + endif + else + # armel + ifeq ($(derivative),Debian) + ifneq (,$(filter $(distrelease), jessie stretch)) + with_arm_arch = armv4t + else + with_arm_arch = armv5te + endif + else ifneq (,$(filter $(distrelease), precise)) + with_arm_arch = armv7-a+fp + else + with_arm_arch = armv5t # starting with quantal + CONFARGS += --with-specs='%{mfloat-abi=hard:-march=armv7-a___-mcpu=generic-armv7-a___-mfloat-abi=hard}' + endif + endif + CONFARGS += --with-arch=$(with_arm_arch) + ifneq (,$(with_arm_fpu)) + CONFARGS += --with-fpu=$(with_arm_fpu) + endif + CONFARGS += --with-float=$(float_abi) + ifeq ($(with_arm_thumb),yes) + CONFARGS += --with-mode=thumb + endif +endif + +ifeq ($(DEB_TARGET_GNU_CPU),$(findstring $(DEB_TARGET_GNU_CPU),m68k)) + CONFARGS += --disable-werror +endif +# FIXME: correct fix-warnings.dpatch +ifeq ($(derivative),Ubuntu) + CONFARGS += --disable-werror +else ifeq ($(derivative),Debian) + CONFARGS += --disable-werror +endif + +ifneq (,$(findstring loongarch64-linux,$(DEB_TARGET_GNU_TYPE))) + CONFARGS += --with-abi=lp64d --disable-multilib +endif + +ifneq (,$(findstring sparc-linux,$(DEB_TARGET_GNU_TYPE))) + ifeq ($(biarch64),yes) + CONFARGS += --enable-targets=all + CONFARGS += --with-cpu-32=ultrasparc + else + CONFARGS += --with-cpu=ultrasparc + endif +endif + +ifneq (,$(findstring sparc64-linux,$(DEB_TARGET_GNU_TYPE))) + CONFARGS += --with-cpu-32=ultrasparc + ifeq ($(biarch32),yes) + CONFARGS += --enable-targets=all + endif +endif + +ifneq (,$(findstring ia64-linux,$(DEB_TARGET_GNU_TYPE))) + ifneq ($(with_internal_libunwind),yes) + CONFARGS += --with-system-libunwind + endif +endif + +ifneq (,$(findstring sh4-linux,$(DEB_TARGET_GNU_TYPE))) + CONFARGS += --with-cpu=sh4 --with-multilib-list=m4,m4-nofpu +endif + +ifneq (,$(findstring m68k-linux,$(DEB_TARGET_GNU_TYPE))) + CONFARGS += --disable-multilib +endif + +ifneq (,$(findstring riscv64-linux,$(DEB_TARGET_GNU_TYPE))) + CONFARGS += --disable-multilib + CONFARGS += --with-arch=rv64gc --with-abi=lp64d +endif + +ifneq (,$(findstring s390x-linux,$(DEB_TARGET_GNU_TYPE))) + ifeq ($(derivative),Ubuntu) + ifneq (,$(filter $(distrelease),xenial bionic focal)) + CONFARGS += --with-arch=zEC12 + else ifneq (,$(filter $(distrelease),jammy kinetic)) + CONFARGS += --with-arch=z13 --with-tune=z15 + else + CONFARGS += --with-arch=z13 --with-tune=z16 + endif + else # Debian + CONFARGS += --with-arch=z196 + endif + ifneq (,$(filter $(distrelease),stretch buster bullseye bookworm xenial bionic focal jammy lunar mantic)) + CONFARGS += --enable-s390-excess-float-precision + else + CONFARGS += --disable-s390-excess-float-precision + endif +endif + +ifeq ($(DEB_TARGET_ARCH_OS),linux) + ifneq (,$(findstring $(DEB_TARGET_ARCH), alpha powerpc ppc64 ppc64el s390 s390x sparc sparc64)) + CONFARGS += --with-long-double-128 + endif +endif + +ifneq (,$(filter $(derivative),Ubuntu)) + ifneq (,$(filter $(DEB_TARGET_ARCH), amd64 i386 x32)) + ifneq (,$(filter $(distrelease),precise xenial bionic)) + CONFARGS += --disable-cet + else + CONFARGS += --enable-cet + endif + endif +else ifneq (,$(filter $(derivative),Debian)) + ifneq (,$(filter $(DEB_TARGET_ARCH), amd64 x32)) + ifneq (,$(filter $(distrelease),jessie stretch buster bullseye)) + CONFARGS += --disable-cet + else + CONFARGS += --enable-cet + endif + endif +endif + +ifneq (,$(filter $(DEB_TARGET_ARCH), amd64 i386 kfreebsd-i386 kfreebsd-amd64)) + ifneq (,$(filter $(derivative),Ubuntu)) + CONFARGS += --with-arch-32=i686 + else # Debian + ifneq (,$(filter $(distrelease), jessie)) + CONFARGS += --with-arch-32=i586 + else + CONFARGS += --with-arch-32=i686 + endif + endif +endif + +ifeq ($(DEB_TARGET_ARCH),amd64) + CONFARGS += --with-abi=m64 +endif +ifeq ($(DEB_TARGET_ARCH),x32) + CONFARGS += --with-abi=mx32 +endif +ifeq ($(multilib),yes) + ifneq (,$(filter $(DEB_TARGET_ARCH), amd64 i386)) + CONFARGS += --with-multilib-list=m32,m64$(if $(filter yes,$(biarchx32)),$(COMMA)mx32) + else ifeq ($(DEB_TARGET_ARCH),x32) + CONFARGS += --with-multilib-list=mx32,m64,m32 + endif + CONFARGS += --enable-multilib +endif + +ifneq (,$(filter $(DEB_TARGET_ARCH), hurd-i386)) + CONFARGS += --with-arch=i686 +endif + +ifneq (,$(filter $(DEB_TARGET_ARCH), hurd-amd64)) + CONFARGS += --disable-multilib +endif + +ifneq (,$(filter $(DEB_TARGET_ARCH), amd64 i386 hurd-amd64 hurd-i386 kfreebsd-i386 kfreebsd-amd64)) + CONFARGS += --with-tune=generic +endif + +ifneq (,$(findstring mips-linux,$(DEB_TARGET_GNU_TYPE))) + CONFARGS += --with-arch-32=mips32r2 --with-fp-32=xx + CONFARGS += --with-lxc1-sxc1=no + ifeq ($(multilib),yes) + ifeq ($(biarchn32)-$(biarch64),yes-yes) + CONFARGS += --enable-targets=all + CONFARGS += --with-arch-64=mips64r2 + endif + endif +endif + +ifneq (,$(findstring mipsel-linux,$(DEB_TARGET_GNU_TYPE))) + CONFARGS += --with-arch-32=mips32r2 --with-fp-32=xx + CONFARGS += --with-madd4=no + CONFARGS += --with-lxc1-sxc1=no + ifeq ($(multilib),yes) + ifeq ($(biarchn32)-$(biarch64),yes-yes) + CONFARGS += --enable-targets=all + CONFARGS += --with-arch-64=mips64r2 + endif + endif +endif + +#FIXME: howto for mipsn32? +ifneq (,$(findstring mips64el-linux-gnuabin32,$(DEB_TARGET_GNU_TYPE))) + CONFARGS += --with-madd4=no + ifeq ($(multilib),yes) + ifeq ($(biarch64)-$(biarch32),yes-yes) + CONFARGS += --enable-targets=all + CONFARGS += --with-arch-64=mips64r2 + CONFARGS += --with-arch-32=mips32r2 --with-fp-32=xx + endif + endif +endif + +ifneq (,$(findstring mips64-linux-gnuabin32,$(DEB_TARGET_GNU_TYPE))) + ifeq ($(multilib),yes) + ifeq ($(biarch64)-$(biarch32),yes-yes) + CONFARGS += --enable-targets=all + CONFARGS += --with-arch-64=mips64r2 + CONFARGS += --with-arch-32=mips32r2 --with-fp-32=xx + endif + endif +endif + +ifneq (,$(findstring mips64el-linux-gnuabi64,$(DEB_TARGET_GNU_TYPE))) + CONFARGS += --with-mips-plt + CONFARGS += --with-arch-64=mips64r2 + CONFARGS += --with-madd4=no + ifeq ($(multilib),yes) + ifeq ($(biarchn32)-$(biarch32),yes-yes) + CONFARGS += --enable-targets=all + CONFARGS += --with-arch-32=mips32r2 --with-fp-32=xx + endif + endif +endif + +ifneq (,$(findstring mips64-linux-gnuabi64,$(DEB_TARGET_GNU_TYPE))) + CONFARGS += --with-mips-plt + CONFARGS += --with-arch-64=mips64r2 + ifeq ($(multilib),yes) + ifeq ($(biarchn32)-$(biarch32),yes-yes) + CONFARGS += --enable-targets=all + CONFARGS += --with-arch-32=mips32r2 --with-fp-32=xx + endif + endif +endif + +ifneq (,$(findstring mipsisa32r6-linux,$(DEB_TARGET_GNU_TYPE))) + CONFARGS += --with-arch-32=mips32r6 --with-tune-32=mips32r6 + ifeq ($(multilib),yes) + ifeq ($(biarchn32)-$(biarch64),yes-yes) + CONFARGS += --enable-targets=all + CONFARGS += --with-arch-64=mips64r6 --with-tune-64=mips64r6 + endif + endif +endif + +ifneq (,$(findstring mipsisa32r6el-linux,$(DEB_TARGET_GNU_TYPE))) + CONFARGS += --with-arch-32=mips32r6 --with-tune-32=mips32r6 + ifeq ($(multilib),yes) + ifeq ($(biarchn32)-$(biarch64),yes-yes) + CONFARGS += --enable-targets=all + CONFARGS += --with-arch-64=mips64r6 --with-tune-64=mips64r6 + endif + endif +endif + +#FIXME: howto for mipsn32? +ifneq (,$(findstring mipsisa64r6el-linux-gnuabin32,$(DEB_TARGET_GNU_TYPE))) + CONFARGS += --with-mips-plt + ifeq ($(multilib),yes) + ifeq ($(biarch64)-$(biarch32),yes-yes) + CONFARGS += --enable-targets=all + CONFARGS += --with-arch-64=mips64r6 --with-tune-64=mips64r6 + CONFARGS += --with-arch-32=mips32r6 --with-tune-32=mips32r6 + endif + endif +endif + +ifneq (,$(findstring mipsisa64r6-linux-gnuabin32,$(DEB_TARGET_GNU_TYPE))) + CONFARGS += --with-mips-plt + ifeq ($(multilib),yes) + ifeq ($(biarch64)-$(biarch32),yes-yes) + CONFARGS += --enable-targets=all + CONFARGS += --with-arch-64=mips64r6 --with-tune-64=mips64r6 + CONFARGS += --with-arch-32=mips32r6 --with-tune-32=mips32r6 + endif + endif +endif + +ifneq (,$(findstring mipsisa64r6el-linux-gnuabi64,$(DEB_TARGET_GNU_TYPE))) + CONFARGS += --with-mips-plt + CONFARGS += --with-arch-64=mips64r6 --with-tune-64=mips64r6 + ifeq ($(multilib),yes) + ifeq ($(biarchn32)-$(biarch32),yes-yes) + CONFARGS += --enable-targets=all + CONFARGS += --with-arch-32=mips32r6 --with-tune-32=mips32r6 + endif + endif +endif + +ifneq (,$(findstring mipsisa64r6-linux-gnuabi64,$(DEB_TARGET_GNU_TYPE))) + CONFARGS += --with-mips-plt + CONFARGS += --with-arch-64=mips64r6 --with-tune-64=mips64r6 + ifeq ($(multilib),yes) + ifeq ($(biarchn32)-$(biarch32),yes-yes) + CONFARGS += --enable-targets=all + CONFARGS += --with-arch-32=mips32r6 --with-tune-32=mips32r6 + endif + endif +endif + +ifneq (,$(findstring mips,$(DEB_TARGET_GNU_TYPE))) + ifeq (,$(filter yes,$(biarch32) $(biarchn32) $(biarch64))) + CONFARGS += --disable-multilib + endif +endif + +ifneq (,$(findstring s390-linux,$(DEB_TARGET_GNU_TYPE))) + ifeq ($(multilib),yes) + ifeq ($(biarch64),yes) + CONFARGS += --enable-targets=all + endif + endif +endif + +ifneq (,$(findstring hppa-linux,$(DEB_TARGET_GNU_TYPE))) + CONFARGS += --disable-libstdcxx-pch +endif + +ifneq (,$(offload_targets)) + ifneq (,$(filter nvptx-none, $(offload_targets))) + offload_opt = nvptx-none=$(CURDIR)/$(d)-nvptx/$(PF) + endif + ifneq (,$(filter $(gcn_target_name), $(offload_targets))) + offload_opt += $(gcn_target_name)=$(CURDIR)/$(d)-gcn/$(PF) + endif + CONFARGS += \ + --enable-offload-targets=$(subst $(SPACE),$(COMMA),$(strip $(offload_opt))) \ + --enable-offload-defaulted + ifeq ($(with_offload_nvptx),yes) + CONFARGS += --without-cuda-driver + endif +endif + +ifneq (,$(findstring gdc, $(PKGSOURCE))) + CONFARGS += --disable-libquadmath +endif + +ifeq ($(trunk_build),yes) + ifeq ($(findstring --disable-werror, $(CONFARGS)),) + CONFARGS += --disable-werror + endif + enable_checking = yes + ifneq (,$(filter $(DEB_TARGET_ARCH), amd64 arm64 mips64el ppc64 ppc64el s390x)) + enable_checking = yes,extra,rtl + endif +else + enable_checking = yes + ifneq (,$(filter $(DEB_TARGET_ARCH), amd64 arm64 mips64el ppc64 ppc64el s390x)) + enable_checking = yes,extra,rtl + endif + enable_checking = release +endif +CONFARGS += --enable-checking=$(enable_checking) + +ifneq (,$(findstring gcc-toolchain, $(PKGSOURCE))) + CONFARGS += $(BINUTILS_GCCCONF) +endif + +CONFARGS += \ + --build=$(DEB_BUILD_GNU_TYPE) \ + --host=$(DEB_HOST_GNU_TYPE) \ + --target=$(TARGET_ALIAS) + +ifeq ($(DEB_CROSS),yes) + CONFARGS += \ + --program-prefix=$(TARGET_ALIAS)- \ + --includedir=/$(PFL)/include +endif + +ifeq ($(with_bootstrap),off) + bootstrap_target = +else ifeq ($(with_bootstrap),profiled) + bootstrap_target = profiledbootstrap + bootstrap_target = profiledbootstrap-lean +else ifeq ($(with_bootstrap),) + ifneq (, $(filter $(PKGSOURCE),gcc-$(BASE_VERSION) gnat-$(BASE_VERSION) gcc-snapshot)) + bootstrap_target = bootstrap + endif + ifneq (,$(DEB_STAGE)) + bootstrap_target = bootstrap + endif +endif + +ifeq ($(with_lto_build),yes) + CONFARGS += \ + --with-build-config=bootstrap-lto-lean \ + --enable-link-serialization=$(CPUS_LTOLINK) +endif + +# this is the default, set in /usr/share/dejagnu/remote.exp +# by a local dejagnu patch. +DEJAGNU_TIMEOUT=300 +# Increase the timeout for one testrun on slow architectures +ifeq ($(derivative),Debian) + ifneq (,$(findstring $(DEB_TARGET_ARCH),armel armhf arm64)) + DEJAGNU_TIMEOUT=300 + else ifneq (,$(findstring $(DEB_TARGET_ARCH),hppa m68k riscv64 sparc)) + DEJAGNU_TIMEOUT=600 + else ifneq (,$(findstring $(DEB_TARGET_GNU_CPU),x86_64 i386 i486 i586 i686)) + DEJAGNU_TIMEOUT=180 + endif + ifeq ($(DEB_TARGET_GNU_SYSTEM),gnu) + DEJAGNU_TIMEOUT=900 + endif +else ifeq ($(derivative),Ubuntu) + ifneq (,$(findstring $(DEB_TARGET_ARCH), armel armhf arm64)) + DEJAGNU_TIMEOUT=300 + else ifneq (,$(findstring $(DEB_TARGET_ARCH), riscv64)) + DEJAGNU_TIMEOUT=600 + else ifneq (,$(findstring $(DEB_TARGET_GNU_CPU),x86_64 i386 i486 i586 i686 power)) + DEJAGNU_TIMEOUT=180 + endif +endif + +DEJAGNU_RUNS = +ifneq ($(trunk_build),yes) +ifeq ($(with_ssp),yes) + # the buildds are just slow ... don't check the non-default + ifneq (,$(findstring $(DEB_TARGET_GNU_CPU),hppa m68k mips sh4)) + DEJAGNU_RUNS = + else ifneq (,$(filter $(DEB_TARGET_ARCH),armel)) + DEJAGNU_RUNS = + else + ifneq ($(single_package),yes) + DEJAGNU_RUNS += $(if $(filter yes,$(with_ssp_default)),-fno-stack-protector,-fstack-protector) + endif + endif +endif +endif + +ifeq ($(derivative),Ubuntu) + ifneq (,$(findstring arm, $(DEB_TARGET_GNU_CPU))) + ifeq ($(with_arm_thumb),yes) + #DEJAGNU_RUNS += -marm + else + DEJAGNU_RUNS += -mthumb + endif + endif +endif + +# no b-d on g++-multilib, this is run by the built compiler +abi_run_check = $(strip $(if $(wildcard build/runcheck$(1).out), \ + $(shell cat build/runcheck$(1).out), \ + $(shell CC="$(builddir)/gcc/xg++ -B$(builddir)/gcc/ -static-libgcc $(1)" bash debian/runcheck.sh))) +ifeq ($(biarch32),yes) + DEJAGNU_RUNS += $(call abi_run_check,$(if $(filter $(DEB_TARGET_ARCH_CPU),mips64 mips64el mipsn32 mipsn32el),-mabi=32,-m32)) +endif +ifeq ($(biarch64),yes) + DEJAGNU_RUNS += $(call abi_run_check,$(if $(filter $(DEB_TARGET_ARCH_CPU),mips mipsel),-mabi=64,-m64)) +endif +ifeq ($(biarchn32),yes) + DEJAGNU_RUNS += $(call abi_run_check,-mabi=n32) +endif +ifeq ($(biarchx32),yes) + DEJAGNU_RUNS += $(call abi_run_check,-mx32) +endif + +# gdc is not multilib'd +ifneq (,$(findstring gdc, $(PKGSOURCE))) + DEJAGNU_RUNS = +endif + +# neither is gnat +ifneq (,$(findstring gnat, $(PKGSOURCE))) + DEJAGNU_RUNS = +endif + +ifneq (,$(strip $(value DEJAGNU_RUNS))) + RUNTESTFLAGS = RUNTESTFLAGS="--target_board=unix\{,$(subst $(SPACE),$(COMMA),$(strip $(DEJAGNU_RUNS)))\}" +endif + +# PF is the installation prefix for the package without the leading slash. +# It's "usr" for gcc releases. +ifneq (,$(PF)) + # use value set in the environment +else ifneq (,$(findstring gcc-snapshot, $(PKGSOURCE))) + PF = usr/lib/gcc-snapshot +else ifneq (,$(findstring gcc-toolchain, $(PKGSOURCE))) + PF = usr/lib/gcc-toolchain-$(BASE_VERSION) +else + PF = usr +endif + +# PFL is the installation prefix with DEB_TARGET_GNU_TYPE attached for cross builds +PFL = $(PF) +# RPF is the base prefix or installation prefix with DEB_TARGET_GNU_TYPE attached for cross builds +# DEP17: move to /usr in trixie and noble +ifneq (,$(filter $(distrelease),jessie stretch buster bullseye bookworm precise trusty xenial bionic focal groovy hirsute impish jammy kinetic lunar mantic)) + RPF = +else + RPF = $(PF) +endif + +ifeq ($(DEB_CROSS),yes) +ifneq ($(DEB_STAGE),rtlibs) + PFL = $(PF)/$(DEB_TARGET_GNU_TYPE) + RPF = $(PF)/$(DEB_TARGET_GNU_TYPE) +endif +endif + +ifeq ($(with_multiarch_lib),yes) + ifeq ($(DEB_CROSS),yes) + libdir = lib + else + libdir = lib/$(DEB_TARGET_MULTIARCH) + endif +else + libdir = lib +endif +configured_libdir = lib + +hppa64libexecdir= $(PF)/libexec + +# /usr/libexec doesn't follow the FHS +ifeq ($(single_package),yes) + libdir = lib + libexecdir = $(PF)/libexec + versiondir = $(BASE_VERSION) +else + libexecdir = $(PF)/$(configured_libdir) + libexecdir = $(PF)/libexec + versiondir = $(BASE_VERSION) +endif +buildlibdir = $(builddir)/$(TARGET_ALIAS) + +# install cross compilers in /usr/lib/gcc-cross, native ones in /usr/lib/gcc +gcc_subdir_name = gcc +ifneq ($(single_package),yes) + ifeq ($(DEB_CROSS),yes) + gcc_subdir_name = gcc-cross + endif +endif + +gcc_lib_dir = $(PF)/$(configured_libdir)/$(gcc_subdir_name)/$(TARGET_ALIAS)/$(versiondir) +gcc_lexec_dir = $(libexecdir)/$(gcc_subdir_name)/$(TARGET_ALIAS)/$(versiondir) + +lib32loc = lib32 +ifneq (,$(findstring mips,$(DEB_TARGET_GNU_TYPE))) +lib32loc = libo32 +endif +lib32 = $(PF)/$(lib32loc) +lib64 = lib64 +libn32 = lib32 +libx32 = libx32 + +p_l= $(1)$(cross_lib_arch) +p_d= $(1)-dbg$(cross_lib_arch) +d_l= debian/$(p_l) +d_d= debian/$(p_d) + +ifeq ($(DEB_CROSS),yes) + usr_lib = $(PFL)/lib +else + usr_lib = $(PFL)/$(libdir) +endif +usr_lib32 = $(PFL)/$(lib32loc) +usr_libn32 = $(PFL)/lib32 +usr_libx32 = $(PFL)/libx32 +usr_lib64 = $(PFL)/lib64 +# FIXME: Move to the new location for native builds too +ifeq ($(DEB_CROSS),yes) + usr_libhf = $(PFL)/libhf + usr_libsf = $(PFL)/libsf +else + usr_libhf = $(PFL)/lib/arm-linux-gnueabihf + usr_libsf = $(PFL)/lib/arm-linux-gnueabi +endif + +ifeq ($(DEB_STAGE)-$(DEB_CROSS),rtlibs-yes) + libdir = lib/$(DEB_TARGET_MULTIARCH) + usr_lib = $(PF)/lib/$(DEB_TARGET_MULTIARCH) +endif + +gcc_lib_dir32 = $(gcc_lib_dir)/$(biarch32subdir) +gcc_lib_dirn32 = $(gcc_lib_dir)/$(biarchn32subdir) +gcc_lib_dirx32 = $(gcc_lib_dir)/$(biarchx32subdir) +gcc_lib_dir64 = $(gcc_lib_dir)/$(biarch64subdir) +gcc_lib_dirhf = $(gcc_lib_dir)/$(biarchhfsubdir) +gcc_lib_dirsf = $(gcc_lib_dir)/$(biarchsfsubdir) + +libgcc_dir = $(RPF)/$(libdir) +# yes, really; lib32gcc_s ends up in usr +libgcc_dir32 = $(PFL)/$(lib32loc) +libgcc_dirn32 = $(RPF)/lib32 +# libx32gcc_s also ends up in usr +libgcc_dirx32 = $(PFL)/libx32 +libgcc_dir64 = $(RPF)/lib64 +# FIXME: Move to the new location for native builds too +ifeq ($(DEB_CROSS),yes) + libgcc_dirhf = $(RPF)/libhf + libgcc_dirsf = $(RPF)/libsf +else + libgcc_dirhf = $(RPF)/lib/arm-linux-gnueabihf + libgcc_dirsf = $(RPF)/lib/arm-linux-gnueabi +endif + +# install_gcc_lib(lib,soname,flavour,package) +define install_gcc_lib + mv $(d)/$(usr_lib$(3))/$(1)*.a debian/$(4)/$(gcc_lib_dir$(3))/ + rm -f $(d)/$(usr_lib$(3))/$(1)*.{la,so} + dh_link -p$(4) \ + /$(usr_lib$(3))/$(1).so.$(2) /$(gcc_lib_dir$(3))/$(1).so +endef + +# do_strip_lib_dbg(pkg,pkg_dbg,version,excludes) +define do_strip_lib_dbg + dh_strip -p$(strip $(1)) $(4) \ + $(if $(with_dbg),--dbg-package=$(strip $(2)),--dbgsym-migration='$(strip $(2)) (<< $(strip $(3)))') +endef + +checkdirs = $(builddir) +ifeq ($(with_separate_go),yes) + ifeq ($(PKGSOURCE),gccgo-$(BASE_VERSION)) + checkdirs = $(buildlibdir)/libgo + endif +endif +ifeq ($(with_separate_gnat),yes) + ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION)) + checkdirs = $(builddir)/gcc + endif +endif + +# FIXME: MULTIARCH_DIRNAME needed for g++-multiarch-incdir.diff +MULTIARCH_DIRNAME := $(DEB_TARGET_MULTIARCH) +export MULTIARCH_DIRNAME + +default: build + +configure: $(configure_dependencies) + +$(configure_dummy_stamp): + touch $(configure_dummy_stamp) + +$(configure_stamp): + dh_testdir + : # give information about the build process + @echo "------------------------ Build process variables ------------------------" + @echo "Memory on this machine:" + @egrep '^(Mem|Swap)' /proc/meminfo || true + @echo "Number of parallel processes used for the build: $(USE_CPUS)" + @echo "DEB_BUILD_OPTIONS: $$DEB_BUILD_OPTIONS" + @echo "Package source: $(PKGSOURCE)" + @echo "GCC version: $(GCC_VERSION)" + @echo "Base Debian version: $(BASE_VERSION)" + @echo 'Package Metadata: $(ELF_PACKAGE_METADATA)' + @echo -e "Configured with: $(subst ___, ,$(foreach i,$(CONFARGS),$(i)\n\t))" +ifeq ($(DEB_CROSS),yes) + @echo "Building cross compiler for $(DEB_TARGET_ARCH)" +endif + @echo "Using shell $(SHELL)" + @echo "Architecture: $(DEB_TARGET_ARCH) (GNU: $(TARGET_ALIAS))" + @echo "Compilers: $(CC) / $(CXX) / $(GDC) / $(GNAT)" + @echo "CPPFLAGS: $(CPPFLAGS)" + @echo "CFLAGS: $(CFLAGS)" + @echo "LDFLAGS: $(LDFLAGS)" + @echo "BOOT_CFLAGS: $(BOOT_CFLAGS)" + @echo "DEBIAN_BUILDARCH: $(DEBIAN_BUILDARCH)" + @echo "Install prefix: /$(PF)" +ifeq ($(biarchn32)-$(biarch64),yes-yes) + @echo "Will build the triarch compilers (o32/n32/64, defaulting to o32)" +else ifeq ($(biarchn32)-$(biarch32),yes-yes) + @echo "Will build the triarch compilers (o32/n32/64, defaulting to 64)" +else ifeq ($(biarch64)-$(biarch32),yes-yes) + @echo "Will build the triarch compilers (x32/64/32, defaulting to x32)" +else ifeq ($(biarch64)-$(biarchx32),yes-yes) + @echo "Will build the triarch compilers (32/64/x32, defaulting to 32bit)" +else ifeq ($(biarch32)-$(biarchx32),yes-yes) + @echo "Will build the triarch compilers (64/32/x32, defaulting to 64bit)" +else + ifeq ($(biarch64),yes) + @echo "Will build the biarch compilers (32/64, defaulting to 32bit)" + else + ifeq ($(biarch32),yes) + @echo "Will build the biarch compilers (64/32, defaulting to 64bit)" + else + @echo "Will not build the biarch compilers" + endif + endif +endif + +ifeq ($(with_cxx),yes) + @echo "Will build the C++ compiler" +else + @echo "Will not build the C++ compiler: $(with_cxx)" +endif +ifeq ($(with_objc),yes) + @echo "Will build the ObjC compiler." + ifeq ($(with_objc_gc),yes) + @echo "Will build the extra ObjC runtime for garbage collection." + else + @echo "Will not build the extra ObjC runtime for garbage collection." + endif +else + @echo "Will not build the ObjC compiler: $(with_objc)" +endif +ifeq ($(with_objcxx),yes) + @echo "Will build the Obj-C++ compiler" +else + @echo "Will not build the Obj-C++ compiler: $(with_objcxx)" +endif +ifeq ($(with_fortran),yes) + @echo "Will build the Fortran 95 compiler." +else + @echo "Will not build the Fortran 95 compiler: $(with_fortran)" +endif +ifeq ($(with_ada),yes) + @echo "Will build the Ada compiler." + ifeq ($(with_libgnat),yes) + @echo "Will build the shared Ada libraries." + else + @echo "Will not build the shared Ada libraries." + endif +else + @echo "Will not build the Ada compiler: $(with_ada)" +endif +ifeq ($(with_go),yes) + @echo "Will build the Go compiler." +else + @echo "Will not build the Go compiler: $(with_go)" +endif +ifeq ($(with_d),yes) + @echo "Will build the D compiler" + ifeq ($(with_phobos),yes) + @echo "Will build the phobos D runtime library." + else + @echo "Will not build the phobos D runtime library: $(with_phobos)" + endif +else + @echo "Will not build the D compiler: $(with_d)" +endif +ifeq ($(with_m2),yes) + @echo "Will build the Modula-2 compiler." +else + @echo "Will not build the Modula-2 compiler: $(with_m2)" +endif +ifneq (,$(offload_targets)) + @echo "Will build with offload compilers: $(offload_targets)." +else + @echo "Will build without offload compilers: $(with_offload_nvptx) / $(with_offload_gcn)" +endif +ifeq ($(with_ssp),yes) + @echo "Will build with SSP support." +else + @echo "Will build without SSP support: $(with_ssp)" +endif +ifeq ($(with_check),yes) + @echo "Will run the testsuite." +else + @echo "Will not run the testsuite: $(with_check)" +endif +ifeq ($(with_nls),yes) + @echo "Will enable national language support." +else + @echo "Will disable national language support: $(with_nls)" +endif + @echo "-----------------------------------------------------------------------------" + @echo "" +ifeq ($(with_check),yes) + @if echo "spawn true" | /usr/bin/expect -f - >/dev/null; then \ + : ; \ + else \ + echo "expect is failing on your system with the above error, which means the GCC"; \ + echo "testsuite will fail. Please resolve the above issues and retry the build."; \ + echo "-----------------------------------------------------------------------------"; \ + exit 1; \ + fi +endif + rm -f $(configure_stamp) $(build_stamp) + cat debian/README.Debian $(patch_stamp) > debian/README.Debian.$(DEB_TARGET_ARCH) + + rm -rf $(builddir) + mkdir $(builddir) + +ifneq (,$(filter musl-%,$(DEB_TARGET_ARCH))) + # We have to unconditionally link -lssp_nonshared on musl (see + # musl-ssp.diff). While gcc provides it, it comes a little late in the + # build for bootstrapping so we provide an empty one. + mkdir $(builddir)/gcc + ar rcs $(builddir)/gcc/libssp_nonshared.a +endif + + : # some tools like gettext are built with a newer libstdc++ + mkdir -p bin + for i in msgfmt; do \ + install -m755 debian/bin-wrapper.in bin/$$i; \ + done + + : # configure + if cd $(builddir) \ + && $(SET_PATH) \ + $(call pass_vars, CC CXX GDC GNATBIND GNATMAKE $(flags_to_pass) \ + CFLAGS_FOR_BUILD CXXFLAGS_FOR_BUILD LDFLAGS_FOR_BUILD \ + CFLAGS_FOR_TARGET CXXFLAGS_FOR_TARGET LDFLAGS_FOR_TARGET) \ + $(SET_SHELL) $(SET_TARGET_TOOLS) \ + $(call SET_BINUTILS_MULTIARCH_ENV,$(DEB_TARGET_ARCH)) $(BINUTILS_GCCENV) \ + ../src/configure $(subst ___, ,$(CONFARGS)); \ + then \ + : ; \ + else \ + s=$$?; \ + cat $(builddir)/config.log; \ + exit $$s; \ + fi + + : # multilib builds without b-d on gcc-multilib (used in FLAGS_FOR_TARGET) + if [ -d /usr/include/$(DEB_TARGET_MULTIARCH)/asm ]; then \ + mkdir -p $(builddir)/sys-include; \ + ln -sf /usr/include/$(DEB_TARGET_MULTIARCH)/asm $(builddir)/sys-include/asm; \ + fi + + touch $(configure_stamp) + +build: $(sort $(build_arch_dependencies) $(build_indep_dependencies)) +build-arch: $(build_arch_dependencies) +build-indep: $(build_indep_dependencies) + +$(build_dummy_stamp): + touch $(build_dummy_stamp) + +$(build_locale_stamp): +ifeq ($(locale_data)-$(with_cxx),generate-yes) + : # build locales needed by libstdc++ testsuite + rm -rf locales + mkdir locales + -USE_CPUS=$(USE_CPUS) sh debian/locale-gen +endif + touch $(build_locale_stamp) + +MAX_BUILD_TRIES = 1 +ifeq ($(distribution)-$(DEB_HOST_ARCH),Ubuntu-armhf) + MAX_BUILD_TRIES = 3 +endif + +$(build_stamp): $(configure_stamp) $(build_locale_stamp) + @echo === START $@ === + dh_testdir + rm -f bootstrap-protocol* + @echo TTTTT $$(date -R) +ifeq ($(build_type),build-native) + : # build native compiler + set +e; \ + set -o pipefail; \ + try=0; \ + while [ $$try -lt $(MAX_BUILD_TRIES) ]; do \ + try=$$(expr $$try + 1); \ + echo "=========== BUILD ($$try) =========="; \ + $(SET_PATH) \ + $(SET_SHELL) \ + $(SET_LOCPATH) \ + $(call SET_BINUTILS_MULTIARCH_ENV,$(DEB_TARGET_ARCH)) $(BINUTILS_GCCENV) \ + $(time_command) $(MAKE) $(NJOBS) -C $(builddir) $(bootstrap_target) \ + $(call pass_vars, CC $(flags_to_pass) \ + STAGE1_CFLAGS STAGE1_LDFLAGS \ + BOOT_CFLAGS BOOT_LDFLAGS \ + CFLAGS_FOR_BUILD CXXFLAGS_FOR_BUILD LDFLAGS_FOR_BUILD \ + CFLAGS_FOR_TARGET CXXFLAGS_FOR_TARGET LDFLAGS_FOR_TARGET) \ + 2>&1 | tee bootstrap-protocol$$try \ + ; \ + status=$$?; \ + echo $$status > status; \ + echo === TIME $@ ===; \ + if [ $$status -eq 0 ] || [ $$try -eq $(MAX_BUILD_TRIES) ]; then \ + exit $$status; \ + fi; \ + done +else ifneq (,$(filter $(build_type),build-cross cross-build-native cross-build-cross)) + : # build cross compiler for $(TARGET_ALIAS) + ( \ + set +e; \ + $(SET_PATH) \ + $(SET_LOCPATH) \ + $(time_command) $(MAKE) $(NJOBS) -C $(builddir) \ + $(call pass_vars, BOOT_CFLAGS BOOT_LDFLAGS \ + CFLAGS_FOR_TARGET LDFLAGS_FOR_TARGET) \ + ; \ + echo $$? > status; \ + echo === TIME $@ ===; \ + ) 2>&1 | tee bootstrap-protocol +endif + @echo TTTTT $$(date -R) + s=`cat status`; rm -f status; \ + if [ $$s -ne 0 ] && [ -z "$$NO_CONFIG_LOG_DUMP$$NO_CONFIG_LOG_DUMPS" ]; then \ + for log in $$(find $(builddir) -name config.log); do \ + case "$$log" in */build/build-*|*/stage1-*|*/prev-*) continue; esac; \ + echo LOGFILE START $$log; \ + cat $$log; \ + echo LOGFILE END $$log; \ + done; \ + fi; \ + test $$s -eq 0 + + for h in $$(find $(builddir) -name omp.h); do \ + echo "=================== OMP_H HEADER $$h ====================== "; \ + cat $$h; \ + done + + if [ -f $(srcdir)/contrib/warn_summary ]; then \ + rm -f bootstrap-summary; \ + /bin/sh $(srcdir)/contrib/warn_summary $$(ls bootstrap-protocol* | head -1) \ + > bootstrap-summary; \ + fi + + touch $(build_stamp) + @echo === END $@ === + +ifneq ($(build_type),build-native) + BUILT_CC = $(CC) + BUILT_CXX = $(CXX) +else + BUILT_CC = $(builddir)/gcc/xgcc -B$(builddir)/gcc/ + BUILT_CXX = $(builddir)/gcc/xg++ -B$(builddir)/gcc/ \ + -B$(builddir)/$(TARGET_ALIAS)/libatomic/.libs \ + -B$(builddir)/$(TARGET_ALIAS)/libstdc++-v3/src/.libs \ + -B$(builddir)/$(TARGET_ALIAS)/libstdc++-v3/libsupc++/.libs \ + -I$(builddir)/$(TARGET_ALIAS)/libstdc++-v3/include \ + -I$(builddir)/$(TARGET_ALIAS)/libstdc++-v3/include/$(TARGET_ALIAS) \ + -I$(srcdir)/libstdc++-v3/libsupc++ \ + -L$(builddir)/$(TARGET_ALIAS)/libatomic/.libs \ + -L$(builddir)/$(TARGET_ALIAS)/libstdc++-v3/src/.libs \ + -L$(builddir)/$(TARGET_ALIAS)/libstdc++-v3/libsupc++/.libs +endif + +CONFARGS_JIT := \ + $(filter-out --enable-languages=% \ + --enable-libstdcxx-debug %bootstrap,\ + $(CONFARGS)) \ + --enable-languages=c++,jit \ + --enable-host-shared \ + --disable-bootstrap + +# are other libs also safe to disable? +CONFARGS_JIT += \ + --disable-libada \ + --disable-libgfortran \ + --disable-libgm2 \ + --disable-libgo \ + --disable-libphobos \ + --disable-libquadmath \ + +$(configure_jit_stamp): $(build_stamp) + @echo === START $@ === + dh_testdir + rm -f $(configure_jit_stamp) $(build_jit_stamp) + rm -rf $(builddir_jit) + mkdir $(builddir_jit) + + : # configure jit + cd $(builddir_jit) && \ + $(SET_PATH) \ + $(SET_SHELL) \ + CC="$(BUILT_CC)" \ + CXX="$(BUILT_CXX)" \ + $(call SET_BINUTILS_MULTIARCH_ENV,$(DEB_TARGET_ARCH)) $(BINUTILS_GCCENV) \ + ../src/configure $(subst ___, ,$(CONFARGS_JIT)) + touch $(configure_jit_stamp) + +$(build_jit_stamp): $(configure_jit_stamp) + @echo === START $@ === + dh_testdir + ( \ + set +e; \ + $(SET_PATH) \ + $(SET_SHELL) \ + $(SET_LOCPATH) \ + $(call SET_BINUTILS_MULTIARCH_ENV,$(DEB_TARGET_ARCH)) $(BINUTILS_GCCENV) \ + LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}$(builddir)/gcc \ + biarch_multidir_names=none \ + $(time_command) $(MAKE) $(NJOBS) -C $(builddir_jit) \ + $(call pass_vars, BOOT_CFLAGS BOOT_LDFLAGS \ + CFLAGS_FOR_TARGET LDFLAGS_FOR_TARGET) \ + ; \ + echo $$? > status; \ + echo === TIME $@ ===; \ + ) 2>&1 | tee jit-protocol + + s=`cat status`; rm -f status; \ + if [ $$s -ne 0 ] && [ -z "$$NO_CONFIG_LOG_DUMP$$NO_CONFIG_LOG_DUMPS" ]; then \ + for log in $$(find $(builddir_jit) -name config.log); do \ + case "$$log" in */build/build-*|*/stage1-*|*/prev-*) continue; esac; \ + echo LOGFILE START $$log; \ + cat $$log; \ + echo LOGFILE END $$log; \ + done; \ + fi; \ + test $$s -eq 0 + +ifeq ($(with_check),yes) + # FIXME: #782444 + ifeq (,$(filter $(DEB_TARGET_ARCH), kfreebsd-i386 kfreebsd-amd64)) + -DEB_BUILD_OPTIONS='$(DEB_BUILD_OPTIONS) gcc-ice=nodump,norepro' \ + $(MAKE) -C $(builddir_jit)/gcc check-jit \ + RUNTESTFLAGS="-v -v" + mkdir -p $(builddir)/gcc/testsuite/jit + cp -p $(builddir_jit)/gcc/testsuite/jit/jit.{log,sum} \ + $(builddir)/gcc/testsuite/jit/. + endif +endif + + : # do the install in the build target, to save disk space + rm -rf $(d)-jit + mkdir -p $(d)-jit/$(PF) + + $(SET_PATH) \ + biarch_multidir_names=none \ + $(MAKE) -C $(builddir_jit) \ + CC="$(CC_FOR_TARGET)" \ + $(call pass_vars, $(flags_to_pass)) \ + DESTDIR=$(CURDIR)/$(d)-jit \ + install + + find $(d)-jit ! -type d + + mkdir -p $(d)-jit/$(usr_lib) + mkdir -p $(d)-jit/$(gcc_lib_dir)/include + mv $(d)-jit/$(PF)/include/libgccjit*.h \ + $(d)-jit/$(gcc_lib_dir)/include/. +ifneq ($(PF)/lib,$(usr_lib)) + mv $(d)-jit/$(PF)/lib/libgccjit.so* \ + $(d)-jit/$(usr_lib)/. +endif + cd $(d)-jit && tar cvfJ ../../installed-jit.tar.xz \ + $(gcc_lib_dir)/include/libgccjit*.h \ + $(usr_lib)/libgccjit.so* \ + $(PF)/share/info/libgccjit* + rm -rf $(d)-jit + +ifeq ($(save_disk_space),yes) + rm -rf $(builddir_jit) +endif + + touch $(build_jit_stamp) + @echo === END $@ === + +CONFARGS_NVPTX := \ + --prefix=/$(PF) \ + --libexecdir=/$(libexecdir) \ + --with-gcc-major-version-only \ + --disable-bootstrap \ + --disable-sjlj-exceptions \ + --enable-newlib-io-long-long \ + --target=nvptx-none \ + --enable-as-accelerator-for=$(DEB_TARGET_GNU_TYPE) \ + --enable-languages=c,c++,fortran,lto \ + --enable-checking=release \ + --with-system-zlib \ + --without-isl + +# --with-build-time-tools=/$(PF)/nvptx-none/bin + +CONFARGS_NVPTX += --program-prefix=nvptx-none- +ifeq ($(versioned_packages),yes) + CONFARGS_NVPTX += --program-suffix=-$(BASE_VERSION) +endif + +# FIXME: must not be run in parallel with jit and hppa64 builds ... +$(configure_nvptx_stamp): $(build_stamp) \ + $(if $(filter yes, $(with_jit)), $(build_jit_stamp)) \ + $(if $(filter yes, $(with_hppa64)), $(build_hppa64_stamp)) + @echo === START $@ === + dh_testdir + rm -f $(configure_nvptx_stamp) $(build_nvptx_stamp) + rm -rf src-nvptx $(builddir_nvptx) + cp -al src src-nvptx + rm -rf src-nvptx/newlib + cp -a $(newlib_srcdir)/newlib src-nvptx/newlib + mkdir $(builddir_nvptx) + + : # configure nvptx offload + cd $(builddir_nvptx) && \ + $(SET_PATH) \ + $(SET_SHELL) \ + CC="$(BUILT_CC)" \ + CXX="$(BUILT_CXX)" \ + ../src-nvptx/configure $(subst ___, ,$(CONFARGS_NVPTX)) + touch $(configure_nvptx_stamp) + +$(build_nvptx_stamp): $(configure_nvptx_stamp) \ + $(if $(filter yes, $(with_jit)), $(build_jit_stamp)) \ + $(if $(filter yes, $(with_hppa64)), $(build_hppa64_stamp)) + @echo === START $@ === + ln -sf ../$(newlib_srcdir)/newlib $(srcdir)/newlib + ( \ + set +e; \ + $(SET_PATH) \ + $(SET_SHELL) \ + $(SET_LOCPATH) \ + LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}$(builddir)/gcc \ + biarch_multidir_names=none \ + $(time_command) $(MAKE) $(NJOBS) -C $(builddir_nvptx) \ + $(call pass_vars, BOOT_CFLAGS BOOT_LDFLAGS \ + CFLAGS_FOR_TARGET) \ + ; \ + echo $$? > status; \ + echo === TIME $@ ===; \ + ) 2>&1 | tee nvptx-protocol + + s=`cat status`; rm -f status; \ + if [ $$s -ne 0 ] && [ -z "$$NO_CONFIG_LOG_DUMP$$NO_CONFIG_LOG_DUMPS" ]; then \ + for log in $$(find $(builddir_nvptx) -name config.log); do \ + case "$$log" in */build/build-*|*/stage1-*|*/prev-*) continue; esac; \ + echo LOGFILE START $$log; \ + cat $$log; \ + echo LOGFILE END $$log; \ + done; \ + fi; \ + test $$s -eq 0 + + rm -f $(srcdir)/newlib + touch $(build_nvptx_stamp) + @echo === END $@ === + +CONFARGS_GCN := \ + --prefix=/$(PF) \ + --libexecdir=/$(libexecdir) \ + --with-gcc-major-version-only \ + --disable-bootstrap \ + --disable-sjlj-exceptions \ + --enable-newlib-io-long-long \ + --target=$(gcn_target_name) \ + --enable-as-accelerator-for=$(DEB_TARGET_GNU_TYPE) \ + --enable-languages=c,fortran,lto \ + --enable-checking=release \ + --disable-libstdcxx-pch \ + --disable-libquadmath-support \ + --with-system-zlib \ + --without-isl \ + --without-gnu-as \ + --without-gnu-ld \ + --with-build-time-tools=$(CURDIR)/bin-gcn + +# --without-headers \ + +CONFARGS_GCN += --program-prefix=$(gcn_target_name)- +ifeq ($(versioned_packages),yes) + CONFARGS_GCN += --program-suffix=-$(BASE_VERSION) +endif + +# FIXME: must not be run in parallel with jit and hppa64 builds ... +$(configure_gcn_stamp): $(build_stamp) \ + $(if $(filter yes, $(with_jit)), $(build_jit_stamp)) \ + $(if $(filter yes, $(with_hppa64)), $(build_hppa64_stamp)) \ + $(if $(filter yes, $(with_offload_nvptx)), $(build_nvptx_stamp)) + @echo === START $@ === + dh_testdir + + rm -rf bin-gcn +ifeq ($(gcn_tools_llvm_version),tools) + ln -s /usr/$(gcn_target_name)/bin bin-gcn +else + mkdir bin-gcn + ln -sf /usr/lib/llvm-$(gcn_tools_llvm_version)/bin/llvm-ar bin-gcn/ar + ln -sf /usr/lib/llvm-$(gcn_tools_llvm_version)/bin/llvm-mc bin-gcn/as + ln -sf /usr/lib/llvm-$(gcn_tools_llvm_version)/bin/lld bin-gcn/ld + ln -sf /usr/lib/llvm-$(gcn_tools_llvm_version)/bin/llvm-nm bin-gcn/nm + ln -sf /usr/lib/llvm-$(gcn_tools_llvm_version)/bin/llvm-ranlib bin-gcn/ranlib +endif + ls -l / + ls -l /usr + -ls -l usr/$(gcn_target_name) + -ls -l usr/$(gcn_target_name)/bin + ls -l bin-gcn + ls -lL bin-gcn + bin-gcn/as --version + bin-gcn/ld --version + + rm -f $(configure_gcn_stamp) $(build_gcn_stamp) + rm -rf src-gcn $(builddir_gcn) + cp -al src src-gcn + rm -rf src-gcn/newlib + cp -a $(newlib_srcdir)/newlib src-gcn/newlib + mkdir $(builddir_gcn) + + : # configure gcn offload + cd $(builddir_gcn) && \ + $(SET_PATH) \ + $(SET_SHELL) \ + CC="$(BUILT_CC)" \ + CXX="$(BUILT_CXX)" \ + ../src-gcn/configure $(subst ___, ,$(CONFARGS_GCN)) + touch $(configure_gcn_stamp) + +$(build_gcn_stamp): $(configure_gcn_stamp) \ + $(if $(filter yes, $(with_jit)), $(build_jit_stamp)) \ + $(if $(filter yes, $(with_hppa64)), $(build_hppa64_stamp)) \ + $(if $(filter yes, $(with_offload_nvptx)), $(build_nvptx_stamp)) + @echo === START $@ === + ln -sf ../$(newlib_srcdir)/newlib $(srcdir)/newlib + ( \ + set +e; \ + $(SET_PATH) \ + $(SET_SHELL) \ + $(SET_LOCPATH) \ + LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}$(builddir)/gcc \ + biarch_multidir_names=none \ + $(time_command) $(MAKE) $(NJOBS) -C $(builddir_gcn) \ + $(call pass_vars, BOOT_CFLAGS BOOT_LDFLAGS \ + CFLAGS_FOR_TARGET) \ + ; \ + echo $$? > status; \ + echo === TIME $@ ===; \ + ) 2>&1 | tee amdgcn-protocol + + s=`cat status`; rm -f status; \ + if [ $$s -ne 0 ] && [ -z "$$NO_CONFIG_LOG_DUMP$$NO_CONFIG_LOG_DUMPS" ]; then \ + for log in $$(find $(builddir_gcn) -name config.log); do \ + case "$$log" in */build/build-*|*/stage1-*|*/prev-*) continue; esac; \ + echo LOGFILE START $$log; \ + cat $$log; \ + echo LOGFILE END $$log; \ + done; \ + fi; \ + test $$s -eq 0 + + rm -f $(srcdir)/newlib + touch $(build_gcn_stamp) + @echo === END $@ === + +ifeq ($(versioned_packages),yes) + hppa64_configure_flags += --program-suffix=-$(BASE_VERSION) +endif + +$(configure_hppa64_stamp): $(build_stamp) \ + $(if $(filter yes, $(with_jit)), $(build_jit_stamp)) + @echo === START $@ === + dh_testdir + rm -f $(configure_hppa64_stamp) $(build_hppa64_stamp) + rm -rf $(builddir_hppa64) + mkdir $(builddir_hppa64) + : # configure hppa64 + cd $(builddir_hppa64) && \ + $(SET_PATH) \ + $(SET_SHELL) \ + CC="$(BUILT_CC)" \ + CXX="$(BUILT_CXX)" \ + $(call pass_vars, $(flags_to_pass)) \ + ../src/configure \ + --enable-languages=c \ + --prefix=/$(PF) \ + --libexecdir=/$(hppa64libexecdir) \ + --with-gcc-major-version-only \ + --disable-shared \ + --disable-nls \ + --disable-threads \ + --disable-libatomic \ + --disable-libgomp \ + --disable-libitm \ + --disable-libssp \ + --disable-libquadmath \ + --enable-plugin \ + --with-system-zlib \ + --with-as=/usr/bin/hppa64-linux-gnu-as \ + --with-ld=/usr/bin/hppa64-linux-gnu-ld \ + --includedir=/usr/hppa64-linux-gnu/include \ + --build=$(DEB_BUILD_GNU_TYPE) \ + --host=$(DEB_HOST_GNU_TYPE) \ + --target=hppa64-linux-gnu + touch $(configure_hppa64_stamp) + +$(build_hppa64_stamp): $(configure_hppa64_stamp) \ + $(if $(filter yes, $(with_jit)), $(build_jit_stamp)) + @echo === START $@ === + if [ -f $(srcdir)/gcc/distro-defaults.h ]; then \ + if [ ! -f $(srcdir)/gcc/distro-defaults.h.saved ]; then \ + mv $(srcdir)/gcc/distro-defaults.h $(srcdir)/gcc/distro-defaults.h.saved; \ + fi; \ + echo '/* Empty distro-defaults for hppa64 cross build */' \ + > $(srcdir)/gcc/distro-defaults.h; \ + fi + $(SET_PATH) \ + $(SET_SHELL) \ + $(SET_LOCPATH) \ + LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}$(builddir)/gcc \ + $(time_command) $(MAKE) $(NJOBS) -C $(builddir_hppa64) \ + $(call pass_vars, \ + CFLAGS_FOR_TARGET CXXFLAGS_FOR_TARGET LDFLAGS_FOR_TARGET) + if [ -f $(srcdir)/gcc/distro-defaults.h.saved ]; then \ + mv -f $(srcdir)/gcc/distro-defaults.h.saved $(srcdir)/gcc/distro-defaults.h; \ + fi + + : # do the install in the build target, to save disk space + rm -rf $(d_hppa64) + mkdir -p $(d_hppa64)/$(PF) + + $(SET_PATH) \ + $(MAKE) -C $(builddir_hppa64) \ + $(call pass_vars, CC $(flags_to_pass)) \ + DESTDIR=$(CURDIR)/$(d_hppa64) \ + install + + : # remove files not needed + rm -rf $(d_hppa64)/$(PF)/info $(d_hppa64)/$(PF)/share/info + rm -rf $(d_hppa64)/$(PF)/man $(d_hppa64)/$(PF)/share/man + rm -rf $(d_hppa64)/$(PF)/lib/gcc/hppa64-linux-gnu/$(BASE_VERSION)/plugin + rm -f $(d_hppa64)/$(PF)/lib/libiberty.a + rm -f $(d_hppa64)/$(PF)/lib/libcc1.* + rm -f $(d_hppa64)/$(PF)/bin/*{gcov,gcov-dump,gcov-tool,gccbug,gcc,lto-dump} + + rm -rf $(d_hppa64)/$(PF)/hppa64-linux-gnu + rm -rf $(d_hppa64)/$(PF)/lib/gcc/hppa64-linux-gnu/$(BASE_VERSION)/install-tools + rm -rf $(d_hppa64)/$(PF)/lib/gcc/hppa64-linux-gnu/$(BASE_VERSION)/g++-mapper-server + rm -rf $(d_hppa64)/$(PF)/lib/gcc/hppa64-linux-gnu/$(BASE_VERSION)/include-fixed + +ifeq ($(versioned_packages),yes) + for i in cpp gcc-ar gcc-nm gcc-ranlib; do \ + mv -f $(d_hppa64)/$(PF)/bin/hppa64-linux-gnu-$$i \ + $(d_hppa64)/$(PF)/bin/hppa64-linux-gnu-$$i$(pkg_ver); \ + done +endif + mkdir -p $(d_hppa64)/$(PF)/share/man/man1 + for i in gcc-ar gcc-nm gcc-ranlib; do \ + ln -sf $$i$(pkg_ver).1.gz \ + $(d_hppa64)/$(PF)/share/man/man1/hppa64-linux-gnu-$$i$(pkg_ver).1.gz; \ + done +ifneq ($(GFDL_INVARIANT_FREE),yes) + for i in cpp gcc; do \ + ln -sf $$i$(pkg_ver).1.gz \ + $(d_hppa64)/$(PF)/share/man/man1/hppa64-linux-gnu-$$i$(pkg_ver).1.gz; \ + done +endif + + : # remove '*.la' and '*.lai' files, not shipped in any package. + find $(d_hppa64) -name '*.la' -o -name '*.lai' | xargs -r rm -f + + : # remove rpath settings from binaries and shared libs + for i in $$(chrpath -k $(d_hppa64)/$(PF)/bin/* $(d_hppa64)/$(PFL)/lib*/lib*.so.* \ + $(d_hppa64)/$(gcc_lib_dir)/plugin/* \ + $(if $(filter $(with_multiarch_lib),yes), \ + $(d_hppa64)/$(PF)/lib/$(DEB_TARGET_MULTIARCH)/lib*.so.*) \ + 2>/dev/null | awk -F: '/R(UN)?PATH=/ {print $$1}'); \ + do \ + [ -h $$i ] && continue; \ + chrpath --delete $$i; \ + echo "removed RPATH/RUNPATH: $$i"; \ + done + + : # fix permissions of liblto_plugin.so + chmod 644 $(d_hppa64)/$(PF)/libexec/gcc/hppa64-linux-gnu/$(BASE_VERSION)/liblto_plugin.so + + cd $(d_hppa64) && tar cvfJ ../../installed-hppa64.tar.xz usr + rm -rf $(d_hppa64) + +ifeq ($(save_disk_space),yes) + rm -rf $(builddir_hppa64) +endif + touch $(build_hppa64_stamp) + @echo === END $@ === + +ifeq ($(with_ada),yes) + MANUALS = \ + $(srcdir)/gcc/ada/gnat_ugn.texi \ + $(srcdir)/gcc/ada/gnat_rm.texi +endif +MANUALS += \ + $(srcdir)/gcc/doc/gccint.texi \ + $(srcdir)/gcc/doc/gcc.texi \ + $(srcdir)/gcc/doc/cpp.texi \ + $(srcdir)/gcc/doc/cppinternals.texi +ifeq ($(with_fortran),yes) + MANUALS += $(srcdir)/gcc/fortran/gfortran.texi +endif +ifeq ($(with_ada),yes) + MANUALS += $(srcdir)/gcc/ada/gnat-style.texi +endif +ifeq ($(with_gomp),yes) + MANUALS += $(srcdir)/libgomp/libgomp.texi +endif +ifeq ($(with_itm),yes) + MANUALS += $(srcdir)/libitm/libitm.texi +endif +ifeq ($(with_qmath),yes) + MANUALS += $(srcdir)/libquadmath/libquadmath.texi +endif +ifeq ($(with_go),yes) + MANUALS += $(srcdir)/gcc/go/gccgo.texi +endif +ifeq ($(with_d),yes) + MANUALS += $(srcdir)/gcc/d/gdc.texi +endif +ifeq ($(with_m2),yes) + MANUALS += $(srcdir)/gcc/doc/gm2.texi +endif + +html-docs: $(build_html_stamp) +#$(build_html_stamp): $(stampdir)/05-build-html-split +$(build_html_stamp): $(stampdir)/05-build-html-nosplit + +html-makeinfo-split: $(stampdir)/05-build-html-split +$(stampdir)/05-build-html-split: $(build_stamp) + mkdir -p html + rm -f html/*.html + cd $(builddir)/gcc; \ + echo -n $(MANUALS) | xargs -d ' ' -L 1 -P $(USE_CPUS) -I{} \ + sh -c 'outname=`basename {} .texi`.html; \ + outname=`basename {} .texi`; \ + echo "generating $$outname ..."; \ + makeinfo --html --number-sections \ + -I $(srcdir)/gcc/doc/include -I `dirname {}` \ + -I $(srcdir)/gcc/p/doc \ + -I $(srcdir)/gcc/p/doc/generated \ + -I $(builddir)/gcc \ + -I $(builddir)/gcc/m2 \ + -I $(buildlibdir)/libquadmath \ + -o $${outname} \ + {}' + touch $@ + +html-makeinfo-nosplit: $(stampdir)/05-build-html-nosplit +$(stampdir)/05-build-html-nosplit: $(build_stamp) + mkdir -p html + rm -f html/*.html + cd $(builddir)/gcc; \ + echo -n $(MANUALS) | xargs -d ' ' -L 1 -P $(USE_CPUS) -I{} \ + sh -c 'outname=`basename {} .texi`.html; \ + echo "generating $$outname ..."; \ + makeinfo --html --number-sections --no-split \ + -I $(srcdir)/gcc/doc/include -I `dirname {}` \ + -I $(srcdir)/gcc/p/doc \ + -I $(srcdir)/gcc/p/doc/generated \ + -I $(builddir)/gcc \ + -I $(builddir)/gcc/m2 \ + -I $(buildlibdir)/libquadmath \ + -o $(CURDIR)/html/$${outname} \ + {}' + touch $@ + +# start the script only on architectures known to have slow autobuilders ... +logwatch_archs := alpha arm m68k mips mipsel mips64el riscv64 sparc +ifeq ($(DEB_HOST_GNU_CPU), $(findstring $(DEB_HOST_GNU_CPU),$(logwatch_archs))) + start_logwatch = yes +endif +ifeq ($(DEB_HOST_GNU_SYSTEM),gnu) + start_logwatch = yes +endif + +check: $(check_stamp) +$(check_stamp): $(filter $(build_stamp) $(build_jit_stamp) $(build_hppa64_stamp) $(build_nvptx_stamp) $(build_gcn_stamp), $(build_dependencies)) \ + $(if $(filter nvptx-none, $(offload_targets)), $(install_nvptx_stamp)) \ + $(if $(filter $(gcn_target_name), $(offload_targets)), $(install_gcn_stamp)) + @echo === START $@ === + rm -f test-protocol + rm -f $(builddir)/runcheck* + + -chmod 755 $(srcdir)/contrib/test_summary + + : # needed for the plugin tests to succeed + ln -sf gcc $(builddir)/prev-gcc + ln -sf $(DEB_TARGET_GNU_TYPE) $(builddir)/prev-$(DEB_TARGET_GNU_TYPE) + +ifneq ($(with_common_libs),yes) + ifeq ($(with_cxx),yes) + ifeq (,$(filter $(DEB_TARGET_ARCH), armel armhf mipsel mips64el)) + : # libstdc++6 built from newer gcc-X source, run testsuite against the installed lib + + : # jit test results should not end up in the libstdc++-test-summary report + if [ -f $(builddir)/gcc/testsuite/jit/jit.sum ]; then \ + mv $(builddir)/gcc/testsuite/jit/jit.log $(builddir)/gcc/testsuite/jit/jit.LOG; \ + mv $(builddir)/gcc/testsuite/jit/jit.sum $(builddir)/gcc/testsuite/jit/jit.SUM; \ + fi + + sed 's/-L[^ "]*//g' $(buildlibdir)/libstdc++-v3/scripts/testsuite_flags \ + > $(buildlibdir)/libstdc++-v3/scripts/testsuite_flags.installed + -$(ULIMIT_M); \ + set +e; \ + for d in $(buildlibdir)/libstdc++-v3/testsuite; do \ + echo "Running testsuite in $$d ..."; \ + TEST_INSTALLED=1 \ + $(SET_SHELL) \ + $(SET_LOCPATH) \ + $(SET_PATH) \ + DEJAGNU_TIMEOUT=$(DEJAGNU_TIMEOUT) \ + DEB_GCC_NO_O3=1 \ + $(MAKE) -k -C $$d $(NJOBS_TESTS) check $(RUNTESTFLAGS); \ + done 2>&1 | tee test-protocol2 + + cd $(builddir); \ + BOOT_CFLAGS="$(BOOT_CFLAGS)" \ + $(srcdir)/contrib/test_summary -m "$(S_EMAIL)" > ../raw-test-summary + -( \ + sed -n '/^Mail/s/.*"\([^"][^"]*\)".*/\1/p' raw-test-summary; \ + awk '/^cat/, /^EOF/' raw-test-summary | grep -v EOF; \ + ) > libstdc++-test-summary + echo 'BEGIN installed libstdc++-v3 test-summary' + cat libstdc++-test-summary + echo 'END installed libstdc++-v3 test-summary' + find $(buildlibdir)/libstdc++-v3/testsuite -name '*.log' -o -name '*.sum' \ + | xargs -r rm -f + + if [ -f $(builddir)/gcc/testsuite/jit/jit.SUM ]; then \ + mv $(builddir)/gcc/testsuite/jit/jit.LOG $(builddir)/gcc/testsuite/jit/jit.log; \ + mv $(builddir)/gcc/testsuite/jit/jit.SUM $(builddir)/gcc/testsuite/jit/jit.sum; \ + fi + endif + endif +endif + +ifeq ($(start_logwatch),yes) + : # start logwatch script for regular output during test runs + chmod +x debian/logwatch.sh + -debian/logwatch.sh -t 900 -p $(builddir)/logwatch.pid \ + -m '\ntestsuite still running ...\n' \ + test-protocol \ + $(builddir)/gcc/testsuite/gcc/gcc.log \ + $(builddir)/gcc/testsuite/g++/g++.log \ + $(builddir)/gcc/testsuite/gfortran/gfortran.log \ + $(builddir)/gcc/testsuite/objc/objc.log \ + $(builddir)/gcc/testsuite/obj-c++/obj-c++.log \ + $(builddir)/gcc/testsuite/gnat/gnat.log \ + $(builddir)/gcc/testsuite/ada/acats/acats.log \ + $(builddir)/gcc/testsuite/gfortran/gfortran.log \ + $(builddir)/gcc/p/test/test_log \ + $(buildlibdir)/libstdc++-v3/testsuite/libstdc++.log \ + $(buildlibdir)/libgomp/testsuite/libgomp.log \ + $(buildlibdir)/libffi/testsuite/libffi.log \ + & +endif + + : # FIXME: https://gcc.gnu.org/PR103944 + rm -f $(srcdir)/libphobos/testsuite/libphobos.gc/forkgc2.d + + -$(ULIMIT_M); \ + set +e; \ + for d in $(checkdirs); do \ + echo "Running testsuite in $$d ..."; \ + $(SET_SHELL) \ + $(SET_LOCPATH) \ + $(SET_PATH) \ + EXTRA_TEST_PFLAGS=-g0 \ + DEJAGNU_TIMEOUT=$(DEJAGNU_TIMEOUT) \ + DEB_BUILD_OPTIONS='$(DEB_BUILD_OPTIONS) gcc-ice=nodump,norepro' \ + DEB_GCC_NO_O3=1 \ + $(time_command) $(MAKE) -k -C $$d $(NJOBS_TESTS) check $(RUNTESTFLAGS); \ + done 2>&1 | tee test-protocol + + -ps aux | fgrep logwatch | fgrep -v fgrep + -if [ -f $(builddir)/logwatch.pid ]; then \ + kill -1 `cat $(builddir)/logwatch.pid`; \ + sleep 1; \ + kill -9 `cat $(builddir)/logwatch.pid`; \ + rm -f $(builddir)/logwatch.pid; \ + fi + -ps aux | fgrep logwatch | fgrep -v fgrep + +ifeq ($(with_ada),yes) + -if [ -f $(builddir)/acats-killer.pid ]; then \ + kill -1 `cat $(builddir)/acats-killer.pid`; \ + sleep 1; \ + kill -9 `cat $(builddir)/acats-killer.pid`; \ + rm -f $(builddir)/acats-killer.pid; \ + fi +endif + + if [ -x $(srcdir)/contrib/test_summary ]; then \ + rm -f test-summary; \ + ( \ + cd $(builddir); \ + echo '' > ts-include; \ + echo '' >> ts-include; \ + if [ -f $(builddir)/gcc/.bad_compare ]; then \ + echo 'Bootstrap comparison failure:' >> ts-include; \ + cat $(builddir)/gcc/.bad_compare >> ts-include; \ + echo '' >> ts-include; \ + echo '' >> ts-include; \ + fi; \ + echo "Build Dependencies:" >> ts-include; \ + dpkg -l g++-* binutils* `echo '$(LIBC_DEP)' | awk '{print $$1}'` \ + libgmp*-dev libmpfr-dev libmpc-dev libisl-dev \ + | fgrep -v '' >> ts-include; \ + echo '' >> ts-include; \ + cat ../$(patch_stamp) >> ts-include; \ + BOOT_CFLAGS="$(BOOT_CFLAGS)" \ + $(srcdir)/contrib/test_summary \ + -i ts-include -m "$(S_EMAIL)" \ + ) > raw-test-summary; \ + if [ -n "$(testsuite_tarball)" ]; then \ + echo "Test suite used: $(testsuite_srcdir)" > test-summary; \ + echo " Do not interpret the results on its own" >> test-summary; \ + echo " but compare them with the results from" >> test-summary; \ + echo " the gcc-snapshot package." >> test-summary; \ + fi; \ + sed -n '/^Mail/s/.*"\([^"][^"]*\)".*/\1/p' raw-test-summary \ + >> test-summary; \ + awk '/^cat/, /^EOF/' raw-test-summary | grep -v EOF >> test-summary; \ + if [ -f bootstrap-summary -a "$(bootstrap_target)" != profiledbootstrap ]; then \ + echo '' >> test-summary; \ + cat bootstrap-summary >> test-summary; \ + fi; \ + echo 'BEGIN test-summary'; \ + cat test-summary; \ + echo 'END test-summary'; \ + fi +ifeq ($(with_d),yes) + : # the D test failures for the non-default multilibs are known, ignore them + egrep -v '^(FAIL|UNRESOLVED): (runnable|fail_c|comp)' test-summary > test-summary.tmp + mv -f test-summary.tmp test-summary +endif + + : # prepare the inclusion of the test results + rm -rf $(d_tst) + mkdir -p $(d_tst)/$(docdir)/$(p_xbase)/test + echo "TEST COMPARE BEGIN" + for i in test-summary testsuite-comparision; do \ + [ -f $$i ] || continue; \ + cp -p $$i $(d_tst)/$(docdir)/$(p_xbase)/$$i; \ + done +# more than one libgo.sum, avoid it + cp -p $$(find $(builddir)/gcc/testsuite -maxdepth 2 \( -name '*.sum' -o -name '*.log' \)) \ + $$(find $(buildlibdir)/*/testsuite -maxdepth 1 \( -name '*.sum' -o -name '*.log' \) ! -name 'libgo.*') \ + $(d_tst)/$(docdir)/$(p_xbase)/test/ +ifeq ($(with_go),yes) + cp -p $(buildlibdir)/libgo/libgo.sum \ + $(d_tst)/$(docdir)/$(p_xbase)/test/ +endif +ifeq (0,1) + cd $(builddir); \ + for i in $(CURDIR)/$(d_tst)/$(docdir)/$(p_xbase)/test/*.sum; do \ + b=$$(basename $$i); \ + if [ -f /usr/share/doc/$(p_xbase)/test/$$b.gz ]; then \ + zcat /usr/share/doc/$(p_xbase)/test/$$b.gz > /tmp/$$b; \ + if sh $(srcdir)/contrib/test_summary /tmp/$$b $$i; then \ + echo "$$b: OK"; \ + else \ + echo "$$b: FAILURES"; \ + fi; \ + rm -f /tmp/$$b; \ + else \ + echo "Test summary for $$b is not available"; \ + fi; \ + done +endif + echo "TEST COMPARE END" + +ifneq ($(with_common_libs),yes) + if [ -f libstdc++-test-summary ]; then \ + cp libstdc++-test-summary \ + $(d_tst)/$(docdir)/$(p_xbase)/libstdc++-installed-test-summary; \ + fi + if [ -f $(buildlibdir)/libstdc++-v3/testsuite/libstdc++-installed.LOG ]; then \ + cp $(buildlibdir)/libstdc++-v3/testsuite/libstdc++-installed.LOG \ + $(d_tst)/$(docdir)/$(p_xbase)/test/libstdc++-installed.log; \ + cp $(buildlibdir)/libstdc++-v3/testsuite/libstdc++-installed.SUM \ + $(d_tst)/$(docdir)/$(p_xbase)/test/libstdc++-installed.sum; \ + fi +endif + + if which xz 2>&1 >/dev/null; then \ + echo -n $(d_tst)/$(docdir)/$(p_xbase)/test/* \ + | xargs -d ' ' -L 1 -P $(USE_CPUS) xz -9v; \ + fi + + -cp usage-*.svg $(d_tst)/$(docdir)/$(p_xbase)/. + -if which xz 2>&1 >/dev/null; then \ + echo -n $(d_tst)/$(docdir)/$(p_xbase)/*.svg \ + | xargs -d ' ' -L 1 -P $(USE_CPUS) xz -9v; \ + fi + + cd $(d_tst) && tar cvf ../../installed-testlogs.tar usr + rm -rf $(d_tst) + +ifeq ($(save_disk_space),yes) + rm -rf $(builddir)/gcc/testsuite/* + rm -f usage-*.svg +endif + touch $(check_stamp) + +$(check_inst_stamp): $(check_stamp) + rm -f test-inst-protocol + @echo === START $@ === + +ifeq ($(start_logwatch),yes) + : # start logwatch script for regular output during test runs + chmod +x debian/logwatch.sh + -debian/logwatch.sh -t 900 -p $(builddir)/logwatch-inst.pid \ + -m '\ntestsuite (3.3) still running ...\n' \ + test-inst-protocol \ + check-inst/{gcc,g++,g77,objc}.log \ + & +endif + + rm -rf check-inst + mkdir check-inst + + echo "Running testsuite ..." + -$(ULIMIT_M) ; \ + $(SET_SHELL) \ + $(SET_LOCPATH) \ + EXTRA_TEST_PFLAGS=-g0 \ + DEJAGNU_TIMEOUT=$(DEJAGNU_TIMEOUT) \ + DEB_BUILD_OPTIONS='$(DEB_BUILD_OPTIONS) gcc-ice=nodump,norepro' \ + cd check-inst && $(srcdir)/contrib/test_installed \ + --with-gcc=gcc-$(CC) --with-g++=$(CXX) --with-g77=$(subst gcc,gfortran,$(CC)) \ + 2>&1 | tee test-inst-protocol + + -ps aux | fgrep logwatch | fgrep -v fgrep + if [ -f $(builddir)/logwatch-inst.pid ]; then \ + kill -1 `cat $(builddir)/logwatch-inst.pid`; \ + else \ + true; \ + fi + -ps aux | fgrep logwatch | fgrep -v fgrep + + -chmod 755 $(srcdir)/contrib/test_summary + if [ -x $(srcdir)/contrib/test_summary ]; then \ + rm -f test-inst-summary; \ + ( \ + cd check-inst; \ + echo '' > ts-include; \ + echo '' >> ts-include; \ + echo "Build Dependencies:" >> ts-include; \ + dpkg -l g++-* binutils* `echo '$(LIBC_DEP)' | awk '{print $$1}'` \ + libgmp*-dev libmpfr-dev libmpc-dev libisl*-dev \ + | fgrep -v '' >> ts-include; \ + echo '' >> ts-include; \ + echo 'Results for the installed GCC-3.3 compilers' >> ts-include; \ + $(srcdir)/contrib/test_summary \ + -i ts-include -m "$(S_EMAIL)" \ + ) > raw-test-inst-summary; \ + sed -n '/^Mail/s/.*"\([^"][^"]*\)".*/\1/p' raw-test-inst-summary \ + >> test-inst-summary; \ + awk '/^cat/, /^EOF/' raw-test-inst-summary \ + | grep -v EOF >> test-inst-summary; \ + echo 'BEGIN test-installed-summary'; \ + cat test-inst-summary; \ + echo 'END test-installed-summary'; \ + fi + + chmod 755 debian/reduce-test-diff.awk + if diff -u test-inst-summary test-summary \ + | debian/reduce-test-diff.awk > diff-summary; \ + then \ + mv -f diff-summary testsuite-comparision; \ + else \ + ( \ + echo "WARNING: New failures in gcc-3.4 compared to gcc-3.3"; \ + echo ''; \ + cat diff-summary; \ + ) > testsuite-comparision; \ + rm -f diff-summary; \ + fi + touch $(check_inst_stamp) + +clean: debian/control + dh_testdir + rm -f pxxx status + rm -f *-summary *-protocol testsuite-comparision summary-diff + rm -f $(srcdir)/gcc/po/*.gmo + rm -rf src-nvptx src-gcn + rm -f debian/lib{gcc,objc,stdc++}{-v3,[0-9]}*.{{pre,post}{inst,rm},shlibs} + fs=`echo debian/*BV* debian/*CXX* debian/*LC* debian/*MF* | sort -u`; \ + for f in $$fs; do \ + [ -f $$f ] || continue; \ + f2=$$(echo $$f \ + | sed 's/BV/$(BASE_VERSION)/;s/CXX/$(CXX_SONAME)/;s/LC/$(GCC_SONAME)/;s/-CRB/$(cross_bin_arch)/;s/\.in$$//'); \ + rm -f $$f2; \ + done + rm -f debian/lib*gcc-s1.symbols + rm -f debian/lib*{atomic$(ATOMIC_SONAME),gfortran$(FORTRAN_SONAME),gomp$(GOMP_SONAME),itm$(ITM_SONAME),quadmath$(QUADMATH_SONAME),stdc++$(CXX_SONAME)}.symbols + find debian -maxdepth 1 -name '*-cross.symbols' -type l | xargs -r rm -f + rm -f debian/gcc-{XX,ar,nm,ranlib}-$(BASE_VERSION).1 + rm -f debian/shlibs.local debian/shlibs.common* debian/substvars.local + rm -f debian/*.debhelper + -[ -d debian/bugs ] && $(MAKE) -C debian/bugs clean + rm -f debian/README.libstdc++-baseline debian/README.Bugs debian/README.Debian.$(DEB_TARGET_ARCH) + rm -f debian/arch_binaries* debian/indep_binaries* + rm -rf bin bin-gcn locales share + rm -rf check-inst + rm -f usage-*.svg + rm -f installed-*.tar* + dh_clean +ifneq (,$(filter $(build_type), build-cross cross-build-cross)) + $(cross_clean) dh_clean +endif + +# ----------------------------------------------------------------------------- +# some abbrevations for the package names and directories; +# p_XXX is the package name, d_XXX is the package directory +# these macros are only used in the binary-* targets. + +ifeq ($(versioned_packages),yes) + pkg_ver := -$(BASE_VERSION) +endif + +# if native or rtlibs build +ifeq ($(if $(filter yes,$(DEB_CROSS)),$(if $(filter rtlibs,$(DEB_STAGE)),native,cross),native),native) + p_base = gcc$(pkg_ver)-base + p_lbase = $(p_base) + p_xbase = gcc$(pkg_ver)-base +else + # only triggered if DEB_CROSS set + p_base = gcc$(pkg_ver)$(cross_bin_arch)-base + p_lbase = gcc$(pkg_ver)-cross-base$(GCC_PORTS_BUILD) + p_xbase = gcc$(pkg_ver)$(cross_bin_arch)-base +endif +p_cpp_b = cpp$(pkg_ver)-for-build +p_hppa64 = gcc$(pkg_ver)-hppa64-linux-gnu + +# needed for shlibs.common* generation +ifeq (,$(p_lgcc)) + p_lgcc = libgcc-s$(GCC_SONAME)$(cross_lib_arch) +endif +ifeq (,$(p_lib)) + p_lib = libstdc++$(CXX_SONAME)$(cross_lib_arch) +endif +p_tst = gcc$(pkg_ver)-test-results + +d = debian/tmp +d_base = debian/$(p_base) +d_xbase = debian/$(p_xbase) +d_lgcc = debian/$(p_lgcc) +d_hppa64= debian/$(p_hppa64) +d_tst = debian/$(p_tst) + +common_substvars = \ + $(shell awk "{printf \"'-V%s' \", \$$0}" debian/substvars.local) + +ifeq ($(DEB_CROSS),yes) + lib_binaries := indep_binaries +else + lib_binaries := arch_binaries +endif + +# --------------------------------------------------------------------------- + +ifneq (,$(findstring gcc-snapshot, $(PKGSOURCE))) + include debian/rules.d/binary-snapshot.mk +else ifneq (,$(findstring gcc-toolchain, $(PKGSOURCE))) + include debian/rules.d/binary-toolchain.mk +else + +ifneq ($(with_base_only),yes) +ifneq ($(DEB_CROSS),yes) +ifeq ($(with_source),yes) + include debian/rules.d/binary-source.mk +endif +endif +endif + +ifneq ($(BACKPORT),true) + +ifeq ($(with_gccbase),yes) + include debian/rules.d/binary-base.mk +endif + +ifneq ($(with_base_only),yes) + +# always include to get some definitions +include debian/rules.d/binary-libgcc.mk + +ifeq ($(with_libqmath),yes) + include debian/rules.d/binary-libquadmath.mk +endif + +ifeq ($(with_libgmath),yes) + include debian/rules.d/binary-libgccmath.mk +endif + +ifeq ($(with_libgomp),yes) + include debian/rules.d/binary-libgomp.mk +endif + +ifeq ($(with_libitm),yes) + include debian/rules.d/binary-libitm.mk +endif + +ifeq ($(with_libatomic),yes) + include debian/rules.d/binary-libatomic.mk +endif + +ifeq ($(with_libbacktrace),yes) + include debian/rules.d/binary-libbacktrace.mk +endif + +ifeq ($(with_cdev),yes) + include debian/rules.d/binary-cpp.mk +endif + +ifeq ($(with_libssp),yes) + include debian/rules.d/binary-libssp.mk +endif + +ifeq ($(with_objcxx),yes) + include debian/rules.d/binary-objcxx.mk +endif + +ifeq ($(with_objc),yes) + include debian/rules.d/binary-objc.mk + include debian/rules.d/binary-libobjc.mk +endif + +ifeq ($(with_go),yes) + include debian/rules.d/binary-go.mk +endif + +ifeq ($(with_cxxdev),yes) + include debian/rules.d/binary-cxx.mk +endif +ifeq ($(with_cxx),yes) + include debian/rules.d/binary-libstdcxx.mk +endif + +ifeq ($(with_libasan),yes) + include debian/rules.d/binary-libasan.mk +endif + +ifeq ($(with_liblsan),yes) + include debian/rules.d/binary-liblsan.mk +endif + +ifeq ($(with_libtsan),yes) + include debian/rules.d/binary-libtsan.mk +endif + +ifeq ($(with_libubsan),yes) + include debian/rules.d/binary-libubsan.mk +endif + +ifeq ($(with_libhwasan),yes) + include debian/rules.d/binary-libhwasan.mk +endif + +ifeq ($(with_libvtv),yes) + include debian/rules.d/binary-libvtv.mk +endif + +ifeq ($(with_f77),yes) + include debian/rules.d/binary-f77.mk +endif + +ifeq ($(with_fortran),yes) + include debian/rules.d/binary-fortran.mk +endif + +ifeq ($(with_ada),yes) + include debian/rules.d/binary-ada.mk +endif + +ifeq ($(with_d),yes) + include debian/rules.d/binary-d.mk +endif + +ifeq ($(with_m2),yes) + include debian/rules.d/binary-m2.mk +endif + +ifeq ($(with_rs),yes) + include debian/rules.d/binary-rust.mk +endif + +ifeq ($(with_libcc1),yes) + include debian/rules.d/binary-libcc1.mk +endif + +ifeq ($(with_jit),yes) + include debian/rules.d/binary-libgccjit.mk +endif + +ifeq ($(with_offload_nvptx),yes) + include debian/rules.d/binary-nvptx.mk +endif + +ifeq ($(with_offload_gcn),yes) + include debian/rules.d/binary-gcn.mk +endif + +ifeq ($(with_libnof),yes) + ifeq ($(DEB_TARGET_GNU_CPU),powerpc) + include debian/rules.d/binary-nof.mk + endif +endif + +ifeq ($(with_softfloat),yes) + include debian/rules.d/binary-softfloat.mk +endif + +# gcc must be moved/built after g77 and g++ +ifeq ($(with_cdev),yes) + include debian/rules.d/binary-gcc.mk +endif + +ifeq ($(with_hppa64),yes) + include debian/rules.d/binary-hppa64.mk +endif + +endif # with_base_only +endif # BACKPORT +endif # ($(single_package),yes) + +# ---------------------------------------------------------------------- +install: $(install_dependencies) + +$(install_dummy_stamp): $(build_dummy_stamp) + @echo === START $@ === + touch $(install_dummy_stamp) + +$(install_snap_stamp): $(build_dependencies) + @echo === START $@ === + dh_testdir + dh_testroot + dh_prep + + : # Install directories + rm -rf $(d) + mkdir -p $(d)/$(PF) + +ifeq ($(with_hppa64),yes) + : # install files prepared in the hppa64 build target + cd $(d) && tar xvf ../../installed-hppa64.tar.xz +endif + + : # Install everything + $(SET_PATH) \ + $(SET_SHELL) \ + $(MAKE) -C $(builddir) \ + $(call pass_vars, $(flags_to_pass)) \ + DESTDIR=$(CURDIR)/$(d) \ + infodir=/$(PF)/share/info \ + mandir=/$(PF)/share/man \ + install + + ls -l $(d)/$(PF)/bin + + for i in ar nm ranlib; do \ + cp debian/gcc-$$i-$(BASE_VERSION).1 \ + $(d)/$(PF)/share/man/man1/$(cmd_prefix)gcc-$$i.1; \ + done + + if [ ! -x $(d)/$(PF)/bin/$(TARGET_ALIAS)-gcc ]; then \ + mv $(d)/$(PF)/bin/$(TARGET_ALIAS)-gcc-13* $(d)/$(PF)/bin/$(TARGET_ALIAS)-gcc; \ + else \ + rm -f $(d)/$(PF)/bin/$(TARGET_ALIAS)-gcc-13*; \ + fi + rm -rf $(d)/$(gcc_lib_dir)/include-fixed + +ifneq ($(configured_libdir),$(libdir)) + for i in ada debug go pkgconfig '*.so' '*.so.*' '*.a' '*.la' '*.py' '*.spec'; do \ + mv $(d)/$(PF)/$(configured_libdir)/$$i \ + $(d)/$(PF)/$(libdir)/. || true; \ + done +endif + +ifeq ($(with_jit),yes) + : # install files prepared in the jit build target + cd $(d) && tar xvf ../../installed-jit.tar.xz +endif + + -ls -l $(d)/usr + if [ -d $(d)/usr/man/man1 ]; then \ + mv $(d)/usr/man/man1/* $(d)/usr/share/man/man1/; \ + fi + + chmod 755 debian/dh_* + touch $(install_snap_stamp) + + +$(install_tc_stamp): $(build_dependencies) + @echo === START $@ === + dh_testdir + dh_testroot + dh_prep + + : # Install directories + rm -rf $(d) + mkdir -p $(d)/$(PF) + +ifeq ($(with_hppa64),yes) + : # install files prepared in the hppa64 build target + cd $(d) && tar xvf ../../installed-hppa64.tar.xz +endif + + : # Install everything + $(SET_PATH) \ + $(SET_SHELL) \ + $(MAKE) -C $(builddir) \ + $(call pass_vars, $(flags_to_pass)) \ + DESTDIR=$(CURDIR)/$(d) \ + infodir=/$(PF)/share/info \ + mandir=/$(PF)/share/man \ + install + + ls -l $(d)/$(PF)/bin + + for i in ar nm ranlib; do \ + cp debian/gcc-$$i-$(BASE_VERSION).1 \ + $(d)/$(PF)/share/man/man1/$(cmd_prefix)gcc-$$i.1; \ + done + + if [ ! -x $(d)/$(PF)/bin/$(TARGET_ALIAS)-gcc ]; then \ + mv $(d)/$(PF)/bin/$(TARGET_ALIAS)-gcc-13* $(d)/$(PF)/bin/$(TARGET_ALIAS)-gcc; \ + else \ + rm -f $(d)/$(PF)/bin/$(TARGET_ALIAS)-gcc-13*; \ + fi + rm -rf $(d)/$(gcc_lib_dir)/include-fixed + +ifneq ($(configured_libdir),$(libdir)) + for i in ada debug go pkgconfig '*.so' '*.so.*' '*.a' '*.la' '*.py' '*.spec'; do \ + mv $(d)/$(PF)/$(configured_libdir)/$$i \ + $(d)/$(PF)/$(libdir)/. || true; \ + done +endif + +ifeq ($(with_jit),yes) + : # install files prepared in the jit build target + cd $(d) && tar xvf ../../installed-jit.tar.xz +endif + + -ls -l $(d)/usr + if [ -d $(d)/usr/man/man1 ]; then \ + mv $(d)/usr/man/man1/* $(d)/usr/share/man/man1/; \ + fi + + chmod 755 debian/dh_* + touch $(install_tc_stamp) + + +$(install_stamp): $(build_stamp) + @echo === START $@ === + dh_testdir + dh_testroot + dh_prep $(if $(filter yes,$(with_hppa64)),-N$(p_hppa64)) + + if [ -f $(binary_stamp)-hppa64 ]; then \ + mv $(binary_stamp)-hppa64 saved-stamp-hppa64; \ + fi + rm -f $(binary_stamp)* + if [ -f saved-stamp-hppa64 ]; then \ + mv saved-stamp-hppa64 $(binary_stamp)-hppa64; \ + fi + + : # Install directories + rm -rf $(d) + mkdir -p $(d)/$(libdir) $(d)/$(PF) $(d)/$(PF)/$(libdir)/debug +ifeq ($(biarch32),yes) + mkdir -p $(d)/$(PF)/$(lib32loc)/debug +endif +ifeq ($(biarch64),yes) + mkdir -p $(d)/$(PF)/lib64/debug +endif +ifeq ($(biarchn32),yes) + mkdir -p $(d)/$(PF)/$(libn32)/debug +endif +ifeq ($(biarchx32),yes) + mkdir -p $(d)/$(PF)/libx32/debug +endif + +ifneq (,$(filter $(DEB_TARGET_GNU_CPU),x86_64 sparc64 s390x powerpc64)) +ifneq ($(DEB_TARGET_ARCH),x32) + : # link lib to lib64 and $(PF)/lib to $(PF)/lib64 + : # (this works when CONFARGS contains '--disable-multilib') + ln -s $(configured_libdir) $(d)/lib64 + mkdir -p $(d)/$(PF)/$(configured_libdir) + ln -s $(configured_libdir) $(d)/$(PF)/lib64 +endif +endif +ifeq ($(DEB_TARGET_ARCH),x32) + : # link lib to libx32 and $(PF)/lib to $(PF)/libx32 + ln -s $(configured_libdir) $(d)/libx32 + mkdir -p $(d)/$(PF)/$(configured_libdir) + ln -s $(configured_libdir) $(d)/$(PF)/libx32 +endif + + : # Install everything + $(SET_PATH) \ + $(SET_SHELL) \ + $(MAKE) -C $(builddir) \ + $(call pass_vars, $(flags_to_pass)) \ + DESTDIR=$(CURDIR)/$(d) \ + infodir=/$(PF)/share/info \ + mandir=/$(PF)/share/man \ + install + + @echo III: =============== upstream install $(DEB_TARGET_ARCH) =============== + find $(d) ! -type d + @echo III: =============== end upstream install $(DEB_TARGET_ARCH) =============== + +ifeq ($(with_m2),yes) + ifneq (,$(filter $(build_type), build-cross cross-build-cross)) + : # FIXME: libm2 libs are installed wrong for libgm2 + for i in $(d)/$(PF)/lib/libm2*; do \ + test -e $$i || continue; \ + echo mv $$i $(d)/$(PFL)/lib/. ; \ + mv $$i $(d)/$(PFL)/lib/. ; \ + done + endif +endif + + rm -rf $(d)/$(gcc_lib_dir)/include-fixed + +ifeq ($(DEB_STAGE)-$(DEB_CROSS),rtlibs-yes) + @echo configured_libdir=$(configured_libdir) / libdir=$(libdir) / usr_lib=$(usr_lib) + ls $(d)/$(PF)/$(TARGET_ALIAS)/lib + set -x; \ + if [ -d $(d)/$(PF)/$(TARGET_ALIAS)/lib ]; then \ + cp -a $(d)/$(PF)/$(TARGET_ALIAS)/lib/* $(d)/$(PF)/lib/$(DEB_TARGET_MULTIARCH)/.; \ + fi + for d in $$(cd $(d)/$(PF)/$(TARGET_ALIAS); echo lib?*); do \ + [ -d $(d)/$(PF)/$(TARGET_ALIAS)/$$d ] || continue; \ + cp -a $(d)/$(PF)/$(TARGET_ALIAS)/$$d/* $(d)/$(PF)/$$d/.; \ + done +else + ifneq ($(configured_libdir),$(libdir)) + for i in ada debug go pkgconfig '*.so' '*.so.*' '*.a' '*.la' '*.o' '*.py' '*.spec'; do \ + mv $(d)/$(PF)/$(configured_libdir)/$$i \ + $(d)/$(PF)/$(libdir)/. || true; \ + done + endif +endif + +ifneq (,$(cmd_prefix)) + for i in $(d)/$(PF)/share/info/$(cmd_prefix)*; do \ + [ -f "$$i" ] || continue; \ + mv $$i $$(echo $$i | sed 's/$(cmd_prefix)//'); \ + done +endif + +ifeq ($(with_libcxxdbg),yes) + : # FIXME: the libstdc++ gdb.py file is installed with a wrong name + for i in $$(find $(d)/$(PF) -name libstdc++_pic.a-gdb.py); do \ + [ -f $$i ] || continue; \ + d=$$(dirname $$i); \ + b=$$(basename $$i); \ + t=$$(cd $$d; echo libstdc++.so.*.*.*)-gdb.py; \ + mv $$i $$d/$$t; \ + done +endif + + : # fix permissions of liblto_plugin.so + chmod 644 $(d)/$(gcc_lexec_dir)/liblto_plugin.so + + : # remove rpath settings from binaries and shared libs + for i in $$(chrpath -k $(d)/$(PF)/bin/* $(d)/$(PFL)/lib*/lib*.so.* \ + $(d)/$(gcc_lib_dir)/plugin/* \ + $(if $(filter $(with_multiarch_lib),yes), \ + $(d)/$(PF)/lib/$(DEB_TARGET_MULTIARCH)/lib*.so.*) \ + 2>/dev/null | awk -F: '/R(UN)?PATH=/ {print $$1}'); \ + do \ + case "$$i" in ecj1|*gij-*|*libjawt*|*libjvm*) continue; esac; \ + [ -h $$i ] && continue; \ + chrpath --delete $$i; \ + echo "removed RPATH/RUNPATH: $$i"; \ + done + + : # remove '*.la' and '*.lai' files, not shipped in any package. + find $(d) -name '*.la' -o -name '*.lai' | xargs -r rm -f + +ifeq ($(GFDL_INVARIANT_FREE),yes) + for i in gcc gcov; do \ + I=`echo $$i | tr a-z A-Z`; \ + sed -e "s/@NAME@/$$I$(pkg_ver)/g" -e "s/@name@/$$i$(pkg_ver)/g" \ + debian/dummy-man.1 > $(d)/$(PF)/share/man/man1/$$i.1; \ + done + + ifeq ($(with_fortran),yes) + for i in g77; do \ + I=`echo $$i | tr a-z A-Z`; \ + sed -e "s/@NAME@/$$I$(pkg_ver)/g" -e "s/@name@/$$i$(pkg_ver)/g" \ + debian/dummy-man.1 > $(d)/$(PF)/share/man/man1/$$i.1; \ + done + endif +endif + +ifneq ($(with_libgnat),yes) + rm -f $(d)/$(gcc_lib_dir)/adalib/lib*.so* +endif + +# ifeq ($(with_ada),yes) +# : # rename files (versioned ada binaries) +# for i in ; do \ +# mv $(d)/$(PF)/bin/$$i $(d)/$(PF)/bin/$$i-$(GNAT_VERSION); \ +# mv $(d)/$(PF)/share/man/man1/$$i.1 \ +# $(d)/$(PF)/share/man/man1/$$i-$(GNAT_VERSION).1; \ +# done +# for i in $(GNAT_TOOLS); do \ +# mv $(d)/$(PF)/bin/$$i $(d)/$(PF)/bin/$$i-$(GNAT_VERSION); \ +# done +# endif + + for i in ar nm ranlib; do \ + cp debian/gcc-$$i-$(BASE_VERSION).1 \ + $(d)/$(PF)/share/man/man1/$(cmd_prefix)gcc-$$i$(pkg_ver).1; \ + done + + chmod 755 debian/dh_* + +ifneq ($(with_common_libs),yes) +# for native builds, the default ml libs are always available; no need for a placeholder +# apparently this changed with newer dpkg versions (1.18.7?) ... + echo 'libgcc_s $(GCC_SONAME) $(p_lgcc)' > debian/shlibs.common + echo 'libstdc++ $(CXX_SONAME) $(p_lib)' >> debian/shlibs.common + echo 'libquadmath $(QUADMATH_SONAME) libquadmath$(QUADMATH_SONAME)$(cross_lib_arch)' >> debian/shlibs.common + echo 'libatomic $(ATOMIC_SONAME) libatomic$(ATOMIC_SONAME)$(cross_lib_arch)' >> debian/shlibs.common + $(foreach ml,32 64 n32 x32 hf sf, \ + echo 'libgcc_s $(GCC_SONAME) $(subst lib,lib$(ml),$(p_lgcc))' > debian/shlibs.common$(ml); \ + echo 'libstdc++ $(CXX_SONAME) $(subst lib,lib$(ml),$(p_lib))' >> debian/shlibs.common$(ml); \ + echo 'libquadmath $(QUADMATH_SONAME) lib$(ml)quadmath$(QUADMATH_SONAME)$(cross_lib_arch)' >> debian/shlibs.common$(ml); \ + echo 'libatomic $(ATOMIC_SONAME) lib$(ml)atomic$(ATOMIC_SONAME)$(cross_lib_arch)' >> debian/shlibs.common$(ml); \ + ) +endif + + @echo III: =============== fixed install $(DEB_TARGET_ARCH) =============== + find $(d) ! -type d -print + @echo III: =============== end fixed install $(DEB_TARGET_ARCH) =============== + touch $(install_stamp) + +$(install_jit_stamp): $(build_jit_stamp) $(install_stamp) + @echo === START $@ === + dh_testdir + dh_testroot + + : # install files prepared in the jit build target + cd $(d) && tar xvf ../../installed-jit.tar.xz + + @echo XXXXX `date -R` + touch $(install_jit_stamp) + +$(install_nvptx_stamp): $(build_nvptx_stamp) + @echo === START $@ === + dh_testdir + ln -sf ../$(newlib_srcdir)/newlib $(srcdir)/newlib + rm -rf $(d)-nvptx + mkdir -p $(d)-nvptx/$(PF) + + $(SET_PATH) \ + biarch_multidir_names=none \ + $(MAKE) -C $(builddir_nvptx) \ + CC="$(CC_FOR_TARGET)" \ + $(call pass_vars, $(flags_to_pass)) \ + DESTDIR=$(CURDIR)/$(d)-nvptx \ + install + + find $(d)-nvptx + @echo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + rm -rf $(d)-nvptx/$(libexecdir)/$(gcc_subdir_name)/nvptx-none/$(versiondir)/install-tools + rm -rf $(d)-nvptx/$(libexecdir)/$(gcc_subdir_name)/$(DEB_HOST_GNU_TYPE)/$(versiondir)/accel/nvptx-none/{install-tools,plugin,cc1,cc1plus,f951} + rm -rf $(d)-nvptx/$(PF)/share/{info,man/man7,locale} + rm -rf $(d)-nvptx/$(PF)/share/man/man1/*-{gcov,gfortran,g++,cpp}.1 + rm -rf $(d)-nvptx/$(PF)/lib/gcc/nvptx-none/$(versiondir)/{install-tools,plugin} + rm -rf $(d)-nvptx/$(PF)/lib/gcc/$(DEB_HOST_GNU_TYPE)/$(versiondir)/accel/nvptx-none/{install-tools,plugin,include-fixed} + rm -rf $(d)-nvptx/$(PF)/lib/libc[cp]1* + rm -rf $(d)-nvptx/$(PF)/lib{32,64,n32,x32} + + mv -f $(d)-nvptx/$(PF)/nvptx-none/lib/*.{a,spec} \ + $(d)-nvptx/$(PF)/lib/gcc/$(DEB_HOST_GNU_TYPE)/$(versiondir)/accel/nvptx-none/ + mv -f $(d)-nvptx/$(PF)/nvptx-none/lib/mgomp/*.{a,spec} \ + $(d)-nvptx/$(PF)/lib/gcc/$(DEB_HOST_GNU_TYPE)/$(versiondir)/accel/nvptx-none/mgomp/ + mv -f $(d)-nvptx/$(PF)/lib/gcc/nvptx-none/$(versiondir)/*.a \ + $(d)-nvptx/$(PF)/lib/gcc/$(DEB_HOST_GNU_TYPE)/$(versiondir)/accel/nvptx-none/ + mv -f $(d)-nvptx/$(PF)/lib/gcc/nvptx-none/$(versiondir)/mgomp/*.a \ + $(d)-nvptx/$(PF)/lib/gcc/$(DEB_HOST_GNU_TYPE)/$(versiondir)/accel/nvptx-none/mgomp/ + find $(d)-nvptx -name \*.la | xargs rm -f + rm -rf $(d)-nvptx/$(PF)/nvptx-none/include + -find $(d)-nvptx -type d -empty -delete + + : # a complete compiler installation needed for running the tests +ifneq ($(single_package),yes) + ln -sf lib $(d)-nvptx/$(PF)/libexec +endif + ln -sf /usr/bin/nvptx-none-ar $(d)-nvptx/$(gcc_lexec_dir)/accel/nvptx-none/ar + ln -sf /usr/bin/nvptx-none-as $(d)-nvptx/$(gcc_lexec_dir)/accel/nvptx-none/as + ln -sf /usr/bin/nvptx-none-ld $(d)-nvptx/$(gcc_lexec_dir)/accel/nvptx-none/ld + ln -sf /usr/bin/nvptx-none-ranlib $(d)-nvptx/$(gcc_lexec_dir)/accel/nvptx-none/ranlib + + @echo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + find $(d)-nvptx + @echo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + + rm -f $(srcdir)/newlib + @echo XXXXX `date -R` + touch $(install_nvptx_stamp) + +$(install_gcn_stamp): $(build_gcn_stamp) + @echo === START $@ === + dh_testdir + ln -sf ../$(newlib_srcdir)/newlib $(srcdir)/newlib + rm -rf $(d)-gcn + mkdir -p $(d)-gcn/$(PF) + + $(SET_PATH) \ + biarch_multidir_names=none \ + $(MAKE) -C $(builddir_gcn) \ + CC="$(CC_FOR_TARGET)" \ + $(call pass_vars, $(flags_to_pass)) \ + DESTDIR=$(CURDIR)/$(d)-gcn \ + install + + find $(d)-gcn + @echo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + rm -rf $(d)-gcn/$(libexecdir)/$(gcc_subdir_name)/$(gcn_target_name)/$(versiondir)/install-tools + rm -rf $(d)-gcn/$(libexecdir)/$(gcc_subdir_name)/$(DEB_HOST_GNU_TYPE)/$(versiondir)/accel/$(gcn_target_name)/{install-tools,plugin,cc1,cc1plus,f951} + rm -rf $(d)-gcn/$(PF)/share/{info,man/man7,locale} + rm -rf $(d)-gcn/$(PF)/bin/*-{gcov*,lto-dump}-$(versiondir) + rm -rf $(d)-gcn/$(PF)/share/man/man1/*-{cpp,gcov*,gfortran,g++,lto-dump}-$(versiondir).1 + rm -rf $(d)-gcn/$(PF)/lib/gcc/$(gcn_target_name)/$(versiondir)/{install-tools,plugin} + rm -rf $(d)-gcn/$(PF)/lib/gcc/$(DEB_HOST_GNU_TYPE)/$(versiondir)/accel/$(gcn_target_name)/{install-tools,plugin,include-fixed} + rm -rf $(d)-gcn/$(PF)/lib/libc[cp]1* + rm -rf $(d)-gcn/$(PF)/lib{32,64,n32,x32} + + mv -f $(d)-gcn/$(PF)/$(gcn_target_name)/lib/*.{a,spec} \ + $(d)-gcn/$(PF)/lib/gcc/$(DEB_HOST_GNU_TYPE)/$(versiondir)/accel/$(gcn_target_name)/ + mv -f $(d)-gcn/$(PF)/$(gcn_target_name)/lib/gfx900/*.{a,spec} \ + $(d)-gcn/$(PF)/lib/gcc/$(DEB_HOST_GNU_TYPE)/$(versiondir)/accel/$(gcn_target_name)/gfx900/. + mv -f $(d)-gcn/$(PF)/$(gcn_target_name)/lib/gfx906/*.{a,spec} \ + $(d)-gcn/$(PF)/lib/gcc/$(DEB_HOST_GNU_TYPE)/$(versiondir)/accel/$(gcn_target_name)/gfx906/. + mv -f $(d)-gcn/$(PF)/lib/gcc/$(gcn_target_name)/$(versiondir)/*.a \ + $(d)-gcn/$(PF)/lib/gcc/$(DEB_HOST_GNU_TYPE)/$(versiondir)/accel/$(gcn_target_name)/ + mv -f $(d)-gcn/$(PF)/lib/gcc/$(gcn_target_name)/$(versiondir)/gfx900/*.a \ + $(d)-gcn/$(PF)/lib/gcc/$(DEB_HOST_GNU_TYPE)/$(versiondir)/accel/$(gcn_target_name)/gfx900/. + mv -f $(d)-gcn/$(PF)/lib/gcc/$(gcn_target_name)/$(versiondir)/gfx906/*.a \ + $(d)-gcn/$(PF)/lib/gcc/$(DEB_HOST_GNU_TYPE)/$(versiondir)/accel/$(gcn_target_name)/gfx906/. + find $(d)-gcn -name \*.la | xargs rm -f + rm -rf $(d)-gcn/$(PF)/$(gcn_target_name)/include + rm -rf $(d)-gcn/$(PF)/lib/gcc/$(DEB_HOST_GNU_TYPE)/$(versiondir)/include + rm -rf $(d)-gcn/$(PF)/lib/gcc/$(DEB_HOST_GNU_TYPE)/$(versiondir)/gfx900 + + : # a complete compiler installation needed for running the tests +ifneq ($(single_package),yes) + ln -sf lib $(d)-gcn/$(PF)/libexec +endif + ln -sf /usr/lib/llvm-$(gcn_tools_llvm_version)/bin/llvm-ar \ + $(d)-gcn/$(gcc_lexec_dir)/accel/$(gcn_target_name)/ar + ln -sf /usr/lib/llvm-$(gcn_tools_llvm_version)/bin/llvm-mc \ + $(d)-gcn/$(gcc_lexec_dir)/accel/$(gcn_target_name)/as + ln -sf /usr/lib/llvm-$(gcn_tools_llvm_version)/bin/lld \ + $(d)-gcn/$(gcc_lexec_dir)/accel/$(gcn_target_name)/ld + ln -sf /usr/lib/llvm-$(gcn_tools_llvm_version)/bin/llvm-nm \ + $(d)-gcn/$(gcc_lexec_dir)/accel/$(gcn_target_name)/nm + ln -sf /usr/lib/llvm-$(gcn_tools_llvm_version)/bin/llvm-ranlib \ + $(d)-gcn/$(gcc_lexec_dir)/accel/$(gcn_target_name)/ranlib + + : # fix permissions of liblto_plugin.so + chmod 644 $(d)-gcn/$(gcc_lexec_dir)/accel/$(gcn_target_name)/liblto_plugin.so + + -find $(d)-gcn -type d -empty -delete + @echo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + find $(d)-gcn + @echo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + + rm -f $(srcdir)/newlib + @echo XXXXX `date -R` + touch $(install_gcn_stamp) + +$(install_hppa64_stamp): $(build_hppa64_stamp) + @echo === START $@ === + dh_testdir + dh_testroot + rm -rf $(d_hppa64) + mkdir -p $(d_hppa64)/$(PF) + + : # install files prepared in the hppa64 build target + cd $(d_hppa64) && tar xvf ../../installed-hppa64.tar.xz + + touch $(install_hppa64_stamp) + +# ---------------------------------------------------------------------- +# Build architecture-dependent files here. +debian/arch_binaries.all: $(foreach i,$(arch_binaries),$(binary_stamp)-$(i)) + cd debian; xargs -r du -s < arch_binaries | sort -nr | awk '{print $$2}' \ + > arch_binaries.tmp + mv debian/arch_binaries.tmp debian/arch_binaries + sed -i 's/ /\n/g' debian/arch_binaries.epoch || touch debian/arch_binaries.epoch + cat debian/arch_binaries debian/arch_binaries.epoch > debian/arch_binaries.all + +# see #879054 for the "test ! -s" tests, needed for the rtlibs stage +binary-arch: $(foreach i,$(arch_binaries),$(binary_stamp)-$(i)) debian/arch_binaries.all + test ! -s debian/arch_binaries.all || \ + dh_compress $(foreach p,$(shell echo `cat debian/arch_binaries.all`),-p$(p)) \ + -X.log.xz -X.sum.xz -X.c -X.txt -X.tag -X.map -XREADME.Bugs +ifeq ($(i586_symlinks),yes) + cd debian; \ + test ! -s arch_binaries || \ + for x in $$(find `cat arch_binaries` -type l -name 'i686-*'); do \ + link=$$(echo $$x | sed 's/i686-/i586-/'); \ + tgt=$$(basename $$x); \ + echo "Adding symlink: $$link -> $$tgt"; \ + rm -f $$link; cp -a $$x $$link; \ + done +endif + test ! -s debian/arch_binaries.all || \ + dh_fixperms $(foreach p,$(shell echo `cat debian/arch_binaries.all`),-p$(p)) +ifeq ($(with_ada),yes) + find $$(ls -d $(d_gnat) $(d_gnatsjlj) $(d_snap) 2>/dev/null) \ + -name '*.ali' | xargs -r chmod 444 +endif + @set -e; \ + pkgs="$$(sed 's/^/-p/;/-for-host/d' debian/arch_binaries | xargs)"; \ + if [ -n "$$pkgs" ]; then \ + echo dh_gencontrol $$pkgs -- -v$(DEB_VERSION) $(common_substvars) $(shell debian/ada/libgnat_alihash); \ + dh_gencontrol $$pkgs -- -v$(DEB_VERSION) $(common_substvars) $(shell debian/ada/libgnat_alihash); \ + fi + @set -e; \ + pkgs="$$(sed -n 's/^/-p/;/-for-host/p' debian/arch_binaries | xargs)"; \ + if [ -n "$$pkgs" ]; then \ + echo $(cross_gencontrol) dh_gencontrol $$pkgs -- -v$(DEB_VERSION) $(common_substvars) $(shell debian/ada/libgnat_alihash); \ + $(cross_gencontrol) dh_gencontrol $$pkgs -- -v$(DEB_VERSION) $(common_substvars) $(shell debian/ada/libgnat_alihash); \ + fi + @set -e; \ + pkgs='$(strip $(foreach p,$(shell echo `cat debian/arch_binaries.epoch`),-p$(p)))'; \ + if [ -n "$$pkgs" ]; then \ + echo dh_gencontrol $$pkgs -- -v$(DEB_EVERSION) $(common_substvars); \ + dh_gencontrol $$pkgs -- -v$(DEB_EVERSION) $(common_substvars); \ + fi +ifneq ($(single_package),yes) + ifeq ($(with_libcompatgcc),yes) + cp -p debian/.debhelper/generated/$(p_lgcc)/triggers \ + debian/.debhelper/generated/$(subst gcc-s,gcc,$(p_lgcc))/. + endif +endif + test ! -s debian/arch_binaries.all || \ + dh_installdeb $(foreach p,$(shell echo `cat debian/arch_binaries.all`),-p$(p)) + test ! -s debian/arch_binaries.all || \ + dh_md5sums $(foreach p,$(shell echo `cat debian/arch_binaries.all`),-p$(p)) + test ! -s debian/arch_binaries.all || \ + dh_builddeb $(foreach p,$(shell echo `cat debian/arch_binaries.all`),-p$(p)) +ifeq ($(with_check),yes) + @echo Done +# : # Send Email about sucessfull build. +# # cat raw-test-summary | sh; echo "Sent mail to $(S_EMAIL)" +endif + +ifneq ($(single_package),yes) + : # remove empty directories, when all components are in place + -find $(d) -type d -empty -delete + + @echo "Listing installed files not included in any package:" + -find $(d) ! -type d +endif + -du -s -BM . + -du -s -BM .. + @echo XXXXX `date -R` + +# ---------------------------------------------------------------------- +# Build architecture-independent files here. +debian/indep_binaries.all: $(foreach i,$(indep_binaries),$(binary_stamp)-$(i)) + cd debian; xargs -r du -s < indep_binaries | sort -nr | awk '{print $$2}' \ + > indep_binaries.tmp + mv debian/indep_binaries.tmp debian/indep_binaries + sed -i 's/ /\n/g' debian/indep_binaries.epoch || touch debian/indep_binaries.epoch + cat debian/indep_binaries debian/indep_binaries.epoch > debian/indep_binaries.all + +binary-indep: $(foreach i,$(indep_binaries),$(binary_stamp)-$(i)) debian/indep_binaries.all + find debian -name _formulas.log -delete -print + dh_compress $(foreach p,$(shell echo `cat debian/indep_binaries.all`),-p$(p)) \ + -X.log.xz -X.sum.xz -X.c -X.txt -X.tag -X.map -XREADME.Bugs + dh_fixperms $(foreach p,$(shell echo `cat debian/indep_binaries.all`),-p$(p)) + : # the export should be harmless for the binary indep packages of a native build + export DEB_HOST_ARCH=$(TARGET); \ + dh_gencontrol $(foreach p,$(shell echo `cat debian/indep_binaries`),-p$(p)) \ + -- -v$(DEB_VERSION) $(common_substvars) + @set -e; \ + export DEB_HOST_ARCH=$(TARGET); \ + pkgs='$(strip $(foreach p,$(shell echo `cat debian/indep_binaries.epoch`),-p$(p)))'; \ + if [ -n "$$pkgs" ]; then \ + echo dh_gencontrol $$pkgs -- -v$(DEB_EVERSION) $(common_substvars); \ + dh_gencontrol $$pkgs -- -v$(DEB_EVERSION) $(common_substvars); \ + fi + +ifneq (,$(filter $(DEB_TARGET_ARCH), mips mipsel mips64 mips64el mipsn32 mipsn32el)) + for p in `cat debian/indep_binaries debian/indep_binaries.epoch`; do \ + p=$${p#-p*}; \ + case "$$p" in \ + lib64*) echo mangle $$p; sed -i -r '/^(Dep|Rec|Sug)/s/libn?32[^,]+(, *|$$)//g;/^(Dep|Rec|Sug)/s/$(p_lgcc)/$(p_l64gcc)/;/^(Dep|Rec|Sug)/s/ *, *$$//' debian/$$p/DEBIAN/control;; \ + libn32*) echo mangle $$p; sed -i -r '/^(Dep|Rec|Sug)/s/lib64[^,]+(, *|$$)//g;/^(Dep|Rec|Sug)/s/$(p_lgcc)/$(p_ln32gcc)/;/^(Dep|Rec|Sug)/s/ *, *$$//' debian/$$p/DEBIAN/control;; \ + esac; \ + done +endif + + dh_installdeb $(foreach p,$(shell echo `cat debian/indep_binaries.all`),-p$(p)) + dh_md5sums $(foreach p,$(shell echo `cat debian/indep_binaries.all`),-p$(p)) + dh_builddeb $(foreach p,$(shell echo `cat debian/indep_binaries.all`),-p$(p)) + + @echo XXXXX `date -R` + +source diff: + @echo >&2 'source and diff are obsolete - use dpkg-source -b'; false + +binary: binary-indep binary-arch +.PHONY: build build-indep build-arch clean binary-indep binary-arch binary +.PRECIOUS: $(stampdir)/%-stamp debian/indep_binaries.all debian/arch_binaries.all +.NOTPARALLEL: diff --git a/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1_amd64.buildinfo.txt b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1_amd64.buildinfo.txt new file mode 100644 index 0000000000..d73b46acc7 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-13_13.3.0-6ubuntu2~24.04.1_amd64.buildinfo.txt @@ -0,0 +1,756 @@ +Format: 1.0 +Source: gcc-13 +Binary: cpp-13 cpp-13-doc cpp-13-for-build cpp-13-for-host cpp-13-x86-64-linux-gnu cpp-13-x86-64-linux-gnu-dbgsym g++-13 g++-13-for-build g++-13-for-host g++-13-multilib g++-13-x86-64-linux-gnu g++-13-x86-64-linux-gnu-dbgsym gcc-13 gcc-13-base gcc-13-doc gcc-13-for-build gcc-13-for-host gcc-13-hppa64-linux-gnu gcc-13-hppa64-linux-gnu-dbgsym gcc-13-locales gcc-13-multilib gcc-13-offload-amdgcn gcc-13-offload-amdgcn-dbgsym gcc-13-offload-nvptx gcc-13-offload-nvptx-dbgsym gcc-13-plugin-dev gcc-13-plugin-dev-dbgsym gcc-13-source gcc-13-test-results gcc-13-x86-64-linux-gnu gcc-13-x86-64-linux-gnu-dbgsym gccgo-13 gccgo-13-doc gccgo-13-for-build gccgo-13-for-host gccgo-13-multilib gccgo-13-x86-64-linux-gnu gccgo-13-x86-64-linux-gnu-dbgsym gdc-13 gdc-13-for-build gdc-13-for-host gdc-13-multilib gdc-13-x86-64-linux-gnu gdc-13-x86-64-linux-gnu-dbgsym gfortran-13 gfortran-13-doc gfortran-13-for-build gfortran-13-for-host gfortran-13-multilib gfortran-13-x86-64-linux-gnu + gfortran-13-x86-64-linux-gnu-dbgsym gm2-13 gm2-13-doc gm2-13-for-build gm2-13-for-host gm2-13-x86-64-linux-gnu gm2-13-x86-64-linux-gnu-dbgsym gnat-13 gnat-13-doc gnat-13-for-build gnat-13-for-host gnat-13-x86-64-linux-gnu gnat-13-x86-64-linux-gnu-dbgsym gobjc++-13 gobjc++-13-for-build gobjc++-13-for-host gobjc++-13-multilib gobjc++-13-x86-64-linux-gnu gobjc++-13-x86-64-linux-gnu-dbgsym gobjc-13 gobjc-13-for-build gobjc-13-for-host gobjc-13-multilib gobjc-13-x86-64-linux-gnu gobjc-13-x86-64-linux-gnu-dbgsym lib32gcc-13-dev lib32gfortran-13-dev lib32go-13-dev lib32go22 lib32gphobos-13-dev lib32gphobos4 lib32gphobos4-dbgsym lib32objc-13-dev lib32stdc++-13-dev lib32stdc++6-13-dbg libgcc-13-dev libgccjit-13-dev libgccjit-13-doc libgfortran-13-dev libgm2-13-dev libgm2-18 libgm2-18-dbgsym libgnat-13 libgnat-13-dbgsym libgo-13-dev libgo22 libgphobos-13-dev libgphobos4 libgphobos4-dbgsym libobjc-13-dev libstdc++-13-dev libstdc++-13-doc libstdc++-13-pic libstdc++6-13-dbg + libx32gcc-13-dev libx32gfortran-13-dev libx32go-13-dev libx32go22 libx32gphobos-13-dev libx32gphobos4 libx32gphobos4-dbgsym libx32objc-13-dev libx32stdc++-13-dev + libx32stdc++6-13-dbg +Architecture: all amd64 +Version: 13.3.0-6ubuntu2~24.04.1 +Checksums-Md5: + 1c51d842e23a8b60dc5582a0e3a3de86 180014 cpp-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + 738b10705aad8073562990acca8c6e5c 47218 cpp-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + d0a57bc81792cbdc0e1850dbb6c5935d 986 cpp-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + 47500aed55ff84bab062d12fb1af4e1b 64988258 cpp-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + e8f6938b588e32e4b04ef3d40e33846c 10714542 cpp-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 3197b91f8a37ff9bbae2ff279bab6e19 1042 cpp-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + c4f21592b5c39ff4973a5db4f576bd1f 868 g++-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + 003427d2b13321eb93645d115cff99ce 906 g++-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + 90be856ecca03c3b9f108c4a75160bda 892 g++-13-multilib_13.3.0-6ubuntu2~24.04.1_amd64.deb + 24a6d5fe8452e3f7c639f9c264f26f0e 70110282 g++-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 90ea28b82bebea013965566f3474a3ce 12161938 g++-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 003839ff9b40a2c140c43bd5c0e1186e 16048 g++-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + f2e3cd036355db5350d4336e3f928090 51616 gcc-13-base_13.3.0-6ubuntu2~24.04.1_amd64.deb + e036cd267569eeb0480201f4152a7872 2852452 gcc-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + 42794378c74b267ce386c08cf93f41bf 826 gcc-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + a8f9d3887e9e35836ec61047d0e83d57 882 gcc-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + d18cee2ab6d5202f06e02ff34624a99d 5894834 gcc-13-hppa64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 2193f3fab6c67da58881085278defcdf 17755080 gcc-13-hppa64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 533c078f8fa78c627ff8856281b05451 2235886 gcc-13-locales_13.3.0-6ubuntu2~24.04.1_all.deb + 710f2cac690743daba2285e8906edc13 880 gcc-13-multilib_13.3.0-6ubuntu2~24.04.1_amd64.deb + b9120fb70231eba82683e406c3529488 72623780 gcc-13-offload-amdgcn-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 63dc4871b239d6c101cdcad1ef8def7d 22044076 gcc-13-offload-amdgcn_13.3.0-6ubuntu2~24.04.1_amd64.deb + 2e7291059605aa49b7ea858b300e2960 69936698 gcc-13-offload-nvptx-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 35af6a387addd6c57750c00120e8d6e1 11690380 gcc-13-offload-nvptx_13.3.0-6ubuntu2~24.04.1_amd64.deb + 520fd28ea6ab90632b789ddf1f43ed2b 247506 gcc-13-plugin-dev-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + b71fd928fbfe45eae7022bb027b29be2 1451870 gcc-13-plugin-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 9a2834373f44cf116b990e8ebe7c910d 88627482 gcc-13-source_13.3.0-6ubuntu2~24.04.1_all.deb + d2b9c51cd269aaad702f40cbf4d0956c 16626108 gcc-13-test-results_13.3.0-6ubuntu2~24.04.1_amd64.deb + dfeeb2d54a74d50f46796cae318328a4 164555002 gcc-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + cb0b10a8a80f00facc1f782f3666ded7 21084546 gcc-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + b754981217b2ad7c21b56f7b87492d67 494262 gcc-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + dac62ff4d935b9e1a29b0dceb988e3fa 52604 gccgo-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + d002fcfd8094e19ec176a0e23cda722b 880 gccgo-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + 944b9e2aae2f47bcfd2f64b1b2322e9d 928 gccgo-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + 542c0d22e05cb6a92aa20819bf20fa2b 1012 gccgo-13-multilib_13.3.0-6ubuntu2~24.04.1_amd64.deb + 9853762846b3a5856a47e802cfb3f872 75936516 gccgo-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + aad460140f1c1a42b88d6d83c640950d 14208980 gccgo-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 01585cdca7721870ed11a9f6f7b9368b 1028 gccgo-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 0e88172ae36b3fcad0faa31b87469f36 902 gdc-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + b63c58b3c17ce6dd5d9268e93079a66d 948 gdc-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + d18ba45f07e71b94fe74fdfcc1a82665 912 gdc-13-multilib_13.3.0-6ubuntu2~24.04.1_amd64.deb + 612ee77b9c9a62c84faf3868fa041277 68165418 gdc-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 196d79c66d129c1f116a0733fba6949c 11804370 gdc-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 742085c5ef2e86180023abcd9206c0d3 49680 gdc-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + b87012f610636094ddd343660433eaab 386980 gfortran-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + cb7a32624e662269f056a04a44e9edf4 896 gfortran-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + 240e8621a5ccf175e1b17bbe572ad7ca 942 gfortran-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + f503c9560cf3bb15b5c39cd5e61019bf 886 gfortran-13-multilib_13.3.0-6ubuntu2~24.04.1_amd64.deb + 93903a25dc5e14198f317cdb2225696b 67218820 gfortran-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 1ace0efe31cd92f60a5430bc6bcf16be 11408640 gfortran-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 3e7634cb183f6772969a1b629a32af87 13914 gfortran-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 5d6e02767c3a9fa5cf56e8f956e650ac 290466 gm2-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + 8092c66ed9d00cda91d5a1707ab366c9 882 gm2-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + 98fe805fbdd46b3204aba788ede7da10 928 gm2-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + a6c32872a8ac66b1a71dd0179f2c1284 65776088 gm2-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + c792ef58089e7735185728672c427ccc 10768804 gm2-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 9494353e236ac2c0ba9b2d5053209ba3 75196 gm2-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + da0113532a94ded50a4ebe45fb352e89 1087286 gnat-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + 1a055728b5d7bffa34eed23a2a6abf49 958 gnat-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + a05b4d3458fec48c4097b20f67cc8b91 1002 gnat-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + dd403ef9dbf05c9249f59cf0a0495ae3 87322026 gnat-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 70ba1c86dae8255fee0500372b9034ea 19377626 gnat-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 3aed593deb6af1030a3cf41ae3e3fae4 24446 gnat-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 1a11de9d48e694244302a3c6574183d1 898 gobjc++-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + 050a941332cbd45b890ecd6591227c42 954 gobjc++-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + 7f601a660036a64a659a4653e2f0a3ec 878 gobjc++-13-multilib_13.3.0-6ubuntu2~24.04.1_amd64.deb + 1e903437e95ecec1e5c5526de2e24e51 68027816 gobjc++-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 898f56d74c79ef4ea247b1fa8df5aa8f 11465824 gobjc++-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 92f44d27767e7f0e7b6cd436660bffe9 6508 gobjc++-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 903100b0312aafbab08f1b1ca5573e45 892 gobjc-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + 1ac70aa7092be28fe99a20a5582a87ca 936 gobjc-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + 335cfd7cb9c3600a8dc217e5b9331bd9 882 gobjc-13-multilib_13.3.0-6ubuntu2~24.04.1_amd64.deb + 56a9d8ff3e8c7d26e87f98e8983ba44e 63718970 gobjc-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 6673e954e1aa5c94ffddda1ed2702878 10494440 gobjc-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 83c877ea12acd76a1cb5e74825f4d228 37348 gobjc-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 6ce654db06d0971c3164910ef1667e27 2380426 lib32gcc-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 6f3b5335a1fdd58ed3710ef3f8eb3769 823552 lib32gfortran-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 1139379bc1207cb13ffc4c8dc87d36fb 18484974 lib32go-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 4b57fd60420ca765bc9c48867e73b391 13879966 lib32go22_13.3.0-6ubuntu2~24.04.1_amd64.deb + 37f9adeb0502957a4e4a2c2281429948 7141728 lib32gphobos-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + cd267db7ca781ec55d90b69bc37e6f81 4854322 lib32gphobos4-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 4cbcfc53bce9ba37014071a7c97d6027 2068276 lib32gphobos4_13.3.0-6ubuntu2~24.04.1_amd64.deb + 60641f19bce85553e6fe264963cf7732 157648 lib32objc-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + b5a4f5e0384e659f2143c97de3f4a333 1150410 lib32stdc++-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 2a67e7ebbf557f68a9a1db5657461017 12091554 lib32stdc++6-13-dbg_13.3.0-6ubuntu2~24.04.1_amd64.deb + d0d5dafa251a34629008620e5b26a5d5 2680642 libgcc-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 2943abe5e154cd602d445240b7a8107a 21016 libgccjit-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 25fa0dc3ca57312f4a521d6861610d49 277148 libgccjit-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + 1551c02b54d5d90c2f5b2a45dc0988fe 928110 libgfortran-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + aa56bf06a3532cd43d89c961fd48bb88 849474 libgm2-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 1976931b404078dc9072854f1b23c30b 467194 libgm2-18-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + d5fdc79558c34e42f79702076277fede 164784 libgm2-18_13.3.0-6ubuntu2~24.04.1_amd64.deb + 9a7c6f9b04060eb52fbc26d8d38b4049 3149840 libgnat-13-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 3fc0947e6ab333eba189c9cba0156139 1429754 libgnat-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 967abb384d9e16f30c1044156308d424 18960898 libgo-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + c35d1628f0c0733c775a4bb038288f98 14653378 libgo22_13.3.0-6ubuntu2~24.04.1_amd64.deb + d17ff9bb64593b4fc00d53b54010624d 10747734 libgphobos-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 9ce6c1c2ce0e3f039f18789670c67f56 5768176 libgphobos4-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + b27ef6323d83b8f4b1b49ea05cf3354f 1882160 libgphobos4_13.3.0-6ubuntu2~24.04.1_amd64.deb + 18573368c36baa296b206476df5f8cea 193650 libobjc-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + d4c7bf2ddf49cb3f973620bf04f750ca 2419834 libstdc++-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 41a3e4a8c130c84807fe7821df3bd4b5 9940752 libstdc++-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + 99817a17f035ea9e0381ab05bb9af06e 906138 libstdc++-13-pic_13.3.0-6ubuntu2~24.04.1_amd64.deb + 192173cbadfc6ea7a3342808535055ab 12196956 libstdc++6-13-dbg_13.3.0-6ubuntu2~24.04.1_amd64.deb + 572461e08685b5fbb81e251939d5d7bc 2190234 libx32gcc-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + fdeee45fa84f79be92ff318509749385 942252 libx32gfortran-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 12cbd1695d3c4370127a211e8e86a7b7 18660506 libx32go-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 47b035fb674a5403099638d1aec26f51 14432746 libx32go22_13.3.0-6ubuntu2~24.04.1_amd64.deb + 2e03294461aa57b2977ccf2b8ade2729 7857286 libx32gphobos-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 45800d3e3f7212d2b616e467dc96e398 5703998 libx32gphobos4-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 5ef476390a50c30b066aa9493491b538 1893034 libx32gphobos4_13.3.0-6ubuntu2~24.04.1_amd64.deb + 8002fd3086223770c9e99bf07fa49cc2 159550 libx32objc-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 2b0906837a3b4d253484a237dc55cf15 1086394 libx32stdc++-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 406c5fe947dae2176b4dfead758a105f 12114706 libx32stdc++6-13-dbg_13.3.0-6ubuntu2~24.04.1_amd64.deb +Checksums-Sha1: + ebec5e0582b9e7676f37897c23bd7a4c78b54a8f 180014 cpp-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + f1b08291d0644853d2e3cee164fee38b64c95ece 47218 cpp-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + e098191db794e42b954a19b98ae7a760c0aad6d5 986 cpp-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + bf399b602efd9f3dc645ab361d26fdb18a8aa82d 64988258 cpp-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 43d96a39ce51bfcd72fecf4df06d38eca734534a 10714542 cpp-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 0702fb7f236497a52a054995a1b5260fc2cb3ec8 1042 cpp-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 874b4f5bd83eb916afbce80c7067b666518225d6 868 g++-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + f4df8a096e9dbe3f1127f851a54b2534fd4cd548 906 g++-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + 5d2e9e0dec5c1e64394de6f0cd14c7e44bef6a43 892 g++-13-multilib_13.3.0-6ubuntu2~24.04.1_amd64.deb + 9f67628fa8901da4c28e865ac19accaca7407170 70110282 g++-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 013bf1a443886f97d5d8aaa808aee3da39419e71 12161938 g++-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 2fd7f5647d02baffdf85904ab75b99aa8e140197 16048 g++-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 09e2e0730d3ce2428b1bf6c1a613d2dd6ec1ec5b 51616 gcc-13-base_13.3.0-6ubuntu2~24.04.1_amd64.deb + 8a414f788365634f7a24583aae7fa6e59202692e 2852452 gcc-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + 68fe5746e0bf58f91cd7b31a390eabfc7a2a9e07 826 gcc-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + 0380e03f9d92502a412338d5b96fa8a5cf297e5f 882 gcc-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + a9b24ffdfafca2a21be54d90b26043ec65335b80 5894834 gcc-13-hppa64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 4c2b32dfec246bd3d618124d4f2b4b151046bc78 17755080 gcc-13-hppa64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 63a8410db5b2b42653310a5cc86431ba0247a27e 2235886 gcc-13-locales_13.3.0-6ubuntu2~24.04.1_all.deb + 7e30a3736d6e4d86f325bcf02edf320fbd9a03d2 880 gcc-13-multilib_13.3.0-6ubuntu2~24.04.1_amd64.deb + 5bfd4412c49ca44851c689d66c612a9984e84fe6 72623780 gcc-13-offload-amdgcn-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 3a6a3d697a39b4d6f89e5945d615e1fc754fbd04 22044076 gcc-13-offload-amdgcn_13.3.0-6ubuntu2~24.04.1_amd64.deb + 3593515290b6ecc9e53b4200d6f2eaa653dc07c5 69936698 gcc-13-offload-nvptx-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + f95b886bd7633bd3b2612d2dedbe880e8b7c649a 11690380 gcc-13-offload-nvptx_13.3.0-6ubuntu2~24.04.1_amd64.deb + 1404f3734f23e0213f00a18cce25c82bba4be4d4 247506 gcc-13-plugin-dev-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 1aec1bb6b7e7b67725c6bdea00f7f68b5994b217 1451870 gcc-13-plugin-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + b125dc24ed68d75074b17089fbe5261897c2bcb0 88627482 gcc-13-source_13.3.0-6ubuntu2~24.04.1_all.deb + f262aefb0a832a66a6451939778bf33dcd2c9edb 16626108 gcc-13-test-results_13.3.0-6ubuntu2~24.04.1_amd64.deb + 498d25eded747dacf6f15d60df3440f2181206ae 164555002 gcc-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 73b49bdc4be6d4dad1c144525e68952d64fa2c76 21084546 gcc-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 85bf357840794ef2a4a7cbdf95965e087752ad0a 494262 gcc-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 74960d7ffb176b62055de3c3aa8ea9ceea0243d6 52604 gccgo-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + ed50776887ee811d0d326e62063da011803505f6 880 gccgo-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + ad8b21476aa40e3f1885631d3b84ff51893a3c54 928 gccgo-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + 9c883a3a7a4caf58b6fbbaa239b91fc58efedd9a 1012 gccgo-13-multilib_13.3.0-6ubuntu2~24.04.1_amd64.deb + 677c770b010306ef6b1083a8b32b591da6b333e5 75936516 gccgo-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 47dd733ab78e96c52c6fae5d872cbbc1c59fa26f 14208980 gccgo-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + b42ce998dc5a1c2fd3a391e3142c8ee2bfb0eaf5 1028 gccgo-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 97092c688ef9f2b8ec9de3b83ecf485a28e3aaff 902 gdc-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + 65026c90944894c5befe10d144d7d3c41e93b6a7 948 gdc-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + 34c43f743afd0468bdc635079f51b0e1026d10f5 912 gdc-13-multilib_13.3.0-6ubuntu2~24.04.1_amd64.deb + 222d592d6bb402446316ce1375445595f5a5e8d9 68165418 gdc-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + a8b029c81fd7263b5457cac96dea64a235a4b1c8 11804370 gdc-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 85607eb39dbe7702ac5acfdb00acf9d5a154521b 49680 gdc-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 0f6ce97713a70bd67292d067008d6b73c15657e3 386980 gfortran-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + 8454d0978b8079e1d3b79f86eff15a750c515d33 896 gfortran-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + ffee0d78c6c16b287c694791f4afc460f3670740 942 gfortran-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + 05d13772a2ee3a9dcfdd45c6255c4c594b92808a 886 gfortran-13-multilib_13.3.0-6ubuntu2~24.04.1_amd64.deb + 040cf3864fc3063fdc39380b95bb1d6601714f44 67218820 gfortran-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 601db22a3fefd1ad5fcd2ade3d9e74cce962273b 11408640 gfortran-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 7033c1daa38ba2858108ab7595625cc846b0a959 13914 gfortran-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 7b4219423df76c58af71bf8375bddd1c1abdb98d 290466 gm2-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + 7d5d40cfee1280f149cb28bc022ad4694887d130 882 gm2-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + f28585f3c3650004f90349c0836d8ee54a3fa818 928 gm2-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + 90efb6ed4c95b8aa40872e805b101c6a7fcf6fe8 65776088 gm2-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 4bf7041e864127415b84b45476a55afc1f17c433 10768804 gm2-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + df334b1c83ab5539cfcb2f977ce9cac01acf2257 75196 gm2-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + ad5466f975b9f09f3bef908e855c443b798db95f 1087286 gnat-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + 41cee769a7f7bd8868515b1a4694e0128bc4ffa8 958 gnat-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + 2ef1ac60385564d3231236ac9098878e8faced0e 1002 gnat-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + a7e6004c440cdbf27743c5616e4530a8fa6304ff 87322026 gnat-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 4dc69a8cc9bd6a46f3c2b3608d25cd22ba78da5e 19377626 gnat-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 14d42dbd668e2f2b8ca46a3179a5a38be0ac18e3 24446 gnat-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 1fa9d4dfb9da3a2dd3f5f7c4e58c01c052bd019b 898 gobjc++-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + 5aa7b09038c33563c2933b6b19ae7d9f0126c8ad 954 gobjc++-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + de03c69a27a8d9ad67f73ba0f58c603dc48164b5 878 gobjc++-13-multilib_13.3.0-6ubuntu2~24.04.1_amd64.deb + 8910616639bb0b808224e09fa5b6ab05367e925d 68027816 gobjc++-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 53d6fb2c6ae3f9ae669e98766e4f62d263f76106 11465824 gobjc++-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 9ef5109e48216f83b92b589ad911718826d22cdd 6508 gobjc++-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 17c779488b49ddff44bd6d4dbd434a501f24d745 892 gobjc-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + 229de8cb1c40865c81f1dc221fbd23ddeb6dfd5a 936 gobjc-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + 5619c80cef961435a26a8ba7c32d6f6256157839 882 gobjc-13-multilib_13.3.0-6ubuntu2~24.04.1_amd64.deb + da2d1a316949324112b1d446496cb4fcb6787f38 63718970 gobjc-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 178af10b5cde90a43045b0799aa910efd5113cd4 10494440 gobjc-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 7554880a34b9a848e96ed9facfd892b15af7e2b7 37348 gobjc-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 7366a8107e1d8c1b8107731710270b605438d659 2380426 lib32gcc-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + db068a5e9970dc6c43bc4fc51876a7c9bf739921 823552 lib32gfortran-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 3644f3793a79795c05138cae6aa416dfb970e978 18484974 lib32go-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 49041c856f0a56c634e3fdf92bb4afa0965e3fd9 13879966 lib32go22_13.3.0-6ubuntu2~24.04.1_amd64.deb + 4c02b44229d39f3ad0e5595927ba7d793011ae22 7141728 lib32gphobos-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 0dd27c1bb271bd19e06421e8a5b48a9996b19016 4854322 lib32gphobos4-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 191f26257d78aac3f9213d86bf2c8784081d1204 2068276 lib32gphobos4_13.3.0-6ubuntu2~24.04.1_amd64.deb + bbb0546276ac114441cb287938dc3560060292f4 157648 lib32objc-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 9509216f7521d100e90c42d3b6d0a26d9e8cd373 1150410 lib32stdc++-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 4b1dd7e38c17f6e73fbeff0940500d4937d50569 12091554 lib32stdc++6-13-dbg_13.3.0-6ubuntu2~24.04.1_amd64.deb + da5172b908e6e4ea4021d734c5e5121e55b11eea 2680642 libgcc-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 1742e2c4a8d2713ac4b2d476cbfe9f06fc63ac12 21016 libgccjit-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 016a442be39ca23d4c85120bff2d2ea56db67d09 277148 libgccjit-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + 692025e20dbe34387d67d93b44e311ed27d54286 928110 libgfortran-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 7d0be208a376189c04b6b34d5f794bfa0ac184b1 849474 libgm2-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + a4190778b7005d4f01ad2d8c0bd6aae4aa701f48 467194 libgm2-18-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 9f1d4e34067cf1a29bd8549c6fab832fd8cea943 164784 libgm2-18_13.3.0-6ubuntu2~24.04.1_amd64.deb + 32a929b32891e40662d4d347d71a28dfc5ba63c0 3149840 libgnat-13-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 1b05e972ffac135e00971695cc1684b4306ea586 1429754 libgnat-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + fe6db7a04fff3d964bf90659674cfb69c1db7a62 18960898 libgo-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 310b3b5e757a8c04c3cc02aba07ae928c57cf710 14653378 libgo22_13.3.0-6ubuntu2~24.04.1_amd64.deb + ca7ca57a938969d6f5735c9882ce8356d933cd9c 10747734 libgphobos-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + e4bdce37cb66aa73e9188cd293537c8e816384dc 5768176 libgphobos4-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 29c86f3d62f22dcc8dccf4b396c3593d7cbe092a 1882160 libgphobos4_13.3.0-6ubuntu2~24.04.1_amd64.deb + 48436ed479868eb3348274405dc50d73eb5af3c9 193650 libobjc-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 1b0450c52b08980eb6118ddb190d2c04fe2eec82 2419834 libstdc++-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + a5aec55c0042708b25b935e3bc045da1a61f07b7 9940752 libstdc++-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + f23f5338fbed2cfda9bf170df921c934e074dc27 906138 libstdc++-13-pic_13.3.0-6ubuntu2~24.04.1_amd64.deb + 92b81e3c032cbe1764dc3c8bbcb1f88cfd155bb4 12196956 libstdc++6-13-dbg_13.3.0-6ubuntu2~24.04.1_amd64.deb + 09932e04eaed6cf29db72f3c472cd48ac2cff7a7 2190234 libx32gcc-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 84d7ee707de5ff54f0bc14eb7af2c6a419161e31 942252 libx32gfortran-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + ec887f34443995750fa835b24990ed078a156562 18660506 libx32go-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 703a0ab673a848964e28674df8396021a195f0b3 14432746 libx32go22_13.3.0-6ubuntu2~24.04.1_amd64.deb + 609ceca34306e6f95d7aafc29997133a9bf89287 7857286 libx32gphobos-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 4a3519bc7cb6f65655840d10f753db495144d392 5703998 libx32gphobos4-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + b4b9612438b02d72a38e1bbd9b717f2650cc3ebc 1893034 libx32gphobos4_13.3.0-6ubuntu2~24.04.1_amd64.deb + d3dca2cdfdd41e08d90db648b0ba754041f152d2 159550 libx32objc-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 63694217936e97678e8f72a0c92ff5e8665d076c 1086394 libx32stdc++-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 31a07e9f9e36d64891b5fb2ecfedd2e938a16fbf 12114706 libx32stdc++6-13-dbg_13.3.0-6ubuntu2~24.04.1_amd64.deb +Checksums-Sha256: + 605d7c29b04717ef0172ab623c6c52749bd3946add72e304f341225ccf641bf1 180014 cpp-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + 1ede48e18018c78bd55db9e55931f24772324a2c75c6156303d74afe1cbadaa5 47218 cpp-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + dcdf9ecfe9d4b020ab1eacca7cef43308a83395a58e8a328696934d7d29df59f 986 cpp-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + 979f3f738350ddbd1c6ec5fc65277a8b4ef9512e2bf62a7784a64ff688835026 64988258 cpp-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 2ca48bf0c2d6465bc39322899715a85d934b4d7442dd5586a7bebbe3ce0f806b 10714542 cpp-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + c7535331fbb183c802c3bf4b6b210872dcc12d0421b3212b3c4b940f2c59ed3a 1042 cpp-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 3cf80a1f3f470ddd8da6481d6a0516e30fc300335329fed2cb627dd8c7a79e7c 868 g++-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + 0c91d5e0b7255db5cdb3470c62e053504a2390cf9a5826ecfe017b2d059005bd 906 g++-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + 6edfd9d4a98d8d9b7ee84e9cf52ba42ca64d70a9e9e3338c7392be2611708dfe 892 g++-13-multilib_13.3.0-6ubuntu2~24.04.1_amd64.deb + ee182133470316ca05918f64bc0d10f22c0c7c880d21983090eeeff0f25f20f7 70110282 g++-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 0bd6af6164252d4ea9170d201ee4c10a3120fe0fc04985a00be3bc9076353844 12161938 g++-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 0f3ef964b8a91a9cd7bebfd126839a21941c55547cadcf4aa00204bc8cc43985 16048 g++-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + e859aca26585bb91113a451f1e66bc0e5283cb08797d679aacc1d936ae6dff8e 51616 gcc-13-base_13.3.0-6ubuntu2~24.04.1_amd64.deb + 974ca120affed4c45d2797e1313ada54d909734ea1150ee3d85e3d7d4b9e3e21 2852452 gcc-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + c3a142a1b1e6a060a5c1c2c1165e971a66120ca8d8f720126c82b8ff59799f0b 826 gcc-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + 49ce42da988648e532518cfd0c54c506b4e11ece8c8bed8d979ebe66e0a8e425 882 gcc-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + ac7ad132d77d52ac68882352c1b2106c74d86de40789cbb193a02796e46957dd 5894834 gcc-13-hppa64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + d6f13bee2fa1fa80d56eaa37f11f8d086f398a2eea921b1fb29900495d37b526 17755080 gcc-13-hppa64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + facadee60a26cf8a431379ed5aa67338a52051604694310e3030de714862d5c6 2235886 gcc-13-locales_13.3.0-6ubuntu2~24.04.1_all.deb + 64831d1b25f7d9dbf820ab81d69adb3df8a2c362c71434aa29988eca707fac84 880 gcc-13-multilib_13.3.0-6ubuntu2~24.04.1_amd64.deb + 70549a8e250237883c00ea953cac70eec00c81a67b396596a7d98e7bb096566a 72623780 gcc-13-offload-amdgcn-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + c970a9659da611c1fc26ba7d152efdaed52cb613fb4a8d69800b6694d8c3cde6 22044076 gcc-13-offload-amdgcn_13.3.0-6ubuntu2~24.04.1_amd64.deb + 92f9366f4328661449f989852924e9583965e3422f5b7b6cdc9a6a256c31ab22 69936698 gcc-13-offload-nvptx-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + fa3a4275d67136250bf395de540d374e0df9f189d377e24a3ce6a20ded539a32 11690380 gcc-13-offload-nvptx_13.3.0-6ubuntu2~24.04.1_amd64.deb + 6a7db232aab4f0353e9275782f7da5b0874e3f2813fb16956b942033320e9311 247506 gcc-13-plugin-dev-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 3a64b52ae21aa6bc9f2a9aeff336a925bd22675e34c9fd2040785ee4f38a917f 1451870 gcc-13-plugin-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 39cfbb5e005381054479d10352d93351b32698fa1ba00093d494504c1c557e5a 88627482 gcc-13-source_13.3.0-6ubuntu2~24.04.1_all.deb + b166cced7ddecca8fab3c51967ea55e69a59eb12c7c240dfef0bc9809b885584 16626108 gcc-13-test-results_13.3.0-6ubuntu2~24.04.1_amd64.deb + 6c5c9aea109c3d1e80005c2cf59d8acde9247cfdaa7ad2fb2fc5c475cc5564a4 164555002 gcc-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + a134b0319a82d14581b3a14820d2832af4ec9778ed8b9b4ddaeecfb0555ec325 21084546 gcc-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 7438ff160b020a74970672189ecae25d0ca650de6d7f543f12a3134192cffbd9 494262 gcc-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 007e9bc23c920cc5b36b60da41e1a4061878adba2c3279e1d7e58705a65f15cd 52604 gccgo-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + 7081087aa04983e3e98ef4ad7ab175bfc07e51052a7e05ff92229e688c3a1338 880 gccgo-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + c52aef185c2865730ade8cb927dd4c270704c94d5a90f0175908f762a7779bb1 928 gccgo-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + 5d10118e1b896ecb63d37da936f5d0c7555b13a4c464a5e414d2bfdb018a1709 1012 gccgo-13-multilib_13.3.0-6ubuntu2~24.04.1_amd64.deb + 58525d34c279c6fc6709fcee4701194607f049257a072a0a87f2f25c00a6564b 75936516 gccgo-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 9f6d4052c55a080268903cf41bbbfda768b35774a92d45262b796edae8c16a51 14208980 gccgo-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + b9694e4e2fe7e0322ffcd72555fff90c608d72892c71ee28f0b2e4de24705b57 1028 gccgo-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 6aeff72a92ed7c9c3c6fa2ef2a6a7d48a067facc5c6a95c44308fa130c86cd29 902 gdc-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + bbf1b51acf3a92d7fb910bcd7cbd7c52526b56d2c642e980761e996d026e03fd 948 gdc-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + 4f9f2c16f65825a5719b56efa492141c031b96c8793cbcd820bd987ded826a82 912 gdc-13-multilib_13.3.0-6ubuntu2~24.04.1_amd64.deb + 33020d1ae7a50771a657aa69c859d7faac08b26e5d0e773df99568101901d94c 68165418 gdc-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 0b6e6e80902285dbd5d6adcc740f1221f7c41fcb5f40d803d97d83c6bbfa1205 11804370 gdc-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 0cc8c9146a16ecf2845084c5783a9fbe06f2681377f09f00248a72b3b7ebfce7 49680 gdc-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + cb4943d5bedcc54132313fa90d7d38777ee0e386023811fa1d9331c32cd17315 386980 gfortran-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + f880d6da0639a1146596540721acf4506f08b39efd65e647f1bf142a32e7ae55 896 gfortran-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + 7e02dfa8089586895a4a060af748af0b60390804dfc18e6ffe94a61bd654566d 942 gfortran-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + 23bcb8ad67d084f53f2b6781e26e7bbc579880902eae07c05b67f6e0b8463c04 886 gfortran-13-multilib_13.3.0-6ubuntu2~24.04.1_amd64.deb + 002002199c93ba837a7ebd2cbecab7bb145c2cfb2d1dc9c5d66a3e6484853d1c 67218820 gfortran-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 82382cb8506616ef7df5b9927694bfaacf97bdfb317b1f995453cc17c96aa071 11408640 gfortran-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 23670555cfd600f46307adddedd65eba8fd21928c52a69d16a2e69755ae5c462 13914 gfortran-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + b371344cd1f713d75af11b5da2d53cb2c0b3ec67ac762c275665505bb0d3ce7a 290466 gm2-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + 991ec181766a7b7d34149e32202efe1f01e6931f4abd17752802ac8d947831eb 882 gm2-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + 545925dc8de55ddc42c80e45da738efc6b4a27a29f242b0174c2d794c15e4dba 928 gm2-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + f669915374040709b43150dbc94ba14d5ecc25c5b6b6a75b6d867e90b1df05bf 65776088 gm2-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + ccb7da8381452b7659319f16c3a5ffb30f36b68f0f8a56524728d4c7a36d6aa9 10768804 gm2-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 2a2aa4cbc34b04b47cad830b7af0daba7bfdb58296b6ebb5802e373294d95e7c 75196 gm2-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 05639f1ebecdbd709fd07c3649a41b8c5259f4f6fab633a075fee29294ea31b0 1087286 gnat-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + 060602a7841b9f07f8e08045779563dc8544c94fb23524d4a9e96382d3f7072f 958 gnat-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + 50627c5c15c0c43f79a0569446a79f483ecdff96edb9af7add9ae2a55c96723c 1002 gnat-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + 115e07ebec58f91218e9c4a2f9e3b753473cdbc2fac9e087fd371a0faca19b23 87322026 gnat-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 38faf678aac204fa4ce25795317b2b5698b542985882b8dde3de31efe9de0ff0 19377626 gnat-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 31a468f43985bf3a0deac9a39a1efd0d01695b1fd79b62ac1c8f5b22a58f5157 24446 gnat-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + d6528a6d640acd5c7d7f813c6e2a196316d3a28d97c9515d836a4d91557c2442 898 gobjc++-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + 2dcbd65e3d113904abab6c3832f75a75c147c91adef3c1dc636fa2a76f211072 954 gobjc++-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + 2b6121e7ac35a97ae16701808ca0e7a3f0d8413a60c12c136d0f48c9e54467f1 878 gobjc++-13-multilib_13.3.0-6ubuntu2~24.04.1_amd64.deb + f4b57ce497782a385cbdeb2155202eac6ee56856488cea3542d644b20ba92071 68027816 gobjc++-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 616aa4404925e2bf2f99958ca53307213676481074dbcb572db85cabc3646234 11465824 gobjc++-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + 21476d5c61c8f09ae1202f8954a37fcf321f2fd67cca9fb5ef1752061fe52ee8 6508 gobjc++-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 7e3114c2deccad524060ab5ef7bd0f60aea434736d9c123f6d869c32c56a7d6c 892 gobjc-13-for-build_13.3.0-6ubuntu2~24.04.1_all.deb + e5560c65386d5413d4fa31ef8f80e29677bd4d1d396437b6a333bd8515829df6 936 gobjc-13-for-host_13.3.0-6ubuntu2~24.04.1_amd64.deb + f56194d96e7950eb83626d390df866f31cf689cd739a2cf823d8dec4970b3950 882 gobjc-13-multilib_13.3.0-6ubuntu2~24.04.1_amd64.deb + 1daf676c31f4f289bab1b904610e240f61fd3fb0e36cf8107cdf9225c0f06675 63718970 gobjc-13-x86-64-linux-gnu-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 05539ef616fe645b3f764f8b918973f3ec73e21fb7f861820e347d130312493c 10494440 gobjc-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb + cb29435f0adc62b3e772b9619f2823784e393ece43724fcca025bd8116ed6d81 37348 gobjc-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 0850e0555c86f2ce7a954158eb47df42d7645bfa4f12f29ea2df76459c930ac0 2380426 lib32gcc-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + c5f718efd4244adf746d2019223fb87780b3d3ebf9b1dcbc2b87fe12ffad4f1e 823552 lib32gfortran-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + e40e19d806ca7c5e43484b9f12aa61d9f6aac1044605a7435b454dfbe9a2f91a 18484974 lib32go-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 5a07e47e7944908e6e3193f297513a78f88d1b9044737cd6066eb90dd2803860 13879966 lib32go22_13.3.0-6ubuntu2~24.04.1_amd64.deb + 8d9eecad5dd8093a7a0c9d2627f115e16652a3f998a654b1b002a93db666fc62 7141728 lib32gphobos-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 609658f33ec74e5ecba8b2d87e8da0d924844fe46602eb4766d454acaa01a3f7 4854322 lib32gphobos4-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 1765282b9f94e76edeed798782ee4d38ad48399b4607554e4499d14ffa070ec5 2068276 lib32gphobos4_13.3.0-6ubuntu2~24.04.1_amd64.deb + 32c33691f11ce049697040ac52f08f41b5a3376d8867b75360ec2f9ce0c42527 157648 lib32objc-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + b4ebe1e2095e5d4377fa916abeded686ec76832bf593f06afda5ad1302037e2c 1150410 lib32stdc++-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 067ce9092fe3ca6be5c354fb32b72fe223f0b39fd9fcf200e113b67db6c2f86c 12091554 lib32stdc++6-13-dbg_13.3.0-6ubuntu2~24.04.1_amd64.deb + cd689db2691edaa10f37329307292796bb599e722e0505c79e14caaa1fe9a93a 2680642 libgcc-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + aa14025a3ce1e229158db2bf10c968ef77cd0b02d065eb70bc07d5b157fd5ef9 21016 libgccjit-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + ce2f091c97022612dd63a26069be90954c7bcaba0ec4b926f507e1b6029fefa6 277148 libgccjit-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + ce0fdf0d9e7eadb33947ca7cdd0fc3477b570603cb721b108c96ebdfbb7cd80a 928110 libgfortran-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + d0172fd1e7ee0cee19388a79f38a0691f4404e7c75026e9518510bf73eee5323 849474 libgm2-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 487ee6a0af4ddfa86dc32de0045ade3cc1745f189eda5b790b6450a8c800f9bc 467194 libgm2-18-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + a4ad358a04256d146cf6036b7555863370ccc5e3280b791f75155f78fbe54280 164784 libgm2-18_13.3.0-6ubuntu2~24.04.1_amd64.deb + 97ecbb26eb101d8a4ed6eead94c132d09cc3a5d7f8efd003952ad012978dbd7c 3149840 libgnat-13-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + 883852c57f5e290bd4f34c3a7c3f2a42bf0f5f833f3d3199a521595710f446c0 1429754 libgnat-13_13.3.0-6ubuntu2~24.04.1_amd64.deb + 396dca47f8a3edc00e1038c5621ac8ffc7448f332f2d4eb52646c4db4b3678b7 18960898 libgo-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 8f8d01ebf00bea189056a1ac8d3455187f52733d162c576348128c6eaccff91c 14653378 libgo22_13.3.0-6ubuntu2~24.04.1_amd64.deb + 983c23e49c13b42445b46820bbc7a145dea10a9453af7650fc2ad25b391ee019 10747734 libgphobos-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 5c12f92a5f08a03f2d807dd7c679934674f414130d5ac6ad865c40f358ea064b 5768176 libgphobos4-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + db4d5df59fc6abe82fcab17256cc02a159c1042be45f2173420f7e10e60eff3e 1882160 libgphobos4_13.3.0-6ubuntu2~24.04.1_amd64.deb + 6757dc7e223f69c6c41f9aba133f0b54fe4babc8f38a9e1a51d9b03a9a28e8a6 193650 libobjc-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + ee5633e863e19c3381ed97842ce35ed32ede96a3d1ae4e94c051d3036fe21347 2419834 libstdc++-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + cd60fb8ad557270f298861546daddf37fc8a95404fa31a91e2bf4e28f296c842 9940752 libstdc++-13-doc_13.3.0-6ubuntu2~24.04.1_all.deb + 848f9cc4c5c64c72906e4528522ae69123c6fe3ca95fd36938f8a8fc861c5fe5 906138 libstdc++-13-pic_13.3.0-6ubuntu2~24.04.1_amd64.deb + d8f1105911f2b272568d2e8dab489b8a3326187183486fad312304b26f742e99 12196956 libstdc++6-13-dbg_13.3.0-6ubuntu2~24.04.1_amd64.deb + 30ff020727f21b2b9bc8b8adb8d6250a387ea8c8a1519803171bce222b16ac0f 2190234 libx32gcc-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + d97ead10d0971f32630895d8af1460911ba34eb317d9e235d8f15684ffb46165 942252 libx32gfortran-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + c66eda8bc680079b5a141bcf1bb4aad4284d3aa788c0adabd966c35dcd9ba1ab 18660506 libx32go-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 46e3014ac0803e8817cbf0ef6c5c39ea1b46783cfb6409d37916cefbe63295df 14432746 libx32go22_13.3.0-6ubuntu2~24.04.1_amd64.deb + bd08795db62c0b16213895d813ac249b7e9f8f1a2e764d35cca62be2e117ea64 7857286 libx32gphobos-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + ee8b12d3d717cde0016d454139c5a529806ca46a80cd3f0b4c763022b1d65c45 5703998 libx32gphobos4-dbgsym_13.3.0-6ubuntu2~24.04.1_amd64.ddeb + c5cbdae78cfa3492beacb4cd747ceb40071d41d9dc4124b3c21e82b128b77242 1893034 libx32gphobos4_13.3.0-6ubuntu2~24.04.1_amd64.deb + 4bcdd8fff3e9f2e7755adf1a02ad6ac242af4561c80bebb1645710d903c02336 159550 libx32objc-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + 661187dff56b7ca552157c33d379f796ef76b63960535b5365bfb8332184941b 1086394 libx32stdc++-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb + a39c77ca22e66b7db74d5c16052898510215488a901dc0a179c6d1193b51d518 12114706 libx32stdc++6-13-dbg_13.3.0-6ubuntu2~24.04.1_amd64.deb +Build-Origin: Ubuntu +Build-Architecture: amd64 +Build-Date: Fri, 16 Jan 2026 19:40:29 +0000 +Build-Path: /build/gcc-13-EldibY/gcc-13-13.3.0 +Build-Tainted-By: + merged-usr-via-aliased-dirs + usr-local-has-programs +Installed-Build-Depends: + amdgcn-tools (= 17), + autoconf (= 2.71-3), + autoconf2.69 (= 2.69-3.1), + automake (= 1:1.16.5-1.3ubuntu1), + autopoint (= 0.21-14ubuntu2), + autotools-dev (= 20220109.1), + base-files (= 13ubuntu10), + base-passwd (= 3.6.3build1), + bash (= 5.2.21-2ubuntu4), + binutils (= 2.42-4ubuntu2.8), + binutils-common (= 2.42-4ubuntu2.8), + binutils-hppa64-linux-gnu (= 2.42-4ubuntu2.8), + binutils-x86-64-linux-gnu (= 2.42-4ubuntu2.8), + bison (= 2:3.8.2+dfsg-1build2), + bsdextrautils (= 2.39.3-9ubuntu6), + bsdutils (= 1:2.39.3-9ubuntu6), + build-essential (= 12.10ubuntu1), + bzip2 (= 1.0.8-5.1), + chrpath (= 0.16-2build1), + coreutils (= 9.4-3ubuntu6), + cpp (= 4:13.2.0-7ubuntu1), + cpp-13 (= 13.3.0-6ubuntu2~24.04), + cpp-13-x86-64-linux-gnu (= 13.3.0-6ubuntu2~24.04), + cpp-x86-64-linux-gnu (= 4:13.2.0-7ubuntu1), + dash (= 0.5.12-6ubuntu5), + debconf (= 1.5.86ubuntu1), + debhelper (= 13.14.1ubuntu5), + debianutils (= 5.17build1), + debugedit (= 1:5.0-5build2), + dejagnu (= 1.6.3-1), + dh-autoreconf (= 20), + dh-strip-nondeterminism (= 1.13.1-1), + diffstat (= 1.66-1build1), + diffutils (= 1:3.10-1build1), + docbook-xsl-ns (= 1.79.2+dfsg-7), + doxygen (= 1.9.8+ds-2build5), + dpkg (= 1.22.6ubuntu6.5), + dpkg-dev (= 1.22.6ubuntu6.5), + dwz (= 0.15-1build6), + ed (= 1.20.1-1), + expect (= 5.45.4-3), + file (= 1:5.45-3build1), + findutils (= 4.9.0-5build1), + flex (= 2.6.4-8.2build1), + fontconfig (= 2.15.0-1.1ubuntu2), + fontconfig-config (= 2.15.0-1.1ubuntu2), + fonts-dejavu-core (= 2.37-8), + fonts-dejavu-mono (= 2.37-8), + fonts-lmodern (= 2.005-1), + fonts-urw-base35 (= 20200910-8), + g++ (= 4:13.2.0-7ubuntu1), + g++-13 (= 13.3.0-6ubuntu2~24.04), + g++-13-multilib (= 13.3.0-6ubuntu2~24.04), + g++-13-x86-64-linux-gnu (= 13.3.0-6ubuntu2~24.04), + g++-multilib (= 4:13.2.0-7ubuntu1), + g++-x86-64-linux-gnu (= 4:13.2.0-7ubuntu1), + gawk (= 1:5.2.1-2build3), + gcc (= 4:13.2.0-7ubuntu1), + gcc-13 (= 13.3.0-6ubuntu2~24.04), + gcc-13-base (= 13.3.0-6ubuntu2~24.04), + gcc-13-multilib (= 13.3.0-6ubuntu2~24.04), + gcc-13-x86-64-linux-gnu (= 13.3.0-6ubuntu2~24.04), + gcc-14-base (= 14.2.0-4ubuntu2~24.04), + gcc-multilib (= 4:13.2.0-7ubuntu1), + gcc-x86-64-linux-gnu (= 4:13.2.0-7ubuntu1), + gdc-13 (= 13.3.0-6ubuntu2~24.04), + gdc-13-x86-64-linux-gnu (= 13.3.0-6ubuntu2~24.04), + gettext (= 0.21-14ubuntu2), + gettext-base (= 0.21-14ubuntu2), + ghostscript (= 10.02.1~dfsg1-0ubuntu7.8), + gnat-13 (= 13.3.0-6ubuntu2~24.04), + gnat-13-x86-64-linux-gnu (= 13.3.0-6ubuntu2~24.04), + gperf (= 3.1-1build1), + graphviz (= 2.42.2-9build1), + grep (= 3.11-4build1), + groff-base (= 1.23.0-3build2), + gzip (= 1.12-1ubuntu3), + hostname (= 3.23+nmu2ubuntu2), + init-system-helpers (= 1.66ubuntu1), + intltool-debian (= 0.35.0+20060710.6), + lib32asan8 (= 14.2.0-4ubuntu2~24.04), + lib32atomic1 (= 14.2.0-4ubuntu2~24.04), + lib32gcc-13-dev (= 13.3.0-6ubuntu2~24.04), + lib32gcc-s1 (= 14.2.0-4ubuntu2~24.04), + lib32gomp1 (= 14.2.0-4ubuntu2~24.04), + lib32itm1 (= 14.2.0-4ubuntu2~24.04), + lib32quadmath0 (= 14.2.0-4ubuntu2~24.04), + lib32stdc++-13-dev (= 13.3.0-6ubuntu2~24.04), + lib32stdc++6 (= 14.2.0-4ubuntu2~24.04), + lib32ubsan1 (= 14.2.0-4ubuntu2~24.04), + lib32z1 (= 1:1.3.dfsg-3.1ubuntu2), + lib32z1-dev (= 1:1.3.dfsg-3.1ubuntu2), + libacl1 (= 2.3.2-1build1), + libann0 (= 1.1.2+doc-9build1), + libaom3 (= 3.8.2-2ubuntu0.1), + libarchive-zip-perl (= 1.68-1), + libasan8 (= 14.2.0-4ubuntu2~24.04), + libatomic1 (= 14.2.0-4ubuntu2~24.04), + libattr1 (= 1:2.5.2-1build1), + libaudit-common (= 1:3.1.2-2.1build1), + libaudit1 (= 1:3.1.2-2.1build1), + libavahi-client3 (= 0.8-13ubuntu6), + libavahi-common-data (= 0.8-13ubuntu6), + libavahi-common3 (= 0.8-13ubuntu6), + libbinutils (= 2.42-4ubuntu2.8), + libblkid1 (= 2.39.3-9ubuntu6), + libbrotli1 (= 1.1.0-2build2), + libbsd0 (= 0.12.1-1build1), + libbz2-1.0 (= 1.0.8-5.1), + libc-bin (= 2.39-0ubuntu8.6), + libc-dev-bin (= 2.39-0ubuntu8.6), + libc6 (= 2.39-0ubuntu8.6), + libc6-dbg (= 2.39-0ubuntu8.6), + libc6-dev (= 2.39-0ubuntu8.6), + libc6-dev-i386 (= 2.39-0ubuntu8.6), + libc6-dev-x32 (= 2.39-0ubuntu8.6), + libc6-i386 (= 2.39-0ubuntu8.6), + libc6-x32 (= 2.39-0ubuntu8.6), + libcairo2 (= 1.18.0-3build1), + libcap-ng0 (= 0.8.4-2build2), + libcap2 (= 1:2.66-5ubuntu2.2), + libcc1-0 (= 14.2.0-4ubuntu2~24.04), + libcdt5 (= 2.42.2-9build1), + libcgraph6 (= 2.42.2-9build1), + libclang-cpp18 (= 1:18.1.3-1), + libclang1-18 (= 1:18.1.3-1), + libcom-err2 (= 1.47.0-2.4~exp1ubuntu4), + libcrypt-dev (= 1:4.4.36-4build1), + libcrypt1 (= 1:4.4.36-4build1), + libctf-nobfd0 (= 2.42-4ubuntu2.8), + libctf0 (= 2.42-4ubuntu2.8), + libcups2t64 (= 2.4.7-1.2ubuntu7.9), + libcurl4t64 (= 8.5.0-2ubuntu10.6), + libdatrie1 (= 0.2.13-3build1), + libdb5.3t64 (= 5.3.28+dfsg2-7), + libdbus-1-3 (= 1.14.10-4ubuntu4), + libde265-0 (= 1.0.15-1build3), + libdebconfclient0 (= 0.271ubuntu3), + libdebhelper-perl (= 13.14.1ubuntu5), + libdeflate0 (= 1.19-1build1), + libdpkg-perl (= 1.22.6ubuntu6.5), + libdw1t64 (= 0.190-1.1ubuntu0.1), + libedit2 (= 3.1-20230828-1build1), + libelf1t64 (= 0.190-1.1ubuntu0.1), + libexpat1 (= 2.6.1-2ubuntu0.3), + libffi8 (= 3.4.6-1build1), + libfile-stripnondeterminism-perl (= 1.13.1-1), + libfmt9 (= 9.1.0+ds1-2), + libfontconfig1 (= 2.15.0-1.1ubuntu2), + libfontenc1 (= 1:1.1.8-1build1), + libfreetype6 (= 2.13.2+dfsg-1build3), + libfribidi0 (= 1.0.13-3build1), + libgc-dev (= 1:8.2.6-1build1), + libgc1 (= 1:8.2.6-1build1), + libgcc-13-dev (= 13.3.0-6ubuntu2~24.04), + libgcc-s1 (= 14.2.0-4ubuntu2~24.04), + libgcrypt20 (= 1.10.3-2build1), + libgd3 (= 2.3.3-9ubuntu5), + libgdbm-compat4t64 (= 1.23-5.1build1), + libgdbm6t64 (= 1.23-5.1build1), + libglib2.0-0t64 (= 2.80.0-6ubuntu3.6), + libgmp-dev (= 2:6.3.0+dfsg-2ubuntu6), + libgmp10 (= 2:6.3.0+dfsg-2ubuntu6), + libgmpxx4ldbl (= 2:6.3.0+dfsg-2ubuntu6), + libgnat-13 (= 13.3.0-6ubuntu2~24.04), + libgnutls30t64 (= 3.8.3-1.1ubuntu3.4), + libgomp1 (= 14.2.0-4ubuntu2~24.04), + libgpg-error0 (= 1.47-3build2), + libgphobos-13-dev (= 13.3.0-6ubuntu2~24.04), + libgphobos4 (= 13.3.0-6ubuntu2~24.04), + libgprofng0 (= 2.42-4ubuntu2.8), + libgraphite2-3 (= 1.3.14-2build1), + libgs-common (= 10.02.1~dfsg1-0ubuntu7.8), + libgs10 (= 10.02.1~dfsg1-0ubuntu7.8), + libgs10-common (= 10.02.1~dfsg1-0ubuntu7.8), + libgssapi-krb5-2 (= 1.20.1-6ubuntu2.6), + libgts-0.7-5t64 (= 0.7.6+darcs121130-5.2build1), + libgvc6 (= 2.42.2-9build1), + libgvpr2 (= 2.42.2-9build1), + libharfbuzz0b (= 8.3.0-2build2), + libheif-plugin-aomdec (= 1.17.6-1ubuntu4.2), + libheif-plugin-libde265 (= 1.17.6-1ubuntu4.2), + libheif1 (= 1.17.6-1ubuntu4.2), + libhogweed6t64 (= 3.9.1-2.2build1), + libhwasan0 (= 14.2.0-4ubuntu2~24.04), + libice6 (= 2:1.0.10-1build3), + libicu74 (= 74.2-1ubuntu3), + libidn12 (= 1.42-1build1), + libidn2-0 (= 2.3.7-2build1), + libijs-0.35 (= 0.35-15.1build1), + libisl-dev (= 0.26-3build1), + libisl23 (= 0.26-3build1), + libitm1 (= 14.2.0-4ubuntu2~24.04), + libjansson4 (= 2.14-2build2), + libjbig0 (= 2.1-6.1ubuntu2), + libjbig2dec0 (= 0.20-1build3), + libjpeg-turbo8 (= 2.1.5-2ubuntu2), + libjpeg8 (= 8c-2ubuntu11), + libk5crypto3 (= 1.20.1-6ubuntu2.6), + libkeyutils1 (= 1.6.3-3build1), + libkpathsea6 (= 2023.20230311.66589-9build3), + libkrb5-3 (= 1.20.1-6ubuntu2.6), + libkrb5support0 (= 1.20.1-6ubuntu2.6), + liblab-gamut1 (= 2.42.2-9build1), + libldap2 (= 2.6.7+dfsg-1~exp1ubuntu8), + liblerc4 (= 4.0.0+ds-4ubuntu2), + libllvm17t64 (= 1:17.0.6-9ubuntu1), + libllvm18 (= 1:18.1.3-1), + liblsan0 (= 14.2.0-4ubuntu2~24.04), + libltdl7 (= 2.4.7-7build1), + liblz4-1 (= 1.9.4-1build1), + liblzma5 (= 5.6.1+really5.4.5-1ubuntu0.2), + libmagic-mgc (= 1:5.45-3build1), + libmagic1t64 (= 1:5.45-3build1), + libmd0 (= 1.1.0-2build1), + libmount1 (= 2.39.3-9ubuntu6), + libmpc-dev (= 1.3.1-1build1), + libmpc3 (= 1.3.1-1build1), + libmpfr-dev (= 4.2.1-1build1), + libmpfr6 (= 4.2.1-1build1), + libncursesw6 (= 6.4+20240113-1ubuntu2), + libnettle8t64 (= 3.9.1-2.2build1), + libnghttp2-14 (= 1.59.0-1ubuntu0.1), + libopenjp2-7 (= 2.5.0-2ubuntu0.4), + libp11-kit0 (= 0.25.3-4ubuntu2), + libpam-modules (= 1.5.3-5ubuntu5.5), + libpam-modules-bin (= 1.5.3-5ubuntu5.5), + libpam-runtime (= 1.5.3-5ubuntu5.5), + libpam0g (= 1.5.3-5ubuntu5.5), + libpango-1.0-0 (= 1.52.1+ds-1build1), + libpangocairo-1.0-0 (= 1.52.1+ds-1build1), + libpangoft2-1.0-0 (= 1.52.1+ds-1build1), + libpaper-utils (= 1.1.29build1), + libpaper1 (= 1.1.29build1), + libpathplan4 (= 2.42.2-9build1), + libpcre2-8-0 (= 10.42-4ubuntu2), + libperl5.38t64 (= 5.38.2-3.2ubuntu0.2), + libpfm4 (= 4.13.0+git32-g0d4ed0e-1), + libpipeline1 (= 1.5.7-2), + libpixman-1-0 (= 0.42.2-1build1), + libpkgconf3 (= 1.8.1-2build1), + libpng16-16t64 (= 1.6.43-5ubuntu0.3), + libpotrace0 (= 1.16-2build1), + libproc2-0 (= 2:4.0.4-4ubuntu3), + libpsl5t64 (= 0.21.2-1.1build1), + libptexenc1 (= 2023.20230311.66589-9build3), + libpython3-stdlib (= 3.12.3-0ubuntu2.1), + libpython3.12-minimal (= 3.12.3-1ubuntu0.10), + libpython3.12-stdlib (= 3.12.3-1ubuntu0.10), + libquadmath0 (= 14.2.0-4ubuntu2~24.04), + libreadline8t64 (= 8.2-4build1), + librtmp1 (= 2.4+20151223.gitfa8646d.1-2build7), + libsasl2-2 (= 2.1.28+dfsg1-5ubuntu3), + libsasl2-modules-db (= 2.1.28+dfsg1-5ubuntu3), + libseccomp2 (= 2.5.5-1ubuntu3), + libselinux1 (= 3.5-2ubuntu2), + libsframe1 (= 2.42-4ubuntu2.8), + libsharpyuv0 (= 1.3.2-0.4build3), + libsigsegv2 (= 2.14-1ubuntu2), + libsm6 (= 2:1.2.3-1build3), + libsmartcols1 (= 2.39.3-9ubuntu6), + libsqlite3-0 (= 3.45.1-1ubuntu2.5), + libssh-4 (= 0.10.6-2ubuntu0.2), + libssl3t64 (= 3.0.13-0ubuntu3.6), + libstdc++-13-dev (= 13.3.0-6ubuntu2~24.04), + libstdc++6 (= 14.2.0-4ubuntu2~24.04), + libsub-override-perl (= 0.10-1), + libsynctex2 (= 2023.20230311.66589-9build3), + libsystemd0 (= 255.4-1ubuntu8.8), + libtasn1-6 (= 4.19.0-3ubuntu0.24.04.2), + libtcl8.6 (= 8.6.14+dfsg-1build1), + libteckit0 (= 2.5.12+ds1-1), + libtexlua53-5 (= 2023.20230311.66589-9build3), + libtext-unidecode-perl (= 1.30-3), + libthai-data (= 0.1.29-2build1), + libthai0 (= 0.1.29-2build1), + libtiff6 (= 4.5.1+git230720-4ubuntu2.4), + libtinfo6 (= 6.4+20240113-1ubuntu2), + libtool (= 2.4.7-7build1), + libtsan2 (= 14.2.0-4ubuntu2~24.04), + libubsan1 (= 14.2.0-4ubuntu2~24.04), + libuchardet0 (= 0.0.8-1build1), + libudev1 (= 255.4-1ubuntu8.8), + libunistring5 (= 1.1-2build1), + libuuid1 (= 2.39.3-9ubuntu6), + libwebp7 (= 1.3.2-0.4build3), + libx11-6 (= 2:1.8.7-1build1), + libx11-data (= 2:1.8.7-1build1), + libx32asan8 (= 14.2.0-4ubuntu2~24.04), + libx32atomic1 (= 14.2.0-4ubuntu2~24.04), + libx32gcc-13-dev (= 13.3.0-6ubuntu2~24.04), + libx32gcc-s1 (= 14.2.0-4ubuntu2~24.04), + libx32gomp1 (= 14.2.0-4ubuntu2~24.04), + libx32itm1 (= 14.2.0-4ubuntu2~24.04), + libx32quadmath0 (= 14.2.0-4ubuntu2~24.04), + libx32stdc++-13-dev (= 13.3.0-6ubuntu2~24.04), + libx32stdc++6 (= 14.2.0-4ubuntu2~24.04), + libx32ubsan1 (= 14.2.0-4ubuntu2~24.04), + libx32z1 (= 1:1.3.dfsg-3.1ubuntu2), + libx32z1-dev (= 1:1.3.dfsg-3.1ubuntu2), + libxapian30 (= 1.4.22-1build1), + libxau6 (= 1:1.0.9-1build6), + libxaw7 (= 2:1.0.14-1build2), + libxcb-render0 (= 1.15-1ubuntu2), + libxcb-shm0 (= 1.15-1ubuntu2), + libxcb1 (= 1.15-1ubuntu2), + libxdmcp6 (= 1:1.1.3-0ubuntu6), + libxext6 (= 2:1.3.4-1build2), + libxi6 (= 2:1.8.1-1build1), + libxml-libxml-perl (= 2.0207+dfsg+really+2.0134-1build4), + libxml-namespacesupport-perl (= 1.12-2), + libxml-sax-base-perl (= 1.09-3), + libxml-sax-perl (= 1.02+dfsg-3), + libxml2 (= 2.9.14+dfsg-1.3ubuntu3.6), + libxml2-utils (= 2.9.14+dfsg-1.3ubuntu3.6), + libxmu6 (= 2:1.1.3-3build2), + libxpm4 (= 1:3.5.17-1build2), + libxrender1 (= 1:0.9.10-1.1build1), + libxslt1.1 (= 1.1.39-0exp1ubuntu0.24.04.3), + libxt6t64 (= 1:1.2.1-1.2build1), + libzstd-dev (= 1.5.5+dfsg2-2build1), + libzstd1 (= 1.5.5+dfsg2-2build1), + libzzip-0-13t64 (= 0.13.72+dfsg.1-1.2build1), + linux-libc-dev (= 6.8.0-90.91), + lld-17 (= 1:17.0.6-9ubuntu1), + llvm-17 (= 1:17.0.6-9ubuntu1), + llvm-17-linker-tools (= 1:17.0.6-9ubuntu1), + llvm-17-runtime (= 1:17.0.6-9ubuntu1), + locales-all (= 2.39-0ubuntu8.6), + login (= 1:4.13+dfsg1-4ubuntu3), + lsb-release (= 12.0-2), + lto-disabled-list (= 47), + m4 (= 1.4.19-4build1), + make (= 4.3-4.1build2), + man-db (= 2.12.0-4build2), + mawk (= 1.3.4.20240123-1build1), + media-types (= 10.1.0), + ncurses-base (= 6.4+20240113-1ubuntu2), + ncurses-bin (= 6.4+20240113-1ubuntu2), + netbase (= 6.4), + nvptx-tools (= 0.20240423-1), + patch (= 2.7.6-7build3), + patchutils (= 0.4.2-1build3), + perl (= 5.38.2-3.2ubuntu0.2), + perl-base (= 5.38.2-3.2ubuntu0.2), + perl-modules-5.38 (= 5.38.2-3.2ubuntu0.2), + pkgconf (= 1.8.1-2build1), + pkgconf-bin (= 1.8.1-2build1), + po-debconf (= 1.0.21+nmu1), + poppler-data (= 0.4.12-1), + procps (= 2:4.0.4-4ubuntu3), + python3 (= 3.12.3-0ubuntu2.1), + python3-minimal (= 3.12.3-0ubuntu2.1), + python3.12 (= 3.12.3-1ubuntu0.10), + python3.12-minimal (= 3.12.3-1ubuntu0.10), + quilt (= 0.67+really0.67-4), + readline-common (= 8.2-4build1), + rpcsvc-proto (= 1.4.2-0ubuntu7), + sed (= 4.9-2build1), + sensible-utils (= 0.0.22), + sgml-base (= 1.31), + sharutils (= 1:4.15.2-9), + systemtap-sdt-dev (= 5.0-2ubuntu1), + sysvinit-utils (= 3.08-6ubuntu3), + t1utils (= 1.41-4build3), + tar (= 1.35+dfsg-3build1), + tcl-expect (= 5.45.4-3), + tcl8.6 (= 8.6.14+dfsg-1build1), + tex-common (= 6.18), + texinfo (= 7.1-3build2), + texinfo-lib (= 7.1-3build2), + texlive-base (= 2023.20240207-1), + texlive-binaries (= 2023.20230311.66589-9build3), + texlive-latex-base (= 2023.20240207-1), + time (= 1.9-0.2build1), + tzdata (= 2025b-0ubuntu0.24.04.1), + ucf (= 3.0043+nmu1), + unzip (= 6.0-28ubuntu4.1), + util-linux (= 2.39.3-9ubuntu6), + x11-common (= 1:7.7+23ubuntu3), + xdg-utils (= 1.1.3-4.1ubuntu3), + xfonts-encodings (= 1:1.0.5-0ubuntu2), + xfonts-utils (= 1:7.7+6build3), + xml-core (= 0.19), + xsltproc (= 1.1.39-0exp1ubuntu0.24.04.3), + xz-utils (= 5.6.1+really5.4.5-1ubuntu0.2), + zlib1g (= 1:1.3.dfsg-3.1ubuntu2), + zlib1g-dev (= 1:1.3.dfsg-3.1ubuntu2) +Environment: + DEB_BUILD_OPTIONS="parallel=4" + DEB_BUILD_PROFILES="noudeb" + LANG="C.UTF-8" + LC_ALL="C.UTF-8" + LC_COLLATE="C.UTF-8" + SOURCE_DATE_EPOCH="1766091591" diff --git a/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-additional-packaging/debian/rules.conf.txt b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-additional-packaging/debian/rules.conf.txt new file mode 100644 index 0000000000..ced6704e63 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-additional-packaging/debian/rules.conf.txt @@ -0,0 +1,1482 @@ +# -*- makefile -*- +# rules.conf +# - used to build debian/control and debian/rules.parameters +# - assumes unpacked sources + +include debian/rules.defs +include debian/rules.sonames + +ifneq (,$(findstring gcc-toolchain, $(PKGSOURCE))) +include $(binutils_srcdir)/debian/rules.defs +endif + +# manual ... +ifeq ($(DEB_TARGET_GNU_CPU), $(findstring $(DEB_TARGET_GNU_CPU),hppa m68k)) + ifeq ($(DEB_TARGET_ARCH),m68k) + GCC_SONAME := 2 + endif + ifeq ($(DEB_TARGET_ARCH),hppa) + GCC_SONAME := 4 + endif +else + GCC_SONAME := 1 +endif +DEB_LIBGCC_SOVERSION := $(DEB_SOVERSION) +DEB_LIBGCC_VERSION := $(DEB_VERSION) + +_soname_map = gcc-s=$(GCC_SONAME) gcc=$(GCC_SONAME) stdc++=$(CXX_SONAME) \ + gomp=$(GOMP_SONAME) ssp=$(SSP_SONAME) gfortran=$(FORTRAN_SONAME) \ + itm=$(ITM_SONAME) objc=$(OBJC_SONAME) quadmath=$(QUADMATH_SONAME) \ + go=$(GO_SONAME) backtrace=$(BTRACE_SONAME) \ + atomic=$(ATOMIC_SONAME) asan=$(ASAN_SONAME) lsan=$(LSAN_SONAME) \ + tsan=$(TSAN_SONAME) ubsan=$(UBSAN_SONAME) hwasan=$(HWASAN_SONAME) \ + vtv=$(VTV_SONAME) gm2=$(GM2_SONAME) \ + gphobos=$(GPHOBOS_SONAME) +_soname = $(patsubst $(1)=%,%,$(filter $(1)=%,$(_soname_map))) + +rel_on_dev := $(if $(cross_lib_arch),>=,=) +# $(call _lib_name,,,) +_lib_name = $(subst $(SPACE),, \ + lib$(2)$(1) \ + $(if $(filter dev,$(3)),,$(call _soname,$(1))) \ + $(if $(or $(filter $(3),dev),$(and $(filter $(3),dbg),$(filter $(1),stdc++))),-$(BASE_VERSION)) \ + $(if $(3),-$(3))$(LS)$(AQ)) +# $(call _lib_vers,,) +_lib_vers = ($(if $(filter $(1),dev),$(rel_on_dev),>=) $(2)) + +# Helper to generate biarch/triarch dependencies. +# For example, $(eval $(call gen_multilib_deps,gomp)) will create the +# libgompbiarch variable, and make it contains the libgompbiarch{32,64,n32} +# variables if biarch{32,64,n32} is set to yes. + +define gen_multilib_deps + lib$1biarch64$2 := $(call _lib_name,$(1),64,$(2)) $(call _lib_vers,$(2),$(3)) + lib$1biarch32$2 := $(call _lib_name,$(1),32,$(2)) $(call _lib_vers,$(2),$(3)) + lib$1biarchn32$2 := $(call _lib_name,$(1),n32,$(2)) $(call _lib_vers,$(2),$(3)) + lib$1biarchx32$2 := $(call _lib_name,$(1),x32,$(2)) $(call _lib_vers,$(2),$(3)) + lib$1biarchhf$2 := $(call _lib_name,$(1),hf,$(2)) $(call _lib_vers,$(2),$(3)) + lib$1biarchsf$2 := $(call _lib_name,$(1),sf,$(2)) $(call _lib_vers,$(2),$(3)) + ifeq ($$(biarch64),yes) + lib$1biarch$2 := $$(lib$1biarch64$2) + endif + ifeq ($$(biarch32),yes) + ifeq ($$(biarch64),yes) + lib$1biarch$2 := $$(lib$1biarch64$2), $$(lib$1biarch32$2) + else + lib$1biarch$2 := $$(lib$1biarch32$2) + endif + endif + ifeq ($$(biarchx32),yes) + ifeq ($$(biarch64),yes) + lib$1biarch$2 := $$(lib$1biarch64$2), $$(lib$1biarchx32$2) + else ifeq ($$(biarch32),yes) + lib$1biarch$2 := $$(lib$1biarch32$2), $$(lib$1biarchx32$2) + else + lib$1biarch$2 := $$(lib$1biarchx32$2) + endif + endif + ifeq ($$(biarchn32),yes) + ifeq ($$(biarch64),yes) + lib$1biarch$2 := $$(lib$1biarch64$2), $$(lib$1biarchn32$2) + else ifeq ($$(biarch32),yes) + lib$1biarch$2 := $$(lib$1biarch32$2), $$(lib$1biarchn32$2) + else + lib$1biarch$2 := $$(lib$1biarchn32$2) + endif + endif + ifeq ($$(biarchhf),yes) + lib$1biarch$2 := $$(lib$1biarchhf$2) | $(call _lib_name,$(1),hf,$(2)) + endif + ifeq ($$(biarchsf),yes) + lib$1biarch$2 := $$(lib$1biarchsf$2) | $(call _lib_name,$(1),sf,$(2)) + endif +endef +ifeq ($(with_shared_libgcc),yes) + LIBGCC_DEP := libgcc-s$(GCC_SONAME)$(LS)$(AQ) (>= $${gcc:Version}) + $(eval $(call gen_multilib_deps,gcc-s,,$$$${gcc:Version})) +endif +LIBGCC_DEV_DEP := libgcc-$(BASE_VERSION)-dev$(LS)$(AQ) ($(rel_on_dev) $${gcc:Version}) +$(foreach x,stdc++ gomp ssp gfortran itm objc atomic asan lsan ubsan hwasan quadmath go vtv, \ + $(eval $(call gen_multilib_deps,$(x),,$$$${gcc:Version}))) +$(foreach x,gcc gcc-s stdc++ gfortran objc go gphobos, \ + $(eval $(call gen_multilib_deps,$(x),dev,$$$${gcc:Version}))) +$(foreach x,gcc gcc-s stdc++ gfortran objc go gphobos, \ + $(eval $(call gen_multilib_deps,$(x),dbg,$$$${gcc:Version}))) + +# Helper to generate _no_archs variables. +# For example, $(eval $(call gen_no_archs,go)) will create the go_no_archs +# variable, using the go_no_cpu and go_no_systems variables. +define gen_no_archs + $1_no_archs := + ifneq (,$$($1_no_cpus)) + $1_no_archs += $$(foreach cpu,$$(filter-out i386 amd64 alpha arm,$$($1_no_cpus)),!$$(cpu)) + ifneq (,$$(filter i386,$$($1_no_cpus))) + $1_no_archs += !i386 !hurd-i386 !kfreebsd-i386 + endif + ifneq (,$$(filter amd64,$$($1_no_cpus))) + $1_no_archs += !amd64 !hurd-amd64 !kfreebsd-amd64 + endif + ifneq (,$$(filter alpha,$$($1_no_cpus))) + $1_no_archs += !alpha !hurd-alpha + endif + ifneq (,$$(filter arm,$$($1_no_cpus))) + $1_no_archs += !arm !armel !armhf + endif + ifneq (,$$(strip $3)) + $1_no_systems_tmp := $$(subst $$(SPACE)gnu$$(SPACE),$$(SPACE)hurd-gnu$$(SPACE),$$(SPACE)$3$$(SPACE)) + $1_no_archs += $$(foreach cpu,$$($1_no_cpus),$$(foreach system,$$($1_no_systems_tmp),!$$(subst gnu,$$(cpu),$$(system)))) + endif + endif + ifneq (,$$($1_no_systems)) + $1_no_systems_tmp := $$(subst $$(SPACE)gnu$$(SPACE),$$(SPACE)hurd-gnu$$(SPACE),$$(SPACE)$$($1_no_systems)$$(SPACE)) + $1_no_archs += $$(foreach system,$$($1_no_systems_tmp),$$(foreach cpu,$2,!$$(subst gnu,$$(cpu),$$(system)))) + endif + $1_no_archs := $$(strip $$($1_no_archs)) +endef +base_deb_cpus := amd64 i386 +base_deb_systems := +$(foreach x,ada d fortran go m2 rs libgphobos libgc check locale,$(eval $(call gen_no_archs,$(x),$(base_deb_cpus),$(base_deb_systems)))) +linux_no_archs := !hurd-any !kfreebsd-any + +GCC_VERSION := $(strip $(shell cat $(firstword $(wildcard $(srcdir)/gcc/FULL-VER $(srcdir)/gcc/BASE-VER)))) +NEXT_GCC_VERSION := $(shell echo $(GCC_VERSION) | \ + awk -F. '{OFS="."; $$2 += 1; $$3=0; print}') +GCC_MAJOR_VERSION := $(shell echo $(GCC_VERSION) | sed -r 's/([0-9])\.[0-9]\.[0-9]/\1/') +GCC_MINOR_VERSION := $(shell echo $(GCC_VERSION) | sed -r 's/[0-9]\.([0-9])\.[0-9]/\1/') +GCC_RELEASE_VERSION := $(shell echo $(GCC_VERSION) | sed -r 's/[0-9]\.[0-9]\.([0-9])/\1/') +NEXT_GCC_MAJOR_VERSION := $(shell expr $(echo $(GCC_MAJOR_VERSION)) + 1) +NEXT_GCC_MINOR_VERSION := $(shell expr $(echo $(GCC_MINOR_VERSION)) + 1) +NEXT_GCC_RELEASE_VERSION := $(shell expr $(echo $(GCC_MAJOR_VERSION)) + 1) + +ifeq ($(single_package),yes) + BASE_VERSION := $(shell echo $(GCC_VERSION) | sed -e 's/\([0-9]*\).*/\1/') +endif + +GCC_SOURCE_VERSION := $(shell echo $(DEB_VERSION) | sed 's/-.*//') +NEXT_GCC_SOURCE_VERSION := $(shell echo $(GCC_SOURCE_VERSION) | \ + awk -F. '{OFS="."; $$2 += 1; $$3=0; print}') + +MAINTAINER = Debian GCC Maintainers +ifeq ($(distribution),Ubuntu) + ifneq (,$(findstring $(PKGSOURCE),gnat gdc)) + MAINTAINER = Ubuntu MOTU Developers + else + MAINTAINER = Ubuntu Core developers + endif +endif + +UPLOADERS = Matthias Klose +ifneq (,$(findstring $(PKGSOURCE),gnat)) + UPLOADERS = Ludovic Brenta +endif +ifneq (,$(findstring $(PKGSOURCE),gdc)) + UPLOADERS = Iain Buclaw , Matthias Klose +endif + +DPKGV = 1.14.15 +ifeq ($(with_multiarch_lib),yes) + DPKGV = 1.16.0~ubuntu4 +endif +ifeq ($(multiarch_stage1),yes) + DPKGV = 1.16.0~ubuntu4 +endif +ifeq (,$(filter $(distrelease), precise trusty)) + DPKGV = 1.17.14 +endif +DPKG_BUILD_DEP = dpkg-dev (>= $(DPKGV)), + +ifeq ($(DEB_HOST_ARCH),$(DEB_TARGET_ARCH)) + TARGET_QUAL = :$(DEB_TARGET_ARCH) +endif + +ifneq (,$(filter $(distrelease), precise trusty xenial)) + LOCALES = locales +else + LOCALES = locales-all +endif + +# The binutils version needed. +# The oldest suitable versions for the various platforms can be found in +# INSTALL/specific.html ; we take a tighter dependency if possible to be on +# the safe side (something like newest( version in stable, versions for the +# various platforms in INSTALL/specific.html) ). +# We need binutils (>= 2.19.1) for a new dwarf unwind expression opcode. +# See http://gcc.gnu.org/ml/gcc-patches/2008-09/msg01713.html +ifeq ($(trunk_build),yes) + BINUTILSBDV = 2.23 +else + BINUTILSBDV = 2.22 + ifneq (,$(filter $(distrelease),precise)) + BINUTILSBDV = 2.22-6~ + else ifneq (,$(filter $(distrelease),trusty)) + BINUTILSBDV = 2.24-5~ + else ifneq (,$(filter $(distrelease),jessie)) + BINUTILSBDV = 2.25-7~ + else ifneq (,$(filter $(distrelease),xenial)) + BINUTILSBDV = 2.26.1 + else ifneq (,$(filter $(distrelease),stretch)) + BINUTILSBDV = 2.28 + else ifneq (,$(filter $(distrelease),bionic)) + BINUTILSBDV = 2.30 + else ifneq (,$(filter $(distrelease),buster focal)) + BINUTILSBDV = 2.34 + else ifneq (,$(filter $(distrelease),groovy)) + BINUTILSBDV = 2.35 + else ifneq (,$(filter $(distrelease),bullseye)) + BINUTILSBDV = 2.35.2 + else ifneq (,$(filter $(distrelease),hirsute)) + BINUTILSBDV = 2.36 + else ifneq (,$(filter $(distrelease),jammy)) + BINUTILSBDV = 2.38 + else + BINUTILSBDV = 2.39 + endif +endif +ifeq ($(DEB_CROSS),yes) + ifneq (,$(filter $(distrelease),stretch jessie precise trusty xenial)) + BINUTILS_BUILD_DEP = binutils$(TS)$(NT) (>= $(BINUTILSBDV)), binutils-multiarch$(NT) (>= $(BINUTILSBDV)) + else + BINUTILS_BUILD_DEP = binutils$(TS)$(NT) (>= $(BINUTILSBDV)), debhelper (>= 10.10.6~) + endif + BINUTILSV := $(shell dpkg -l binutils$(TS) \ + | awk '/^ii/{print $$3;exit}' | sed 's/-.*//') +else + BINUTILS_BUILD_DEP = binutils$(NT) (>= $(BINUTILSBDV)) + ifneq (,$(findstring cross-build-,$(build_type))) + BINUTILSV := $(shell dpkg -l binutils$(TS) \ + | awk '/^ii/{print $$3;exit}' | sed 's/-.*//') + else + BINUTILSV := $(shell dpkg -l binutils binutils-multiarch \ + | awk '/^ii/{print $$3;exit}' | sed 's/-.*//') + endif +endif +ifneq (,$(filter $(build_type), build-native cross-build-native)) + ifeq (,$(filter gccgo% gnat%, $(PKGSOURCE))) + BINUTILS_BUILD_DEP += , $(binutils_hppa64)$(NT) (>= $(BINUTILSBDV)) [$(hppa64_archs)] + endif +endif +ifeq (,$(BINUTILSV)) + BINUTILSV := $(BINUTILSBDV) +endif +# gcc/configure.ac enables some features based on the binutils version. The most +# recently checked binutils version is 2.36 for GCC 14. For now it is safe to +# derive the binutils runtime dependency from the binutils build dependency. +BINUTILSV := $(BINUTILSBDV) + +# libc-dev dependencies +libc_ver := 2.23 +libc_dev_ver := $(libc_ver) +kfreebsd_libc_dev_ver := 2.25 +ifeq ($(with_multiarch_lib),yes) + ifeq ($(derivative),Debian) + libc_dev_ver := 2.23-1~ + else + libc_dev_ver := 2.13-0ubuntu6 + endif +endif +# first set LIBC_DEP/LIBC_DEV_DEP for native builds only +ifeq ($(DEB_TARGET_ARCH_OS),linux) + LIBC_DEP = $(if $(filter alpha ia64, $(DEB_TARGET_ARCH)),libc6.1,libc6) + ifneq (,$(findstring musl-linux-,$(DEB_TARGET_ARCH))) + LIBC_DEP = musl + libc_ver = 0.9 + libc_dev_ver = 0.9 + endif +else ifeq ($(DEB_TARGET_ARCH_OS),hurd) + LIBC_DEP = libc0.3 +else ifeq ($(DEB_TARGET_ARCH_OS),kfreebsd) + LIBC_DEP = libc0.1 + libc_dev_ver := $(kfreebsd_libc_dev_ver) +else ifeq ($(DEB_TARGET_ARCH),uclibc) + LIBC_DEP = libuclibc +endif +LIBC_DEV_DEP := $(LIBC_DEP)-dev + +# this is about Debian archs name, *NOT* GNU target triplet +biarch_deb_map := \ + i386=amd64 amd64=i386 \ + mips=mips64 mipsel=mips64el \ + mipsn32=mips mipsn32el=mipsel \ + mips64=mips mips64el=mipsel \ + mipsr6=mips64r6 mipsr6el=mips64r6el \ + mipsn32r6=mipsr6 mipsn32r6el=mipsr6el \ + mips64r6=mipsr6 mips64r6el=mipsr6el \ + powerpc=ppc64 ppc64=powerpc \ + sparc=sparc64 sparc64=sparc\ + s390=s390x s390x=s390 \ + kfreebsd-amd64=i386 \ + armel=armhf \ + armhf=armel +biarch_deb_arch := $(patsubst $(DEB_TARGET_ARCH)=%,%, \ + $(filter $(DEB_TARGET_ARCH)=%,$(biarch_deb_map))) + +LIBC_BIARCH_DEP := +LIBC_BIARCH_DEV_DEP := +ifneq (,$(findstring yes,$(biarch64) $(biarch32) $(biarchn32) $(biarchx32)$(biarchhf)$(biarchsf))) + LIBC_BIARCH_DEP := $${shlibs:Depends} + LIBC_BIARCH_DEV_DEP := $(LIBC_DEV_DEP)-$(biarch_deb_arch)$(LS)$(AQ) (>= $(libc_dev_ver)) + # amd64, x32, i386 + ifneq (,$(findstring $(DEB_TARGET_ARCH),amd64 x32 i386)) + ifeq ($(biarch64)$(biarch32),yesyes) + LIBC_BIARCH_DEV_DEP := $(LIBC_DEV_DEP)-amd64$(LS)$(AQ) (>= $(libc_dev_ver)), + LIBC_BIARCH_DEV_DEP += $(LIBC_DEV_DEP)-i386$(LS)$(AQ) (>= $(libc_dev_ver)) + endif + ifeq ($(biarch64)$(biarchx32),yesyes) + LIBC_BIARCH_DEV_DEP := $(LIBC_DEV_DEP)-amd64$(LS)$(AQ) (>= $(libc_dev_ver)), + LIBC_BIARCH_DEV_DEP += $(LIBC_DEV_DEP)-x32$(LS)$(AQ) (>= $(libc_dev_ver)) + endif + ifeq ($(biarch32)$(biarchx32),yesyes) + LIBC_BIARCH_DEV_DEP := $(LIBC_DEV_DEP)-i386$(LS)$(AQ) (>= $(libc_dev_ver)), + LIBC_BIARCH_DEV_DEP += $(LIBC_DEV_DEP)-x32$(LS)$(AQ) (>= $(libc_dev_ver)) + endif + endif + # mips* + ifneq (,$(findstring mips, $(DEB_TARGET_ARCH))) + ifeq ($(biarchn32)$(biarch32),yesyes) + LIBC_BIARCH_DEV_DEP := libc6-dev-mips32$(LS)$(AQ) (>= $(libc_dev_ver)), + LIBC_BIARCH_DEV_DEP += libc6-dev-mipsn32$(LS)$(AQ) (>= $(libc_dev_ver)) + endif + ifeq ($(biarch64)$(biarch32),yesyes) + triarch := $(COMMA)$(SPACE) + LIBC_BIARCH_DEV_DEP := libc6-dev-mips32$(LS)$(AQ) (>= $(libc_dev_ver)), + LIBC_BIARCH_DEV_DEP += libc6-dev-mips64$(LS)$(AQ) (>= $(libc_dev_ver)) + endif + ifeq ($(biarchn32)$(biarch64),yesyes) + triarch := $(COMMA)$(SPACE) + LIBC_BIARCH_DEV_DEP := libc6-dev-mips64$(LS)$(AQ) (>= $(libc_dev_ver)), + LIBC_BIARCH_DEV_DEP += libc6-dev-mipsn32$(LS)$(AQ) (>= $(libc_dev_ver)) + endif + endif + + ifeq ($(biarchhf),yes) + LIBC_BIARCH_DEP := $(LIBC_DEP)-$(biarch_deb_arch)$(LS)$(AQ) (>= $(libc_dev_ver)) + LIBC_BIARCH_DEP += | $(LIBC_DEP)-$(biarch_deb_arch)$(LS)$(AQ) + LIBC_BIARCH_DEV_DEP += | $(LIBC_DEV_DEP)-$(biarch_deb_arch)$(LS)$(AQ) + endif + ifeq ($(biarchsf),yes) + LIBC_BIARCH_DEP := $(LIBC_DEP)-$(biarch_deb_arch)$(LS)$(AQ) (>= $(libc_dev_ver)) + LIBC_BIARCH_DEP += | $(LIBC_DEP)-$(biarch_deb_arch)$(LS)$(AQ) + LIBC_BIARCH_DEV_DEP += | $(LIBC_DEV_DEP)-$(biarch_deb_arch)$(LS)$(AQ) + endif +endif + +# now add the cross suffix and required version +LIBC_DEP := $(LIBC_DEP)$(LS)$(AQ) +LIBC_DEV_DEP := $(LIBC_DEV_DEP)$(LS)$(AQ) (>= $(libc_dev_ver)) + +ifneq (,$(filter $(build_type), build-native cross-build-native)) + LIBC_DBG_DEP = libc6.1-dbg [alpha ia64] | libc0.3-dbg [hurd-amd64 hurd-i386] | libc0.1-dbg [kfreebsd-amd64 kfreebsd-i386] | libc6-dbg, +endif + +# TODO: make this automatic, there must be a better way to define LIBC_DEP. +ifneq ($(DEB_CROSS),yes) + LIBC_BUILD_DEP = libc6.1-dev (>= $(libc_dev_ver)) [alpha ia64] | libc0.3-dev (>= $(libc_dev_ver)) [hurd-amd64 hurd-i386] | libc0.1-dev (>= $(kfreebsd_libc_dev_ver)) [kfreebsd-amd64 kfreebsd-i386] | libc6-dev (>= $(libc_dev_ver)) + LIBC_BIARCH_BUILD_DEP = \ + libc6-dev-amd64 [i386 x32], \ + libc6-dev-sparc64 [sparc], \ + libc6-dev-sparc [sparc64], \ + $(if $(findstring s390x, $(biarch32archs)), libc6-dev-s390 [s390x]$(COMMA)) \ + libc6-dev-s390x [s390], \ + libc6-dev-i386 [amd64 x32], \ + libc6-dev-powerpc [ppc64], \ + libc6-dev-ppc64 [powerpc], \ + libc0.1-dev-i386 [kfreebsd-amd64], \ + lib32gcc-s1 [amd64 ppc64 kfreebsd-amd64 mipsn32 mipsn32el mips64 mips64el$(if $(findstring s390x, $(biarch32archs)),s390x) sparc64 x32], \ + libn32gcc-s1 [mips mipsel mips64 mips64el], \ + lib64gcc-s1 [i386 mips mipsel mipsn32 mipsn32el powerpc sparc s390 x32], \ + libc6-dev-mips64 [mips mipsel mipsn32 mipsn32el], \ + libc6-dev-mipsn32 [mips mipsel mips64 mips64el], \ + libc6-dev-mips32 [mipsn32 mipsn32el mips64 mips64el], + ifeq (yes,$(MIPS_R6_ENABLED)) + LIBC_BIARCH_BUILD_DEP = \ + libc6-dev-amd64 [i386 x32], \ + libc6-dev-sparc64 [sparc], \ + libc6-dev-sparc [sparc64], \ + $(if $(findstring s390x, $(biarch32archs)), libc6-dev-s390 [s390x]$(COMMA)) \ + libc6-dev-s390x [s390], \ + libc6-dev-i386 [amd64 x32], \ + libc6-dev-powerpc [ppc64], \ + libc6-dev-ppc64 [powerpc], \ + libc0.1-dev-i386 [kfreebsd-amd64], \ + lib32gcc-s1 [amd64 ppc64 kfreebsd-amd64 mipsn32 mipsn32el mips64 mips64el mipsn32r6 mipsn32r6el mips64r6 mips64r6el$(if $(findstring s390x, $(biarch32archs)), s390x) sparc64 x32], \ + libn32gcc-s1 [mips mipsel mips64 mips64el mipsr6 mipsr6el mips64r6 mips64r6el], \ + lib64gcc-s1 [i386 mips mipsel mipsn32 mipsn32el mipsr6 mipsr6el mipsn32r6 mipsn32r6el powerpc sparc s390 x32], \ + libc6-dev-mips64 [mips mipsel mipsn32 mipsn32el mipsr6 mipsr6el mipsn32r6 mipsn32r6el], \ + libc6-dev-mipsn32 [mips mipsel mips64 mips64el mipsr6 mipsr6el mips64r6 mips64r6el], \ + libc6-dev-mips32 [mipsn32 mipsn32el mips64 mips64el mipsn32r6 mipsn32r6el mips64r6 mips64r6el], + endif + ifneq (,$(findstring amd64,$(biarchx32archs))) + LIBC_BIARCH_BUILD_DEP += libc6-dev-x32 [amd64 i386], libx32gcc-s1 [amd64 i386], + endif + ifneq (,$(findstring armel,$(biarchhfarchs))) + LIBC_BIARCH_BUILD_DEP += libc6-dev-armhf [armel], libhfgcc-s1 [armel], + endif + ifneq (,$(findstring armhf,$(biarchsfarchs))) + LIBC_BIARCH_BUILD_DEP += libc6-dev-armel [armhf], libsfgcc-s1 [armhf], + endif + # FIXME: needed for backports + #LIBC_BIARCH_BUILD_DEP := $(subst gcc-s,gcc,$(LIBC_BIARCH_BUILD_DEP)) +else + LIBC_BUILD_DEP = $(LIBC_DEV_DEP), + ifneq ($(LIBC_BIARCH_DEV_DEP),) + LIBC_BIARCH_BUILD_DEP = $(LIBC_BIARCH_DEV_DEP), + else + LIBC_BIARCH_BUILD_DEP = + endif +endif + +# needed for the include/asm symlink to run the testsuite for +# non default multilibs +ifneq (,$(multilib_archs)) + GCC_MULTILIB_BUILD_DEP = g++-multilib [$(multilib_archs)]$(pf_ncross), +endif + +LIBUNWIND_DEV_DEP := libunwind8-dev$(LS)$(AQ) +LIBUNWIND_BUILD_DEP := $(LIBUNWIND_DEV_DEP) [ia64], +LIBATOMIC_OPS_BUILD_DEP := libatomic-ops-dev$(LS) [ia64], +ifneq ($(DEB_TARGET_ARCH),ia64) + LIBUNWIND_DEV_DEP := # nothing +else ifneq (,$(filter $(DEB_STAGE),stage1 stage2)) + LIBUNWIND_DEV_DEP := # nothing +endif + +GMP_BUILD_DEP = libgmp-dev (>= 2:5.0.1~), +MPFR_BUILD_DEP = libmpfr-dev (>= 3.0.0-9~), + +ISL_BUILD_DEP = libisl-dev, +ifeq (,$(filter $(distrelease), jessie stretch precise trusty xenial bionic)) + ISL_BUILD_DEP = libisl-dev (>= 0.20), +endif + +ifneq (,$(filter $(distrelease), precise)) + MPC_BUILD_DEP = libmpc-dev, +else + MPC_BUILD_DEP = libmpc-dev (>= 1.0), +endif + +SOURCE_BUILD_DEP := +ifeq (,$(findstring gcc,$(PKGSOURCE))) + SOURCE_BUILD_DEP := gcc-$(BASE_VERSION)-source (>= $(GCC_SOURCE_VERSION)), gcc-$(BASE_VERSION)-source (<< $(NEXT_GCC_SOURCE_VERSION)), +endif + +ifneq (,$(filter $(distrelease), precise)) + CHECK_BUILD_DEP := dejagnu$(if $(check_no_archs), [$(check_no_archs)]), +else + CHECK_BUILD_DEP := dejagnu$(if $(check_no_archs), [$(check_no_archs)]) , +endif + +AUTO_BUILD_DEP := m4, libtool, +autoconf_version = 2.69 +ifneq (,$(filter $(distrelease),stretch buster trusty xenial bionic focal groovy)) + autoconf_version = +endif +AUTO_BUILD_DEP += autoconf$(autoconf_version), + +ifeq (,$(filter $(distrelease), precise trusty)) + SDT_BUILD_DEP = systemtap-sdt-dev [linux-any], +endif + +# ensure that the common libs, built from the next GCC version are available +ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION)) + ifneq ($(with_common_libs),yes) + BASE_BUILD_DEP = gcc-14-base, + endif +endif + +ifeq (,$(filter $(distrelease), precise)) + OFFLOAD_BUILD_DEP += nvptx-tools [$(nvptx_archs)], +endif + +ifeq ($(with_offload_gcn),yes) + ifeq ($(gcn_tools_llvm_version),tools) + LLVM_DEP = amdgcn-tools [$(gcn_archs)], + else + LLVM_DEP = llvm-$(gcn_tools_llvm_version)$(if $(pkg_llvm_ver), (>= $(pkg_llvm_ver))) [$(gcn_archs)], \ + lld-$(gcn_tools_llvm_version)$(if $(pkg_llvm_ver), (>= $(pkg_llvm_ver))) [$(gcn_archs)], + endif + OFFLOAD_BUILD_DEP += $(LLVM_DEP) +endif + +PHOBOS_BUILD_DEP = lib32z1-dev [amd64 kfreebsd-amd64], lib64z1-dev [i386], +ifeq ($(derivative),Ubuntu) + ifeq (,$(filter $(distrelease),precise)) + PHOBOS_BUILD_DEP += libx32z1-dev [amd64 kfreebsd-amd64 i386], + endif +endif +PHOBOS_BUILD_DEP += unzip , + +ifeq ($(with_m2),yes) + GM2_BUILD_DEP = python3:any, +endif + +ifeq ($(usage_stats),yes) + ifeq (,$(no_usage_archs)) + USAGE_BUILD_DEP = python3:any, python3-psutil, python3-matplotlib, + else + USAGE_BUILD_DEP = python3:any, \ + python3-psutil [$(foreach a,$(no_usage_archs),!$(a))], \ + python3-matplotlib [$(foreach a,$(no_usage_archs),!$(a))], + endif +endif + +ifneq (,$(filter $(distrelease),precise trusty)) + DEBHELPER_BUILD_DEP = debhelper (>= 9), +else + DEBHELPER_BUILD_DEP = debhelper (>= 9.20141010), +endif + +PKGCONF_BUILD_DEP = pkgconf, +ifneq (,$(filter $(distrelease),wheezy jessie stretch buster bullseye bookworm precise trusty xenial bionic focal jammy)) + PKGCONF_BUILD_DEP = pkg-config, +endif + +ifneq ($(DEB_CROSS),yes) +# all archs for which to create b-d's +any_archs := alpha amd64 armel armhf arm64 i386 loong64 mips mipsel mips64 mips64el mipsn32 powerpc ppc64 ppc64el m68k riscv64 sh4 sparc64 s390x x32 +ifeq (,$(filter $(distrelease), jessie stretch buster precise xenial bionic)) + any_archs := $(filter-out mips, $(any_archs)) +endif +ifeq (yes,$(MIPS_R6_ENABLED)) + any_archs += mipsn32el mipsr6 mipsr6el mips64r6 mips64r6el mipsn32r6 mipsn32r6el +endif +ifeq (,$(filter $(DEB_HOST_ARCH),$(any_archs))) +any_archs += $(DEB_HOST_ARCH) +endif + +arch_gnutype_map := $(foreach a,$(any_archs),$(a)=$(shell CC=true dpkg-architecture -f -a$(a) -qDEB_HOST_GNU_TYPE)) +_gnu_type = $(subst $1=,,$(filter $1=%,$(arch_gnutype_map))) +_gnu_suffix = -$(subst _,-,$(call _gnu_type,$1)) + +ifneq (,$(filter $(distrelease),precise trusty)) + TARGET_TOOL_BUILD_DEP = bash, # non-empty line + pf_cross = + pf_ncross = +else + TARGET_TOOL_BUILD_DEP = \ + g++-$(BASE_VERSION)-for-host , \ + gobjc-$(BASE_VERSION)-for-host [!avr] , \ + gfortran-$(BASE_VERSION)-for-host , \ + gdc-$(BASE_VERSION)-for-host [!s390 !sh4] , \ + gccgo-$(BASE_VERSION)-for-host [!hppa !m68k !sh4] , \ + gnat-$(BASE_VERSION)-for-host [!m68k] , \ + gm2-$(BASE_VERSION)-for-host $(if $(m2_no_archs),[$(m2_no_archs)] ), + pf_cross = $(SPACE) + pf_ncross = $(SPACE) + NT = :native +endif + +LIBSTDCXX_BUILD_INDEP = doxygen (>= 1.7.2) , graphviz (>= 2.2) , \ + ghostscript , texlive-latex-base , xsltproc , \ + libxml2-utils , docbook-xsl-ns , + +GO_BUILD_DEP := netbase, + +# try to build with itself, or with the last version +ifneq (,$(filter $(distrelease), precise)) + gnat_build_dep := +else ifneq (,$(filter $(distrelease), jessie)) + gnat_build_dep := gnat-4.9$(NT) [$(ada_no_archs)], g++-4.9$(NT) +else ifneq (,$(filter $(distrelease), precise)) + gnat_build_dep := gnat-6$(NT) [$(ada_no_archs)], g++-6$(NT) +else ifneq (,$(filter $(distrelease), trusty xenial)) + gnat_build_dep := gnat-5$(NT) [$(ada_no_archs)], g++-5$(NT) +else ifneq (,$(filter $(distrelease), stretch)) + gnat_build_dep := gnat-6$(NT) [$(ada_no_archs) !x32], g++-7 [x32], gnat-7 [x32], g++-6$(NT) +else ifneq (,$(filter $(distrelease), buster)) + gnat_build_dep := gnat-8$(NT) [$(ada_no_archs)], g++-8$(NT) +else ifneq (,$(filter $(distrelease), bionic focal)) + gnat_build_dep := gnat-11$(NT) [$(ada_no_archs)], g++-11$(NT) + gdc_build_dep := gdc-11$(NT) +else ifneq (,$(filter $(distrelease), bullseye hirsute jammy)) + gnat_build_dep := gnat-11$(NT) [$(ada_no_archs) !alpha !m68k], g++-11$(NT), gnat-12 [alpha m68k], g++-12$(NT) [alpha m68k] + gdc_build_dep := gdc-11$(NT) [$(d_no_archs)] +else ifneq (,$(filter $(distrelease), impish)) + gnat_build_dep := gnat-11$(NT) [$(ada_no_archs)], g++-11$(NT) + gdc_build_dep := gdc-11$(NT) [$(d_no_archs)] +else ifneq (,$(filter $(distrelease), bookworm)) + gnat_build_dep := gnat-12$(NT) [$(ada_no_archs)], g++-12$(NT) + gdc_build_dep := gdc-12$(NT) [$(d_no_archs)] +else + gnat_build_dep := gnat-13$(NT) [$(ada_no_archs)], g++-13$(NT) + gdc_build_dep := gdc-13$(NT) [$(d_no_archs)] +endif +ifneq (,$(filter $(DEB_STAGE),stage1 stage2)) + gnat_build_dep := + gdc_build_dep := +endif + +ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION)) + ifneq ($(with_separate_gnat),yes) + # Build gnat as part of the combined gcc-x.y source package. Do not fail + # if gnat is not present on unsupported architectures; the build scripts + # will not use gnat anyway. + GNAT_BUILD_DEP := $(gnat_build_dep), + endif + GDC_BUILD_DEP := $(gdc_build_dep), +else ifeq ($(single_package),yes) + # Ditto, as part of the gcc-snapshot package. + GNAT_BUILD_DEP := $(gnat_build_dep), + GDC_BUILD_DEP := $(gdc_build_dep), +else ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION)) + # Special source package just for gnat. Fail early if gnat is not present, + # rather than waste CPU cycles and fail later. + # Bootstrap step needs a gnatgcc symbolic link. + GNAT_BUILD_DEP := $(gnat_build_dep), + GNAT_BUILD_DEP += $(SOURCE_BUILD_DEP) + GDC_BUILD_DEP := + GO_BUILD_DEP := +else ifeq ($(PKGSOURCE),gdc-$(BASE_VERSION)) + # Special source package just for gdc. + GNAT_BUILD_DEP := + GDC_BUILD_DEP := $(SOURCE_BUILD_DEP) + GO_BUILD_DEP := +else ifeq ($(PKGSOURCE),gccgo-$(BASE_VERSION)) + # Special source package just for gccgo. + GNAT_BUILD_DEP := + GDC_BUILD_DEP := $(SOURCE_BUILD_DEP) +endif + + +else +# build cross compiler + CROSS_BUILD_DEP := libc6-dev$(cross_lib_arch), +ifneq (,$(findstring cross-build-,$(build_type))) + CROSS_BUILD_DEP += zlib1g-dev$(cross_lib_arch), libmpfr-dev$(cross_lib_arch), +endif + SOURCE_BUILD_DEP := + ifeq (,$(findstring gcc,$(PKGSOURCE))) + SOURCE_BUILD_DEP := gcc-$(BASE_VERSION)-source (>= $(GCC_SOURCE_VERSION)), gcc-$(BASE_VERSION)-source (<< $(NEXT_GCC_SOURCE_VERSION)), + endif + GNAT_BUILD_DEP := gnat-$(BASE_VERSION), + ifneq (,$(filter !$(DEB_TARGET_ARCH),$(ada_no_archs))) + GNAT_BUILD_DEP := + endif + GDC_BUILD_DEP := gdc-$(BASE_VERSION), + ifneq (,$(filter !$(DEB_TARGET_ARCH),$(d_no_archs))) + GDC_BUILD_DEP := + endif + ifeq (yes_,$(with_m2)_$(filter !$(DEB_TARGET_ARCH),$(m2_no_archs))) + GM2_BUILD_DEP += gm2-$(BASE_VERSION), + endif + arch_gnutype_map = $(DEB_TARGET_ARCH)=$(TARGET_ALIAS) +endif # cross compiler + +BASE_BREAKS := gnat (<< 7) +# these would need proper updates, and are only needed for upgrades +ifneq (,$(filter $(distrelease),stretch jessie trusty xenial bionic)) + BASE_BREAKS := +endif + +# FIXME: can these be dropped? In the end the libgcc_s.so.1 remained in the same location. +ifneq (,$(filter $(DEB_HOST_ARCH), arm64 s390x sparc64)) + ifeq (,$(filter $(distrelease), jessie stretch buster trusty xenial bionic)) + LIBGCC_BREAKS := libgcc-9-dev (<< 9.2.1-26), libgcc-8-dev (<< 8.3.0-27), libgcc-7-dev (<< 7.5.0-4), + endif +endif +ifneq (,$(filter $(distrelease),sid bullseye focal)) + LIBGCC_BREAKS += cryptsetup-initramfs (<< 2:2.2.2-3~), +endif + +# The numeric part of the gcc version number (x.yy.zz) +NEXT_GCC_VERSION := $(shell echo $(GCC_VERSION) | \ + awk -F. '{OFS="."; if (NF==2) $$3=1; else $$NF += 1; print}') +# first version with a new path component in gcc_lib_dir (i.e. GCC_VERSION +# or TARGET_ALIAS changes), or last version available for all architectures +DEB_GCC_SOFT_VERSION := 13 +DEB_GNAT_SOFT_VERSION := 13 + +ifeq ($(with_d),yes) + GDC_VERSION := $(BASE_VERSION) + DEB_GDC_VERSION := $(DEB_VERSION) +endif + +ifeq ($(with_m2),yes) + GM2_VERSION := $(BASE_VERSION) + DEB_GM2_VERSION := $(DEB_VERSION) +endif + +# semiautomatic ... +DEB_SOVERSION := $(DEB_VERSION) +DEB_SOVERSION := 5 +DEB_SOEVERSION := $(EPOCH):5 +DEB_STDCXX_SOVERSION := 5 +DEB_GOMP_SOVERSION := $(DEB_SOVERSION) + +DEB_GCC_VERSION := $(DEB_VERSION) + +DEB_GNAT_VERSION := $(DEB_VERSION) +ifeq ($(with_separate_gnat),yes) + ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION)) + DEB_GCC_VERSION := $(DEB_GCC_SOFT_VERSION) + endif +endif + +GNAT_VERSION := $(BASE_VERSION) + +LIBGNAT_DEP := +ifeq ($(with_libgnat),yes) + LIBGNAT_DEP := libgnat-$(GNAT_VERSION)$(LS)$(AQ) (>= $${gcc:Version}) +endif + +pkg_ver := -$(BASE_VERSION) + +ctrl_flags = \ + -DBINUTILSV=$(BINUTILSV) \ + -DBINUTILSBDV=$(BINUTILSBDV) \ + -DSRCNAME=$(PKGSOURCE) \ + -D__$(DEB_TARGET_GNU_CPU)__ \ + -DARCH=$(DEB_TARGET_ARCH) \ + -DDIST=$(distribution) \ + -DLOCALES=$(LOCALES) \ + +ctrl_flags += \ + -DLIBC_DEV_DEP="$(LIBC_DEV_DEP)" \ + -DLIBC_BIARCH_BUILD_DEP="$(LIBC_BIARCH_BUILD_DEP)" \ + -DLIBC_DBG_DEP="$(LIBC_DBG_DEP)" \ + -DBASE_BUILD_DEP="$(BASE_BUILD_DEP)" \ + -DFORTRAN_BUILD_DEP="$(FORTRAN_BUILD_DEP)" \ + -DGNAT_BUILD_DEP="$(GNAT_BUILD_DEP)" \ + -DGO_BUILD_DEP="$(GO_BUILD_DEP)" \ + -DLIBSTDCXX_BUILD_INDEP="$(LIBSTDCXX_BUILD_INDEP)" \ + -DGDC_BUILD_DEP="$(GDC_BUILD_DEP)" \ + -DBINUTILS_BUILD_DEP="$(BINUTILS_BUILD_DEP)" \ + -DLIBC_BUILD_DEP="$(LIBC_BUILD_DEP)" \ + -DCHECK_BUILD_DEP="$(CHECK_BUILD_DEP)" \ + -DAUTO_BUILD_DEP="$(AUTO_BUILD_DEP)" \ + -DSDT_BUILD_DEP="$(SDT_BUILD_DEP)" \ + -DISL_BUILD_DEP="$(ISL_BUILD_DEP)" \ + -DGMP_BUILD_DEP="$(GMP_BUILD_DEP)" \ + -DMPFR_BUILD_DEP="$(MPFR_BUILD_DEP)" \ + -DMPC_BUILD_DEP="$(MPC_BUILD_DEP)" \ + -DDEBHELPER_BUILD_DEP="$(DEBHELPER_BUILD_DEP)" \ + -DPKGCONF_BUILD_DEP="$(PKGCONF_BUILD_DEP)" \ + -DDPKG_BUILD_DEP="$(DPKG_BUILD_DEP)" \ + -DSOURCE_BUILD_DEP="$(SOURCE_BUILD_DEP)" \ + -DCROSS_BUILD_DEP="$(CROSS_BUILD_DEP)" \ + -DGCC_MULTILIB_BUILD_DEP='$(GCC_MULTILIB_BUILD_DEP)' \ + -DTARGET_TOOL_BUILD_DEP='$(TARGET_TOOL_BUILD_DEP)' \ + -DPHOBOS_BUILD_DEP="$(PHOBOS_BUILD_DEP)" \ + -DGM2_BUILD_DEP="$(GM2_BUILD_DEP)" \ + -DOFFLOAD_BUILD_DEP="$(OFFLOAD_BUILD_DEP)" \ + -DUSAGE_BUILD_DEP="$(USAGE_BUILD_DEP)" \ + -DLLVM_DEP="$(LLVM_DEP)" \ + -DARCH_GNUTYPE_MAP="$(arch_gnutype_map)" \ + -DMULTILIB_ARCHS="$(multilib_archs)" \ + -DTP=$(TP) \ + -DTS=$(TS) \ + -DLS=$(LS) \ + -DAQ=$(AQ) \ + -DNT=$(NT) + +ifeq ($(DEB_CROSS),yes) + ctrl_flags += \ + -DTARGET=$(DEB_TARGET_ARCH) \ + -DLIBUNWIND_BUILD_DEP="$(LIBUNWIND_BUILD_DEP)" \ + -DLIBATOMIC_OPS_BUILD_DEP="$(LIBATOMIC_OPS_BUILD_DEP)" + ifeq ($(DEB_STAGE),rtlibs) + ctrl_flags += -DCROSS_ARCH=$(DEB_TARGET_ARCH) + endif +else + # add '-DPRI=optional' to ctrl_flags if this is not the default compiler + # ctrl_flags += \ + # -DPRI=optional +endif + +ifeq ($(with_base_only),yes) + ctrl_flags += \ + -DBASE_ONLY=yes +endif + +ifeq ($(with_multiarch_lib),yes) + ctrl_flags += \ + -DMULTIARCH=yes +endif + +ctrl_flags += -DBUILD_DEP_FOR_BINUTILS="$(if $(filter yes, $(with_binutils)),$(bd_binutils_only))" + +control: control-file readme-bugs-file parameters-file symbols-files copyright-file substvars-file versioned-files check-versions + +# stage1 and stage2 compilers are only C +ifneq (,$(filter $(DEB_STAGE),stage1 stage2)) + languages = c + addons = gccbase cdev plugindev + ifeq ($(with_gcclbase),yes) + addons += gcclbase + endif + ifeq ($(multilib),yes) + addons += multilib + endif + addons += $(if $(findstring armel,$(biarchhfarchs)),armml) + addons += $(if $(findstring armhf,$(biarchsfarchs)),armml) + addons += $(if $(findstring amd64,$(biarchx32archs)),x32dev) + ifeq ($(DEB_STAGE),stage2) + addons += libgcc + ifeq ($(multilib),yes) + addons += lib32gcc lib64gcc libn32gcc + addons += $(if $(findstring amd64,$(biarchx32archs)),libx32gcc) + addons += $(if $(findstring armel,$(biarchhfarchs)),libhfgcc) + addons += $(if $(findstring armhf,$(biarchsfarchs)),libsfgcc) + endif + else + LIBC_BIARCH_DEV_DEP := + endif +else +languages = c c++ fortran objc objpp +ifeq ($(DEB_STAGE),rtlibs) + ifeq (,$(filter libgfortran, $(with_rtlibs))) + languages := $(filter-out fortran, $(languages)) + endif + ifeq (,$(filter libobjc, $(with_rtlibs))) + languages := $(filter-out objc objpp, $(languages)) + endif +endif +ifeq ($(with_dbg),yes) + addons += libdbg +endif +ifeq ($(with_gccbase),yes) + addons += gccbase +endif +ifeq ($(with_gcclbase),yes) + addons += gcclbase +endif +ifneq ($(DEB_STAGE),rtlibs) + addons += cdev c++dev source multilib + ifeq ($(build_type),build-native) + addons += testresults + endif + ifneq (,$(filter fortran, $(languages))) + addons += fdev + endif + ifneq (,$(filter objc, $(languages))) + addons += objcdev + endif + ifneq (,$(filter objpp, $(languages))) + addons += objppdev + endif + addons += plugindev +endif +addons += $(if $(findstring armel,$(biarchhfarchs)),armml) +addons += $(if $(findstring armhf,$(biarchsfarchs)),armml) +addons += $(if $(findstring amd64,$(biarchx32archs)),x32dev) +ifeq ($(with_libgcc),yes) + addons += libgcc lib4gcc lib32gcc lib64gcc libn32gcc + addons += $(if $(findstring amd64,$(biarchx32archs)),libx32gcc) + addons += $(if $(findstring armel,$(biarchhfarchs)),libhfgcc) + addons += $(if $(findstring armhf,$(biarchsfarchs)),libsfgcc) + ifeq ($(with_libcompatgcc),yes) + addons += libcompatgcc + endif +endif +ifeq ($(with_libcxx),yes) + addons += libcxx lib32cxx lib64cxx libn32cxx + addons += $(if $(findstring amd64,$(biarchx32archs)),libx32cxx) + addons += $(if $(findstring armel,$(biarchhfarchs)),libhfcxx) + addons += $(if $(findstring armhf,$(biarchsfarchs)),libsfcxx) +endif +addons += $(if $(findstring amd64,$(biarchx32archs)),libx32dbgcxx) +addons += $(if $(findstring armel,$(biarchhfarchs)),libhfdbgcxx) +addons += $(if $(findstring armhf,$(biarchsfarchs)),libsfdbgcxx) +ifeq ($(with_libgfortran),yes) + addons += libgfortran lib32gfortran lib64gfortran libn32gfortran + addons += $(if $(findstring amd64,$(biarchx32archs)),libx32gfortran) + addons += $(if $(findstring armel,$(biarchhfarchs)),libhfgfortran) + addons += $(if $(findstring armhf,$(biarchsfarchs)),libsfgfortran) +endif +ifeq ($(with_libobjc),yes) + addons += libobjc lib32objc lib64objc libn32objc + addons += $(if $(findstring amd64,$(biarchx32archs)),libx32objc) + addons += $(if $(findstring armel,$(biarchhfarchs)),libhfobjc) + addons += $(if $(findstring armhf,$(biarchsfarchs)),libsfobjc) +endif +ifeq ($(with_libgomp),yes) + addons += libgomp lib32gomp lib64gomp libn32gomp + addons += $(if $(findstring amd64,$(biarchx32archs)),libx32gomp) + addons += $(if $(findstring armel,$(biarchhfarchs)),libhfgomp) + addons += $(if $(findstring armhf,$(biarchsfarchs)),libsfgomp) +endif +ifeq ($(with_libitm),yes) + addons += libitm lib32itm lib64itm libn32itm + addons += $(if $(findstring amd64,$(biarchx32archs)),libx32itm) + addons += $(if $(findstring armel,$(biarchhfarchs)),libhfitm) + addons += $(if $(findstring armhf,$(biarchsfarchs)),libsfitm) +endif +ifeq ($(with_libatomic),yes) + addons += libatomic lib32atomic lib64atomic libn32atomic + addons += $(if $(findstring amd64,$(biarchx32archs)),libx32atomic) + addons += $(if $(findstring armel,$(biarchhfarchs)),libhfatomic) + addons += $(if $(findstring armhf,$(biarchsfarchs)),libsfatomic) +endif +ifeq ($(with_libbacktrace),yes) + addons += libbtrace lib32btrace lib64btrace libn32btrace + addons += $(if $(findstring amd64,$(biarchx32archs)),libx32btrace) + addons += $(if $(findstring armel,$(biarchhfarchs)),libhfbtrace) + addons += $(if $(findstring armhf,$(biarchsfarchs)),libsfbtrace) +endif +ifeq ($(with_libasan),yes) + addons += libasan lib32asan lib64asan libn32asan + addons += $(if $(findstring amd64,$(biarchx32archs)),libx32asan) + addons += $(if $(findstring armel,$(biarchhfarchs)),libhfasan) + addons += $(if $(findstring armhf,$(biarchsfarchs)),libsfasan) +endif +ifeq ($(with_liblsan),yes) + addons += liblsan + ifneq (,$(filter $(distrelease),lunar jammy focal)) + addons += lib32lsan lib64lsan libn32lsan + addons += $(if $(findstring amd64,$(biarchx32archs)),libx32lsan) + #addons += $(if $(findstring armel,$(biarchhfarchs)),libhflsan) + #addons += $(if $(findstring armhf,$(biarchsfarchs)),libsflsan) + endif +endif +ifeq ($(with_libtsan),yes) + addons += libtsan + addons += libtsan #lib32tsan lib64tsan libn32tsan + #addons += $(if $(findstring amd64,$(biarchx32archs)),libx32tsan) + #addons += $(if $(findstring armel,$(biarchhfarchs)),libhftsan) + #addons += $(if $(findstring armhf,$(biarchsfarchs)),libsftsan) +endif +ifeq ($(with_libubsan),yes) + addons += libubsan lib32ubsan lib64ubsan libn32ubsan + addons += $(if $(findstring amd64,$(biarchx32archs)),libx32ubsan) + addons += $(if $(findstring armel,$(biarchhfarchs)),libhfubsan) + addons += $(if $(findstring armhf,$(biarchsfarchs)),libsfubsan) +endif +#ifeq ($(with_libhwasan),yes) + addons += libhwasan +#endif +ifeq ($(with_vtv),yes) + addons += libvtv lib32vtv lib64vtv #libn32vtv + addons += $(if $(findstring amd64,$(biarchx32archs)),libx32vtv) + #addons += $(if $(findstring armel,$(biarchhfarchs)),libhfvtv) + #addons += $(if $(findstring armhf,$(biarchsfarchs)),libsfvtv) +endif +ifeq ($(with_libqmath),yes) + addons += libqmath lib32qmath lib64qmath libn32qmath + addons += $(if $(findstring amd64,$(biarchx32archs)),libx32qmath) + addons += $(if $(findstring armel,$(biarchhfarchs)),libhfqmath) + addons += $(if $(findstring armhf,$(biarchsfarchs)),libsfqmath) +endif +ifeq ($(with_jit),yes) + addons += jit +endif +ifeq ($(with_libgccjit),yes) + addons += libjit +endif +ifeq ($(with_offload_nvptx),yes) + addons += olnvptx gompnvptx +endif +ifeq ($(with_offload_gcn),yes) + addons += olgcn gompgcn +endif +ifeq ($(with_offload_hsa),yes) + addons += olhsa gomphsa +endif +ifeq ($(with_libcc1),yes) + addons += libcc1 +endif +ifeq ($(with_d),yes) + languages += d + ifeq ($(with_libphobos),yes) + addons += libphobos libn32phobos + addons += $(if $(findstring amd64,$(biarchx32archs)),libx32phobos) + endif + ifeq ($(with_libphobosdev),yes) + addons += libdevphobos libdevn32phobos + addons += $(if $(findstring amd64,$(biarchx32archs)),libdevx32phobos) + endif +endif +ifeq ($(with_go),yes) + addons += ggo godev + ifeq ($(with_libgo),yes) + addons += libggo lib32ggo lib64ggo libn32ggo + addons += $(if $(findstring amd64,$(biarchx32archs)),libx32ggo) + endif +endif +ifeq ($(with_m2),yes) + languages += m2 + addons += libdevgm2 + ifeq ($(with_libgm2),yes) + addons += libgm2 # lib32gm2 lib64gm2 libn32gm2 + #addons += $(if $(findstring amd64,$(biarchx32archs)),libx32gm2) + endif +endif +ifeq ($(with_rs),yes) + languages += rust + #addons += libdevgrs + #ifeq ($(with_libgrs),yes) + # addons += libgrs # lib32gm2 lib64gm2 libn32gm2 + # #addons += $(if $(findstring amd64,$(biarchx32archs)),libx32gm2) + #endif +endif +ifeq ($(with_ada),yes) + languages += ada + addons += libgnat libs # libgmath libnof lib64gnat ssp + ifeq ($(with_gnatsjlj),yes) + addons += adasjlj + endif +endif + + ifneq ($(DEB_CROSS),yes) + endif # DEB_CROSS + ifeq ($(with_separate_libgo),yes) + ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION)) + languages := $(filter-out go,$(languages)) + addons := $(filter-out ggo godev libggo lib64ggo lib32ggo libn32ggo libx32ggo,$(addons)) + endif + ifeq ($(PKGSOURCE),gccgo-$(BASE_VERSION)) + languages = go + addons = ggo godev libggo lib64ggo lib32ggo libn32ggo gccbase multilib + addons += $(if $(findstring amd64,$(biarchx32archs)),libx32ggo) + ifeq ($(with_standalone_go),yes) + addons += libgcc lib4gcc lib32gcc lib64gcc libn32gcc + addons += $(if $(findstring amd64,$(biarchx32archs)),libx32gcc) + addons += $(if $(findstring armel,$(biarchhfarchs)),libhfgcc) + addons += $(if $(findstring armhf,$(biarchsfarchs)),libsfgcc) + ifeq ($(with_libcc1),yes) + addons += libcc1 + endif + endif + endif + endif + ifeq ($(with_standalone_go),yes) + ifeq ($(PKGSOURCE),gccgo-$(BASE_VERSION)) + ctrl_flags += -DSTANDALONEGO + endif + endif + ifeq ($(with_separate_gnat),yes) + ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION)) + languages := $(filter-out ada,$(languages)) + addons := $(filter-out libgnat adasjlj,$(addons)) + endif + ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION)) + languages = ada + addons = gnatbase libgnat + endif + endif + ifeq ($(with_separate_gdc),yes) + ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION)) + languages := $(filter-out d,$(languages)) + endif + ifeq ($(PKGSOURCE),gdc-$(BASE_VERSION)) + languages = d + addons = + ifeq ($(with_libphobos),yes) + addons += libphobos + endif + ifeq ($(with_libphobosdev),yes) + addons += libdevphobos + endif + endif + endif + ifneq ($(DEB_CROSS),yes) # no docs for cross compilers + ifneq ($(GFDL_INVARIANT_FREE),yes) + addons += gfdldoc + endif + endif +endif # not stage + +control-file: + echo "addons: $(addons)"; \ + m4 $(ctrl_flags) \ + -DPV=$(pkg_ver) \ + -DCXX_SO=$(CXX_SONAME) \ + -DGCC_SO=$(GCC_SONAME) \ + -DOBJC_SO=$(OBJC_SONAME) \ + -DFORTRAN_SO=$(FORTRAN_SONAME) \ + -DGNAT_SO=$(GNAT_SONAME) \ + -DGNAT_V=$(GNAT_VERSION) \ + -DPHOBOS_V=$(GPHOBOS_SONAME) \ + -DGM2_V=$(GM2_SONAME) \ + -DGDRUNTIME_V=$(GDRUNTIME_SONAME) \ + -DGOMP_SO=$(GOMP_SONAME) \ + -DITM_SO=$(ITM_SONAME) \ + -DATOMIC_SO=$(ATOMIC_SONAME) \ + -DBTRACE_SO=$(BTRACE_SONAME) \ + -DASAN_SO=$(ASAN_SONAME) \ + -DLSAN_SO=$(LSAN_SONAME) \ + -DTSAN_SO=$(TSAN_SONAME) \ + -DUBSAN_SO=$(UBSAN_SONAME) \ + -DHWASAN_SO=$(HWASAN_SONAME) \ + -DVTV_SO=$(VTV_SONAME) \ + -DQMATH_SO=$(QUADMATH_SONAME) \ + -DSSP_SO=$(SSP_SONAME) \ + -DGO_SO=$(GO_SONAME) \ + -DCC1_SO=$(CC1_SONAME) \ + -DGCCJIT_SO=$(GCCJIT_SONAME) \ + -Denabled_languages="$(languages) $(addons)" \ + -Dada_no_archs="$(ada_no_archs)" \ + -Dfortran_no_archs="$(fortran_no_archs)" \ + -Dgo_no_archs="$(go_no_archs)" \ + -Dd_no_archs="$(d_no_archs)" \ + -Dm2_no_archs="$(m2_no_archs)" \ + -Drs_no_archs="$(rs_no_archs)" \ + -Dlibgc_no_archs="$(libgc_no_archs)" \ + -Dlibphobos_archs="$(phobos_archs)" \ + -Dlibphobos_no_archs="$(phobos_no_archs)" \ + -Dcheck_no_archs="$(check_no_archs)" \ + -Dlocale_no_archs="$(locale_no_archs)" \ + -Dlinux_gnu_archs="$(linux_gnu_archs)" \ + -Dbiarch32_archs="$(strip $(subst /, ,$(biarch32archs)))" \ + -Dbiarch64_archs="$(strip $(subst /, ,$(biarch64archs)))" \ + -Dbiarchn32_archs="$(strip $(subst /, ,$(biarchn32archs)))" \ + -Dbiarchx32_archs="$(strip $(subst /, ,$(biarchx32archs)))" \ + -Dbiarchhf_archs="$(strip $(subst /, ,$(biarchhfarchs)))" \ + -Dbiarchsf_archs="$(strip $(subst /, ,$(biarchsfarchs)))" \ + -Dnvptx_archs="$(nvptx_archs)" \ + -Dgcn_archs="$(gcn_archs)" \ + -Dadd_built_using=$(add_built_using) \ + -DGCC_PORTS_BUILD=$(GCC_PORTS_BUILD) \ + $(if $(findstring build-native, $(build_type)), \ + $(if $(filter $(distrelease),jessie stretch buster xenial bionic focal),,-DLIBGCCPROTECTED=1)) \ + debian/control.m4 > debian/control.tmp2 + uniq debian/control.tmp2 | grep -v '^ *, *$$' | sed -E '/^Build/s/ *, +/, /g;/^ /s/, +/, /g;/^ /s/ *,/,/g; s/ +$$//' \ + $(if $(filter yes, $(with_base_only)), | awk '/^$$/ {if (p) exit; else p=1; } {print}') \ + > debian/control.tmp + rm -f debian/control.tmp2 + [ -e debian/control ] \ + && cmp -s debian/control debian/control.tmp \ + && rm -f debian/control.tmp && exit 0; \ + mv debian/control.tmp debian/control; touch $(control_stamp) + +readme-bugs-file: + m4 -DDIST=$(distribution) -DSRCNAME=$(PKGSOURCE) \ + debian/README.Bugs.m4 > debian/README.Bugs + +copyright-file: + rm -f debian/copyright + if echo $(SOURCE_VERSION) | grep -E ^'[0-9][0-9]*\.[0-9]-[0-9]{8}' ; \ + then SVN_BRANCH="trunk" ; \ + else \ + SVN_BRANCH="gcc-$(subst .,_,$(BASE_VERSION))-branch" ; \ + fi ; \ + sed debian/copyright.in \ + -e "s/@BV@/$(BASE_VERSION)/g" \ + -e "s/@SVN_BRANCH@/$$SVN_BRANCH/g" \ + > debian/copyright + +substvars-file: control-file + rm -f debian/substvars.local.tmp + ( \ + echo 'libgcc:Version=$(DEB_GCC_VERSION)'; \ + echo 'gcc:Version=$(DEB_GCC_VERSION)'; \ + echo 'gcc:EpochVersion=$(DEB_EVERSION)'; \ + echo 'gcc:SoftVersion=$(DEB_GCC_SOFT_VERSION)'; \ + echo 'gdc:Version=$(DEB_GDC_VERSION)'; \ + echo 'gm2:Version=$(DEB_GM2_VERSION)'; \ + echo 'gnat:Version=$(DEB_GNAT_VERSION)'; \ + echo 'gnat:SoftVersion=$(DEB_GNAT_SOFT_VERSION)'; \ + echo 'binutils:Version=$(BINUTILSV)'; \ + echo 'dep:libgcc=$(LIBGCC_DEP)'; \ + echo 'dep:libgccdev=$(LIBGCC_DEV_DEP)'; \ + echo 'dep:libgccbiarch=$(libgcc-sbiarch)'; \ + echo 'dep:libgccbiarchdev=$(libgccbiarchdev)'; \ + echo 'dep:libc=$(LIBC_DEP) (>= $(libc_ver))'; \ + echo 'dep:libcdev=$(LIBC_DEV_DEP)'; \ + echo 'dep:libcbiarch=$(LIBC_BIARCH_DEP)'; \ + echo 'dep:libcbiarchdev=$(LIBC_BIARCH_DEV_DEP)'; \ + echo 'dep:libunwinddev=$(LIBUNWIND_DEV_DEP)'; \ + echo 'dep:libcxxbiarchdev=$(libstdc++biarchdev)'; \ + echo 'dep:libcxxbiarchdbg=$(libstdc++biarchdbg)'; \ + echo 'dep:libgnat=$(LIBGNAT_DEP)'; \ + echo 'base:Breaks=$(BASE_BREAKS)'; \ + echo 'libgcc:Breaks=$(LIBGCC_BREAKS)'; \ + echo 'target:suffix=-$(subst _,-,$(TARGET_ALIAS))'; \ + ) > debian/substvars.local.tmp +ifneq (,$(filter $(DEB_TARGET_ARCH), $(multilib_archs))) + ( \ + echo 'gcc:multilib=gcc-$(BASE_VERSION)-multilib$(TS)'; \ + echo 'gxx:multilib=g++-$(BASE_VERSION)-multilib$(TS)'; \ + echo 'gobjc:multilib=gobjc-$(BASE_VERSION)-multilib$(TS)'; \ + echo 'gobjcxx:multilib=gobjc++-$(BASE_VERSION)-multilib$(TS)'; \ + echo 'gfortran:multilib=gfortran-$(BASE_VERSION)-multilib$(TS)'; \ + ) >> debian/substvars.local.tmp +endif +ifeq ($(with_gold),yes) + echo 'dep:gold=binutils-gold (>= $(BINUTILSV))' \ + >> debian/substvars.local.tmp +endif +ifeq ($(with_libssp),yes) + echo 'dep:libssp=libssp$(SSP_SONAME)$(LS)$(AQ) (>= $${gcc:Version})' \ + >> debian/substvars.local.tmp +endif +ifeq ($(with_gomp),yes) + echo 'dep:libgomp=libgomp$(GOMP_SONAME)$(LS)$(AQ) (>= $${gcc:Version})' \ + >> debian/substvars.local.tmp +endif +ifeq ($(with_itm),yes) + echo 'dep:libitm=libitm$(ITM_SONAME)$(LS)$(AQ) (>= $${gcc:Version})' \ + >> debian/substvars.local.tmp +endif +ifeq ($(with_atomic),yes) + echo 'dep:libatomic=libatomic$(ATOMIC_SONAME)$(LS)$(AQ) (>= $${gcc:Version})' \ + >> debian/substvars.local.tmp +endif +ifeq ($(with_libbacktrace),yes) + echo 'dep:libbacktrace=libbtrace$(BTRACE_SONAME)$(LS)$(AQ) (>= $${gcc:Version})' \ + >> debian/substvars.local.tmp +endif +ifeq ($(with_asan),yes) + echo 'dep:libasan=libasan$(ASAN_SONAME)$(LS)$(AQ) (>= $${gcc:Version})' \ + >> debian/substvars.local.tmp +endif +ifeq ($(with_lsan),yes) + echo 'dep:liblsan=liblsan$(LSAN_SONAME)$(LS)$(AQ) (>= $${gcc:Version})' \ + >> debian/substvars.local.tmp +endif +ifeq ($(with_tsan),yes) + echo 'dep:libtsan=libtsan$(TSAN_SONAME)$(LS)$(AQ) (>= $${gcc:Version})' \ + >> debian/substvars.local.tmp +endif +ifeq ($(with_ubsan),yes) + echo 'dep:libubsan=libubsan$(UBSAN_SONAME)$(LS)$(AQ) (>= $${gcc:Version})' \ + >> debian/substvars.local.tmp +endif +ifeq ($(with_hwasan),yes) + echo 'dep:libhwasan=libhwasan$(HWASAN_SONAME)$(LS)$(AQ) (>= $${gcc:Version})' \ + >> debian/substvars.local.tmp +endif +ifeq ($(with_vtv),yes) + echo 'dep:libvtv=libvtv$(VTV_SONAME)$(LS)$(AQ) (>= $${gcc:Version})' \ + >> debian/substvars.local.tmp +endif +ifeq ($(with_qmath),yes) + echo 'dep:libqmath=libquadmath$(QUADMATH_SONAME)$(LS)$(AQ) (>= $${gcc:Version})' \ + >> debian/substvars.local.tmp +endif +ifeq ($(distribution),Debian) + echo 'dep:libx32z=$(if $(filter $(distribution), Debian),,libx32z1-dev)' \ + >> debian/substvars.local.tmp +endif +ifeq ($(multilib),yes) + echo 'dep:libgfortranbiarchdev=$(libgfortranbiarchdev)' \ + >> debian/substvars.local.tmp + echo 'dep:libobjcbiarchdev=$(libobjcbiarchdev)' \ + >> debian/substvars.local.tmp + ifeq ($(with_phobos),yes) + echo 'dep:libphobosbiarchdev=$(libgphobosbiarchdev)' \ + >> debian/substvars.local.tmp + endif + ifeq ($(with_libssp),yes) + echo 'dep:libsspbiarch=$(libsspbiarch)' \ + >> debian/substvars.local.tmp + endif + ifeq ($(with_gomp),yes) + echo 'dep:libgompbiarch=$(libgompbiarch)' \ + >> debian/substvars.local.tmp + endif + ifeq ($(with_itm),yes) + echo 'dep:libitmbiarch=$(libitmbiarch)' \ + >> debian/substvars.local.tmp + endif + ifeq ($(with_atomic),yes) + echo 'dep:libatomicbiarch=$(libatomicbiarch)' \ + >> debian/substvars.local.tmp + endif + ifeq ($(with_libbacktrace),yes) + echo 'dep:libbtracebiarch=$(libbtracebiarch)' \ + >> debian/substvars.local.tmp + endif + ifeq ($(with_asan),yes) + echo 'dep:libasanbiarch=$(libasanbiarch)' \ + >> debian/substvars.local.tmp + endif + ifeq ($(with_lsan),yes) + #echo 'dep:liblsanbiarch=$(liblsanbiarch)' \ + # >> debian/substvars.local.tmp + endif + ifeq ($(with_tsan),yes) + #echo 'dep:libtsanbiarch=$(libtsanbiarch)' \ + # >> debian/substvars.local.tmp + endif + ifeq ($(with_ubsan),yes) + echo 'dep:libubsanbiarch=$(libubsanbiarch)' \ + >> debian/substvars.local.tmp + endif + ifeq ($(with_hwasan),yes) + # amd64 hwasan not available for 32/x32 + ifeq ($(DEB_TARGET_ARCH),amd64) + else + echo 'dep:libhwasanbiarch=$(libhwasanbiarch)' \ + >> debian/substvars.local.tmp + endif + endif + ifeq ($(with_vtv),yes) + echo 'dep:libvtvbiarch=$(libvtvbiarch)' \ + >> debian/substvars.local.tmp + endif + ifeq ($(with_qmath),yes) + echo 'dep:libqmathbiarch=$(libquadmathbiarch)' \ + >> debian/substvars.local.tmp + endif + ifeq ($(with_go),yes) + echo 'dep:libgobiarchdev=$(libgobiarchdev)' \ + >> debian/substvars.local.tmp + echo 'dep:libgobiarch=$(libgobiarch)' \ + >> debian/substvars.local.tmp + endif +endif +ifeq ($(DEB_CROSS),yes) + echo 'dep:gdccross=gdc$(pkg_ver) (>= $(DEB_GCC_SOFT_VERSION))' \ + >> debian/substvars.local.tmp +endif +ifeq ($(with_phobos),yes) + echo 'dep:phobosdev=libgphobos$(pkg_ver)-dev$(LS)$(AQ) (>= $(DEB_GCC_SOFT_VERSION))' \ + >> debian/substvars.local.tmp + ifeq ($(DEB_CROSS),yes) + : # FIXME: make the cross gdc aware of both include paths + echo 'dep:gdccross=gdc$(pkg_ver) (>= $(DEB_GCC_SOFT_VERSION))' \ + >> debian/substvars.local.tmp + endif + ifeq ($(with_libphobosdev),yes) + echo 'dep:libphobosbiarchdev=$(libgphobosbiarchdev)' \ + >> debian/substvars.local.tmp + echo 'dep:libphobosbiarch=$(libgphobosbiarch)' \ + >> debian/substvars.local.tmp + endif +endif +ifeq ($(with_cc1),yes) + ifneq (,$(findstring build-cross, $(build_type))) + echo 'dep:libcc1=libcc1-$(CC1_SONAME) (>= $${gcc:SoftVersion})' \ + >> debian/substvars.local.tmp + else + echo 'dep:libcc1=libcc1-$(CC1_SONAME) (>= $${gcc:Version})' \ + >> debian/substvars.local.tmp + endif +endif +ifeq ($(DEB_HOST_ARCH),hppa) + echo 'dep:prctl=prctl' >> debian/substvars.local.tmp +endif +ifeq ($(derivative)-$(DEB_HOST_ARCH),Debian-amd64) + echo 'confl:lib32=libc6-i386 (<< 2.9-22)' >> debian/substvars.local.tmp +endif +ifeq ($(with_multiarch_lib),yes) + echo 'multiarch:breaks=gcc-4.3 (<< 4.3.6-1), gcc-4.4 (<< 4.4.6-4), gcc-4.5 (<< 4.5.3-2)' >> debian/substvars.local.tmp +endif + echo 'golang:Conflicts=golang-go (<< 2:1.3.3-1ubuntu2)' >> debian/substvars.local.tmp +ifeq ($(add_built_using),yes) + echo "Built-Using=$(shell dpkg-query -f '$${source:Package} (= $${source:Version}), ' -W gcc$(pkg_ver)-source)" \ + >> debian/substvars.local.tmp +endif + v=`sed -n '/^#define MOD_VERSION/s/.* "\([0-9]*\)"/\1/p' \ + $(srcdir)/gcc/fortran/module.cc`; \ + echo "fortran:mod-version=gfortran-mod-$$v" >> debian/substvars.local.tmp + + [ -e debian/substvars.local ] \ + && cmp -s debian/substvars.local debian/substvars.local.tmp \ + && rm -f debian/substvars.local.tmp && exit 0; \ + mv debian/substvars.local.tmp debian/substvars.local; \ + touch $(control_stamp) + +parameters-file: + rm -f debian/rules.parameters.tmp + ( \ + echo '# configuration parameters taken from upstream source files'; \ + echo 'GCC_VERSION := $(GCC_VERSION)'; \ + echo 'NEXT_GCC_VERSION := $(NEXT_GCC_VERSION)'; \ + echo 'BASE_VERSION := $(BASE_VERSION)'; \ + echo 'SOURCE_VERSION := $(SOURCE_VERSION)'; \ + echo 'DEB_VERSION := $(DEB_VERSION)'; \ + echo 'DEB_EVERSION := $(DEB_EVERSION)'; \ + echo 'DEB_GDC_VERSION := $(DEB_GDC_VERSION)'; \ + echo 'DEB_SOVERSION := $(DEB_SOVERSION)'; \ + echo 'DEB_SOEVERSION := $(DEB_SOEVERSION)'; \ + echo 'DEB_LIBGCC_SOVERSION := $(DEB_LIBGCC_SOVERSION)'; \ + echo 'DEB_LIBGCC_VERSION := $(DEB_LIBGCC_VERSION)'; \ + echo 'DEB_STDCXX_SOVERSION := $(DEB_STDCXX_SOVERSION)'; \ + echo 'DEB_GOMP_SOVERSION := $(DEB_GOMP_SOVERSION)'; \ + echo 'GCC_SONAME := $(GCC_SONAME)'; \ + echo 'CXX_SONAME := $(CXX_SONAME)'; \ + echo 'FORTRAN_SONAME := $(FORTRAN_SONAME)'; \ + echo 'OBJC_SONAME := $(OBJC_SONAME)'; \ + echo 'GDC_VERSION := $(GDC_VERSION)'; \ + echo 'GNAT_VERSION := $(GNAT_VERSION)'; \ + echo 'GNAT_SONAME := $(GNAT_SONAME)'; \ + echo 'FFI_SONAME := $(FFI_SONAME)'; \ + echo 'SSP_SONAME := $(SSP_SONAME)'; \ + echo 'GOMP_SONAME := $(GOMP_SONAME)'; \ + echo 'ITM_SONAME := $(ITM_SONAME)'; \ + echo 'ATOMIC_SONAME := $(ATOMIC_SONAME)'; \ + echo 'BTRACE_SONAME := $(BTRACE_SONAME)'; \ + echo 'ASAN_SONAME := $(ASAN_SONAME)'; \ + echo 'LSAN_SONAME := $(LSAN_SONAME)'; \ + echo 'TSAN_SONAME := $(TSAN_SONAME)'; \ + echo 'UBSAN_SONAME := $(UBSAN_SONAME)'; \ + echo 'HWASAN_SONAME := $(HWASAN_SONAME)'; \ + echo 'VTV_SONAME := $(VTV_SONAME)'; \ + echo 'QUADMATH_SONAME := $(QUADMATH_SONAME)'; \ + echo 'GO_SONAME := $(GO_SONAME)'; \ + echo 'CC1_SONAME := $(CC1_SONAME)'; \ + echo 'GCCJIT_SONAME := $(GCCJIT_SONAME)'; \ + echo 'GPHOBOS_SONAME := $(GPHOBOS_SONAME)'; \ + echo 'GDRUNTIME_SONAME := $(GDRUNTIME_SONAME)'; \ + echo 'GM2_SONAME := $(GM2_SONAME)'; \ + echo 'LIBC_DEP := $(LIBC_DEP)'; \ + ) > debian/rules.parameters.tmp + [ -e debian/rules.parameters ] \ + && cmp -s debian/rules.parameters debian/rules.parameters.tmp \ + && rm -f debian/rules.parameters.tmp && exit 0; \ + mv debian/rules.parameters.tmp debian/rules.parameters; \ + touch $(control_stamp) + +symbols-files: control-file +ifeq ($(DEB_CROSS),yes) + ifneq ($(DEB_STAGE),rtlibs) + test -n "$(LS)" + set -e; \ + for p in $$(dh_listpackages -i | grep '^lib'); do \ + p=$${p%$(LS)}; \ + if [ -f debian/$$p.symbols.$(DEB_TARGET_ARCH) ]; then \ + f=debian/$$p.symbols.$(DEB_TARGET_ARCH); \ + elif [ -f debian/$$p.symbols ]; then \ + f=debian/$$p.symbols; \ + else \ + continue; \ + fi; \ + link=debian/$$p$(LS).symbols; \ + if [ -L $$link ]; then \ + echo >&2 "removing left over symbols file link: $$link"; \ + rm -f $$link; \ + fi; \ + ln -s $$f $$link; \ + done + endif +endif + +versioned-files: + fs=`echo debian/*BV* debian/*CXX* debian/*LC* | sort -u`; \ + for f in $$fs; do \ + [ -f $$f ] || echo "CANNOT FIND $$f"; \ + [ -f $$f ] || continue; \ + if [ -z "$(DEB_CROSS)" ]; then case "$$f" in *-CR*) continue; esac; fi; \ + f2=$$(echo $$f \ + | sed 's/BV/$(BASE_VERSION)/;s/CXX/$(CXX_SONAME)/;s/LC/$(GCC_SONAME)/;s/-CRB/$(cross_bin_arch)/;s/\.in$$//'); \ + sed -e 's/@BV@/$(BASE_VERSION)/g' \ + -e 's/@CXX@/$(CXX_SONAME)/g' \ + -e 's/@LC@/$(GCC_SONAME)/g' \ + -e 's/@SRC@/$(PKGSOURCE)/g' \ + -e 's/@GFDL@/$(if $(filter yes,$(GFDL_INVARIANT_FREE)),#)/g' \ + -e 's/@gcc_priority@/$(subst .,,$(BASE_VERSION))/g' \ + -e 's/@TARGET@/$(DEB_TARGET_GNU_TYPE)/g' \ + -e 's/@TARGET_QUAL@/$(TARGET_QUAL)/g' \ + $$f > $$f2; \ + touch -r $$f $$f2; \ + done + for t in ar nm ranlib; do \ + sed "s/@BV@/$(BASE_VERSION)/g;s/@TOOL@/$$t/g" \ + debian/gcc-XX-BV.1 > debian/gcc-$$t-$(BASE_VERSION).1; \ + done + +# don't encode versioned build dependencies in the control file, but check +# these here instead. +check-versions: + v=$$(dpkg-query -l dpkg-dev | awk '/^.i/ {print $$3}'); \ + if dpkg --compare-versions "$$v" lt "$(DPKGV)"; then \ + echo "dpkg-dev (>= $(DPKGV)) required, found $$v"; \ + exit 1; \ + fi + v=$$(dpkg-query -l binutils binutils-multiarch 2>/dev/null | awk '/^.i/ {print $$3;exit}'); \ + if dpkg --compare-versions "$$v" lt "$(BINUTILSBDV)"; then \ + echo "binutils (>= $(BINUTILSBDV)) required, found $$v"; \ + exit 1; \ + fi + +.PRECIOUS: $(stampdir)/%-stamp diff --git a/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-additional-packaging/debian/rules.parameters.txt b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-additional-packaging/debian/rules.parameters.txt new file mode 100644 index 0000000000..acc6bd8c08 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-additional-packaging/debian/rules.parameters.txt @@ -0,0 +1,41 @@ +# configuration parameters taken from upstream source files +GCC_VERSION := 13.3.0 +NEXT_GCC_VERSION := 13.3.1 +BASE_VERSION := 13 +SOURCE_VERSION := 13.3.0-6ubuntu2~24.04 +DEB_VERSION := 13.3.0-6ubuntu2~24.04 +DEB_EVERSION := 1:13.3.0-6ubuntu2~24.04 +DEB_GDC_VERSION := 13.3.0-6ubuntu2~24.04 +DEB_SOVERSION := 5 +DEB_SOEVERSION := 1:5 +DEB_LIBGCC_SOVERSION := +DEB_LIBGCC_VERSION := 13.3.0-6ubuntu2~24.04 +DEB_STDCXX_SOVERSION := 5 +DEB_GOMP_SOVERSION := 5 +GCC_SONAME := 1 +CXX_SONAME := 6 +FORTRAN_SONAME := 5 +OBJC_SONAME := 4 +GDC_VERSION := 13 +GNAT_VERSION := 13 +GNAT_SONAME := 13 +FFI_SONAME := 9 +SSP_SONAME := 0 +GOMP_SONAME := 1 +ITM_SONAME := 1 +ATOMIC_SONAME := 1 +BTRACE_SONAME := 1 +ASAN_SONAME := 8 +LSAN_SONAME := 0 +TSAN_SONAME := 2 +UBSAN_SONAME := 1 +HWASAN_SONAME := 0 +VTV_SONAME := 0 +QUADMATH_SONAME := 0 +GO_SONAME := 22 +CC1_SONAME := 0 +GCCJIT_SONAME := 0 +GPHOBOS_SONAME := 4 +GDRUNTIME_SONAME := 4 +GM2_SONAME := 18 +LIBC_DEP := libc6 diff --git a/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-additional-packaging/debian/rules.sonames.txt b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-additional-packaging/debian/rules.sonames.txt new file mode 100644 index 0000000000..1e12c6d71d --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-additional-packaging/debian/rules.sonames.txt @@ -0,0 +1,94 @@ +ifneq ($(vafilt_defined),1) + $(error rules.defs must be included before rules.sonames) +endif + +ifeq (,$(wildcard debian/soname-cache)) + SONAME_VARS := $(shell \ + cache=debian/soname-cache; \ + rm -f $$cache; \ + v=`awk -F= '/^libtool_VERSION/ {split($$2,v,":"); print v[1]}' \ + $(srcdir)/libstdc++-v3/acinclude.m4`; \ + echo CXX_SONAME=$$v >> $$cache; \ + v=`awk -F= '/^VERSION/ {split($$2,v,":"); print v[1]}' \ + $(srcdir)/libobjc/configure.ac`; \ + echo OBJC_SONAME=$$v >> $$cache; \ + v=`tail -1 $(srcdir)/libgfortran/libtool-version | cut -d: -f1`; \ + echo FORTRAN_SONAME=$$v >> $$cache; \ + v=`tail -1 $(srcdir)/libssp/libtool-version | cut -d: -f1`; \ + echo SSP_SONAME=$$v >> $$cache; \ + v=`tail -1 $(srcdir)/libffi/libtool-version | cut -d: -f1`; \ + echo FFI_SONAME=$$v >> $$cache; \ + v=`awk -F= '/^libtool_VERSION/ {split($$2,v,":"); print v[1]}' \ + $(srcdir)/libgomp/configure.ac`; \ + echo GOMP_SONAME=$$v >> $$cache; \ + v=`tail -1 $(srcdir)/libsanitizer/asan/libtool-version | cut -d: -f1`; \ + echo ASAN_SONAME=$$v >> $$cache; \ + v=`tail -1 $(srcdir)/libsanitizer/lsan/libtool-version | cut -d: -f1`; \ + echo LSAN_SONAME=$$v >> $$cache; \ + v=`tail -1 $(srcdir)/libsanitizer/tsan/libtool-version | cut -d: -f1`; \ + echo TSAN_SONAME=$$v >> $$cache; \ + v=`tail -1 $(srcdir)/libsanitizer/ubsan/libtool-version | cut -d: -f1`; \ + echo UBSAN_SONAME=$$v >> $$cache; \ + v=`tail -1 $(srcdir)/libsanitizer/hwasan/libtool-version | cut -d: -f1`; \ + echo HWASAN_SONAME=$$v >> $$cache; \ + v=`awk -F= '/^libtool_VERSION/ {split($$2,v,":"); print v[1]}' \ + $(srcdir)/libatomic/configure.ac`; \ + v=1; \ + echo ATOMIC_SONAME=$$v >> $$cache; \ + v=`awk -F= '/^libtool_VERSION/ {split($$2,v,":"); print v[1]}' \ + $(srcdir)/libbacktrace/configure.ac`; \ + echo BTRACE_SONAME=$$v >> $$cache; \ + v=`tail -1 $(srcdir)/libquadmath/libtool-version | cut -d: -f1`; \ + echo QUADMATH_SONAME=$$v >> $$cache; \ + v=`grep '[^_]Library_Version.*:' $(srcdir)/gcc/ada/gnatvsn.ads \ + | sed -e 's/.*"\([^"]*\)".*/\1/'`; \ + echo GNAT_SONAME=$$v >> $$cache; \ + v=`awk -F= '/^libtool_VERSION/ {split($$2,v,":"); print v[1]}' \ + $(srcdir)/libgo/configure.ac`; \ + echo GO_SONAME=$$v >> $$cache; \ + echo ITM_SONAME=1 >> $$cache; \ + v=`awk -F= '/^libtool_VERSION/ {split($$2,v,":"); print v[1]}' \ + $(srcdir)/libvtv/configure.ac`; \ + v=0; \ + echo VTV_SONAME=$$v >> $$cache; \ + echo CC1_SONAME=0 >> $$cache; \ + echo GCCJIT_SONAME=0 >> $$cache; \ + v=`awk -F= '/^libtool_VERSION/ {split($$2,v,":"); print v[1]}' \ + $(srcdir)/libphobos/configure.ac`; \ + echo GPHOBOS_SONAME=$$v >> $$cache; \ + echo GDRUNTIME_SONAME=$$v >> $$cache; \ + v=`awk -F= '/^libtool_VERSION/ {split($$2,v,":"); print v[1]}' \ + $(srcdir)/libgm2/configure.ac`; \ + echo GM2_SONAME=$$v >> $$cache; \ + cat $$cache) +else + SONAME_VARS := $(shell cat debian/soname-cache) +endif +CXX_SONAME = $(call vafilt,$(SONAME_VARS),CXX_SONAME) +OBJC_SONAME = $(call vafilt,$(SONAME_VARS),OBJC_SONAME) +FORTRAN_SONAME = $(call vafilt,$(SONAME_VARS),FORTRAN_SONAME) +SSP_SONAME = $(call vafilt,$(SONAME_VARS),SSP_SONAME) +FFI_SONAME = $(call vafilt,$(SONAME_VARS),FFI_SONAME) +GOMP_SONAME = $(call vafilt,$(SONAME_VARS),GOMP_SONAME) +ATOMIC_SONAME = $(call vafilt,$(SONAME_VARS),ATOMIC_SONAME) +BTRACE_SONAME = $(call vafilt,$(SONAME_VARS),BTRACE_SONAME) +ASAN_SONAME = $(call vafilt,$(SONAME_VARS),ASAN_SONAME) +LSAN_SONAME = $(call vafilt,$(SONAME_VARS),LSAN_SONAME) +TSAN_SONAME = $(call vafilt,$(SONAME_VARS),TSAN_SONAME) +UBSAN_SONAME = $(call vafilt,$(SONAME_VARS),UBSAN_SONAME) +VTV_SONAME = $(call vafilt,$(SONAME_VARS),VTV_SONAME) +CILKRTS_SONAME = $(call vafilt,$(SONAME_VARS),CILKRTS_SONAME) +QUADMATH_SONAME = $(call vafilt,$(SONAME_VARS),QUADMATH_SONAME) +GNAT_SONAME = $(call vafilt,$(SONAME_VARS),GNAT_SONAME) +GO_SONAME = $(call vafilt,$(SONAME_VARS),GO_SONAME) +ITM_SONAME = $(call vafilt,$(SONAME_VARS),ITM_SONAME) +CC1_SONAME = $(call vafilt,$(SONAME_VARS),CC1_SONAME) +GCCJIT_SONAME = $(call vafilt,$(SONAME_VARS),GCCJIT_SONAME) +GPHOBOS_SONAME = $(call vafilt,$(SONAME_VARS),GPHOBOS_SONAME) +GDRUNTIME_SONAME= $(call vafilt,$(SONAME_VARS),GDRUNTIME_SONAME) +GM2_SONAME = $(call vafilt,$(SONAME_VARS),GM2_SONAME) +HWASAN_SONAME = $(call vafilt,$(SONAME_VARS),HWASAN_SONAME) + +# alias +GFORTRAN_SONAME = $(FORTRAN_SONAME) +STDC++_SONAME = $(CXX_SONAME) diff --git a/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-base-selected/gcc/Makefile.in.txt b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-base-selected/gcc/Makefile.in.txt new file mode 100644 index 0000000000..775aaa1b3c --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-base-selected/gcc/Makefile.in.txt @@ -0,0 +1,4458 @@ +# Makefile for GNU Compiler Collection +# Run 'configure' to generate Makefile from Makefile.in + +# Copyright (C) 1987-2023 Free Software Foundation, Inc. + +#This file is part of GCC. + +#GCC is free software; you can redistribute it and/or modify +#it under the terms of the GNU General Public License as published by +#the Free Software Foundation; either version 3, or (at your option) +#any later version. + +#GCC is distributed in the hope that it will be useful, +#but WITHOUT ANY WARRANTY; without even the implied warranty of +#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +#GNU General Public License for more details. + +#You should have received a copy of the GNU General Public License +#along with GCC; see the file COPYING3. If not see +#. + +# The targets for external use include: +# all, doc, install, install-cross, install-cross-rest, install-strip, +# uninstall, TAGS, mostlyclean, clean, distclean, maintainer-clean. + +# This is the default target. +# Set by autoconf to "all.internal" for a native build, or +# "all.cross" to build a cross compiler. +all: @ALL@ + +# Depend on this to specify a phony target portably. +force: + +# This tells GNU make version 3 not to export the variables +# defined in this file into the environment (and thus recursive makes). +.NOEXPORT: +# And this tells it not to automatically pass command-line variables +# to recursive makes. +MAKEOVERRIDES = + +# Suppress smart makes who think they know how to automake yacc and flex file +.y.c: +.l.c: + +# The only suffixes we want for implicit rules are .c and .o, so clear +# the list and add them. This speeds up GNU Make, and allows -r to work. +# For i18n support, we also need .gmo, .po, .pox. +# This must come before the language makefile fragments to allow them to +# add suffixes and rules of their own. +.SUFFIXES: +.SUFFIXES: .c .cc .o .po .pox .gmo + +# ------------------------------- +# Standard autoconf-set variables +# ------------------------------- + +build=@build@ +host=@host@ +host_noncanonical=@host_noncanonical@ +host_os=@host_os@ +target=@target@ +target_noncanonical:=@target_noncanonical@ + +# Normally identical to target_noncanonical, except for compilers built +# as accelerator targets. +real_target_noncanonical:=@real_target_noncanonical@ +accel_dir_suffix = @accel_dir_suffix@ + +# Sed command to transform gcc to installed name. +program_transform_name := @program_transform_name@ + +# ----------------------------- +# Directories used during build +# ----------------------------- + +# Directory where sources are, from where we are. +srcdir = @srcdir@ +gcc_docdir = @srcdir@/doc + +# Directory where sources are, absolute. +abs_srcdir = @abs_srcdir@ +abs_docdir = @abs_srcdir@/doc + +# Directory where sources are, relative to here. +top_srcdir = @top_srcdir@ + +# Top build directory for this package, relative to here. +top_builddir = . + +# The absolute path to the current directory. +objdir := $(shell pwd) + +host_subdir=@host_subdir@ +build_subdir=@build_subdir@ +target_subdir=@target_subdir@ +build_libsubdir=@build_libsubdir@ + +# Top build directory for the "Cygnus tree", relative to $(top_builddir). +ifeq ($(host_subdir),.) +toplevel_builddir := .. +else +toplevel_builddir := ../.. +endif + +build_objdir := $(toplevel_builddir)/$(build_subdir) +build_libobjdir := $(toplevel_builddir)/$(build_libsubdir) +target_objdir := $(toplevel_builddir)/$(target_subdir) + +# -------- +# Defined vpaths +# -------- + +# Directory where sources are, from where we are. +VPATH = @srcdir@ + +# We define a vpath for the sources of the .texi files here because they +# are split between multiple directories and we would rather use one implicit +# pattern rule for everything. +# This vpath could be extended within the Make-lang fragments. + +vpath %.texi $(gcc_docdir) +vpath %.texi $(gcc_docdir)/include + +# -------- +# UNSORTED +# -------- + +# Extra flags to pass to indicate cross compilation, which +# might be used or tested by Make-lang fragments. +CROSS=@CROSS@ + +# Variables that exist for you to override. +# See below for how to change them for certain systems. + +# List of language subdirectories. +SUBDIRS =@subdirs@ build + +# Selection of languages to be made. +CONFIG_LANGUAGES = @all_selected_languages@ +LANGUAGES = c $(CONFIG_LANGUAGES) +ifeq (@enable_gcov@,yes) +LANGUAGES += gcov$(exeext) gcov-dump$(exeext) gcov-tool$(exeext) +endif + +# Default values for variables overridden in Makefile fragments. +# CFLAGS is for the user to override to, e.g., do a cross build with -O2. +# TCFLAGS is used for compilations with the GCC just built. +# T_CFLAGS is used for all compilations and is overridden by t-* files. +# TFLAGS is also for the user to override, passed down from the top-level +# Makefile. It is used for all compilations. +T_CFLAGS = +TCFLAGS = +TFLAGS = +CFLAGS = @CFLAGS@ +CXXFLAGS = @CXXFLAGS@ +LDFLAGS = @LDFLAGS@ + +# Should we build position-independent host code? +PICFLAG = @PICFLAG@ + +# Flags to determine code coverage. When coverage is disabled, this will +# contain the optimization flags, as you normally want code coverage +# without optimization. +COVERAGE_FLAGS = @coverage_flags@ +coverageexts = .{gcda,gcno} + +# The warning flags are separate from CFLAGS because people tend to +# override optimization flags and we'd like them to still have warnings +# turned on. These flags are also used to pass other stage dependent +# flags from configure. The user is free to explicitly turn these flags +# off if they wish. +# LOOSE_WARN are the warning flags to use when compiling something +# which is only compiled with gcc, such as libgcc. +# C_LOOSE_WARN is similar, but with C-only warnings. +# STRICT_WARN are the additional warning flags to +# apply to the back end and some front ends, which may be compiled +# with other compilers. +# C_STRICT_WARN is similar, with C-only warnings. +LOOSE_WARN = @loose_warn@ +C_LOOSE_WARN = @c_loose_warn@ +STRICT_WARN = @strict_warn@ +C_STRICT_WARN = @c_strict_warn@ + +# This is set by --enable-checking. The idea is to catch forgotten +# "extern" tags in header files. +NOCOMMON_FLAG = @nocommon_flag@ + +NOEXCEPTION_FLAGS = @noexception_flags@ + +ALIASING_FLAGS = @aliasing_flags@ + +# This is set by --disable-maintainer-mode (default) to "#" +# FIXME: 'MAINT' will always be set to an empty string, no matter if +# --disable-maintainer-mode is used or not. This is because the +# following will expand to "MAINT := " in maintainer mode, and to +# "MAINT := #" in non-maintainer mode, but because '#' starts a comment, +# they mean exactly the same thing for make. +MAINT := @MAINT@ + +# The following provides the variable ENABLE_MAINTAINER_RULES that can +# be used in language Make-lang.in makefile fragments to enable +# maintainer rules. So, ENABLE_MAINTAINER_RULES is 'true' in +# maintainer mode, and '' otherwise. +@MAINT@ ENABLE_MAINTAINER_RULES = true + +# These are set by --enable-checking=valgrind. +RUN_GEN = @valgrind_command@ +VALGRIND_DRIVER_DEFINES = @valgrind_path_defines@ + +# This is how we control whether or not the additional warnings are applied. +.-warn = $(STRICT_WARN) +build-warn = $(STRICT_WARN) +rtl-ssa-warn = $(STRICT_WARN) +GCC_WARN_CFLAGS = $(LOOSE_WARN) $(C_LOOSE_WARN) $($(@D)-warn) $(if $(filter-out $(STRICT_WARN),$($(@D)-warn)),,$(C_STRICT_WARN)) $(NOCOMMON_FLAG) $($@-warn) +GCC_WARN_CXXFLAGS = $(LOOSE_WARN) $($(@D)-warn) $(NOCOMMON_FLAG) $($@-warn) + +# These files are to have specific diagnostics suppressed, or are not to +# be subject to -Werror: +# flex output may yield harmless "no previous prototype" warnings +build/gengtype-lex.o-warn = -Wno-error +gengtype-lex.o-warn = -Wno-error +libgcov-util.o-warn = -Wno-error +libgcov-driver-tool.o-warn = -Wno-error +libgcov-merge-tool.o-warn = -Wno-error +gimple-match.o-warn = -Wno-unused +generic-match.o-warn = -Wno-unused +dfp.o-warn = -Wno-strict-aliasing + +# All warnings have to be shut off in stage1 if the compiler used then +# isn't gcc; configure determines that. WARN_CFLAGS will be either +# $(GCC_WARN_CFLAGS), or nothing. Similarly, WARN_CXXFLAGS will be +# either $(GCC_WARN_CXXFLAGS), or nothing. +WARN_CFLAGS = @warn_cflags@ +WARN_CXXFLAGS = @warn_cxxflags@ + +CPPFLAGS = @CPPFLAGS@ + +AWK = @AWK@ +CC = @CC@ +CXX = @CXX@ +BISON = @BISON@ +BISONFLAGS = +FLEX = @FLEX@ +FLEXFLAGS = +AR = @AR@ +AR_FLAGS = rc +NM = @NM@ +RANLIB = @RANLIB@ +RANLIB_FLAGS = @ranlib_flags@ + +# Libraries to use on the host. +HOST_LIBS = @HOST_LIBS@ + +# The name of the compiler to use. +COMPILER = $(CXX) +COMPILER_FLAGS = $(CXXFLAGS) +# If HOST_LIBS is set, then the user is controlling the libraries to +# link against. In that case, link with $(CC) so that the -lstdc++ +# library is not introduced. If HOST_LIBS is not set, link with +# $(CXX) to pick up -lstdc++. +ifeq ($(HOST_LIBS),) +LINKER = $(CXX) +LINKER_FLAGS = $(CXXFLAGS) +else +LINKER = $(CC) +LINKER_FLAGS = $(CFLAGS) +endif + +# Enable Intel CET on Intel CET enabled host if needed. +CET_HOST_FLAGS = @CET_HOST_FLAGS@ +COMPILER += $(CET_HOST_FLAGS) + +NO_PIE_CFLAGS = @NO_PIE_CFLAGS@ +NO_PIE_FLAG = @NO_PIE_FLAG@ +DO_LINK_MUTEX = @DO_LINK_MUTEX@ + +# We don't want to compile the compilers with -fPIE, it make PCH fail. +COMPILER += $(NO_PIE_CFLAGS) + +# Link with -no-pie since we compile the compiler with -fno-PIE. +LINKER += $(NO_PIE_FLAG) + +# Like LINKER, but use a mutex for serializing front end links. +ifeq (@DO_LINK_MUTEX@,true) +LLINKER = $(SHELL) $(srcdir)/lock-and-run.sh linkfe.lck $(LINKER) +else +LLINKER = $(LINKER) +endif + +THIN_ARCHIVE_SUPPORT = @thin_archive_support@ + +USE_THIN_ARCHIVES = no +ifeq ($(THIN_ARCHIVE_SUPPORT),yes) +ifeq ($(AR_FLAGS),rc) +ifeq ($(RANLIB_FLAGS),) +USE_THIN_ARCHIVES = yes +endif +endif +endif + +# ------------------------------------------- +# Programs which operate on the build machine +# ------------------------------------------- + +SHELL = @SHELL@ +# pwd command to use. Allow user to override default by setting PWDCMD in +# the environment to account for automounters. The make variable must not +# be called PWDCMD, otherwise the value set here is passed to make +# subprocesses and overrides the setting from the user's environment. +# Don't use PWD since it is a common shell environment variable and we +# don't want to corrupt it. +PWD_COMMAND = $${PWDCMD-pwd} +# on sysV, define this as cp. +INSTALL = @INSTALL@ +# Some systems may be missing symbolic links, regular links, or both. +# Allow configure to check this and use "ln -s", "ln", or "cp" as appropriate. +LN=@LN@ +LN_S=@LN_S@ +# These permit overriding just for certain files. +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL@ +install_sh = $(SHELL) $(srcdir)/../install-sh +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +MAKEINFO = @MAKEINFO@ +MAKEINFOFLAGS = --no-split +TEXI2DVI = texi2dvi +TEXI2PDF = texi2pdf +TEXI2HTML = $(MAKEINFO) --html +TEXI2POD = perl $(srcdir)/../contrib/texi2pod.pl +POD2MAN = pod2man --center="GNU" --release="gcc-$(version)" --date=$(shell sed 's/\(....\)\(..\)\(..\)/\1-\2-\3/' <$(DATESTAMP)) +# Some versions of `touch' (such as the version on Solaris 2.8) +# do not correctly set the timestamp due to buggy versions of `utime' +# in the kernel. So, we use `echo' instead. +STAMP = echo timestamp > +# If necessary (e.g., when using the MSYS shell on Microsoft Windows) +# translate the shell's notion of absolute pathnames to the native +# spelling. +build_file_translate = @build_file_translate@ + +# Make sure the $(MAKE) variable is defined. +@SET_MAKE@ + +# Locate mkinstalldirs. +mkinstalldirs=$(SHELL) $(srcdir)/../mkinstalldirs + +# write_entries_to_file - writes each entry in a list +# to the specified file. Entries are written in chunks of +# $(write_entries_to_file_split) to accommodate systems with +# severe command-line-length limitations. +# Parameters: +# $(1): variable containing entries to iterate over +# $(2): output file +write_entries_to_file_split = 50 +write_entries_to_file = $(shell rm -f $(2) || :) $(shell touch $(2)) \ + $(foreach range, \ + $(shell i=1; while test $$i -le $(words $(1)); do \ + echo $$i; i=`expr $$i + $(write_entries_to_file_split)`; done), \ + $(shell echo "$(wordlist $(range), \ + $(shell expr $(range) + $(write_entries_to_file_split) - 1), $(1))" \ + | tr ' ' '\012' >> $(2))) + +# The jit documentation looks better if built with sphinx, but can be +# built with texinfo if sphinx is not available. +# configure sets "doc_build_sys" to "sphinx" or "texinfo" accordingly +doc_build_sys=@doc_build_sys@ + +# -------- +# UNSORTED +# -------- + +# Dependency tracking stuff. +CXXDEPMODE = @CXXDEPMODE@ +DEPDIR = @DEPDIR@ +depcomp = $(SHELL) $(srcdir)/../depcomp + +# In the past we used AC_PROG_CC_C_O and set this properly, but +# it was discovered that this hadn't worked in a long time, so now +# we just hard-code. +OUTPUT_OPTION = -o $@ + +# This is where we get zlib from. zlibdir is -L../zlib and zlibinc is +# -I../zlib, unless we were configured with --with-system-zlib, in which +# case both are empty. +ZLIB = @zlibdir@ -lz +ZLIBINC = @zlibinc@ + +# How to find GMP +GMPLIBS = @GMPLIBS@ +GMPINC = @GMPINC@ + +# How to find isl. +ISLLIBS = @ISLLIBS@ +ISLINC = @ISLINC@ + +# Set to 'yes' if the LTO front end is enabled. +enable_lto = @enable_lto@ + +# Compiler and flags needed for plugin support +PLUGINCC = @CXX@ +PLUGINCFLAGS = @CXXFLAGS@ + +# Libs and linker options needed for plugin support +PLUGINLIBS = @pluginlibs@ + +enable_plugin = @enable_plugin@ + +# On MinGW plugin installation involves installing import libraries. +ifeq ($(enable_plugin),yes) + plugin_implib := $(if $(strip $(filter mingw%,$(host_os))),yes,no) +endif + +enable_host_shared = @enable_host_shared@ + +enable_as_accelerator = @enable_as_accelerator@ + +CPPLIB = ../libcpp/libcpp.a +CPPINC = -I$(srcdir)/../libcpp/include + +CODYLIB = ../libcody/libcody.a +CODYINC = -I$(srcdir)/../libcody +NETLIBS = @NETLIBS@ + +# Where to find decNumber +enable_decimal_float = @enable_decimal_float@ +DECNUM = $(srcdir)/../libdecnumber +DECNUMFMT = $(srcdir)/../libdecnumber/$(enable_decimal_float) +DECNUMINC = -I$(DECNUM) -I$(DECNUMFMT) -I../libdecnumber +LIBDECNUMBER = ../libdecnumber/libdecnumber.a + +# The backtrace library. +BACKTRACE = $(srcdir)/../libbacktrace +BACKTRACEINC = -I$(BACKTRACE) +LIBBACKTRACE = ../libbacktrace/.libs/libbacktrace.a + +# Target to use when installing include directory. Either +# install-headers-tar, install-headers-cpio or install-headers-cp. +INSTALL_HEADERS_DIR = @build_install_headers_dir@ + +# Header files that are made available under the same name +# to programs compiled with GCC. +USER_H = $(srcdir)/ginclude/float.h \ + $(srcdir)/ginclude/iso646.h \ + $(srcdir)/ginclude/stdarg.h \ + $(srcdir)/ginclude/stdbool.h \ + $(srcdir)/ginclude/stddef.h \ + $(srcdir)/ginclude/varargs.h \ + $(srcdir)/ginclude/stdfix.h \ + $(srcdir)/ginclude/stdnoreturn.h \ + $(srcdir)/ginclude/stdalign.h \ + $(srcdir)/ginclude/stdatomic.h \ + $(EXTRA_HEADERS) + +USER_H_INC_NEXT_PRE = @user_headers_inc_next_pre@ +USER_H_INC_NEXT_POST = @user_headers_inc_next_post@ + +# Enable target overriding of this fragment, as in config/t-vxworks. +T_GLIMITS_H = $(srcdir)/glimits.h +T_STDINT_GCC_H = $(srcdir)/ginclude/stdint-gcc.h + +# The GCC to use for compiling crt*.o. +# Usually the one we just built. +# Don't use this as a dependency--use $(GCC_PASSES). +GCC_FOR_TARGET = $(STAGE_CC_WRAPPER) ./xgcc -B./ -B$(build_tooldir)/bin/ -isystem $(build_tooldir)/include -isystem $(build_tooldir)/sys-include -L$(objdir)/../ld $(TFLAGS) + +# Set if the compiler was configured with --with-build-sysroot. +SYSROOT_CFLAGS_FOR_TARGET = @SYSROOT_CFLAGS_FOR_TARGET@ + +# This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET. +# It specifies -B./. +# It also specifies -isystem ./include to find, e.g., stddef.h. +GCC_CFLAGS=$(CFLAGS_FOR_TARGET) $(INTERNAL_CFLAGS) $(T_CFLAGS) $(LOOSE_WARN) $(C_LOOSE_WARN) -Wold-style-definition $($@-warn) -isystem ./include $(TCFLAGS) + +# --------------------------------------------------- +# Programs which produce files for the target machine +# --------------------------------------------------- + +AR_FOR_TARGET := $(shell \ + if [ -f $(objdir)/../binutils/ar ] ; then \ + echo $(objdir)/../binutils/ar ; \ + else \ + if [ "$(host)" = "$(target)" ] ; then \ + echo $(AR); \ + else \ + t='$(program_transform_name)'; echo ar | sed -e "$$t" ; \ + fi; \ + fi) +AR_FLAGS_FOR_TARGET = +AR_CREATE_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) rc +AR_EXTRACT_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) x +LIPO_FOR_TARGET = lipo +ORIGINAL_AS_FOR_TARGET = @ORIGINAL_AS_FOR_TARGET@ +RANLIB_FOR_TARGET := $(shell \ + if [ -f $(objdir)/../binutils/ranlib ] ; then \ + echo $(objdir)/../binutils/ranlib ; \ + else \ + if [ "$(host)" = "$(target)" ] ; then \ + echo $(RANLIB); \ + else \ + t='$(program_transform_name)'; echo ranlib | sed -e "$$t" ; \ + fi; \ + fi) +ORIGINAL_LD_FOR_TARGET = @ORIGINAL_LD_FOR_TARGET@ +ORIGINAL_NM_FOR_TARGET = @ORIGINAL_NM_FOR_TARGET@ +NM_FOR_TARGET = ./nm +STRIP_FOR_TARGET := $(shell \ + if [ -f $(objdir)/../binutils/strip-new ] ; then \ + echo $(objdir)/../binutils/strip-new ; \ + else \ + if [ "$(host)" = "$(target)" ] ; then \ + echo strip; \ + else \ + t='$(program_transform_name)'; echo strip | sed -e "$$t" ; \ + fi; \ + fi) + +# -------- +# UNSORTED +# -------- + +# Where to find some libiberty headers. +HASHTAB_H = $(srcdir)/../include/hashtab.h +OBSTACK_H = $(srcdir)/../include/obstack.h +SPLAY_TREE_H= $(srcdir)/../include/splay-tree.h +MD5_H = $(srcdir)/../include/md5.h +XREGEX_H = $(srcdir)/../include/xregex.h +FNMATCH_H = $(srcdir)/../include/fnmatch.h + +# Linker plugin API headers +LINKER_PLUGIN_API_H = $(srcdir)/../include/plugin-api.h + +# Default native SYSTEM_HEADER_DIR, to be overridden by targets. +NATIVE_SYSTEM_HEADER_DIR = @NATIVE_SYSTEM_HEADER_DIR@ +# Default cross SYSTEM_HEADER_DIR, to be overridden by targets. +ifeq (@includedir@,$(prefix)/include) + CROSS_SYSTEM_HEADER_DIR = @CROSS_SYSTEM_HEADER_DIR@ +else + CROSS_SYSTEM_HEADER_DIR = @includedir@ +endif + +# autoconf sets SYSTEM_HEADER_DIR to one of the above. +# Purge it of unnecessary internal relative paths +# to directories that might not exist yet. +# The sed idiom for this is to repeat the search-and-replace until it doesn't match, using :a ... ta. +# Use single quotes here to avoid nested double- and backquotes, this +# macro is also used in a double-quoted context. +SYSTEM_HEADER_DIR = `echo @SYSTEM_HEADER_DIR@ | sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta` + +# Path to the system headers on the build machine. +BUILD_SYSTEM_HEADER_DIR = `echo @BUILD_SYSTEM_HEADER_DIR@ | sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta` + +# Control whether to run fixincludes. +STMP_FIXINC = @STMP_FIXINC@ + +# Test to see whether exists in the system header files. +LIMITS_H_TEST = [ -f $(BUILD_SYSTEM_HEADER_DIR)/limits.h ] + +# Directory for prefix to system directories, for +# each of $(system_prefix)/usr/include, $(system_prefix)/usr/lib, etc. +TARGET_SYSTEM_ROOT = @TARGET_SYSTEM_ROOT@ +TARGET_SYSTEM_ROOT_DEFINE = @TARGET_SYSTEM_ROOT_DEFINE@ + +xmake_file=@xmake_file@ +tmake_file=@tmake_file@ +TM_ENDIAN_CONFIG=@TM_ENDIAN_CONFIG@ +TM_MULTILIB_CONFIG=@TM_MULTILIB_CONFIG@ +TM_MULTILIB_EXCEPTIONS_CONFIG=@TM_MULTILIB_EXCEPTIONS_CONFIG@ +out_file=$(srcdir)/config/@out_file@ +out_object_file=@out_object_file@ +common_out_file=$(srcdir)/common/config/@common_out_file@ +common_out_object_file=@common_out_object_file@ +EXTRA_GTYPE_DEPS= +md_file=$(srcdir)/common.md $(srcdir)/config/@md_file@ +tm_file_list=@tm_file_list@ +tm_include_list=@tm_include_list@ +tm_defines=@tm_defines@ +tm_p_file_list=@tm_p_file_list@ +tm_p_include_list=@tm_p_include_list@ +tm_d_file_list=@tm_d_file_list@ +tm_d_include_list=@tm_d_include_list@ +build_xm_file_list=@build_xm_file_list@ +build_xm_include_list=@build_xm_include_list@ +build_xm_defines=@build_xm_defines@ +host_xm_file_list=@host_xm_file_list@ +host_xm_include_list=@host_xm_include_list@ +host_xm_defines=@host_xm_defines@ +xm_file_list=@xm_file_list@ +xm_include_list=@xm_include_list@ +xm_defines=@xm_defines@ +lang_checks= +lang_checks_parallelized= +lang_opt_files=@lang_opt_files@ $(srcdir)/c-family/c.opt $(srcdir)/common.opt $(srcdir)/params.opt $(srcdir)/analyzer/analyzer.opt +lang_specs_files=@lang_specs_files@ +lang_tree_files=@lang_tree_files@ +target_cpu_default=@target_cpu_default@ +OBJC_BOEHM_GC=@objc_boehm_gc@ +extra_modes_file=@extra_modes_file@ +extra_opt_files=@extra_opt_files@ +host_hook_obj=@out_host_hook_obj@ + +# Multiarch support +enable_multiarch = @enable_multiarch@ +with_cpu = @with_cpu@ +with_float = @with_float@ +ifeq ($(enable_multiarch),yes) + if_multiarch = $(1) +else + ifeq ($(enable_multiarch),auto) + # SYSTEM_HEADER_DIR is makefile syntax, cannot be evaluated in configure.ac + if_multiarch = $(if $(wildcard $(shell echo $(BUILD_SYSTEM_HEADER_DIR))/../../usr/lib/*/crti.o),$(1)) + else + if_multiarch = + endif +endif + +# ------------------------ +# Installation directories +# ------------------------ + +# Common prefix for installation directories. +# NOTE: This directory must exist when you start installation. +prefix = @prefix@ +# Directory in which to put localized header files. On the systems with +# gcc as the native cc, `local_prefix' may not be `prefix' which is +# `/usr'. +# NOTE: local_prefix *should not* default from prefix. +local_prefix = @local_prefix@ +# Directory in which to put host dependent programs and libraries +exec_prefix = @exec_prefix@ +# Directory in which to put the executable for the command `gcc' +bindir = @bindir@ +# Directory in which to put the directories used by the compiler. +libdir = @libdir@ +# Directory in which GCC puts its executables. +libexecdir = @libexecdir@ + +# -------- +# UNSORTED +# -------- + +# Directory in which the compiler finds libraries etc. +libsubdir = $(libdir)/gcc/$(real_target_noncanonical)/$(version)$(accel_dir_suffix) +# Directory in which the compiler finds executables +libexecsubdir = $(libexecdir)/gcc/$(real_target_noncanonical)/$(version)$(accel_dir_suffix) +# Directory in which all plugin resources are installed +plugin_resourcesdir = $(libsubdir)/plugin + # Directory in which plugin headers are installed +plugin_includedir = $(plugin_resourcesdir)/include +# Directory in which plugin specific executables are installed +plugin_bindir = $(libexecsubdir)/plugin +# Used to produce a relative $(gcc_tooldir) in gcc.o +ifeq ($(enable_as_accelerator),yes) +unlibsubdir = ../../../../.. +else +unlibsubdir = ../../.. +endif +# $(prefix), expressed as a path relative to $(libsubdir). +# +# An explanation of the sed strings: +# -e 's|^$(prefix)||' matches and eliminates 'prefix' from 'exec_prefix' +# -e 's|/$$||' match a trailing forward slash and eliminates it +# -e 's|^[^/]|/|' forces the string to start with a forward slash (*) +# -e 's|/[^/]*|../|g' replaces each occurrence of / with ../ +# +# (*) Note this pattern overwrites the first character of the string +# with a forward slash if one is not already present. This is not a +# problem because the exact names of the sub-directories concerned is +# unimportant, just the number of them matters. +# +# The practical upshot of these patterns is like this: +# +# prefix exec_prefix result +# ------ ----------- ------ +# /foo /foo/bar ../ +# /foo/ /foo/bar ../ +# /foo /foo/bar/ ../ +# /foo/ /foo/bar/ ../ +# /foo /foo/bar/ugg ../../ +libsubdir_to_prefix := \ + $(unlibsubdir)/$(shell echo "$(libdir)" | \ + sed -e 's|^$(prefix)||' -e 's|/$$||' -e 's|^[^/]|/|' \ + -e 's|/[^/]*|../|g') +# $(exec_prefix), expressed as a path relative to $(prefix). +prefix_to_exec_prefix := \ + $(shell echo "$(exec_prefix)" | \ + sed -e 's|^$(prefix)||' -e 's|^/||' -e '/./s|$$|/|') +# Directory in which to find other cross-compilation tools and headers. +dollar = @dollar@ +# Used in install-cross. +gcc_tooldir = @gcc_tooldir@ +# Since gcc_tooldir does not exist at build-time, use -B$(build_tooldir)/bin/ +build_tooldir = $(exec_prefix)/$(target_noncanonical) +# Directory in which the compiler finds target-independent g++ includes. +gcc_gxx_include_dir = @gcc_gxx_include_dir@ +gcc_gxx_include_dir_add_sysroot = @gcc_gxx_include_dir_add_sysroot@ +# Directory in which the compiler finds libc++ includes. +gcc_gxx_libcxx_include_dir = @gcc_gxx_libcxx_include_dir@ +gcc_gxx_libcxx_include_dir_add_sysroot = @gcc_gxx_libcxx_include_dir_add_sysroot@ +# Directory to search for site-specific includes. +local_includedir = $(local_prefix)/include +includedir = $(prefix)/include +# where the info files go +infodir = @infodir@ +# Where cpp should go besides $prefix/bin if necessary +cpp_install_dir = @cpp_install_dir@ +# where the locale files go +datadir = @datadir@ +localedir = $(datadir)/locale +# Extension (if any) to put in installed man-page filename. +man1ext = .1 +man7ext = .7 +objext = .o +exeext = @host_exeext@ +build_exeext = @build_exeext@ + +# Directory in which to put man pages. +mandir = @mandir@ +man1dir = $(mandir)/man1 +man7dir = $(mandir)/man7 +# Dir for temp files. +tmpdir = /tmp + +datarootdir = @datarootdir@ +docdir = @docdir@ +# Directory in which to put DVIs +dvidir = @dvidir@ +# Directory in which to build HTML +build_htmldir = $(objdir)/HTML/gcc-$(version) +# Directory in which to put HTML +htmldir = @htmldir@ + +# Whether we were configured with NLS. +USE_NLS = @USE_NLS@ + +# Internationalization library. +INCINTL = @INCINTL@ +LIBINTL = @LIBINTL@ +LIBINTL_DEP = @LIBINTL_DEP@ + +# Character encoding conversion library. +LIBICONV = @LIBICONV@ +LIBICONV_DEP = @LIBICONV_DEP@ + +# If a supplementary library is being used for the GC. +GGC_LIB= + +# "true" if the target C library headers are unavailable; "false" +# otherwise. +inhibit_libc = @inhibit_libc@ +ifeq ($(inhibit_libc),true) +INHIBIT_LIBC_CFLAGS = -Dinhibit_libc +endif + +# List of extra executables that should be compiled for this target machine +# that are used when linking. +# The rules for compiling them should be in the t-* file for the machine. +EXTRA_PROGRAMS = @extra_programs@ + +# List of extra object files that should be compiled and linked with +# compiler proper (cc1, cc1obj, cc1plus). +EXTRA_OBJS = @extra_objs@ + +# List of extra object files that should be compiled and linked with +# the gcc driver. +EXTRA_GCC_OBJS =@extra_gcc_objs@ + +# List of extra libraries that should be linked with the gcc driver. +EXTRA_GCC_LIBS = @EXTRA_GCC_LIBS@ + +# List of additional header files to install. +EXTRA_HEADERS =@extra_headers_list@ + +# How to handle . +USE_GCC_STDINT = @use_gcc_stdint@ + +# The configure script will set this to collect2$(exeext), except on a +# (non-Unix) host which cannot build collect2, for which it will be +# set to empty. +COLLECT2 = @collect2@ + +# Program to convert libraries. +LIBCONVERT = + +# Control whether header files are installed. +INSTALL_HEADERS=install-headers install-mkheaders + +# Control whether Info documentation is built and installed. +BUILD_INFO = @BUILD_INFO@ + +# Control flags for @contents placement in HTML output +MAKEINFO_TOC_INLINE_FLAG = @MAKEINFO_TOC_INLINE_FLAG@ + +# Control whether manpages generated by texi2pod.pl can be rebuilt. +GENERATED_MANPAGES = @GENERATED_MANPAGES@ + +# Additional directories of header files to run fixincludes on. +# These should be directories searched automatically by default +# just as /usr/include is. +# *Do not* use this for directories that happen to contain +# header files, but are not searched automatically by default. +# On most systems, this is empty. +OTHER_FIXINCLUDES_DIRS= + +# A list of all the language-specific executables. +COMPILERS = @all_compilers@ + +# List of things which should already be built whenever we try to use xgcc +# to compile anything (without linking). +GCC_PASSES=xgcc$(exeext) specs + +# Directory to link to, when using the target `maketest'. +DIR = ../gcc + +# Native compiler for the build machine and its switches. +CC_FOR_BUILD = @CC_FOR_BUILD@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +BUILD_CFLAGS= @BUILD_CFLAGS@ $(GENERATOR_CFLAGS) -DGENERATOR_FILE +BUILD_CXXFLAGS = @BUILD_CXXFLAGS@ $(GENERATOR_CFLAGS) -DGENERATOR_FILE + +# Native compiler that we use. This may be C++ some day. +COMPILER_FOR_BUILD = $(CXX_FOR_BUILD) +BUILD_COMPILERFLAGS = $(BUILD_CXXFLAGS) + +# Native linker that we use. +LINKER_FOR_BUILD = $(CXX_FOR_BUILD) +BUILD_LINKERFLAGS = $(BUILD_CXXFLAGS) + +# Native linker and preprocessor flags. For x-fragment overrides. +BUILD_LDFLAGS=@BUILD_LDFLAGS@ +BUILD_CPPFLAGS= -I. -I$(@D) -I$(srcdir) -I$(srcdir)/$(@D) \ + -I$(srcdir)/../include $(INCINTL) $(CPPINC) $(CPPFLAGS) + +# Actual name to use when installing a native compiler. +GCC_INSTALL_NAME := $(shell echo gcc|sed '$(program_transform_name)') +GCC_TARGET_INSTALL_NAME := $(target_noncanonical)-$(shell echo gcc|sed '$(program_transform_name)') +CPP_INSTALL_NAME := $(shell echo cpp|sed '$(program_transform_name)') +GCOV_INSTALL_NAME := $(shell echo gcov|sed '$(program_transform_name)') +GCOV_TOOL_INSTALL_NAME := $(shell echo gcov-tool|sed '$(program_transform_name)') +GCOV_DUMP_INSTALL_NAME := $(shell echo gcov-dump|sed '$(program_transform_name)') + +# Setup the testing framework, if you have one +EXPECT = `if [ -f $${rootme}/../expect/expect ] ; then \ + echo $${rootme}/../expect/expect ; \ + else echo expect ; fi` + +RUNTEST = `if [ -f $${srcdir}/../dejagnu/runtest ] ; then \ + echo $${srcdir}/../dejagnu/runtest ; \ + else echo runtest; fi` +RUNTESTFLAGS = + +# This should name the specs file that we're going to install. Target +# Makefiles may override it and name another file to be generated from +# the built-in specs and installed as the default spec, as long as +# they also introduce a rule to generate a file name specs, to be used +# at build time. +SPECS = specs + +# Extra include files that are defined by HeaderInclude directives in +# the .opt files +OPTIONS_H_EXTRA = + +# Extra include files that are defined by SourceInclude directives in +# the .opt files +OPTIONS_C_EXTRA = $(PRETTY_PRINT_H) + +@option_includes@ + +# End of variables for you to override. + +# GTM_H lists the config files that the generator files depend on, +# while TM_H lists the ones ordinary gcc files depend on, which +# includes several files generated by those generators. +BCONFIG_H = bconfig.h $(build_xm_file_list) +CONFIG_H = config.h $(host_xm_file_list) +TCONFIG_H = tconfig.h $(xm_file_list) +TM_P_H = tm_p.h $(tm_p_file_list) +TM_D_H = tm_d.h $(tm_d_file_list) +GTM_H = tm.h $(tm_file_list) insn-constants.h +TM_H = $(GTM_H) insn-flags.h $(OPTIONS_H) + +# Variables for version information. +BASEVER := $(srcdir)/BASE-VER # 4.x.y +DEVPHASE := $(srcdir)/DEV-PHASE # experimental, prerelease, "" +DATESTAMP := $(srcdir)/DATESTAMP # YYYYMMDD or empty +REVISION := $(srcdir)/REVISION # [BRANCH revision XXXXXX] + +BASEVER_c := $(shell cat $(BASEVER)) +DEVPHASE_c := $(shell cat $(DEVPHASE)) +DATESTAMP_c := $(shell cat $(DATESTAMP)) + +ifeq (,$(wildcard $(REVISION))) +REVISION_c := +REVISION := +else +REVISION_c := $(shell cat $(REVISION)) +endif + +version := $(shell @get_gcc_base_ver@ $(BASEVER)) + +PATCHLEVEL_c := \ + $(shell echo $(BASEVER_c) | sed -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\)$$/\1/') + + +# For use in version.cc - double quoted strings, with appropriate +# surrounding punctuation and spaces, and with the datestamp and +# development phase collapsed to the empty string in release mode +# (i.e. if DEVPHASE_c is empty and PATCHLEVEL_c is 0). The space +# immediately after the comma in the $(if ...) constructs is +# significant - do not remove it. +BASEVER_s := "\"$(BASEVER_c)\"" +DEVPHASE_s := "\"$(if $(DEVPHASE_c), ($(DEVPHASE_c)))\"" +DATESTAMP_s := \ + "\"$(if $(DEVPHASE_c)$(filter-out 0,$(PATCHLEVEL_c)), $(DATESTAMP_c))\"" +PKGVERSION_s:= "\"@PKGVERSION@\"" +BUGURL_s := "\"@REPORT_BUGS_TO@\"" + +PKGVERSION := @PKGVERSION@ +BUGURL_TEXI := @REPORT_BUGS_TEXI@ + +ifdef REVISION_c +REVISION_s := \ + "\"$(if $(DEVPHASE_c)$(filter-out 0,$(PATCHLEVEL_c)), $(REVISION_c))\"" +else +REVISION_s := "\"\"" +endif + +# Shorthand variables for dependency lists. +DUMPFILE_H = $(srcdir)/../libcpp/include/line-map.h dumpfile.h +VEC_H = vec.h statistics.h $(GGC_H) +HASH_TABLE_H = $(HASHTAB_H) hash-table.h $(GGC_H) +EXCEPT_H = except.h $(HASHTAB_H) +TARGET_DEF = target.def target-hooks-macros.h target-insns.def +C_TARGET_DEF = c-family/c-target.def target-hooks-macros.h +COMMON_TARGET_DEF = common/common-target.def target-hooks-macros.h +D_TARGET_DEF = d/d-target.def target-hooks-macros.h +TARGET_H = $(TM_H) target.h $(TARGET_DEF) insn-modes.h insn-codes.h +C_TARGET_H = c-family/c-target.h $(C_TARGET_DEF) +COMMON_TARGET_H = common/common-target.h $(INPUT_H) $(COMMON_TARGET_DEF) +D_TARGET_H = d/d-target.h $(D_TARGET_DEF) +MACHMODE_H = machmode.h mode-classes.def +HOOKS_H = hooks.h +HOSTHOOKS_DEF_H = hosthooks-def.h $(HOOKS_H) +LANGHOOKS_DEF_H = langhooks-def.h $(HOOKS_H) +TARGET_DEF_H = target-def.h target-hooks-def.h $(HOOKS_H) targhooks.h +C_TARGET_DEF_H = c-family/c-target-def.h c-family/c-target-hooks-def.h \ + $(TREE_H) $(C_COMMON_H) $(HOOKS_H) common/common-targhooks.h +CORETYPES_H = coretypes.h insn-modes.h signop.h wide-int.h wide-int-print.h \ + insn-modes-inline.h $(MACHMODE_H) double-int.h align.h poly-int.h \ + poly-int-types.h +RTL_BASE_H = $(CORETYPES_H) rtl.h rtl.def reg-notes.def \ + insn-notes.def $(INPUT_H) $(REAL_H) statistics.h $(VEC_H) \ + $(FIXED_VALUE_H) alias.h $(HASHTAB_H) +FIXED_VALUE_H = fixed-value.h +RTL_H = $(RTL_BASE_H) $(FLAGS_H) genrtl.h +READ_MD_H = $(OBSTACK_H) $(HASHTAB_H) read-md.h +BUILTINS_DEF = builtins.def sync-builtins.def omp-builtins.def \ + gtm-builtins.def sanitizer.def +INTERNAL_FN_DEF = internal-fn.def +INTERNAL_FN_H = internal-fn.h $(INTERNAL_FN_DEF) +TREE_CORE_H = tree-core.h $(CORETYPES_H) all-tree.def tree.def \ + c-family/c-common.def $(lang_tree_files) \ + $(BUILTINS_DEF) $(INPUT_H) statistics.h \ + $(VEC_H) treestruct.def $(HASHTAB_H) \ + alias.h $(SYMTAB_H) $(FLAGS_H) \ + $(REAL_H) $(FIXED_VALUE_H) +TREE_H = tree.h $(TREE_CORE_H) tree-check.h +REGSET_H = regset.h $(BITMAP_H) hard-reg-set.h +BASIC_BLOCK_H = basic-block.h $(PREDICT_H) $(VEC_H) $(FUNCTION_H) \ + cfg-flags.def cfghooks.h profile-count.h +GIMPLE_H = gimple.h gimple.def gsstruct.def $(VEC_H) \ + $(GGC_H) $(BASIC_BLOCK_H) $(TREE_H) tree-ssa-operands.h \ + tree-ssa-alias.h $(INTERNAL_FN_H) $(HASH_TABLE_H) is-a.h +GCOV_IO_H = gcov-io.h version.h auto-host.h gcov-counter.def +RECOG_H = recog.h +EMIT_RTL_H = emit-rtl.h +FLAGS_H = flags.h flag-types.h $(OPTIONS_H) +OPTIONS_H = options.h flag-types.h $(OPTIONS_H_EXTRA) +FUNCTION_H = function.h $(HASHTAB_H) $(TM_H) hard-reg-set.h \ + $(VEC_H) $(INPUT_H) +EXPR_H = expr.h insn-config.h $(FUNCTION_H) $(RTL_H) $(FLAGS_H) $(TREE_H) \ + $(EMIT_RTL_H) +OPTABS_H = optabs.h insn-codes.h insn-opinit.h +REGS_H = regs.h hard-reg-set.h +CFGLOOP_H = cfgloop.h $(BASIC_BLOCK_H) $(BITMAP_H) sbitmap.h +IPA_UTILS_H = ipa-utils.h $(TREE_H) $(CGRAPH_H) +IPA_REFERENCE_H = ipa-reference.h $(BITMAP_H) $(TREE_H) +CGRAPH_H = cgraph.h $(VEC_H) $(TREE_H) $(BASIC_BLOCK_H) $(FUNCTION_H) \ + cif-code.def ipa-ref.h $(LINKER_PLUGIN_API_H) is-a.h +DF_H = df.h $(BITMAP_H) $(REGSET_H) sbitmap.h $(BASIC_BLOCK_H) \ + alloc-pool.h $(TIMEVAR_H) +RESOURCE_H = resource.h hard-reg-set.h $(DF_H) +GCC_H = gcc.h version.h $(DIAGNOSTIC_CORE_H) +GGC_H = ggc.h gtype-desc.h statistics.h +TIMEVAR_H = timevar.h timevar.def +INSN_ATTR_H = insn-attr.h insn-attr-common.h $(INSN_ADDR_H) +INSN_ADDR_H = $(srcdir)/insn-addr.h +C_COMMON_H = c-family/c-common.h c-family/c-common.def $(TREE_H) \ + $(SPLAY_TREE_H) $(CPPLIB_H) $(GGC_H) $(DIAGNOSTIC_CORE_H) +C_PRAGMA_H = c-family/c-pragma.h $(CPPLIB_H) +C_TREE_H = c/c-tree.h $(C_COMMON_H) $(DIAGNOSTIC_H) +SYSTEM_H = system.h hwint.h $(srcdir)/../include/libiberty.h \ + $(srcdir)/../include/safe-ctype.h $(srcdir)/../include/filenames.h \ + $(HASHTAB_H) +PREDICT_H = predict.h predict.def +CPPLIB_H = $(srcdir)/../libcpp/include/line-map.h \ + $(srcdir)/../libcpp/include/cpplib.h +CODYLIB_H = $(srcdir)/../libcody/cody.hh +INPUT_H = $(srcdir)/../libcpp/include/line-map.h input.h +OPTS_H = $(INPUT_H) $(VEC_H) opts.h $(OBSTACK_H) +SYMTAB_H = $(srcdir)/../libcpp/include/symtab.h $(OBSTACK_H) +CPP_INTERNAL_H = $(srcdir)/../libcpp/internal.h +TREE_DUMP_H = tree-dump.h $(SPLAY_TREE_H) $(DUMPFILE_H) +TREE_PASS_H = tree-pass.h $(TIMEVAR_H) $(DUMPFILE_H) +TREE_SSA_H = tree-ssa.h tree-ssa-operands.h \ + $(BITMAP_H) sbitmap.h $(BASIC_BLOCK_H) $(GIMPLE_H) \ + $(HASHTAB_H) $(CGRAPH_H) $(IPA_REFERENCE_H) \ + tree-ssa-alias.h +PRETTY_PRINT_H = pretty-print.h $(INPUT_H) $(OBSTACK_H) wide-int-print.h +TREE_PRETTY_PRINT_H = tree-pretty-print.h $(PRETTY_PRINT_H) +GIMPLE_PRETTY_PRINT_H = gimple-pretty-print.h $(TREE_PRETTY_PRINT_H) +DIAGNOSTIC_CORE_H = diagnostic-core.h $(INPUT_H) bversion.h diagnostic.def +DIAGNOSTIC_H = diagnostic.h $(DIAGNOSTIC_CORE_H) $(PRETTY_PRINT_H) +C_PRETTY_PRINT_H = c-family/c-pretty-print.h $(PRETTY_PRINT_H) \ + $(C_COMMON_H) $(TREE_H) +TREE_INLINE_H = tree-inline.h +REAL_H = real.h +LTO_STREAMER_H = lto-streamer.h $(LINKER_PLUGIN_API_H) $(TARGET_H) \ + $(CGRAPH_H) $(VEC_H) $(HASH_TABLE_H) $(TREE_H) $(GIMPLE_H) \ + $(GCOV_IO_H) $(DIAGNOSTIC_H) alloc-pool.h +IPA_PROP_H = ipa-prop.h $(TREE_H) $(VEC_H) $(CGRAPH_H) $(GIMPLE_H) alloc-pool.h +BITMAP_H = bitmap.h $(HASHTAB_H) statistics.h +GCC_PLUGIN_H = gcc-plugin.h highlev-plugin-common.h plugin.def \ + $(CONFIG_H) $(SYSTEM_H) $(HASHTAB_H) +PLUGIN_H = plugin.h $(GCC_PLUGIN_H) +PLUGIN_VERSION_H = plugin-version.h configargs.h +CONTEXT_H = context.h +GENSUPPORT_H = gensupport.h read-md.h optabs.def +RTL_SSA_H = $(PRETTY_PRINT_H) insn-config.h splay-tree-utils.h \ + $(RECOG_H) $(REGS_H) function-abi.h obstack-utils.h \ + mux-utils.h rtlanal.h memmodel.h $(EMIT_RTL_H) \ + rtl-ssa/accesses.h rtl-ssa/insns.h rtl-ssa/blocks.h \ + rtl-ssa/changes.h rtl-ssa/functions.h rtl-ssa/is-a.inl \ + rtl-ssa/access-utils.h rtl-ssa/insn-utils.h rtl-ssa/movement.h \ + rtl-ssa/change-utils.h rtl-ssa/member-fns.inl + +# +# Now figure out from those variables how to compile and link. + +# IN_GCC distinguishes between code compiled into GCC itself and other +# programs built during a bootstrap. +# autoconf inserts -DCROSS_DIRECTORY_STRUCTURE if we are building a +# cross compiler which does not use the native headers and libraries. +INTERNAL_CFLAGS = -DIN_GCC $(PICFLAG) @CROSS@ + +# This is the variable actually used when we compile. If you change this, +# you probably want to update BUILD_CFLAGS in configure.ac +ALL_CFLAGS = $(T_CFLAGS) $(CFLAGS-$@) \ + $(CFLAGS) $(INTERNAL_CFLAGS) $(COVERAGE_FLAGS) $(WARN_CFLAGS) @DEFS@ + +# The C++ version. +ALL_CXXFLAGS = $(T_CFLAGS) $(CFLAGS-$@) $(CXXFLAGS) $(INTERNAL_CFLAGS) \ + $(COVERAGE_FLAGS) $(ALIASING_FLAGS) $(NOEXCEPTION_FLAGS) \ + $(WARN_CXXFLAGS) @DEFS@ + +# Likewise. Put INCLUDES at the beginning: this way, if some autoconf macro +# puts -I options in CPPFLAGS, our include files in the srcdir will always +# win against random include files in /usr/include. +ALL_CPPFLAGS = $(INCLUDES) $(CPPFLAGS) + +# This is the variable to use when using $(COMPILER). +ALL_COMPILERFLAGS = $(ALL_CXXFLAGS) + +# This is the variable to use when using $(LINKER). +ALL_LINKERFLAGS = $(ALL_CXXFLAGS) + +# Build and host support libraries. + +# Use the "pic" build of libiberty if --enable-host-shared, unless we are +# building for mingw. +LIBIBERTY_PICDIR=$(if $(findstring mingw,$(target)),,pic) +ifeq ($(enable_host_shared),yes) +LIBIBERTY = ../libiberty/$(LIBIBERTY_PICDIR)/libiberty.a +BUILD_LIBIBERTY = $(build_libobjdir)/libiberty/$(LIBIBERTY_PICDIR)/libiberty.a +else +LIBIBERTY = ../libiberty/libiberty.a +BUILD_LIBIBERTY = $(build_libobjdir)/libiberty/libiberty.a +endif + +# Dependencies on the intl and portability libraries. +LIBDEPS= libcommon.a $(CPPLIB) $(LIBIBERTY) $(LIBINTL_DEP) $(LIBICONV_DEP) \ + $(LIBDECNUMBER) $(LIBBACKTRACE) + +# Likewise, for use in the tools that must run on this machine +# even if we are cross-building GCC. +BUILD_LIBDEPS= $(BUILD_LIBIBERTY) + +# How to link with both our special library facilities +# and the system's installed libraries. +LIBS = @LIBS@ libcommon.a $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBBACKTRACE) \ + $(LIBIBERTY) $(LIBDECNUMBER) $(HOST_LIBS) +BACKENDLIBS = $(ISLLIBS) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \ + $(ZLIB) $(ZSTD_LIB) +# Any system libraries needed just for GNAT. +SYSLIBS = @GNAT_LIBEXC@ + +# Used from ada/gcc-interface/Make-lang.in +GNATBIND = @GNATBIND@ +GNATMAKE = @GNATMAKE@ + +# Used from d/Make-lang.in +GDC = @GDC@ +GDCFLAGS = @GDCFLAGS@ + +# Libs needed (at present) just for jcf-dump. +LDEXP_LIB = @LDEXP_LIB@ + +ZSTD_INC = @ZSTD_CPPFLAGS@ +ZSTD_LIB = @ZSTD_LDFLAGS@ @ZSTD_LIB@ + +# Likewise, for use in the tools that must run on this machine +# even if we are cross-building GCC. +BUILD_LIBS = $(BUILD_LIBIBERTY) + +BUILD_RTL = build/rtl.o build/read-rtl.o build/ggc-none.o \ + build/vec.o build/min-insn-modes.o build/gensupport.o \ + build/print-rtl.o build/hash-table.o build/sort.o +BUILD_MD = build/read-md.o +BUILD_ERRORS = build/errors.o + +# Specify the directories to be searched for header files. +# Both . and srcdir are used, in that order, +# so that *config.h will be found in the compilation +# subdirectory rather than in the source directory. +# -I$(@D) and -I$(srcdir)/$(@D) cause the subdirectory of the file +# currently being compiled, in both source trees, to be examined as well. +# libintl.h will be found in ../intl if we are using the included libintl. +INCLUDES = -I. -I$(@D) -I$(srcdir) -I$(srcdir)/$(@D) \ + -I$(srcdir)/../include $(INCINTL) \ + $(CPPINC) $(CODYINC) $(GMPINC) $(DECNUMINC) $(BACKTRACEINC) \ + $(ISLINC) + +COMPILE.base = $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) -o $@ +ifeq ($(CXXDEPMODE),depmode=gcc3) +# Note a subtlety here: we use $(@D) for the directory part, to make +# things like the go/%.o rule work properly; but we use $(*F) for the +# file part, as we just want the file part of the stem, not the entire +# file name. +COMPILE = $(COMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(*F).TPo +POSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(*F).TPo $(@D)/$(DEPDIR)/$(*F).Po +else +COMPILE = source='$<' object='$@' libtool=no \ + DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) $(COMPILE.base) +POSTCOMPILE = +endif + +.cc.o .c.o: + $(COMPILE) $< + $(POSTCOMPILE) + +# +# Support for additional languages (other than C). +# C can be supported this way too (leave for later). + +LANG_CONFIGUREFRAGS = @all_lang_configurefrags@ +LANG_MAKEFRAGS = @all_lang_makefrags@ + +# Used by gcc/jit/Make-lang.in +LD_VERSION_SCRIPT_OPTION = @ld_version_script_option@ +LD_SONAME_OPTION = @ld_soname_option@ + +# Flags to pass to recursive makes. +# CC is set by configure. +# ??? The choices here will need some experimenting with. + +export AR_FOR_TARGET +export AR_CREATE_FOR_TARGET +export AR_FLAGS_FOR_TARGET +export AR_EXTRACT_FOR_TARGET +export AWK +export DESTDIR +export GCC_FOR_TARGET +export INCLUDES +export INSTALL_DATA +export LIPO_FOR_TARGET +export MACHMODE_H +export NM_FOR_TARGET +export STRIP_FOR_TARGET +export RANLIB_FOR_TARGET +export libsubdir + +FLAGS_TO_PASS = \ + "ADA_CFLAGS=$(ADA_CFLAGS)" \ + "BISON=$(BISON)" \ + "BISONFLAGS=$(BISONFLAGS)" \ + "CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \ + "LDFLAGS=$(LDFLAGS)" \ + "FLEX=$(FLEX)" \ + "FLEXFLAGS=$(FLEXFLAGS)" \ + "INSTALL=$(INSTALL)" \ + "INSTALL_DATA=$(INSTALL_DATA)" \ + "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ + "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \ + "LN=$(LN)" \ + "LN_S=$(LN_S)" \ + "RANLIB_FOR_TARGET=$(RANLIB_FOR_TARGET)" \ + "MAKEINFO=$(MAKEINFO)" \ + "MAKEINFOFLAGS=$(MAKEINFOFLAGS)" \ + "MAKEOVERRIDES=" \ + "SHELL=$(SHELL)" \ + "TFLAGS=$(TFLAGS)" \ + "exeext=$(exeext)" \ + "build_exeext=$(build_exeext)" \ + "objext=$(objext)" \ + "exec_prefix=$(exec_prefix)" \ + "prefix=$(prefix)" \ + "local_prefix=$(local_prefix)" \ + "gxx_include_dir=$(gcc_gxx_include_dir)" \ + "gxx_libcxx_include_dir=$(gcc_gxx_libcxx_include_dir)" \ + "build_tooldir=$(build_tooldir)" \ + "gcc_tooldir=$(gcc_tooldir)" \ + "bindir=$(bindir)" \ + "libexecsubdir=$(libexecsubdir)" \ + "datarootdir=$(datarootdir)" \ + "datadir=$(datadir)" \ + "libsubdir=$(libsubdir)" \ + "localedir=$(localedir)" +# +# Lists of files for various purposes. + +# All option source files +ALL_OPT_FILES=$(lang_opt_files) $(extra_opt_files) + +# Target specific, C specific object file +C_TARGET_OBJS=@c_target_objs@ + +# Target specific, C++ specific object file +CXX_TARGET_OBJS=@cxx_target_objs@ + +# Target specific, D specific object file +D_TARGET_OBJS=@d_target_objs@ + +# Target specific, Fortran specific object file +FORTRAN_TARGET_OBJS=@fortran_target_objs@ + +# Object files for gcc many-languages driver. +GCC_OBJS = gcc.o gcc-main.o ggc-none.o + +c-family-warn = $(STRICT_WARN) + +# Language-specific object files shared by all C-family front ends. +C_COMMON_OBJS = c-family/c-common.o c-family/c-cppbuiltin.o c-family/c-dump.o \ + c-family/c-format.o c-family/c-gimplify.o c-family/c-indentation.o \ + c-family/c-lex.o c-family/c-omp.o c-family/c-opts.o c-family/c-pch.o \ + c-family/c-ppoutput.o c-family/c-pragma.o c-family/c-pretty-print.o \ + c-family/c-semantics.o c-family/c-ada-spec.o \ + c-family/c-ubsan.o c-family/known-headers.o \ + c-family/c-attribs.o c-family/c-warn.o c-family/c-spellcheck.o + +# Analyzer object files +ANALYZER_OBJS = \ + analyzer/analysis-plan.o \ + analyzer/analyzer.o \ + analyzer/analyzer-language.o \ + analyzer/analyzer-logging.o \ + analyzer/analyzer-pass.o \ + analyzer/analyzer-selftests.o \ + analyzer/bar-chart.o \ + analyzer/bounds-checking.o \ + analyzer/call-details.o \ + analyzer/call-info.o \ + analyzer/call-string.o \ + analyzer/call-summary.o \ + analyzer/checker-event.o \ + analyzer/checker-path.o \ + analyzer/complexity.o \ + analyzer/constraint-manager.o \ + analyzer/diagnostic-manager.o \ + analyzer/engine.o \ + analyzer/feasible-graph.o \ + analyzer/function-set.o \ + analyzer/infinite-recursion.o \ + analyzer/kf.o \ + analyzer/kf-analyzer.o \ + analyzer/kf-lang-cp.o \ + analyzer/known-function-manager.o \ + analyzer/pending-diagnostic.o \ + analyzer/program-point.o \ + analyzer/program-state.o \ + analyzer/region.o \ + analyzer/region-model.o \ + analyzer/region-model-asm.o \ + analyzer/region-model-manager.o \ + analyzer/region-model-reachability.o \ + analyzer/sm.o \ + analyzer/sm-file.o \ + analyzer/sm-fd.o \ + analyzer/sm-malloc.o \ + analyzer/sm-pattern-test.o \ + analyzer/sm-sensitive.o \ + analyzer/sm-signal.o \ + analyzer/sm-taint.o \ + analyzer/state-purge.o \ + analyzer/store.o \ + analyzer/supergraph.o \ + analyzer/svalue.o \ + analyzer/trimmed-graph.o \ + analyzer/varargs.o + +# Language-independent object files. +# We put the *-match.o and insn-*.o files first so that a parallel make +# will build them sooner, because they are large and otherwise tend to be +# the last objects to finish building. +OBJS = \ + gimple-match.o \ + generic-match.o \ + insn-attrtab.o \ + insn-automata.o \ + insn-dfatab.o \ + insn-emit.o \ + insn-extract.o \ + insn-latencytab.o \ + insn-modes.o \ + insn-opinit.o \ + insn-output.o \ + insn-peep.o \ + insn-preds.o \ + insn-recog.o \ + insn-enums.o \ + ggc-page.o \ + adjust-alignment.o \ + alias.o \ + alloc-pool.o \ + auto-inc-dec.o \ + auto-profile.o \ + bb-reorder.o \ + bitmap.o \ + builtins.o \ + caller-save.o \ + calls.o \ + ccmp.o \ + cfg.o \ + cfganal.o \ + cfgbuild.o \ + cfgcleanup.o \ + cfgexpand.o \ + cfghooks.o \ + cfgloop.o \ + cfgloopanal.o \ + cfgloopmanip.o \ + cfgrtl.o \ + ctfc.o \ + ctfout.o \ + btfout.o \ + symtab.o \ + symtab-thunks.o \ + symtab-clones.o \ + cgraph.o \ + cgraphbuild.o \ + cgraphunit.o \ + cgraphclones.o \ + combine.o \ + combine-stack-adj.o \ + compare-elim.o \ + context.o \ + convert.o \ + coroutine-passes.o \ + coverage.o \ + cppbuiltin.o \ + cppdefault.o \ + cprop.o \ + cse.o \ + cselib.o \ + data-streamer.o \ + data-streamer-in.o \ + data-streamer-out.o \ + dbgcnt.o \ + dce.o \ + ddg.o \ + debug.o \ + df-core.o \ + df-problems.o \ + df-scan.o \ + dfp.o \ + digraph.o \ + dojump.o \ + dominance.o \ + domwalk.o \ + double-int.o \ + dse.o \ + dumpfile.o \ + dwarf2asm.o \ + dwarf2cfi.o \ + dwarf2ctf.o \ + dwarf2out.o \ + early-remat.o \ + emit-rtl.o \ + et-forest.o \ + except.o \ + explow.o \ + expmed.o \ + expr.o \ + fibonacci_heap.o \ + file-prefix-map.o \ + final.o \ + fixed-value.o \ + fold-const.o \ + fold-const-call.o \ + function.o \ + function-abi.o \ + function-tests.o \ + fwprop.o \ + gcc-rich-location.o \ + gcse.o \ + gcse-common.o \ + ggc-common.o \ + ggc-tests.o \ + gimple.o \ + gimple-array-bounds.o \ + gimple-builder.o \ + gimple-expr.o \ + gimple-if-to-switch.o \ + gimple-iterator.o \ + gimple-fold.o \ + gimple-harden-conditionals.o \ + gimple-laddress.o \ + gimple-loop-interchange.o \ + gimple-loop-jam.o \ + gimple-loop-versioning.o \ + gimple-low.o \ + gimple-predicate-analysis.o \ + gimple-pretty-print.o \ + gimple-range.o \ + gimple-range-cache.o \ + gimple-range-edge.o \ + gimple-range-fold.o \ + gimple-range-gori.o \ + gimple-range-infer.o \ + gimple-range-op.o \ + gimple-range-trace.o \ + gimple-ssa-backprop.o \ + gimple-ssa-isolate-paths.o \ + gimple-ssa-nonnull-compare.o \ + gimple-ssa-split-paths.o \ + gimple-ssa-store-merging.o \ + gimple-ssa-strength-reduction.o \ + gimple-ssa-sprintf.o \ + gimple-ssa-warn-access.o \ + gimple-ssa-warn-alloca.o \ + gimple-ssa-warn-restrict.o \ + gimple-streamer-in.o \ + gimple-streamer-out.o \ + gimple-walk.o \ + gimple-warn-recursion.o \ + gimplify.o \ + gimplify-me.o \ + godump.o \ + graph.o \ + graphds.o \ + graphviz.o \ + graphite.o \ + graphite-isl-ast-to-gimple.o \ + graphite-dependences.o \ + graphite-optimize-isl.o \ + graphite-poly.o \ + graphite-scop-detection.o \ + graphite-sese-to-poly.o \ + gtype-desc.o \ + haifa-sched.o \ + hash-map-tests.o \ + hash-set-tests.o \ + hw-doloop.o \ + hwint.o \ + ifcvt.o \ + ree.o \ + inchash.o \ + incpath.o \ + init-regs.o \ + internal-fn.o \ + ipa-cp.o \ + ipa-sra.o \ + ipa-devirt.o \ + ipa-fnsummary.o \ + ipa-polymorphic-call.o \ + ipa-split.o \ + ipa-inline.o \ + ipa-comdats.o \ + ipa-free-lang-data.o \ + ipa-visibility.o \ + ipa-inline-analysis.o \ + ipa-inline-transform.o \ + ipa-modref.o \ + ipa-modref-tree.o \ + ipa-predicate.o \ + ipa-profile.o \ + ipa-prop.o \ + ipa-param-manipulation.o \ + ipa-pure-const.o \ + ipa-icf.o \ + ipa-icf-gimple.o \ + ipa-reference.o \ + ipa-ref.o \ + ipa-utils.o \ + ipa.o \ + ira.o \ + ira-build.o \ + ira-costs.o \ + ira-conflicts.o \ + ira-color.o \ + ira-emit.o \ + ira-lives.o \ + jump.o \ + langhooks.o \ + lcm.o \ + lists.o \ + loop-doloop.o \ + loop-init.o \ + loop-invariant.o \ + loop-iv.o \ + loop-unroll.o \ + lower-subreg.o \ + lra.o \ + lra-assigns.o \ + lra-coalesce.o \ + lra-constraints.o \ + lra-eliminations.o \ + lra-lives.o \ + lra-remat.o \ + lra-spills.o \ + lto-cgraph.o \ + lto-streamer.o \ + lto-streamer-in.o \ + lto-streamer-out.o \ + lto-section-in.o \ + lto-section-out.o \ + lto-opts.o \ + lto-compress.o \ + mcf.o \ + mode-switching.o \ + modulo-sched.o \ + multiple_target.o \ + omp-offload.o \ + omp-expand.o \ + omp-general.o \ + omp-low.o \ + omp-oacc-kernels-decompose.o \ + omp-oacc-neuter-broadcast.o \ + omp-simd-clone.o \ + opt-problem.o \ + optabs.o \ + optabs-libfuncs.o \ + optabs-query.o \ + optabs-tree.o \ + optinfo.o \ + optinfo-emit-json.o \ + options-save.o \ + opts-global.o \ + ordered-hash-map-tests.o \ + passes.o \ + plugin.o \ + pointer-query.o \ + postreload-gcse.o \ + postreload.o \ + predict.o \ + print-rtl.o \ + print-rtl-function.o \ + print-tree.o \ + profile.o \ + profile-count.o \ + range.o \ + range-op.o \ + range-op-float.o \ + read-md.o \ + read-rtl.o \ + read-rtl-function.o \ + real.o \ + realmpfr.o \ + recog.o \ + reg-stack.o \ + regcprop.o \ + reginfo.o \ + regrename.o \ + regstat.o \ + reload.o \ + reload1.o \ + reorg.o \ + resource.o \ + rtl-error.o \ + rtl-ssa/accesses.o \ + rtl-ssa/blocks.o \ + rtl-ssa/changes.o \ + rtl-ssa/functions.o \ + rtl-ssa/insns.o \ + rtl-tests.o \ + rtl.o \ + rtlhash.o \ + rtlanal.o \ + rtlhooks.o \ + rtx-vector-builder.o \ + run-rtl-passes.o \ + sched-deps.o \ + sched-ebb.o \ + sched-rgn.o \ + sel-sched-ir.o \ + sel-sched-dump.o \ + sel-sched.o \ + selftest-rtl.o \ + selftest-run-tests.o \ + sese.o \ + shrink-wrap.o \ + simplify-rtx.o \ + sparseset.o \ + spellcheck.o \ + spellcheck-tree.o \ + splay-tree-utils.o \ + sreal.o \ + stack-ptr-mod.o \ + statistics.o \ + stmt.o \ + stor-layout.o \ + store-motion.o \ + streamer-hooks.o \ + stringpool.o \ + substring-locations.o \ + target-globals.o \ + targhooks.o \ + timevar.o \ + toplev.o \ + tracer.o \ + trans-mem.o \ + tree-affine.o \ + asan.o \ + tsan.o \ + ubsan.o \ + sanopt.o \ + sancov.o \ + tree-call-cdce.o \ + tree-cfg.o \ + tree-cfgcleanup.o \ + tree-chrec.o \ + tree-complex.o \ + tree-data-ref.o \ + tree-dfa.o \ + tree-diagnostic.o \ + tree-diagnostic-client-data-hooks.o \ + tree-diagnostic-path.o \ + tree-dump.o \ + tree-eh.o \ + tree-emutls.o \ + tree-if-conv.o \ + tree-inline.o \ + tree-into-ssa.o \ + tree-iterator.o \ + tree-logical-location.o \ + tree-loop-distribution.o \ + tree-nested.o \ + tree-nrv.o \ + tree-object-size.o \ + tree-outof-ssa.o \ + tree-parloops.o \ + tree-phinodes.o \ + tree-predcom.o \ + tree-pretty-print.o \ + tree-profile.o \ + tree-scalar-evolution.o \ + tree-sra.o \ + tree-switch-conversion.o \ + tree-ssa-address.o \ + tree-ssa-alias.o \ + tree-ssa-ccp.o \ + tree-ssa-coalesce.o \ + tree-ssa-copy.o \ + tree-ssa-dce.o \ + tree-ssa-dom.o \ + tree-ssa-dse.o \ + tree-ssa-forwprop.o \ + tree-ssa-ifcombine.o \ + tree-ssa-live.o \ + tree-ssa-loop-ch.o \ + tree-ssa-loop-im.o \ + tree-ssa-loop-ivcanon.o \ + tree-ssa-loop-ivopts.o \ + tree-ssa-loop-manip.o \ + tree-ssa-loop-niter.o \ + tree-ssa-loop-prefetch.o \ + tree-ssa-loop-split.o \ + tree-ssa-loop-unswitch.o \ + tree-ssa-loop.o \ + tree-ssa-math-opts.o \ + tree-ssa-operands.o \ + gimple-range-path.o \ + tree-ssa-phiopt.o \ + tree-ssa-phiprop.o \ + tree-ssa-pre.o \ + tree-ssa-propagate.o \ + tree-ssa-reassoc.o \ + tree-ssa-sccvn.o \ + tree-ssa-scopedtables.o \ + tree-ssa-sink.o \ + tree-ssa-strlen.o \ + tree-ssa-structalias.o \ + tree-ssa-tail-merge.o \ + tree-ssa-ter.o \ + tree-ssa-threadbackward.o \ + tree-ssa-threadedge.o \ + tree-ssa-threadupdate.o \ + tree-ssa-uncprop.o \ + tree-ssa-uninit.o \ + tree-ssa.o \ + tree-ssanames.o \ + tree-stdarg.o \ + tree-streamer.o \ + tree-streamer-in.o \ + tree-streamer-out.o \ + tree-tailcall.o \ + tree-vect-generic.o \ + gimple-isel.o \ + tree-vect-patterns.o \ + tree-vect-data-refs.o \ + tree-vect-stmts.o \ + tree-vect-loop.o \ + tree-vect-loop-manip.o \ + tree-vect-slp.o \ + tree-vect-slp-patterns.o \ + tree-vectorizer.o \ + tree-vector-builder.o \ + tree-vrp.o \ + tree.o \ + tristate.o \ + typed-splay-tree.o \ + valtrack.o \ + value-pointer-equiv.o \ + value-query.o \ + value-range.o \ + value-range-pretty-print.o \ + value-range-storage.o \ + value-relation.o \ + value-prof.o \ + var-tracking.o \ + varasm.o \ + varpool.o \ + vec-perm-indices.o \ + vmsdbgout.o \ + vr-values.o \ + vtable-verify.o \ + warning-control.o \ + web.o \ + wide-int.o \ + wide-int-print.o \ + $(out_object_file) \ + $(ANALYZER_OBJS) \ + $(EXTRA_OBJS) \ + $(host_hook_obj) + +# Objects in libcommon.a, potentially used by all host binaries and with +# no target dependencies. +OBJS-libcommon = diagnostic-spec.o diagnostic.o diagnostic-color.o \ + diagnostic-format-json.o \ + diagnostic-format-sarif.o \ + diagnostic-show-locus.o \ + edit-context.o \ + pretty-print.o intl.o \ + json.o \ + sbitmap.o \ + vec.o input.o hash-table.o ggc-none.o memory-block.o \ + selftest.o selftest-diagnostic.o sort.o + +# Objects in libcommon-target.a, used by drivers and by the core +# compiler and containing target-dependent code. +OBJS-libcommon-target = $(common_out_object_file) prefix.o \ + opts.o opts-common.o options.o vec.o hooks.o common/common-targhooks.o \ + hash-table.o file-find.o spellcheck.o selftest.o opt-suggestions.o + +# This lists all host objects for the front ends. +ALL_HOST_FRONTEND_OBJS = $(foreach v,$(CONFIG_LANGUAGES),$($(v)_OBJS)) + +ALL_HOST_BACKEND_OBJS = $(GCC_OBJS) $(OBJS) $(OBJS-libcommon) \ + $(OBJS-libcommon-target) main.o c-family/cppspec.o \ + $(COLLECT2_OBJS) $(EXTRA_GCC_OBJS) $(GCOV_OBJS) $(GCOV_DUMP_OBJS) \ + $(GCOV_TOOL_OBJS) $(GENGTYPE_OBJS) gcc-ar.o gcc-nm.o gcc-ranlib.o \ + lto-wrapper.o collect-utils.o + +# for anything that is shared use the cc1plus profile data, as that +# is likely the most exercised during the build +ifeq ($(if $(wildcard ../stage_current),$(shell cat \ + ../stage_current)),stageautofeedback) +$(ALL_HOST_BACKEND_OBJS): ALL_COMPILERFLAGS += -fauto-profile=cc1plus.fda +$(ALL_HOST_BACKEND_OBJS): cc1plus.fda +endif + +# This lists all host object files, whether they are included in this +# compilation or not. +ALL_HOST_OBJS = $(ALL_HOST_FRONTEND_OBJS) $(ALL_HOST_BACKEND_OBJS) + +BACKEND = libbackend.a main.o libcommon-target.a libcommon.a \ + $(CPPLIB) $(LIBDECNUMBER) + +# This is defined to "yes" if Tree checking is enabled, which roughly means +# front-end checking. +TREECHECKING = @TREECHECKING@ + +# The full name of the driver on installation +FULL_DRIVER_NAME=$(target_noncanonical)-gcc-$(version)$(exeext) + +MOSTLYCLEANFILES = insn-flags.h insn-config.h insn-codes.h \ + insn-output.cc insn-recog.cc insn-emit.cc insn-extract.cc insn-peep.cc \ + insn-attr.h insn-attr-common.h insn-attrtab.cc insn-dfatab.cc \ + insn-latencytab.cc insn-opinit.cc insn-opinit.h insn-preds.cc insn-constants.h \ + tm-preds.h tm-constrs.h checksum-options gimple-match.cc generic-match.cc \ + tree-check.h min-insn-modes.cc insn-modes.cc insn-modes.h insn-modes-inline.h \ + genrtl.h gt-*.h gtype-*.h gtype-desc.cc gtyp-input.list \ + case-cfn-macros.h cfn-operators.pd \ + xgcc$(exeext) cpp$(exeext) $(FULL_DRIVER_NAME) \ + $(EXTRA_PROGRAMS) gcc-cross$(exeext) \ + $(SPECS) collect2$(exeext) gcc-ar$(exeext) gcc-nm$(exeext) \ + gcc-ranlib$(exeext) \ + genversion$(build_exeext) gcov$(exeext) gcov-dump$(exeext) \ + gcov-tool$(exeect) \ + gengtype$(exeext) *.[0-9][0-9].* *.[si] *-checksum.cc libbackend.a \ + libcommon-target.a libcommon.a libgcc.mk perf.data + +# This symlink makes the full installation name of the driver be available +# from within the *build* directory, for use when running the JIT library +# from there (e.g. when running its testsuite). +$(FULL_DRIVER_NAME): ./xgcc$(exeext) + rm -f $@ + $(LN_S) $< $@ + +# +# SELFTEST_DEPS need to be set before including language makefile fragments. +# Otherwise $(SELFTEST_DEPS) is empty when used from /Make-lang.in. +SELFTEST_DEPS = $(GCC_PASSES) stmp-int-hdrs $(srcdir)/testsuite/selftests + +DO_LINK_SERIALIZATION = @DO_LINK_SERIALIZATION@ + +# Language makefile fragments. + +# The following targets define the interface between us and the languages. +# +# all.cross, start.encap, rest.encap, +# install-common, install-info, install-man, +# uninstall, +# mostlyclean, clean, distclean, maintainer-clean, +# +# Each language is linked in with a series of hooks. The name of each +# hooked is "lang.${target_name}" (eg: lang.info). Configure computes +# and adds these here. We use double-colon rules for some of the hooks; +# double-colon rules should be preferred for any new hooks. + +# language hooks, generated by configure +@language_hooks@ + +ifeq ($(DO_LINK_SERIALIZATION),) +LINK_PROGRESS = : +else +LINK_PROGRESS = msg="Linking $@ |"; cnt=0; if test "$(2)" = start; then \ + idx=0; cnt2=$(DO_LINK_SERIALIZATION); \ + while test $$cnt2 -le $(1); do msg="$${msg}=="; cnt2=`expr $$cnt2 + 1`; idx=`expr $$idx + 1`; done; \ + cnt=$$idx; \ + while test $$cnt -lt $(1); do msg="$${msg}>>"; cnt=`expr $$cnt + 1`; done; \ + msg="$${msg}--"; cnt=`expr $$cnt + 1`; \ + else \ + idx=`expr $(1) + 1`; \ + while test $$cnt -le $(1); do msg="$${msg}=="; cnt=`expr $$cnt + 1`; done; \ + fi; \ + while test $$cnt -lt $(SERIAL_COUNT); do msg="$${msg} "; cnt=`expr $$cnt + 1`; done; \ + msg="$${msg}| `expr 100 \* $$idx / $(SERIAL_COUNT)`%"; echo "$$msg" +endif + +# Wire in install-gnatlib invocation with `make install' for a configuration +# with top-level libada disabled. +gnat_install_lib = @gnat_install_lib@ + +# per-language makefile fragments +-include $(LANG_MAKEFRAGS) + +# target and host overrides must follow the per-language makefile fragments +# so they can override or augment language-specific variables + +# target overrides +-include $(tmake_file) + +# host overrides +-include $(xmake_file) + +# all-tree.def includes all the tree.def files. +all-tree.def: s-alltree; @true +s-alltree: Makefile + rm -f tmp-all-tree.def + echo '#include "tree.def"' > tmp-all-tree.def + echo 'END_OF_BASE_TREE_CODES' >> tmp-all-tree.def + echo '#include "c-family/c-common.def"' >> tmp-all-tree.def + ltf="$(lang_tree_files)"; for f in $$ltf; do \ + echo "#include \"$$f\""; \ + done | sed 's|$(srcdir)/||' >> tmp-all-tree.def + $(SHELL) $(srcdir)/../move-if-change tmp-all-tree.def all-tree.def + $(STAMP) s-alltree + +# Now that LANG_MAKEFRAGS are included, we can add special flags to the +# objects that belong to the front ends. We add an extra define that +# causes back-end specific include files to be poisoned, in the hope that +# we can avoid introducing dependencies of the front ends on things that +# no front end should ever look at (e.g. everything RTL related). +$(foreach file,$(ALL_HOST_FRONTEND_OBJS),$(eval CFLAGS-$(file) += -DIN_GCC_FRONTEND)) + +# + +# ----------------------------- +# Rebuilding this configuration +# ----------------------------- + +# On the use of stamps: +# Consider the example of tree-check.h. It is constructed with build/gencheck. +# A simple rule to build tree-check.h would be +# tree-check.h: build/gencheck$(build_exeext) +# $(RUN_GEN) build/gencheck$(build_exeext) > tree-check.h +# +# but tree-check.h doesn't change every time gencheck changes. It would the +# nice if targets that depend on tree-check.h wouldn't be rebuild +# unnecessarily when tree-check.h is unchanged. To make this, tree-check.h +# must not be overwritten with a identical copy. One solution is to use a +# temporary file +# tree-check.h: build/gencheck$(build_exeext) +# $(RUN_GEN) build/gencheck$(build_exeext) > tmp-check.h +# $(SHELL) $(srcdir)/../move-if-change tmp-check.h tree-check.h +# +# This solution has a different problem. Since the time stamp of tree-check.h +# is unchanged, make will try to update tree-check.h every time it runs. +# To prevent this, one can add a stamp +# tree-check.h: s-check +# s-check : build/gencheck$(build_exeext) +# $(RUN_GEN) build/gencheck$(build_exeext) > tmp-check.h +# $(SHELL) $(srcdir)/../move-if-change tmp-check.h tree-check.h +# $(STAMP) s-check +# +# The problem with this solution is that make thinks that tree-check.h is +# always unchanged. Make must be deceived into thinking that tree-check.h is +# rebuild by the "tree-check.h: s-check" rule. To do this, add a dummy command: +# tree-check.h: s-check; @true +# s-check : build/gencheck$(build_exeext) +# $(RUN_GEN) build/gencheck$(build_exeext) > tmp-check.h +# $(SHELL) $(srcdir)/../move-if-change tmp-check.h tree-check.h +# $(STAMP) s-check +# +# This is what is done in this makefile. Note that mkconfig.sh has a +# move-if-change built-in + +Makefile: config.status $(srcdir)/Makefile.in $(LANG_MAKEFRAGS) + LANGUAGES="$(CONFIG_LANGUAGES)" \ + CONFIG_HEADERS= \ + CONFIG_SHELL="$(SHELL)" \ + CONFIG_FILES=$@ $(SHELL) config.status + +config.h: cs-config.h ; @true +bconfig.h: cs-bconfig.h ; @true +tconfig.h: cs-tconfig.h ; @true +tm.h: cs-tm.h ; @true +tm_p.h: cs-tm_p.h ; @true +tm_d.h: cs-tm_d.h ; @true + +cs-config.h: Makefile + TARGET_CPU_DEFAULT="" \ + HEADERS="$(host_xm_include_list)" DEFINES="$(host_xm_defines)" \ + $(SHELL) $(srcdir)/mkconfig.sh config.h + +cs-bconfig.h: Makefile + TARGET_CPU_DEFAULT="" \ + HEADERS="$(build_xm_include_list)" DEFINES="$(build_xm_defines)" \ + $(SHELL) $(srcdir)/mkconfig.sh bconfig.h + +cs-tconfig.h: Makefile + TARGET_CPU_DEFAULT="" \ + HEADERS="$(xm_include_list)" DEFINES="USED_FOR_TARGET $(xm_defines)" \ + $(SHELL) $(srcdir)/mkconfig.sh tconfig.h + +cs-tm.h: Makefile + TARGET_CPU_DEFAULT="$(target_cpu_default)" \ + HEADERS="$(tm_include_list)" DEFINES="$(tm_defines)" \ + $(SHELL) $(srcdir)/mkconfig.sh tm.h + +cs-tm_p.h: Makefile + TARGET_CPU_DEFAULT="" \ + HEADERS="$(tm_p_include_list)" DEFINES="" \ + $(SHELL) $(srcdir)/mkconfig.sh tm_p.h + +cs-tm_d.h: Makefile + TARGET_CPU_DEFAULT="" \ + HEADERS="$(tm_d_include_list)" DEFINES="" \ + $(SHELL) $(srcdir)/mkconfig.sh tm_d.h + +# Don't automatically run autoconf, since configure.ac might be accidentally +# newer than configure. Also, this writes into the source directory which +# might be on a read-only file system. If configured for maintainer mode +# then do allow autoconf to be run. + +AUTOCONF = autoconf +ACLOCAL = aclocal +ACLOCAL_AMFLAGS = -I ../config -I .. +aclocal_deps = \ + $(srcdir)/../libtool.m4 \ + $(srcdir)/../ltoptions.m4 \ + $(srcdir)/../ltsugar.m4 \ + $(srcdir)/../ltversion.m4 \ + $(srcdir)/../lt~obsolete.m4 \ + $(srcdir)/../config/acx.m4 \ + $(srcdir)/../config/codeset.m4 \ + $(srcdir)/../config/depstand.m4 \ + $(srcdir)/../config/dfp.m4 \ + $(srcdir)/../config/gcc-plugin.m4 \ + $(srcdir)/../config/gettext-sister.m4 \ + $(srcdir)/../config/iconv.m4 \ + $(srcdir)/../config/lcmessage.m4 \ + $(srcdir)/../config/lead-dot.m4 \ + $(srcdir)/../config/lib-ld.m4 \ + $(srcdir)/../config/lib-link.m4 \ + $(srcdir)/../config/lib-prefix.m4 \ + $(srcdir)/../config/mmap.m4 \ + $(srcdir)/../config/override.m4 \ + $(srcdir)/../config/picflag.m4 \ + $(srcdir)/../config/progtest.m4 \ + $(srcdir)/../config/stdint.m4 \ + $(srcdir)/../config/warnings.m4 \ + $(srcdir)/../config/zlib.m4 \ + $(srcdir)/acinclude.m4 + +$(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(srcdir)/aclocal.m4 + (cd $(srcdir) && $(AUTOCONF)) + +$(srcdir)/aclocal.m4 : @MAINT@ $(aclocal_deps) + (cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)) + +# cstamp-h.in controls rebuilding of config.in. +# It is named cstamp-h.in and not stamp-h.in so the mostlyclean rule doesn't +# delete it. A stamp file is needed as autoheader won't update the file if +# nothing has changed. +# It remains in the source directory and is part of the distribution. +# This follows what is done in shellutils, fileutils, etc. +# "echo timestamp" is used instead of touch to be consistent with other +# packages that use autoconf (??? perhaps also to avoid problems with patch?). +# ??? Newer versions have a maintainer mode that may be useful here. + +# Don't run autoheader automatically either. +# Only run it if maintainer mode is enabled. +@MAINT@ AUTOHEADER = autoheader +@MAINT@ $(srcdir)/config.in: $(srcdir)/cstamp-h.in +@MAINT@ $(srcdir)/cstamp-h.in: $(srcdir)/configure.ac +@MAINT@ (cd $(srcdir) && $(AUTOHEADER)) +@MAINT@ @rm -f $(srcdir)/cstamp-h.in +@MAINT@ echo timestamp > $(srcdir)/cstamp-h.in +auto-host.h: cstamp-h ; @true +cstamp-h: config.in config.status + CONFIG_HEADERS=auto-host.h:config.in \ + CONFIG_FILES= \ + LANGUAGES="$(CONFIG_LANGUAGES)" $(SHELL) config.status + +# On configurations that require auto-build.h, it is created while +# running configure, so make config.status depend on it, so that +# config.status --recheck runs and updates or creates it. +@HAVE_AUTO_BUILD@auto-build.h: $(srcdir)/configure $(srcdir)/config.gcc +@HAVE_AUTO_BUILD@ @if test -f $@; then echo rerunning config.status to update $@; \ +@HAVE_AUTO_BUILD@ else echo rerunning config.status to update $@; fi +@HAVE_AUTO_BUILD@config.status: auto-build.h + +# Really, really stupid make features, such as SUN's KEEP_STATE, may force +# a target to build even if it is up-to-date. So we must verify that +# config.status does not exist before failing. +config.status: $(srcdir)/configure $(srcdir)/config.gcc $(LANG_CONFIGUREFRAGS) + @if [ ! -f config.status ] ; then \ + echo You must configure gcc. Look at http://gcc.gnu.org/install/ for details.; \ + false; \ + else \ + LANGUAGES="$(CONFIG_LANGUAGES)" $(SHELL) config.status --recheck; \ + fi + +# -------- +# UNSORTED +# -------- + +# Provide quickstrap as a target that people can type into the gcc directory, +# and that fails if you're not into it. +quickstrap: all + cd $(toplevel_builddir) && $(MAKE) all-target-libgcc + +all.internal: start.encap rest.encap doc selftest +# This is what to compile if making a cross-compiler. +all.cross: native gcc-cross$(exeext) cpp$(exeext) specs \ + libgcc-support lang.all.cross doc selftest @GENINSRC@ srcextra +# This is what must be made before installing GCC and converting libraries. +start.encap: native xgcc$(exeext) cpp$(exeext) specs \ + libgcc-support lang.start.encap @GENINSRC@ srcextra +# These can't be made until after GCC can run. +rest.encap: lang.rest.encap +# This is what is made with the host's compiler +# whether making a cross compiler or not. +native: config.status auto-host.h build-@POSUB@ $(LANGUAGES) \ + $(EXTRA_PROGRAMS) $(COLLECT2) lto-wrapper$(exeext) \ + gcc-ar$(exeext) gcc-nm$(exeext) gcc-ranlib$(exeext) + +ifeq ($(enable_plugin),yes) +native: gengtype$(exeext) +endif + +# On the target machine, finish building a cross compiler. +# This does the things that can't be done on the host machine. +rest.cross: specs + +# GCC's selftests. +# Specify a dummy input file to placate the driver. +# Specify -nostdinc to work around missing WIND_BASE environment variable +# required for *-wrs-vxworks-* targets. +# Specify -o /dev/null so the output of -S is discarded. More importantly +# It does not try to create a file with the name "null.s" on POSIX and +# "nul.s" on Windows. Because on Windows "nul" is a reserved file name. +# Beware that /dev/null is not available to mingw tools, so directly use +# "nul" instead of "/dev/null" if we're building on a mingw machine. +# Specify the path to gcc/testsuite/selftests within the srcdir +# as an argument to -fself-test. +DEVNULL=$(if $(findstring mingw,$(build)),nul,/dev/null) +SELFTEST_FLAGS = -nostdinc $(DEVNULL) -S -o $(DEVNULL) \ + -fself-test=$(srcdir)/testsuite/selftests + +# Run the selftests during the build once we have a driver and the frontend, +# so that self-test failures are caught as early as possible. +# Use "s-selftest-FE" to ensure that we only run the selftests if the +# driver, frontend, or selftest data change. +.PHONY: selftest + +# Potentially run all selftest-. The various /Make-lang.in can +# require the selftests to be run by defining their selftest- as +# s-selftest-. Otherwise, they should define it as empty. + +SELFTEST_TARGETS = @selftest_languages@ +selftest: $(SELFTEST_TARGETS) + +# Recompile all the language-independent object files. +# This is used only if the user explicitly asks for it. +compilations: $(BACKEND) + +# This archive is strictly for the host. +libbackend.a: $(OBJS) + -rm -rf libbackend.a + @# Build libbackend.a as a thin archive if possible, as doing so + @# significantly reduces build times. +ifeq ($(USE_THIN_ARCHIVES),yes) + $(AR) $(AR_FLAGS)T libbackend.a $(OBJS) +else + $(AR) $(AR_FLAGS) libbackend.a $(OBJS) + -$(RANLIB) $(RANLIB_FLAGS) libbackend.a +endif + +libcommon-target.a: $(OBJS-libcommon-target) + -rm -rf libcommon-target.a + $(AR) $(AR_FLAGS) libcommon-target.a $(OBJS-libcommon-target) + -$(RANLIB) $(RANLIB_FLAGS) libcommon-target.a + +libcommon.a: $(OBJS-libcommon) + -rm -rf libcommon.a + $(AR) $(AR_FLAGS) libcommon.a $(OBJS-libcommon) + -$(RANLIB) $(RANLIB_FLAGS) libcommon.a + +# We call this executable `xgcc' rather than `gcc' +# to avoid confusion if the current directory is in the path +# and CC is `gcc'. It is renamed to `gcc' when it is installed. +xgcc$(exeext): $(GCC_OBJS) c/gccspec.o libcommon-target.a $(LIBDEPS) \ + $(EXTRA_GCC_OBJS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(GCC_OBJS) \ + c/gccspec.o $(EXTRA_GCC_OBJS) libcommon-target.a \ + $(EXTRA_GCC_LIBS) $(LIBS) + +# cpp is to cpp0 as e.g. g++ is to cc1plus: Just another driver. +# It is part of c-family because the handled extensions are hard-coded +# and only contain c-family extensions (see known_suffixes). +cpp$(exeext): $(GCC_OBJS) c-family/cppspec.o libcommon-target.a $(LIBDEPS) \ + $(EXTRA_GCC_OBJS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(GCC_OBJS) \ + c-family/cppspec.o $(EXTRA_GCC_OBJS) libcommon-target.a \ + $(EXTRA_GCC_LIBS) $(LIBS) + +# Dump a specs file to make -B./ read these specs over installed ones. +$(SPECS): xgcc$(exeext) + $(GCC_FOR_TARGET) -dumpspecs > tmp-specs + mv tmp-specs $(SPECS) + +# We do want to create an executable named `xgcc', so we can use it to +# compile libgcc2.a. +# Also create gcc-cross, so that install-common will install properly. +gcc-cross$(exeext): xgcc$(exeext) + cp xgcc$(exeext) gcc-cross$(exeext) + +checksum-options: + echo "$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS)" > checksum-options.tmp \ + && $(srcdir)/../move-if-change checksum-options.tmp checksum-options + +# +# Build libgcc.a. + +libgcc-support: libgcc.mvars stmp-int-hdrs $(TCONFIG_H) \ + $(MACHMODE_H) version.h + +libgcc.mvars: config.status Makefile specs xgcc$(exeext) + : > tmp-libgcc.mvars + echo GCC_CFLAGS = '$(GCC_CFLAGS)' >> tmp-libgcc.mvars + echo INHIBIT_LIBC_CFLAGS = '$(INHIBIT_LIBC_CFLAGS)' >> tmp-libgcc.mvars + echo TARGET_SYSTEM_ROOT = '$(TARGET_SYSTEM_ROOT)' >> tmp-libgcc.mvars + if test @enable_default_pie@ = yes; then \ + NO_PIE_CFLAGS="-fno-PIE"; \ + else \ + NO_PIE_CFLAGS=; \ + fi; \ + echo NO_PIE_CFLAGS = "$$NO_PIE_CFLAGS" >> tmp-libgcc.mvars + + mv tmp-libgcc.mvars libgcc.mvars + +# Use the genmultilib shell script to generate the information the gcc +# driver program needs to select the library directory based on the +# switches. +multilib.h: s-mlib; @true +s-mlib: $(srcdir)/genmultilib Makefile + if test @enable_multilib@ = yes \ + || test -n "$(MULTILIB_OSDIRNAMES)"; then \ + $(SHELL) $(srcdir)/genmultilib \ + "$(MULTILIB_OPTIONS)" \ + "$(MULTILIB_DIRNAMES)" \ + "$(MULTILIB_MATCHES)" \ + "$(MULTILIB_EXCEPTIONS)" \ + "$(MULTILIB_EXTRA_OPTS)" \ + "$(MULTILIB_EXCLUSIONS)" \ + "$(MULTILIB_OSDIRNAMES)" \ + "$(MULTILIB_REQUIRED)" \ + "$(if $(MULTILIB_OSDIRNAMES),,$(MULTIARCH_DIRNAME))" \ + "$(MULTILIB_REUSE)" \ + "@enable_multilib@" \ + > tmp-mlib.h; \ + else \ + $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' '' \ + "$(MULTIARCH_DIRNAME)" '' no \ + > tmp-mlib.h; \ + fi + $(SHELL) $(srcdir)/../move-if-change tmp-mlib.h multilib.h + $(STAMP) s-mlib +# +# Compiling object files from source files. + +# Note that dependencies on obstack.h are not written +# because that file is not part of GCC. + +srcextra: gcc.srcextra lang.srcextra + +gcc.srcextra: gengtype-lex.cc + -cp -p $^ $(srcdir) + +AR_OBJS = file-find.o +AR_LIBS = @COLLECT2_LIBS@ + +gcc-ar$(exeext): gcc-ar.o $(AR_OBJS) $(LIBDEPS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) gcc-ar.o -o $@ \ + $(AR_OBJS) $(LIBS) $(AR_LIBS) + +gcc-nm$(exeext): gcc-nm.o $(AR_OBJS) $(LIBDEPS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) gcc-nm.o -o $@ \ + $(AR_OBJS) $(LIBS) $(AR_LIBS) + +gcc-ranlib$(exeext): gcc-ranlib.o $(AR_OBJS) $(LIBDEPS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) gcc-ranlib.o -o $@ \ + $(AR_OBJS) $(LIBS) $(AR_LIBS) + +CFLAGS-gcc-ar.o += $(DRIVER_DEFINES) \ + -DTARGET_MACHINE=\"$(target_noncanonical)\" \ + @TARGET_SYSTEM_ROOT_DEFINE@ -DPERSONALITY=\"ar\" + +CFLAGS-gcc-ranlib.o += $(DRIVER_DEFINES) \ + -DTARGET_MACHINE=\"$(target_noncanonical)\" \ + @TARGET_SYSTEM_ROOT_DEFINE@ -DPERSONALITY=\"ranlib\" + +CFLAGS-gcc-nm.o += $(DRIVER_DEFINES) \ + -DTARGET_MACHINE=\"$(target_noncanonical)\" \ + @TARGET_SYSTEM_ROOT_DEFINE@ -DPERSONALITY=\"nm\" + +# ??? the implicit rules dont trigger if the source file has a different name +# so copy instead +gcc-ranlib.cc: gcc-ar.cc + cp $^ $@ + +gcc-nm.cc: gcc-ar.cc + cp $^ $@ + +COLLECT2_OBJS = collect2.o collect2-aix.o vec.o ggc-none.o \ + collect-utils.o file-find.o hash-table.o selftest.o +COLLECT2_LIBS = @COLLECT2_LIBS@ +collect2$(exeext): $(COLLECT2_OBJS) $(LIBDEPS) +# Don't try modifying collect2 (aka ld) in place--it might be linking this. + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o T$@ \ + $(COLLECT2_OBJS) $(LIBS) $(COLLECT2_LIBS) + mv -f T$@ $@ + +CFLAGS-collect2.o += -DTARGET_MACHINE=\"$(target_noncanonical)\" \ + @TARGET_SYSTEM_ROOT_DEFINE@ + +LTO_WRAPPER_OBJS = lto-wrapper.o collect-utils.o ggc-none.o +lto-wrapper$(exeext): $(LTO_WRAPPER_OBJS) libcommon-target.a $(LIBDEPS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o T$@ \ + $(LTO_WRAPPER_OBJS) libcommon-target.a $(LIBS) + mv -f T$@ $@ + +# Files used by all variants of C or by the stand-alone pre-processor. + +CFLAGS-c-family/c-opts.o += @TARGET_SYSTEM_ROOT_DEFINE@ + +CFLAGS-c-family/c-pch.o += -DHOST_MACHINE=\"$(host)\" \ + -DTARGET_MACHINE=\"$(target)\" + +default-c.o: config/default-c.cc + $(COMPILE) $< + $(POSTCOMPILE) + +# Files used by all variants of C and some other languages. + +CFLAGS-prefix.o += -DPREFIX=\"$(prefix)\" -DBASEVER=$(BASEVER_s) +prefix.o: $(BASEVER) + +# Files used by the D language front end. + +default-d.o: config/default-d.cc + $(COMPILE) $< + $(POSTCOMPILE) + +# Language-independent files. + +DRIVER_DEFINES = \ + -DSTANDARD_STARTFILE_PREFIX=\"$(unlibsubdir)/\" \ + -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc/\" \ + -DSTANDARD_LIBEXEC_PREFIX=\"$(libexecdir)/gcc/\" \ + -DDEFAULT_TARGET_VERSION=\"$(version)\" \ + -DDEFAULT_REAL_TARGET_MACHINE=\"$(real_target_noncanonical)\" \ + -DDEFAULT_TARGET_MACHINE=\"$(target_noncanonical)\" \ + -DSTANDARD_BINDIR_PREFIX=\"$(bindir)/\" \ + -DTOOLDIR_BASE_PREFIX=\"$(libsubdir_to_prefix)$(prefix_to_exec_prefix)\" \ + -DACCEL_DIR_SUFFIX=\"$(accel_dir_suffix)\" \ + @TARGET_SYSTEM_ROOT_DEFINE@ \ + $(VALGRIND_DRIVER_DEFINES) \ + $(if $(SHLIB),$(if $(filter yes,@enable_shared@),-DENABLE_SHARED_LIBGCC)) \ + -DCONFIGURE_SPECS="\"@CONFIGURE_SPECS@\"" \ + -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \ + -DNATIVE_SYSTEM_HEADER_DIR=\"$(NATIVE_SYSTEM_HEADER_DIR)\" + +CFLAGS-gcc.o += $(DRIVER_DEFINES) -DBASEVER=$(BASEVER_s) +gcc.o: $(BASEVER) + +specs.h : s-specs ; @true +s-specs : Makefile + lsf="$(lang_specs_files)"; for f in $$lsf; do \ + echo "#include \"$$f\""; \ + done | sed 's|$(srcdir)/||' > tmp-specs.h + $(SHELL) $(srcdir)/../move-if-change tmp-specs.h specs.h + $(STAMP) s-specs + +optionlist: s-options ; @true +s-options: $(ALL_OPT_FILES) Makefile $(srcdir)/opt-gather.awk + LC_ALL=C ; export LC_ALL ; \ + $(AWK) -f $(srcdir)/opt-gather.awk $(ALL_OPT_FILES) > tmp-optionlist + $(SHELL) $(srcdir)/../move-if-change tmp-optionlist optionlist + $(STAMP) s-options + +options.cc: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \ + $(srcdir)/optc-gen.awk + $(AWK) -f $(srcdir)/opt-functions.awk -f $(srcdir)/opt-read.awk \ + -f $(srcdir)/optc-gen.awk \ + -v header_name="config.h system.h coretypes.h options.h tm.h" < $< > $@ + +options-save.cc: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \ + $(srcdir)/optc-save-gen.awk + $(AWK) -f $(srcdir)/opt-functions.awk -f $(srcdir)/opt-read.awk \ + -f $(srcdir)/optc-save-gen.awk \ + -v header_name="config.h system.h coretypes.h tm.h" < $< > $@ + +options.h: s-options-h ; @true +s-options-h: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \ + $(srcdir)/opth-gen.awk + $(AWK) -f $(srcdir)/opt-functions.awk -f $(srcdir)/opt-read.awk \ + -f $(srcdir)/opth-gen.awk \ + < $< > tmp-options.h + $(SHELL) $(srcdir)/../move-if-change tmp-options.h options.h + $(STAMP) $@ + +dumpvers: dumpvers.cc + +# lto-compress.o needs $(ZLIBINC) added to the include flags. +CFLAGS-lto-compress.o += $(ZLIBINC) $(ZSTD_INC) + +CFLAGS-lto-streamer-in.o += -DTARGET_MACHINE=\"$(target_noncanonical)\" + +bversion.h: s-bversion; @true +s-bversion: BASE-VER + echo "#define BUILDING_GCC_MAJOR `echo $(BASEVER_c) | sed -e 's/^\([0-9]*\).*$$/\1/'`" > bversion.h + echo "#define BUILDING_GCC_MINOR `echo $(BASEVER_c) | sed -e 's/^[0-9]*\.\([0-9]*\).*$$/\1/'`" >> bversion.h + echo "#define BUILDING_GCC_PATCHLEVEL `echo $(BASEVER_c) | sed -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\)$$/\1/'`" >> bversion.h + echo "#define BUILDING_GCC_VERSION (BUILDING_GCC_MAJOR * 1000 + BUILDING_GCC_MINOR)" >> bversion.h + $(STAMP) s-bversion + +CFLAGS-toplev.o += -DTARGET_NAME=\"$(target_noncanonical)\" +CFLAGS-tree-diagnostic-client-data-hooks.o += -DTARGET_NAME=\"$(target_noncanonical)\" +CFLAGS-optinfo-emit-json.o += -DTARGET_NAME=\"$(target_noncanonical)\" $(ZLIBINC) +CFLAGS-analyzer/engine.o += $(ZLIBINC) + +pass-instances.def: $(srcdir)/passes.def $(PASSES_EXTRA) \ + $(srcdir)/gen-pass-instances.awk + $(AWK) -f $(srcdir)/gen-pass-instances.awk \ + $(srcdir)/passes.def $(PASSES_EXTRA) > pass-instances.def + +$(out_object_file): $(out_file) + $(COMPILE) $< + $(POSTCOMPILE) + +$(common_out_object_file): $(common_out_file) + $(COMPILE) $< + $(POSTCOMPILE) +# +# Generate header and source files from the machine description, +# and compile them. + +.PRECIOUS: insn-config.h insn-flags.h insn-codes.h insn-constants.h \ + insn-emit.cc insn-recog.cc insn-extract.cc insn-output.cc insn-peep.cc \ + insn-attr.h insn-attr-common.h insn-attrtab.cc insn-dfatab.cc \ + insn-latencytab.cc insn-preds.cc gimple-match.cc generic-match.cc \ + insn-target-def.h + +# Dependencies for the md file. The first time through, we just assume +# the md file itself and the generated dependency file (in order to get +# it built). The second time through we have the dependency file. +-include mddeps.mk +MD_DEPS = s-mddeps $(md_file) $(MD_INCLUDES) + +s-mddeps: $(md_file) $(MD_INCLUDES) build/genmddeps$(build_exeext) + $(RUN_GEN) build/genmddeps$(build_exeext) $(md_file) > tmp-mddeps + $(SHELL) $(srcdir)/../move-if-change tmp-mddeps mddeps.mk + $(STAMP) s-mddeps + +# For each of the files generated by running a generator program over +# the machine description, the following static pattern rules run the +# generator program only if the machine description has changed, +# but touch the target file only when its contents actually change. +# The "; @true" construct forces Make to recheck the timestamp on +# the target file. + +simple_rtl_generated_h = insn-attr.h insn-attr-common.h insn-codes.h \ + insn-config.h insn-flags.h insn-target-def.h + +simple_rtl_generated_c = insn-automata.cc insn-emit.cc \ + insn-extract.cc insn-output.cc \ + insn-peep.cc insn-recog.cc + +simple_generated_h = $(simple_rtl_generated_h) insn-constants.h + +simple_generated_c = $(simple_rtl_generated_c) insn-enums.cc + +$(simple_generated_h:insn-%.h=s-%) \ +$(simple_generated_c:insn-%.cc=s-%): s-%: $(MD_DEPS) + +$(simple_rtl_generated_h:insn-%.h=s-%) \ +$(simple_rtl_generated_c:insn-%.cc=s-%): s-%: insn-conditions.md + +$(simple_generated_h): insn-%.h: s-%; @true + +$(simple_generated_h:insn-%.h=s-%): s-%: build/gen%$(build_exeext) + $(RUN_GEN) build/gen$*$(build_exeext) $(md_file) \ + $(filter insn-conditions.md,$^) > tmp-$*.h + $(SHELL) $(srcdir)/../move-if-change tmp-$*.h insn-$*.h + $(STAMP) s-$* + +$(simple_generated_c): insn-%.cc: s-%; @true +$(simple_generated_c:insn-%.cc=s-%): s-%: build/gen%$(build_exeext) + $(RUN_GEN) build/gen$*$(build_exeext) $(md_file) \ + $(filter insn-conditions.md,$^) > tmp-$*.cc + $(SHELL) $(srcdir)/../move-if-change tmp-$*.cc insn-$*.cc + $(STAMP) s-$* + +# gencheck doesn't read the machine description, and the file produced +# doesn't use the insn-* convention. +tree-check.h: s-check ; @true +s-check : build/gencheck$(build_exeext) + $(RUN_GEN) build/gencheck$(build_exeext) > tmp-check.h + $(SHELL) $(srcdir)/../move-if-change tmp-check.h tree-check.h + $(STAMP) s-check + +# genattrtab produces three files: tmp-{attrtab.cc,dfatab.cc,latencytab.cc} +insn-attrtab.cc insn-dfatab.cc insn-latencytab.cc: s-attrtab ; @true +s-attrtab : $(MD_DEPS) build/genattrtab$(build_exeext) \ + insn-conditions.md + $(RUN_GEN) build/genattrtab$(build_exeext) $(md_file) insn-conditions.md \ + -Atmp-attrtab.cc -Dtmp-dfatab.cc -Ltmp-latencytab.cc + $(SHELL) $(srcdir)/../move-if-change tmp-attrtab.cc insn-attrtab.cc + $(SHELL) $(srcdir)/../move-if-change tmp-dfatab.cc insn-dfatab.cc + $(SHELL) $(srcdir)/../move-if-change tmp-latencytab.cc insn-latencytab.cc + $(STAMP) s-attrtab + +# genopinit produces two files. +insn-opinit.cc insn-opinit.h: s-opinit ; @true +s-opinit: $(MD_DEPS) build/genopinit$(build_exeext) insn-conditions.md + $(RUN_GEN) build/genopinit$(build_exeext) $(md_file) \ + insn-conditions.md -htmp-opinit.h -ctmp-opinit.cc + $(SHELL) $(srcdir)/../move-if-change tmp-opinit.h insn-opinit.h + $(SHELL) $(srcdir)/../move-if-change tmp-opinit.cc insn-opinit.cc + $(STAMP) s-opinit + +# gencondmd doesn't use the standard naming convention. +build/gencondmd.cc: s-conditions; @true +s-conditions: $(MD_DEPS) build/genconditions$(build_exeext) + $(RUN_GEN) build/genconditions$(build_exeext) $(md_file) > tmp-condmd.cc + $(SHELL) $(srcdir)/../move-if-change tmp-condmd.cc build/gencondmd.cc + $(STAMP) s-conditions + +insn-conditions.md: s-condmd; @true +s-condmd: build/gencondmd$(build_exeext) + $(RUN_GEN) build/gencondmd$(build_exeext) > tmp-cond.md + $(SHELL) $(srcdir)/../move-if-change tmp-cond.md insn-conditions.md + $(STAMP) s-condmd + + +# These files are generated by running the same generator more than +# once with different options, so they have custom rules. The +# stampfile idiom is the same. +genrtl.h: s-genrtl-h; @true + +s-genrtl-h: build/gengenrtl$(build_exeext) + $(RUN_GEN) build/gengenrtl$(build_exeext) > tmp-genrtl.h + $(SHELL) $(srcdir)/../move-if-change tmp-genrtl.h genrtl.h + $(STAMP) s-genrtl-h + +insn-modes.cc: s-modes; @true +insn-modes.h: s-modes-h; @true +insn-modes-inline.h: s-modes-inline-h; @true +min-insn-modes.cc: s-modes-m; @true + +s-modes: build/genmodes$(build_exeext) + $(RUN_GEN) build/genmodes$(build_exeext) > tmp-modes.cc + $(SHELL) $(srcdir)/../move-if-change tmp-modes.cc insn-modes.cc + $(STAMP) s-modes + +s-modes-h: build/genmodes$(build_exeext) + $(RUN_GEN) build/genmodes$(build_exeext) -h > tmp-modes.h + $(SHELL) $(srcdir)/../move-if-change tmp-modes.h insn-modes.h + $(STAMP) s-modes-h + +s-modes-inline-h: build/genmodes$(build_exeext) + $(RUN_GEN) build/genmodes$(build_exeext) -i > tmp-modes-inline.h + $(SHELL) $(srcdir)/../move-if-change tmp-modes-inline.h \ + insn-modes-inline.h + $(STAMP) s-modes-inline-h + +s-modes-m: build/genmodes$(build_exeext) + $(RUN_GEN) build/genmodes$(build_exeext) -m > tmp-min-modes.cc + $(SHELL) $(srcdir)/../move-if-change tmp-min-modes.cc min-insn-modes.cc + $(STAMP) s-modes-m + +insn-preds.cc: s-preds; @true +tm-preds.h: s-preds-h; @true +tm-constrs.h: s-constrs-h; @true + +.PHONY: mddump +mddump: $(BUILD_RTL) $(MD_DEPS) build/genmddump$(build_exeext) + $(RUN_GEN) build/genmddump$(build_exeext) $(md_file) > tmp-mddump.md + +s-preds: $(MD_DEPS) build/genpreds$(build_exeext) + $(RUN_GEN) build/genpreds$(build_exeext) $(md_file) > tmp-preds.cc + $(SHELL) $(srcdir)/../move-if-change tmp-preds.cc insn-preds.cc + $(STAMP) s-preds + +s-preds-h: $(MD_DEPS) build/genpreds$(build_exeext) + $(RUN_GEN) build/genpreds$(build_exeext) -h $(md_file) > tmp-preds.h + $(SHELL) $(srcdir)/../move-if-change tmp-preds.h tm-preds.h + $(STAMP) s-preds-h + +s-constrs-h: $(MD_DEPS) build/genpreds$(build_exeext) + $(RUN_GEN) build/genpreds$(build_exeext) -c $(md_file) > tmp-constrs.h + $(SHELL) $(srcdir)/../move-if-change tmp-constrs.h tm-constrs.h + $(STAMP) s-constrs-h + +s-case-cfn-macros: build/gencfn-macros$(build_exeext) + $(RUN_GEN) build/gencfn-macros$(build_exeext) -c \ + > tmp-case-cfn-macros.h + $(SHELL) $(srcdir)/../move-if-change tmp-case-cfn-macros.h \ + case-cfn-macros.h + $(STAMP) s-case-cfn-macros +case-cfn-macros.h: s-case-cfn-macros; @true + +s-cfn-operators: build/gencfn-macros$(build_exeext) + $(RUN_GEN) build/gencfn-macros$(build_exeext) -o \ + > tmp-cfn-operators.pd + $(SHELL) $(srcdir)/../move-if-change tmp-cfn-operators.pd \ + cfn-operators.pd + $(STAMP) s-cfn-operators +cfn-operators.pd: s-cfn-operators; @true + +target-hooks-def.h: s-target-hooks-def-h; @true +# make sure that when we build info files, the used tm.texi is up to date. +$(srcdir)/doc/tm.texi: s-tm-texi; @true + +s-target-hooks-def-h: build/genhooks$(build_exeext) + $(RUN_GEN) build/genhooks$(build_exeext) "Target Hook" \ + > tmp-target-hooks-def.h + $(SHELL) $(srcdir)/../move-if-change tmp-target-hooks-def.h \ + target-hooks-def.h + $(STAMP) s-target-hooks-def-h + +c-family/c-target-hooks-def.h: s-c-target-hooks-def-h; @true + +s-c-target-hooks-def-h: build/genhooks$(build_exeext) + $(RUN_GEN) build/genhooks$(build_exeext) "C Target Hook" \ + > tmp-c-target-hooks-def.h + $(SHELL) $(srcdir)/../move-if-change tmp-c-target-hooks-def.h \ + c-family/c-target-hooks-def.h + $(STAMP) s-c-target-hooks-def-h + +common/common-target-hooks-def.h: s-common-target-hooks-def-h; @true + +s-common-target-hooks-def-h: build/genhooks$(build_exeext) + $(RUN_GEN) build/genhooks$(build_exeext) "Common Target Hook" \ + > tmp-common-target-hooks-def.h + $(SHELL) $(srcdir)/../move-if-change tmp-common-target-hooks-def.h \ + common/common-target-hooks-def.h + $(STAMP) s-common-target-hooks-def-h + +d/d-target-hooks-def.h: s-d-target-hooks-def-h; @true + +s-d-target-hooks-def-h: build/genhooks$(build_exeext) + $(RUN_GEN) build/genhooks$(build_exeext) "D Target Hook" \ + > tmp-d-target-hooks-def.h + $(SHELL) $(srcdir)/../move-if-change tmp-d-target-hooks-def.h \ + d/d-target-hooks-def.h + $(STAMP) s-d-target-hooks-def-h + +# check if someone mistakenly only changed tm.texi. +# We use a different pathname here to avoid a circular dependency. +s-tm-texi: $(srcdir)/doc/../doc/tm.texi + +# The tm.texi we want to compare against / check into svn should have +# unix-style line endings. To make this work on MinGW, remove \r. +# \r is not portable to Solaris tr, therefore we have a special +# case for ASCII. We use \r for other encodings like EBCDIC. +s-tm-texi: build/genhooks$(build_exeext) $(srcdir)/doc/tm.texi.in + $(RUN_GEN) build/genhooks$(build_exeext) -d \ + $(srcdir)/doc/tm.texi.in > tmp-tm.texi + case `echo X|tr X '\101'` in \ + A) tr -d '\015' < tmp-tm.texi > tmp2-tm.texi ;; \ + *) tr -d '\r' < tmp-tm.texi > tmp2-tm.texi ;; \ + esac + mv tmp2-tm.texi tmp-tm.texi + $(SHELL) $(srcdir)/../move-if-change tmp-tm.texi tm.texi + @if cmp -s $(srcdir)/doc/tm.texi tm.texi; then \ + $(STAMP) $@; \ + elif test $(srcdir)/doc/tm.texi -nt $(srcdir)/doc/tm.texi.in \ + && ( test $(srcdir)/doc/tm.texi -nt $(srcdir)/target.def \ + || test $(srcdir)/doc/tm.texi -nt $(srcdir)/c-family/c-target.def \ + || test $(srcdir)/doc/tm.texi -nt $(srcdir)/common/common-target.def \ + || test $(srcdir)/doc/tm.texi -nt $(srcdir)/d/d-target.def \ + ); then \ + echo >&2 ; \ + echo You should edit $(srcdir)/doc/tm.texi.in rather than $(srcdir)/doc/tm.texi . >&2 ; \ + false; \ + else \ + echo >&2 ; \ + echo Verify that you have permission to grant a GFDL license for all >&2 ; \ + echo new text in $(objdir)/tm.texi, then copy it to $(srcdir)/doc/tm.texi. >&2 ; \ + false; \ + fi + +gimple-match.cc: s-match gimple-match-head.cc ; @true +generic-match.cc: s-match generic-match-head.cc ; @true + +s-match: build/genmatch$(build_exeext) $(srcdir)/match.pd cfn-operators.pd + $(RUN_GEN) build/genmatch$(build_exeext) --gimple $(srcdir)/match.pd \ + > tmp-gimple-match.cc + $(RUN_GEN) build/genmatch$(build_exeext) --generic $(srcdir)/match.pd \ + > tmp-generic-match.cc + $(SHELL) $(srcdir)/../move-if-change tmp-gimple-match.cc \ + gimple-match.cc + $(SHELL) $(srcdir)/../move-if-change tmp-generic-match.cc \ + generic-match.cc + $(STAMP) s-match + +GTFILES = $(CPPLIB_H) $(srcdir)/input.h $(srcdir)/coretypes.h \ + $(host_xm_file_list) \ + $(OPTIONS_H_EXTRA) \ + $(tm_file_list) $(HASHTAB_H) $(SPLAY_TREE_H) $(srcdir)/bitmap.h \ + $(srcdir)/wide-int.h $(srcdir)/alias.h \ + $(srcdir)/coverage.cc $(srcdir)/rtl.h \ + $(srcdir)/optabs.h $(srcdir)/tree.h $(srcdir)/tree-core.h \ + $(srcdir)/libfuncs.h $(SYMTAB_H) \ + $(srcdir)/real.h $(srcdir)/function.h $(srcdir)/insn-addr.h $(srcdir)/hwint.h \ + $(srcdir)/fixed-value.h \ + $(srcdir)/function-abi.h \ + $(srcdir)/output.h $(srcdir)/cfgloop.h $(srcdir)/cfg.h $(srcdir)/profile-count.h \ + $(srcdir)/cselib.h $(srcdir)/basic-block.h $(srcdir)/ipa-ref.h $(srcdir)/cgraph.h \ + $(srcdir)/symtab-thunks.h $(srcdir)/symtab-thunks.cc \ + $(srcdir)/symtab-clones.h \ + $(srcdir)/reload.h $(srcdir)/caller-save.cc $(srcdir)/symtab.cc \ + $(srcdir)/alias.cc $(srcdir)/bitmap.cc $(srcdir)/cselib.cc $(srcdir)/cgraph.cc \ + $(srcdir)/ipa-prop.cc $(srcdir)/ipa-cp.cc $(srcdir)/ipa-utils.h \ + $(srcdir)/ipa-param-manipulation.h $(srcdir)/ipa-sra.cc \ + $(srcdir)/ipa-modref.h $(srcdir)/ipa-modref.cc \ + $(srcdir)/ipa-modref-tree.h \ + $(srcdir)/signop.h \ + $(srcdir)/diagnostic-spec.h $(srcdir)/diagnostic-spec.cc \ + $(srcdir)/dwarf2out.h \ + $(srcdir)/dwarf2asm.cc \ + $(srcdir)/dwarf2cfi.cc \ + $(srcdir)/dwarf2ctf.cc \ + $(srcdir)/dwarf2out.cc \ + $(srcdir)/ctfc.h \ + $(srcdir)/ctfout.cc \ + $(srcdir)/btfout.cc \ + $(srcdir)/tree-vect-generic.cc \ + $(srcdir)/gimple-isel.cc \ + $(srcdir)/dojump.cc $(srcdir)/emit-rtl.h \ + $(srcdir)/emit-rtl.cc $(srcdir)/except.h $(srcdir)/explow.cc $(srcdir)/expr.cc \ + $(srcdir)/expr.h \ + $(srcdir)/function.cc $(srcdir)/except.cc \ + $(srcdir)/ggc-tests.cc \ + $(srcdir)/gcse.cc $(srcdir)/godump.cc \ + $(srcdir)/lists.cc $(srcdir)/optabs-libfuncs.cc \ + $(srcdir)/profile.cc $(srcdir)/mcf.cc \ + $(srcdir)/reg-stack.cc $(srcdir)/cfgrtl.cc \ + $(srcdir)/stor-layout.cc \ + $(srcdir)/stringpool.cc $(srcdir)/tree.cc $(srcdir)/varasm.cc \ + $(srcdir)/gimple.h \ + $(srcdir)/gimple-ssa.h \ + $(srcdir)/tree-ssanames.cc $(srcdir)/tree-eh.cc $(srcdir)/tree-ssa-address.cc \ + $(srcdir)/tree-cfg.cc $(srcdir)/tree-ssa-loop-ivopts.cc \ + $(srcdir)/tree-dfa.cc \ + $(srcdir)/tree-iterator.cc $(srcdir)/gimple-expr.cc \ + $(srcdir)/tree-chrec.h \ + $(srcdir)/tree-scalar-evolution.cc \ + $(srcdir)/tree-ssa-operands.h \ + $(srcdir)/tree-profile.cc $(srcdir)/tree-nested.cc \ + $(srcdir)/omp-offload.h \ + $(srcdir)/omp-general.cc \ + $(srcdir)/omp-low.cc \ + $(srcdir)/targhooks.cc $(out_file) $(srcdir)/passes.cc \ + $(srcdir)/cgraphclones.cc \ + $(srcdir)/tree-phinodes.cc \ + $(srcdir)/tree-ssa-alias.h \ + $(srcdir)/tree-ssanames.h \ + $(srcdir)/tree-vrp.h \ + $(srcdir)/value-range.h \ + $(srcdir)/value-range-storage.h \ + $(srcdir)/ipa-prop.h \ + $(srcdir)/trans-mem.cc \ + $(srcdir)/lto-streamer.h \ + $(srcdir)/target-globals.h \ + $(srcdir)/ipa-predicate.h \ + $(srcdir)/ipa-fnsummary.h \ + $(srcdir)/vtable-verify.cc \ + $(srcdir)/asan.cc \ + $(srcdir)/ubsan.cc \ + $(srcdir)/tsan.cc \ + $(srcdir)/sanopt.cc \ + $(srcdir)/sancov.cc \ + $(srcdir)/ipa-devirt.cc \ + $(srcdir)/internal-fn.h \ + $(srcdir)/calls.cc \ + $(srcdir)/omp-general.h \ + $(srcdir)/analyzer/analyzer-language.cc \ + @all_gtfiles@ + +# Compute the list of GT header files from the corresponding C sources, +# possibly nested within config or language subdirectories. Match gengtype's +# behavior in this respect: gt-LANG-file.h for "file" anywhere within a LANG +# language subdir, gt-file.h otherwise (no subdir indication for config/ +# related sources). + +GTFILES_H = $(subst /,-, \ + $(shell echo $(patsubst $(srcdir)/%,gt-%, \ + $(patsubst %.cc,%.h, \ + $(filter %.cc, $(GTFILES)))) \ + | sed -e "s|/[^ ]*/|/|g" -e "s|gt-config/|gt-|g")) + +GTFILES_LANG_H = $(patsubst [%], gtype-%.h, $(filter [%], $(GTFILES))) +ALL_GTFILES_H := $(sort $(GTFILES_H) $(GTFILES_LANG_H)) + +# $(GTFILES) may be too long to put on a command line, so we have to +# write it out to a file (taking care not to do that in a way that +# overflows a command line!) and then have gengtype read the file in. + +$(ALL_GTFILES_H) gtype-desc.cc gtype-desc.h gtype.state: s-gtype ; @true + +### Common flags to gengtype [e.g. -v or -B backupdir] +GENGTYPE_FLAGS= + +gtyp-input.list: s-gtyp-input ; @true +s-gtyp-input: Makefile + @: $(call write_entries_to_file,$(GTFILES),tmp-gi.list) + $(SHELL) $(srcdir)/../move-if-change tmp-gi.list gtyp-input.list + $(STAMP) s-gtyp-input + +s-gtype: $(EXTRA_GTYPE_DEPS) build/gengtype$(build_exeext) \ + $(filter-out [%], $(GTFILES)) gtyp-input.list +# First, parse all files and save a state file. + $(RUN_GEN) build/gengtype$(build_exeext) $(GENGTYPE_FLAGS) \ + -S $(srcdir) -I gtyp-input.list -w tmp-gtype.state +# Second, read the state file and generate all files. This ensure that +# gtype.state is correctly read: + $(SHELL) $(srcdir)/../move-if-change tmp-gtype.state gtype.state + $(RUN_GEN) build/gengtype$(build_exeext) $(GENGTYPE_FLAGS) \ + -r gtype.state + $(STAMP) s-gtype + +generated_files = config.h tm.h $(TM_P_H) $(TM_D_H) $(TM_H) multilib.h \ + $(simple_generated_h) specs.h \ + tree-check.h genrtl.h insn-modes.h insn-modes-inline.h \ + tm-preds.h tm-constrs.h \ + $(ALL_GTFILES_H) gtype-desc.cc gtype-desc.h version.h \ + options.h target-hooks-def.h insn-opinit.h \ + common/common-target-hooks-def.h pass-instances.def \ + gimple-match.cc generic-match.cc \ + c-family/c-target-hooks-def.h d/d-target-hooks-def.h \ + case-cfn-macros.h \ + cfn-operators.pd omp-device-properties.h + +# +# How to compile object files to run on the build machine. + +build/%.o : # dependencies provided by explicit rule later + $(COMPILER_FOR_BUILD) -c $(BUILD_COMPILERFLAGS) $(BUILD_CPPFLAGS) \ + -o $@ $< + +# Header dependencies for the programs that generate source code. +# These are library modules... +build/errors.o : errors.cc $(BCONFIG_H) $(SYSTEM_H) errors.h +build/gensupport.o: gensupport.cc $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) $(RTL_BASE_H) $(OBSTACK_H) errors.h \ + $(HASHTAB_H) $(READ_MD_H) $(GENSUPPORT_H) $(HASH_TABLE_H) +build/ggc-none.o : ggc-none.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) \ + $(GGC_H) +build/min-insn-modes.o : min-insn-modes.cc $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) +build/print-rtl.o: print-rtl.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) \ + $(GTM_H) $(RTL_BASE_H) +build/read-md.o: read-md.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) \ + $(HASHTAB_H) errors.h $(READ_MD_H) +build/read-rtl.o: read-rtl.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) \ + $(GTM_H) $(RTL_BASE_H) $(OBSTACK_H) $(HASHTAB_H) $(READ_MD_H) \ + $(GENSUPPORT_H) +build/rtl.o: rtl.cc $(BCONFIG_H) $(CORETYPES_H) $(GTM_H) $(SYSTEM_H) \ + $(RTL_H) $(GGC_H) errors.h +build/vec.o : vec.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) $(VEC_H) \ + $(GGC_H) toplev.h $(DIAGNOSTIC_CORE_H) $(HASH_TABLE_H) +build/hash-table.o : hash-table.cc $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(HASH_TABLE_H) $(GGC_H) toplev.h $(DIAGNOSTIC_CORE_H) +build/sort.o : sort.cc $(BCONFIG_H) $(SYSTEM_H) +build/inchash.o : inchash.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) \ + $(HASHTAB_H) inchash.h +build/gencondmd.o : build/gencondmd.cc $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) insn-constants.h \ + $(filter-out insn-flags.h, $(RTL_H) $(TM_P_H) $(FUNCTION_H) $(REGS_H) \ + $(RECOG_H) output.h $(FLAGS_H) $(RESOURCE_H) toplev.h $(DIAGNOSTIC_CORE_H) reload.h \ + $(EXCEPT_H) tm-constrs.h) +# This pulls in tm-pred.h which contains inline functions wrapping up +# predicates from the back-end so those functions must be discarded. +# No big deal since gencondmd.cc is a dummy file for non-GCC compilers. +build/gencondmd.o : \ + BUILD_CFLAGS := $(filter-out -fkeep-inline-functions, $(BUILD_CFLAGS)) + +# ...these are the programs themselves. +build/genattr.o : genattr.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) +build/genattr-common.o : genattr-common.cc $(RTL_BASE_H) $(BCONFIG_H) \ + $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) +build/genattrtab.o : genattrtab.cc $(RTL_BASE_H) $(OBSTACK_H) \ + $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(GGC_H) \ + $(READ_MD_H) $(GENSUPPORT_H) $(FNMATCH_H) +build/genautomata.o : genautomata.cc $(RTL_BASE_H) $(OBSTACK_H) \ + $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(VEC_H) \ + $(HASHTAB_H) $(GENSUPPORT_H) $(FNMATCH_H) +build/gencheck.o : gencheck.cc all-tree.def $(BCONFIG_H) $(GTM_H) \ + $(SYSTEM_H) $(CORETYPES_H) tree.def c-family/c-common.def \ + $(lang_tree_files) gimple.def +build/genchecksum.o : genchecksum.cc $(BCONFIG_H) $(SYSTEM_H) $(MD5_H) +build/gencodes.o : gencodes.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) errors.h $(GENSUPPORT_H) +build/genconditions.o : genconditions.cc $(RTL_BASE_H) $(BCONFIG_H) \ + $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(HASHTAB_H) \ + $(READ_MD_H) $(GENSUPPORT_H) +build/genconfig.o : genconfig.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) errors.h $(GENSUPPORT_H) +build/genconstants.o : genconstants.cc $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) errors.h $(READ_MD_H) +build/genemit.o : genemit.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) internal-fn.def +build/genenums.o : genenums.cc $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) errors.h $(READ_MD_H) +build/genextract.o : genextract.cc $(RTL_BASE_H) $(BCONFIG_H) \ + $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) +build/genflags.o : genflags.cc $(RTL_BASE_H) $(OBSTACK_H) $(BCONFIG_H) \ + $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) +build/gentarget-def.o : gentarget-def.cc $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) $(RTL_BASE_H) errors.h $(READ_MD_H) \ + $(GENSUPPORT_H) $(HASH_TABLE_H) target-insns.def +build/gengenrtl.o : gengenrtl.cc $(BCONFIG_H) $(SYSTEM_H) rtl.def + +# The gengtype generator program is special: Two versions are built. +# One is for the build machine, and one is for the host to allow +# plugins to define their types and generate the supporting GGC +# datastructures and routines with GTY markers. +# The host object files depend on CONFIG_H, and the build objects +# on BCONFIG_H. For the build objects, add -DGENERATOR_FILE manually, +# the build-%: rule doesn't apply to them. + +GENGTYPE_OBJS = gengtype.o gengtype-parse.o gengtype-state.o \ + gengtype-lex.o errors.o + +gengtype-lex.o build/gengtype-lex.o : gengtype-lex.cc gengtype.h $(SYSTEM_H) +CFLAGS-gengtype-lex.o += -DHOST_GENERATOR_FILE +build/gengtype-lex.o: $(BCONFIG_H) + +gengtype-parse.o build/gengtype-parse.o : gengtype-parse.cc gengtype.h \ + $(SYSTEM_H) +CFLAGS-gengtype-parse.o += -DHOST_GENERATOR_FILE +build/gengtype-parse.o: $(BCONFIG_H) + +gengtype-state.o build/gengtype-state.o: gengtype-state.cc $(SYSTEM_H) \ + gengtype.h errors.h version.h $(HASHTAB_H) $(OBSTACK_H) \ + $(XREGEX_H) +CFLAGS-gengtype-state.o += -DHOST_GENERATOR_FILE +build/gengtype-state.o: $(BCONFIG_H) +gengtype.o build/gengtype.o : gengtype.cc $(SYSTEM_H) gengtype.h \ + rtl.def insn-notes.def errors.h version.h \ + $(HASHTAB_H) $(OBSTACK_H) $(XREGEX_H) +CFLAGS-gengtype.o += -DHOST_GENERATOR_FILE +build/gengtype.o: $(BCONFIG_H) + +CFLAGS-errors.o += -DHOST_GENERATOR_FILE + +build/genmddeps.o: genmddeps.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) \ + errors.h $(READ_MD_H) +build/genmodes.o : genmodes.cc $(BCONFIG_H) $(SYSTEM_H) errors.h \ + $(HASHTAB_H) machmode.def $(extra_modes_file) +build/genopinit.o : genopinit.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) errors.h $(GENSUPPORT_H) optabs.def +build/genoutput.o : genoutput.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) +build/genpeep.o : genpeep.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) errors.h $(GENSUPPORT_H) toplev.h \ + $(DIAGNOSTIC_CORE_H) +build/genpreds.o : genpreds.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) $(OBSTACK_H) +build/genrecog.o : genrecog.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) \ + $(HASH_TABLE_H) inchash.h +build/genhooks.o : genhooks.cc $(TARGET_DEF) $(C_TARGET_DEF) \ + $(COMMON_TARGET_DEF) $(D_TARGET_DEF) $(BCONFIG_H) $(SYSTEM_H) errors.h +build/genmddump.o : genmddump.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) +build/genmatch.o : genmatch.cc $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) errors.h $(HASH_TABLE_H) hash-map.h $(GGC_H) is-a.h \ + tree.def builtins.def internal-fn.def case-cfn-macros.h $(CPPLIB_H) +build/gencfn-macros.o : gencfn-macros.cc $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) errors.h $(HASH_TABLE_H) hash-set.h builtins.def \ + internal-fn.def + +# Compile the programs that generate insn-* from the machine description. +# They are compiled with $(COMPILER_FOR_BUILD), and associated libraries, +# since they need to run on this machine +# even if GCC is being compiled to run on some other machine. + +# All these programs use the RTL reader ($(BUILD_RTL)). +genprogrtl = attr attr-common attrtab automata codes conditions config emit \ + extract flags mddump opinit output peep preds recog target-def +$(genprogrtl:%=build/gen%$(build_exeext)): $(BUILD_RTL) + +# All these programs use the MD reader ($(BUILD_MD)). +genprogmd = $(genprogrtl) mddeps constants enums +$(genprogmd:%=build/gen%$(build_exeext)): $(BUILD_MD) + +# All these programs need to report errors. +genprogerr = $(genprogmd) genrtl modes gtype hooks cfn-macros condmd +$(genprogerr:%=build/gen%$(build_exeext)): $(BUILD_ERRORS) + +# Remaining build programs. +genprog = $(genprogerr) check checksum match + +# These programs need libs over and above what they get from the above list. +build/genautomata$(build_exeext) : BUILD_LIBS += -lm + +build/genrecog$(build_exeext) : build/hash-table.o build/inchash.o +build/gencfn-macros$(build_exeext) : build/hash-table.o build/vec.o \ + build/ggc-none.o build/sort.o + +# For stage1 and when cross-compiling use the build libcpp which is +# built with NLS disabled. For stage2+ use the host library and +# its dependencies. +ifeq ($(build_objdir),$(build_libobjdir)) +BUILD_CPPLIB = $(build_libobjdir)/libcpp/libcpp.a +else +BUILD_CPPLIB = $(CPPLIB) $(LIBIBERTY) +build/genmatch$(build_exeext): BUILD_LIBDEPS += $(LIBINTL_DEP) $(LIBICONV_DEP) +build/genmatch$(build_exeext): BUILD_LIBS += $(LIBINTL) $(LIBICONV) +endif + +build/genmatch$(build_exeext) : $(BUILD_CPPLIB) \ + $(BUILD_ERRORS) build/vec.o build/hash-table.o build/sort.o + +# These programs are not linked with the MD reader. +build/gengtype$(build_exeext) : build/gengtype-lex.o build/gengtype-parse.o \ + build/gengtype-state.o build/errors.o + +gengtype$(exeext) : gengtype.o gengtype-lex.o gengtype-parse.o \ + gengtype-state.o errors.o $(LIBDEPS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \ + $(filter-out $(LIBDEPS), $^) $(LIBS) + +# Rule for the generator programs: +$(genprog:%=build/gen%$(build_exeext)): build/gen%$(build_exeext): build/gen%.o $(BUILD_LIBDEPS) + +$(LINKER_FOR_BUILD) $(BUILD_LINKERFLAGS) $(BUILD_LDFLAGS) -o $@ \ + $(filter-out $(BUILD_LIBDEPS), $^) $(BUILD_LIBS) + +omp-general.o: omp-device-properties.h + +omp_device_properties = @omp_device_properties@ +omp-device-properties.h: s-omp-device-properties-h ; @true +s-omp-device-properties-h: @omp_device_property_deps@ + -rm -f tmp-omp-device-properties.h; \ + for kind in kind arch isa; do \ + echo 'const char omp_offload_device_'$${kind}'[] = ' \ + >> tmp-omp-device-properties.h; \ + for prop in none $(omp_device_properties); do \ + [ "$$prop" = "none" ] && continue; \ + tgt=`echo "$$prop" | sed 's/=.*$$//'`; \ + props=`echo "$$prop" | sed 's/.*=//'`; \ + echo "\"$$tgt\\0\"" >> tmp-omp-device-properties.h; \ + sed -n 's/^'$${kind}': //p' $${props} \ + | sed 's/[[:blank:]]/ /g;s/ */ /g;s/^ //;s/ $$//;s/ /\\0/g;s/^/"/;s/$$/\\0\\0"/' \ + >> tmp-omp-device-properties.h; \ + done; \ + echo '"";' >> tmp-omp-device-properties.h; \ + done; \ + $(SHELL) $(srcdir)/../move-if-change tmp-omp-device-properties.h \ + omp-device-properties.h + $(STAMP) s-omp-device-properties-h + +# Generated source files for gengtype. Prepend inclusion of +# config.h/bconfig.h because AIX requires _LARGE_FILES to be defined before +# any system header is included. +gengtype-lex.cc : gengtype-lex.l + -$(FLEX) $(FLEXFLAGS) -o$@ $< && { \ + echo '#ifdef HOST_GENERATOR_FILE' > $@.tmp; \ + echo '#include "config.h"' >> $@.tmp; \ + echo '#else' >> $@.tmp; \ + echo '#include "bconfig.h"' >> $@.tmp; \ + echo '#endif' >> $@.tmp; \ + cat $@ >> $@.tmp; \ + mv $@.tmp $@; \ + } + +# +# Remake internationalization support. +CFLAGS-intl.o += -DLOCALEDIR=\"$(localedir)\" + +# +# Remake cpp. + +PREPROCESSOR_DEFINES = \ + -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \ + -DFIXED_INCLUDE_DIR=\"$(libsubdir)/include-fixed\" \ + -DGPLUSPLUS_INCLUDE_DIR=\"$(gcc_gxx_include_dir)\" \ + -DGPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT=$(gcc_gxx_include_dir_add_sysroot) \ + -DGPLUSPLUS_TOOL_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/$(target_noncanonical)\" \ + -DGPLUSPLUS_BACKWARD_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/backward\" \ + -DGPLUSPLUS_LIBCXX_INCLUDE_DIR=\"$(gcc_gxx_libcxx_include_dir)\" \ + -DGPLUSPLUS_LIBCXX_INCLUDE_DIR_ADD_SYSROOT=$(gcc_gxx_libcxx_include_dir_add_sysroot) \ + -DLOCAL_INCLUDE_DIR=\"$(local_includedir)\" \ + -DCROSS_INCLUDE_DIR=\"$(CROSS_SYSTEM_HEADER_DIR)\" \ + -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \ + -DNATIVE_SYSTEM_HEADER_DIR=\"$(NATIVE_SYSTEM_HEADER_DIR)\" \ + -DPREFIX=\"$(prefix)/\" \ + -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc/\" \ + @TARGET_SYSTEM_ROOT_DEFINE@ + +CFLAGS-cppbuiltin.o += $(PREPROCESSOR_DEFINES) -DBASEVER=$(BASEVER_s) +cppbuiltin.o: $(BASEVER) + +CFLAGS-cppdefault.o += $(PREPROCESSOR_DEFINES) + +# Note for the stamp targets, we run the program `true' instead of +# having an empty command (nothing following the semicolon). + +# genversion.cc is run on the build machine to generate version.h +CFLAGS-build/genversion.o += -DBASEVER=$(BASEVER_s) -DDATESTAMP=$(DATESTAMP_s) \ + -DREVISION=$(REVISION_s) \ + -DDEVPHASE=$(DEVPHASE_s) -DPKGVERSION=$(PKGVERSION_s) \ + -DBUGURL=$(BUGURL_s) + +build/genversion.o: genversion.cc $(BCONFIG_H) $(SYSTEM_H) $(srcdir)/DATESTAMP + +build/genversion$(build_exeext): build/genversion.o + +$(LINKER_FOR_BUILD) $(BUILD_LINKERFLAGS) $(BUILD_LDFLAGS) \ + build/genversion.o -o $@ + +version.h: s-version; @true +s-version: build/genversion$(build_exeext) + build/genversion$(build_exeext) > tmp-version.h + $(SHELL) $(srcdir)/../move-if-change tmp-version.h version.h + $(STAMP) s-version + +# gcov.o needs $(ZLIBINC) added to the include flags. +CFLAGS-gcov.o += $(ZLIBINC) + +GCOV_OBJS = gcov.o json.o +gcov$(exeext): $(GCOV_OBJS) $(LIBDEPS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_OBJS) \ + hash-table.o ggc-none.o $(LIBS) $(ZLIB) -o $@ +GCOV_DUMP_OBJS = gcov-dump.o +gcov-dump$(exeext): $(GCOV_DUMP_OBJS) $(LIBDEPS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_DUMP_OBJS) \ + hash-table.o ggc-none.o\ + $(LIBS) -o $@ + +GCOV_TOOL_DEP_FILES = $(srcdir)/../libgcc/libgcov-util.c gcov-io.cc $(GCOV_IO_H) \ + $(srcdir)/../libgcc/libgcov-driver.c $(srcdir)/../libgcc/libgcov-driver-system.c \ + $(srcdir)/../libgcc/libgcov-merge.c $(srcdir)/../libgcc/libgcov.h \ + $(SYSTEM_H) coretypes.h $(TM_H) $(CONFIG_H) version.h intl.h $(DIAGNOSTIC_H) +libgcov-util.o: $(srcdir)/../libgcc/libgcov-util.c $(GCOV_TOOL_DEP_FILES) + +$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -o $@ $< +libgcov-driver-tool.o: $(srcdir)/../libgcc/libgcov-driver.c $(GCOV_TOOL_DEP_FILES) + +$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + -DIN_GCOV_TOOL=1 -o $@ $< +libgcov-merge-tool.o: $(srcdir)/../libgcc/libgcov-merge.c $(GCOV_TOOL_DEP_FILES) + +$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + -DIN_GCOV_TOOL=1 -o $@ $< +GCOV_TOOL_OBJS = gcov-tool.o libgcov-util.o libgcov-driver-tool.o libgcov-merge-tool.o +gcov-tool$(exeext): $(GCOV_TOOL_OBJS) $(LIBDEPS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_TOOL_OBJS) $(LIBS) -o $@ +# +# Build the include directories. The stamp files are stmp-* rather than +# s-* so that mostlyclean does not force the include directory to +# be rebuilt. + +# Build the include directories. +stmp-int-hdrs: $(STMP_FIXINC) $(T_GLIMITS_H) $(T_STDINT_GCC_H) $(USER_H) fixinc_list +# Copy in the headers provided with gcc. +# +# The sed command gets just the last file name component; +# this is necessary because VPATH could add a dirname. +# Using basename would be simpler, but some systems don't have it. +# +# The touch command is here to workaround an AIX/Linux NFS bug. +# +# The move-if-change + cp -p twists for limits.h are intended to preserve +# the time stamp when we regenerate, to prevent pointless rebuilds during +# e.g. install-no-fixedincludes. + -if [ -d include ] ; then true; else mkdir include; chmod a+rx include; fi + -if [ -d include-fixed ] ; then true; else mkdir include-fixed; chmod a+rx include-fixed; fi + for file in .. $(USER_H); do \ + if [ X$$file != X.. ]; then \ + realfile=`echo $$file | sed -e 's|.*/\([^/]*\)$$|\1|'`; \ + $(STAMP) include/$$realfile; \ + rm -f include/$$realfile; \ + cp $$file include; \ + chmod a+r include/$$realfile; \ + fi; \ + done + for file in .. $(USER_H_INC_NEXT_PRE); do \ + if [ X$$file != X.. ]; then \ + mv include/$$file include/x_$$file; \ + echo "#include_next <$$file>" >include/$$file; \ + cat include/x_$$file >>include/$$file; \ + rm -f include/x_$$file; \ + chmod a+r include/$$file; \ + fi; \ + done + for file in .. $(USER_H_INC_NEXT_POST); do \ + if [ X$$file != X.. ]; then \ + echo "#include_next <$$file>" >>include/$$file; \ + chmod a+r include/$$file; \ + fi; \ + done + rm -f include/stdint.h + if [ $(USE_GCC_STDINT) = wrap ]; then \ + rm -f include/stdint-gcc.h; \ + cp $(srcdir)/ginclude/stdint-gcc.h include/stdint-gcc.h; \ + chmod a+r include/stdint-gcc.h; \ + cp $(srcdir)/ginclude/stdint-wrap.h include/stdint.h; \ + chmod a+r include/stdint.h; \ + elif [ $(USE_GCC_STDINT) = provide ]; then \ + cp $(T_STDINT_GCC_H) include/stdint.h; \ + chmod a+r include/stdint.h; \ + fi + set -e; for ml in `cat fixinc_list`; do \ + sysroot_headers_suffix=`echo $${ml} | sed -e 's/;.*$$//'`; \ + multi_dir=`echo $${ml} | sed -e 's/^[^;]*;//'`; \ + include_dir=include$${multi_dir}; \ + if $(LIMITS_H_TEST) ; then \ + cat $(srcdir)/limitx.h $(T_GLIMITS_H) $(srcdir)/limity.h > tmp-xlimits.h; \ + else \ + cat $(T_GLIMITS_H) > tmp-xlimits.h; \ + fi; \ + $(mkinstalldirs) $${include_dir}; \ + chmod a+rx $${include_dir} || true; \ + $(SHELL) $(srcdir)/../move-if-change \ + tmp-xlimits.h tmp-limits.h; \ + rm -f $${include_dir}/limits.h; \ + cp -p tmp-limits.h $${include_dir}/limits.h; \ + chmod a+r $${include_dir}/limits.h; \ + cp $(srcdir)/gsyslimits.h $${include_dir}/syslimits.h; \ + done +# Install the README + if [ x$(STMP_FIXINC) != x ]; then \ + rm -f include-fixed/README; \ + cp $(srcdir)/../fixincludes/README-fixinc include-fixed/README; \ + chmod a+r include-fixed/README; \ + fi; + $(STAMP) $@ + +.PHONY: install-gcc-tooldir +install-gcc-tooldir: + $(mkinstalldirs) $(DESTDIR)$(gcc_tooldir) + +macro_list: s-macro_list; @true +s-macro_list : $(GCC_PASSES) cc1$(exeext) + echo | $(GCC_FOR_TARGET) -E -dM - | \ + sed -n -e 's/^#define \([^_][a-zA-Z0-9_]*\).*/\1/p' \ + -e 's/^#define \(_[^_A-Z][a-zA-Z0-9_]*\).*/\1/p' | \ + sort -u > tmp-macro_list + $(SHELL) $(srcdir)/../move-if-change tmp-macro_list macro_list + $(STAMP) s-macro_list + +fixinc_list: s-fixinc_list; @true +s-fixinc_list : $(GCC_PASSES) +# Build up a list of multilib directories and corresponding sysroot +# suffixes, in form sysroot;multilib. + if $(GCC_FOR_TARGET) -print-sysroot-headers-suffix > /dev/null 2>&1; then \ + set -e; for ml in `$(GCC_FOR_TARGET) -print-multi-lib`; do \ + multi_dir=`echo $${ml} | sed -e 's/;.*$$//'`; \ + flags=`echo $${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \ + sfx=`$(GCC_FOR_TARGET) $${flags} -print-sysroot-headers-suffix`; \ + if [ "$${multi_dir}" = "." ]; \ + then multi_dir=""; \ + else \ + multi_dir=/$${multi_dir}; \ + fi; \ + echo "$${sfx};$${multi_dir}"; \ + done; \ + else \ + echo ";"; \ + fi > tmp-fixinc_list + $(SHELL) $(srcdir)/../move-if-change tmp-fixinc_list fixinc_list + $(STAMP) s-fixinc_list + +# The line below is supposed to avoid accidentally matching the +# built-in suffix rule `.o:' to build fixincl out of fixincl.o. You'd +# expect fixincl to be newer than fixincl.o, such that this situation +# would never come up. As it turns out, if you use ccache with +# CCACHE_HARDLINK enabled, the compiler doesn't embed the current +# working directory in object files (-g absent, or -fno-working-dir +# present), and build and host are the same, fixincl for the host will +# build after fixincl for the build machine, getting a cache hit, +# thereby updating the timestamp of fixincl.o in the host tree. +# Because of CCACHE_HARDLINK, this will also update the timestamp in +# the build tree, and so fixincl in the build tree will appear to be +# out of date. Yuck. +../$(build_subdir)/fixincludes/fixincl: ; @ : + +# Build fixed copies of system files. +# Abort if no system headers available, unless building a crosscompiler. +# FIXME: abort unless building --without-headers would be more accurate and less ugly +stmp-fixinc: gsyslimits.h macro_list fixinc_list \ + $(build_objdir)/fixincludes/fixincl \ + $(build_objdir)/fixincludes/fixinc.sh + rm -rf include-fixed; mkdir include-fixed + -chmod a+rx include-fixed + if [ -d ../prev-gcc ]; then \ + cd ../prev-gcc && \ + $(MAKE) real-$(INSTALL_HEADERS_DIR) DESTDIR=`pwd`/../gcc/ \ + libsubdir=. ; \ + else \ + set -e; for ml in `cat fixinc_list`; do \ + sysroot_headers_suffix=`echo $${ml} | sed -e 's/;.*$$//'`; \ + multi_dir=`echo $${ml} | sed -e 's/^[^;]*;//'`; \ + fix_dir=include-fixed$${multi_dir}; \ + if ! $(inhibit_libc) && test ! -d ${BUILD_SYSTEM_HEADER_DIR}; then \ + echo The directory that should contain system headers does not exist: >&2 ; \ + echo " ${BUILD_SYSTEM_HEADER_DIR}" >&2 ; \ + tooldir_sysinc=`echo "${gcc_tooldir}/sys-include" | sed -e :a -e "s,[^/]*/\.\.\/,," -e ta`; \ + if test "x${BUILD_SYSTEM_HEADER_DIR}" = "x$${tooldir_sysinc}"; \ + then sleep 1; else exit 1; fi; \ + fi; \ + $(mkinstalldirs) $${fix_dir}; \ + chmod a+rx $${fix_dir} || true; \ + (TARGET_MACHINE='$(target)'; srcdir=`cd $(srcdir); ${PWD_COMMAND}`; \ + SHELL='$(SHELL)'; MACRO_LIST=`${PWD_COMMAND}`/macro_list ; \ + gcc_dir=`${PWD_COMMAND}` ; \ + export TARGET_MACHINE srcdir SHELL MACRO_LIST && \ + cd $(build_objdir)/fixincludes && \ + $(SHELL) ./fixinc.sh "$${gcc_dir}/$${fix_dir}" \ + $(BUILD_SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS) ); \ + done; \ + fi + $(STAMP) stmp-fixinc +# + +# Install with the gcc headers files, not the fixed include files, which we +# are typically not allowed to distribute. The general idea is to: +# - Get to "install" with a bare set of internal headers, not the +# fixed system ones, +# - Prevent rebuilds of what normally depends on the headers, which is +# useless for installation purposes and would rely on improper headers. +# - Restore as much of the original state as possible. + +.PHONY: install-no-fixedincludes + +install-no-fixedincludes: + # Stash the current set of headers away, save stamps we're going to + # alter explicitly, and arrange for fixincludes not to run next time + # we trigger a headers rebuild. + -rm -rf tmp-include + -mv include tmp-include 2>/dev/null + -mv include-fixed tmp-include-fixed 2>/dev/null + -mv stmp-int-hdrs tmp-stmp-int-hdrs 2>/dev/null + -mv stmp-fixinc tmp-stmp-fixinc 2>/dev/null + -mkdir include + -cp -p $(srcdir)/gsyslimits.h include/syslimits.h + -touch stmp-fixinc + + # Rebuild our internal headers, restore the original stamps so that + # "install" doesn't trigger pointless rebuilds because of that update, + # then do install + $(MAKE) $(FLAGS_TO_PASS) stmp-int-hdrs + -mv tmp-stmp-int-hdrs stmp-int-hdrs 2>/dev/null + -mv tmp-stmp-fixinc stmp-fixinc 2>/dev/null + $(MAKE) $(FLAGS_TO_PASS) install + + # Restore the original set of maybe-fixed headers + -rm -rf include; mv tmp-include include 2>/dev/null + -rm -rf include-fixed; mv tmp-include-fixed include-fixed 2>/dev/null + +# Remake the info files. + +doc: $(BUILD_INFO) $(GENERATED_MANPAGES) + +INFOFILES = doc/cpp.info doc/gcc.info doc/gccint.info \ + doc/gccinstall.info doc/cppinternals.info + +info: $(INFOFILES) lang.info @GENINSRC@ srcinfo lang.srcinfo + +srcinfo: $(INFOFILES) + -cp -p $^ $(srcdir)/doc + +TEXI_CPP_FILES = cpp.texi fdl.texi cppenv.texi cppopts.texi \ + gcc-common.texi gcc-vers.texi + +TEXI_GCC_FILES = gcc.texi gcc-common.texi gcc-vers.texi frontends.texi \ + standards.texi invoke.texi extend.texi md.texi objc.texi \ + gcov.texi trouble.texi bugreport.texi service.texi \ + contribute.texi compat.texi funding.texi gnu.texi gpl_v3.texi \ + fdl.texi contrib.texi cppenv.texi cppopts.texi avr-mmcu.texi \ + implement-c.texi implement-cxx.texi gcov-tool.texi gcov-dump.texi \ + lto-dump.texi + +# we explicitly use $(srcdir)/doc/tm.texi here to avoid confusion with +# the generated tm.texi; the latter might have a more recent timestamp, +# but we don't want to rebuild the info files unless the contents of +# the *.texi files have changed. +TEXI_GCCINT_FILES = gccint.texi gcc-common.texi gcc-vers.texi \ + contribute.texi makefile.texi configterms.texi options.texi \ + portability.texi interface.texi passes.texi rtl.texi md.texi \ + $(srcdir)/doc/tm.texi hostconfig.texi fragments.texi \ + configfiles.texi collect2.texi headerdirs.texi funding.texi \ + gnu.texi gpl_v3.texi fdl.texi contrib.texi languages.texi \ + sourcebuild.texi gty.texi libgcc.texi cfg.texi tree-ssa.texi \ + loop.texi generic.texi gimple.texi plugins.texi optinfo.texi \ + match-and-simplify.texi analyzer.texi ux.texi poly-int.texi + +TEXI_GCCINSTALL_FILES = install.texi fdl.texi \ + gcc-common.texi gcc-vers.texi + +TEXI_CPPINT_FILES = cppinternals.texi gcc-common.texi gcc-vers.texi + +# gcc-vers.texi is generated from the version files. +gcc-vers.texi: $(BASEVER) $(DEVPHASE) + (echo "@set version-GCC $(BASEVER_c)"; \ + if [ "$(DEVPHASE_c)" = "experimental" ]; \ + then echo "@set DEVELOPMENT"; \ + else echo "@clear DEVELOPMENT"; \ + fi) > $@T + $(build_file_translate) echo @set srcdir `echo $(abs_srcdir) | sed -e 's|\\([@{}]\\)|@\\1|g'` >> $@T + if [ -n "$(PKGVERSION)" ]; then \ + echo "@set VERSION_PACKAGE $(PKGVERSION)" >> $@T; \ + fi + echo "@set BUGURL $(BUGURL_TEXI)" >> $@T; \ + mv -f $@T $@ + + +# The *.1, *.7, *.info, *.dvi, and *.pdf files are being generated from implicit +# patterns. To use them, put each of the specific targets with its +# specific dependencies but no build commands. + +doc/cpp.info: $(TEXI_CPP_FILES) +doc/gcc.info: $(TEXI_GCC_FILES) +doc/gccint.info: $(TEXI_GCCINT_FILES) +doc/cppinternals.info: $(TEXI_CPPINT_FILES) + +doc/%.info: %.texi + if [ x$(BUILD_INFO) = xinfo ]; then \ + $(MAKEINFO) $(MAKEINFOFLAGS) -I . -I $(gcc_docdir) \ + -I $(gcc_docdir)/include -o $@ $<; \ + fi + +# Duplicate entry to handle renaming of gccinstall.info +doc/gccinstall.info: $(TEXI_GCCINSTALL_FILES) + if [ x$(BUILD_INFO) = xinfo ]; then \ + $(MAKEINFO) $(MAKEINFOFLAGS) -I $(gcc_docdir) \ + -I $(gcc_docdir)/include -o $@ $<; \ + fi + +doc/cpp.dvi: $(TEXI_CPP_FILES) +doc/gcc.dvi: $(TEXI_GCC_FILES) +doc/gccint.dvi: $(TEXI_GCCINT_FILES) +doc/cppinternals.dvi: $(TEXI_CPPINT_FILES) + +doc/cpp.pdf: $(TEXI_CPP_FILES) +doc/gcc.pdf: $(TEXI_GCC_FILES) +doc/gccint.pdf: $(TEXI_GCCINT_FILES) +doc/cppinternals.pdf: $(TEXI_CPPINT_FILES) + +$(build_htmldir)/cpp/index.html: $(TEXI_CPP_FILES) +$(build_htmldir)/gcc/index.html: $(TEXI_GCC_FILES) +$(build_htmldir)/gccint/index.html: $(TEXI_GCCINT_FILES) +$(build_htmldir)/cppinternals/index.html: $(TEXI_CPPINT_FILES) + +DVIFILES = doc/gcc.dvi doc/gccint.dvi doc/gccinstall.dvi doc/cpp.dvi \ + doc/cppinternals.dvi + +dvi:: $(DVIFILES) lang.dvi + +doc/%.dvi: %.texi + $(TEXI2DVI) -I . -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $< + +# Duplicate entry to handle renaming of gccinstall.dvi +doc/gccinstall.dvi: $(TEXI_GCCINSTALL_FILES) + $(TEXI2DVI) -I . -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $< + +PDFFILES = doc/gcc.pdf doc/gccint.pdf doc/gccinstall.pdf doc/cpp.pdf \ + doc/cppinternals.pdf + +pdf:: $(PDFFILES) lang.pdf + +doc/%.pdf: %.texi + $(TEXI2PDF) -I . -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $< + +# Duplicate entry to handle renaming of gccinstall.pdf +doc/gccinstall.pdf: $(TEXI_GCCINSTALL_FILES) + $(TEXI2PDF) -I . -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $< + +# List the directories or single hmtl files which are installed by +# install-html. The lang.html file triggers language fragments to build +# html documentation. +HTMLS_INSTALL=$(build_htmldir)/cpp $(build_htmldir)/gcc \ + $(build_htmldir)/gccinstall $(build_htmldir)/gccint \ + $(build_htmldir)/cppinternals + +# List the html file targets. +HTMLS_BUILD=$(build_htmldir)/cpp/index.html $(build_htmldir)/gcc/index.html \ + $(build_htmldir)/gccinstall/index.html $(build_htmldir)/gccint/index.html \ + $(build_htmldir)/cppinternals/index.html lang.html + +html:: $(HTMLS_BUILD) + +$(build_htmldir)/%/index.html: %.texi + $(mkinstalldirs) $(@D) + rm -f $(@D)/* + $(TEXI2HTML) $(MAKEINFO_TOC_INLINE_FLAG) \ + -I $(abs_docdir) -I $(abs_docdir)/include -o $(@D) $< + +# Duplicate entry to handle renaming of gccinstall +$(build_htmldir)/gccinstall/index.html: $(TEXI_GCCINSTALL_FILES) + $(mkinstalldirs) $(@D) + echo rm -f $(@D)/* + SOURCEDIR=$(abs_docdir) \ + DESTDIR=$(@D) \ + $(SHELL) $(srcdir)/doc/install.texi2html + +MANFILES = doc/gcov.1 doc/cpp.1 doc/gcc.1 doc/gfdl.7 doc/gpl.7 \ + doc/fsf-funding.7 doc/gcov-tool.1 doc/gcov-dump.1 \ + $(if $(filter yes,@enable_lto@),doc/lto-dump.1) + +generated-manpages: man + +man: $(MANFILES) lang.man @GENINSRC@ srcman lang.srcman + +srcman: $(MANFILES) + -cp -p $^ $(srcdir)/doc + +doc/%.1: %.pod + $(STAMP) $@ + -($(POD2MAN) --section=1 $< > $(@).T$$$$ && \ + mv -f $(@).T$$$$ $@) || \ + (rm -f $(@).T$$$$ && exit 1) + +doc/%.7: %.pod + $(STAMP) $@ + -($(POD2MAN) --section=7 $< > $(@).T$$$$ && \ + mv -f $(@).T$$$$ $@) || \ + (rm -f $(@).T$$$$ && exit 1) + +%.pod: %.texi + $(STAMP) $@ + -$(TEXI2POD) -DBUGURL="$(BUGURL_TEXI)" $< > $@ + +.INTERMEDIATE: cpp.pod gcc.pod gfdl.pod fsf-funding.pod gpl.pod +cpp.pod: cpp.texi cppenv.texi cppopts.texi + +# These next rules exist because the output name is not the same as +# the input name, so our implicit %.pod rule will not work. + +gcc.pod: invoke.texi cppenv.texi cppopts.texi gcc-vers.texi + $(STAMP) $@ + -$(TEXI2POD) $< > $@ +gfdl.pod: fdl.texi + $(STAMP) $@ + -$(TEXI2POD) $< > $@ +fsf-funding.pod: funding.texi + $(STAMP) $@ + -$(TEXI2POD) $< > $@ +gpl.pod: gpl_v3.texi + $(STAMP) $@ + -$(TEXI2POD) $< > $@ + +# +# Deletion of files made during compilation. +# There are four levels of this: +# `mostlyclean', `clean', `distclean' and `maintainer-clean'. +# `mostlyclean' is useful while working on a particular type of machine. +# It deletes most, but not all, of the files made by compilation. +# It does not delete libgcc.a or its parts, so it won't have to be recompiled. +# `clean' deletes everything made by running `make all'. +# `distclean' also deletes the files made by config. +# `maintainer-clean' also deletes everything that could be regenerated +# automatically, except for `configure'. +# We remove as much from the language subdirectories as we can +# (less duplicated code). + +mostlyclean: lang.mostlyclean + -rm -f $(MOSTLYCLEANFILES) + -rm -f *$(objext) c-family/*$(objext) + -rm -f *$(coverageexts) +# Delete build programs + -rm -f build/* + -rm -f mddeps.mk +# Delete other built files. + -rm -f specs.h options.cc options.h options-save.cc +# Delete the stamp and temporary files. + -rm -f s-* tmp-* stamp-* stmp-* + -rm -f */stamp-* */tmp-* +# Delete debugging dump files. + -rm -f *.[0-9][0-9].* */*.[0-9][0-9].* +# Delete some files made during installation. + -rm -f specs $(SPECS) + -rm -f collect collect2 mips-tfile mips-tdump +# Delete unwanted output files from TeX. + -rm -f *.toc *.log *.vr *.fn *.cp *.tp *.ky *.pg + -rm -f */*.toc */*.log */*.vr */*.fn */*.cp */*.tp */*.ky */*.pg +# Delete sorted indices we don't actually use. + -rm -f gcc.vrs gcc.kys gcc.tps gcc.pgs gcc.fns +# Delete core dumps. + -rm -f core */core +# Delete file generated for gengtype + -rm -f gtyp-input.list +# Delete files generated by gengtype + -rm -f gtype-* + -rm -f gt-* + -rm -f gtype.state +# Delete genchecksum outputs + -rm -f *-checksum.cc +# Delete lock-and-run bits + -rm -rf linkfe.lck lock-stamp.* + +# Delete all files made by compilation +# that don't exist in the distribution. +clean: mostlyclean lang.clean + -rm -f libgcc.a libgcc_eh.a libgcov.a + -rm -f libgcc_s* + -rm -f libunwind* + -rm -f config.h tconfig.h bconfig.h tm_p.h tm.h + -rm -f options.cc options.h optionlist + -rm -f cs-* + -rm -f doc/*.dvi + -rm -f doc/*.pdf +# Delete the include directories. + -rm -rf include include-fixed + +# Delete all files that users would normally create +# while building and installing GCC. +distclean: clean lang.distclean + -rm -f auto-host.h auto-build.h + -rm -f cstamp-h + -rm -f config.status config.run config.cache config.bak + -rm -f Make-lang Make-hooks Make-host Make-target + -rm -f Makefile *.oaux + -rm -f gthr-default.h + -rm -f TAGS */TAGS + -rm -f *.asm + -rm -f site.exp site.bak testsuite/site.exp testsuite/site.bak + -rm -f testsuite/*.log testsuite/*.sum + -cd testsuite && rm -f x *.x *.x? *.exe *.rpo *.o *.s *.S *.cc + -cd testsuite && rm -f *.out *.gcov *$(coverageexts) + -rm -rf ${QMTEST_DIR} stamp-qmtest + -rm -f .gdbinit configargs.h + -rm -f gcov.pod +# Delete po/*.gmo only if we are not building in the source directory. + -if [ ! -f po/exgettext ]; then rm -f po/*.gmo; fi + -rmdir ada cp f java objc intl po testsuite plugin 2>/dev/null + +# Get rid of every file that's generated from some other file, except for `configure'. +# Most of these files ARE PRESENT in the GCC distribution. +maintainer-clean: + @echo 'This command is intended for maintainers to use; it' + @echo 'deletes files that may need special tools to rebuild.' + $(MAKE) lang.maintainer-clean distclean + -rm -f cpp.??s cpp.*aux + -rm -f gcc.??s gcc.*aux + -rm -f $(gcc_docdir)/*.info $(gcc_docdir)/*.1 $(gcc_docdir)/*.7 $(gcc_docdir)/*.dvi $(gcc_docdir)/*.pdf +# +# Entry points `install', `install-strip', and `uninstall'. +# Also use `install-collect2' to install collect2 when the config files don't. + +# Copy the compiler files into directories where they will be run. +# Install the driver last so that the window when things are +# broken is small. +install: install-common $(INSTALL_HEADERS) \ + install-cpp install-man install-info install-@POSUB@ \ + install-driver install-lto-wrapper install-gcc-ar + +ifeq ($(enable_plugin),yes) +install: install-plugin +endif + +install-strip: override INSTALL_PROGRAM = $(INSTALL_STRIP_PROGRAM) +ifneq ($(STRIP),) +install-strip: STRIPPROG = $(STRIP) +export STRIPPROG +endif +install-strip: install + +# Handle cpp installation. +install-cpp: installdirs cpp$(exeext) + -if test "$(enable_as_accelerator)" != "yes" ; then \ + rm -f $(DESTDIR)$(bindir)/$(CPP_INSTALL_NAME)$(exeext); \ + $(INSTALL_PROGRAM) -m 755 cpp$(exeext) $(DESTDIR)$(bindir)/$(CPP_INSTALL_NAME)$(exeext); \ + if [ x$(cpp_install_dir) != x ]; then \ + rm -f $(DESTDIR)$(prefix)/$(cpp_install_dir)/$(CPP_INSTALL_NAME)$(exeext); \ + $(INSTALL_PROGRAM) -m 755 cpp$(exeext) $(DESTDIR)$(prefix)/$(cpp_install_dir)/$(CPP_INSTALL_NAME)$(exeext); \ + else true; fi; \ + fi + +# Create the installation directories. +# $(libdir)/gcc/include isn't currently searched by cpp. +installdirs: + $(mkinstalldirs) $(DESTDIR)$(libsubdir) + $(mkinstalldirs) $(DESTDIR)$(libexecsubdir) + $(mkinstalldirs) $(DESTDIR)$(bindir) + $(mkinstalldirs) $(DESTDIR)$(includedir) + $(mkinstalldirs) $(DESTDIR)$(infodir) + $(mkinstalldirs) $(DESTDIR)$(man1dir) + $(mkinstalldirs) $(DESTDIR)$(man7dir) + +PLUGIN_HEADERS = $(TREE_H) $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ + toplev.h $(DIAGNOSTIC_CORE_H) $(BASIC_BLOCK_H) $(HASH_TABLE_H) \ + tree-ssa-alias.h $(INTERNAL_FN_H) gimple-fold.h tree-eh.h gimple-expr.h \ + gimple.h is-a.h memmodel.h $(TREE_PASS_H) $(GCC_PLUGIN_H) \ + $(GGC_H) $(TREE_DUMP_H) $(PRETTY_PRINT_H) $(OPTS_H) $(PARAMS_H) \ + $(tm_file_list) $(tm_include_list) $(tm_p_file_list) $(tm_p_include_list) \ + $(host_xm_file_list) $(host_xm_include_list) $(xm_include_list) \ + intl.h $(PLUGIN_VERSION_H) $(DIAGNOSTIC_H) ${C_TREE_H} \ + $(C_COMMON_H) c-family/c-objc.h $(C_PRETTY_PRINT_H) \ + tree-iterator.h $(PLUGIN_H) $(TREE_SSA_H) langhooks.h incpath.h debug.h \ + $(EXCEPT_H) tree-ssa-sccvn.h real.h output.h $(IPA_UTILS_H) \ + ipa-param-manipulation.h $(C_PRAGMA_H) $(CPPLIB_H) $(FUNCTION_H) \ + cppdefault.h flags.h $(MD5_H) params.def params.h params-enum.h \ + prefix.h tree-inline.h $(GIMPLE_PRETTY_PRINT_H) realmpfr.h \ + $(IPA_PROP_H) $(TARGET_H) $(RTL_H) $(TM_P_H) $(CFGLOOP_H) $(EMIT_RTL_H) \ + version.h stringpool.h gimplify.h gimple-iterator.h gimple-ssa.h \ + fold-const.h fold-const-call.h tree-cfg.h tree-into-ssa.h tree-ssanames.h \ + print-tree.h varasm.h context.h tree-phinodes.h stor-layout.h \ + ssa-iterators.h $(RESOURCE_H) tree-cfgcleanup.h attribs.h calls.h \ + cfgexpand.h diagnostic-color.h gcc-symtab.h gimple-builder.h gimple-low.h \ + gimple-walk.h gimplify-me.h pass_manager.h print-rtl.h stmt.h \ + tree-dfa.h tree-hasher.h tree-nested.h tree-object-size.h tree-outof-ssa.h \ + tree-parloops.h tree-ssa-address.h tree-ssa-coalesce.h tree-ssa-dom.h \ + tree-ssa-loop.h tree-ssa-loop-ivopts.h tree-ssa-loop-manip.h \ + tree-ssa-loop-niter.h tree-ssa-ter.h tree-ssa-threadedge.h \ + tree-ssa-threadupdate.h inchash.h wide-int.h signop.h hash-map.h \ + hash-set.h dominance.h cfg.h cfgrtl.h cfganal.h cfgbuild.h cfgcleanup.h \ + lcm.h cfgloopmanip.h file-prefix-map.h builtins.def $(INSN_ATTR_H) \ + pass-instances.def params.list $(srcdir)/../include/gomp-constants.h \ + $(EXPR_H) + +# generate the 'build fragment' b-header-vars +s-header-vars: Makefile + rm -f tmp-header-vars +# The first sed gets the list "header variables" as the list variables +# assigned in Makefile and having _H at the end of the name. "sed -n" proved +# more portable than a trailing "-e d" to filter out the uninteresting lines, +# in particular on ia64-hpux where "s/.../p" only prints if -n was requested +# as well. + $(foreach header_var,$(shell sed < Makefile -n -e 's/^\([A-Z0-9_]*_H\)[ ]*=.*/\1/p'),echo $(header_var)=$(shell echo $($(header_var):$(srcdir)/%=.../%) | sed -e 's~\.\.\./config/~config/~' -e 's~\.\.\./common/config/~common/config/~' -e 's~\.\.\.[^ ]*/~~g') >> tmp-header-vars;) + $(SHELL) $(srcdir)/../move-if-change tmp-header-vars b-header-vars + $(STAMP) s-header-vars + +# Install gengtype +install-gengtype: installdirs gengtype$(exeext) gtype.state + $(mkinstalldirs) $(DESTDIR)$(plugin_resourcesdir) + $(INSTALL_DATA) gtype.state $(DESTDIR)$(plugin_resourcesdir)/gtype.state + $(mkinstalldirs) $(DESTDIR)$(plugin_bindir) + $(INSTALL_PROGRAM) gengtype$(exeext) $(DESTDIR)$(plugin_bindir)/gengtype$(exeext) + +# Install the headers needed to build a plugin. +install-plugin: installdirs lang.install-plugin s-header-vars install-gengtype +# We keep the directory structure for files in config, common/config or +# c-family and .def files. All other files are flattened to a single directory. + $(mkinstalldirs) $(DESTDIR)$(plugin_includedir) + headers=`echo $(sort $(PLUGIN_HEADERS)) $$(cd $(srcdir); echo *.h *.def) | tr ' ' '\012' | sort -u`; \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`; \ + for file in $$headers; do \ + if [ -f $$file ] ; then \ + path=$$file; \ + elif [ -f $(srcdir)/$$file ]; then \ + path=$(srcdir)/$$file; \ + else continue; \ + fi; \ + case $$path in \ + "$(srcdir)"/config/* | "$(srcdir)"/common/config/* \ + | "$(srcdir)"/c-family/* | "$(srcdir)"/*.def ) \ + base=`echo "$$path" | sed -e "s|$$srcdirstrip/||"`;; \ + *) base=`basename $$path` ;; \ + esac; \ + dest=$(plugin_includedir)/$$base; \ + echo $(INSTALL_DATA) $$path $(DESTDIR)$$dest; \ + dir=`dirname $$dest`; \ + $(mkinstalldirs) $(DESTDIR)$$dir; \ + $(INSTALL_DATA) $$path $(DESTDIR)$$dest; \ + done + $(INSTALL_DATA) b-header-vars $(DESTDIR)$(plugin_includedir)/b-header-vars + +# Install the compiler executables built during cross compilation. +install-common: native lang.install-common installdirs + for file in $(COMPILERS); do \ + if [ -f $$file ] ; then \ + rm -f $(DESTDIR)$(libexecsubdir)/$$file; \ + $(INSTALL_PROGRAM) $$file $(DESTDIR)$(libexecsubdir)/$$file; \ + else true; \ + fi; \ + done + for file in $(EXTRA_PROGRAMS) $(COLLECT2) ..; do \ + if [ x"$$file" != x.. ]; then \ + rm -f $(DESTDIR)$(libexecsubdir)/$$file; \ + $(INSTALL_PROGRAM) $$file $(DESTDIR)$(libexecsubdir)/$$file; \ + else true; fi; \ + done +# We no longer install the specs file because its presence makes the +# driver slower, and because people who need it can recreate it by +# using -dumpspecs. We remove any old version because it would +# otherwise override the specs built into the driver. + rm -f $(DESTDIR)$(libsubdir)/specs +# Install gcov if it was compiled. + -if test "$(enable_as_accelerator)" != "yes" ; then \ + if [ -f gcov$(exeext) ]; \ + then \ + rm -f $(DESTDIR)$(bindir)/$(GCOV_INSTALL_NAME)$(exeext); \ + $(INSTALL_PROGRAM) gcov$(exeext) $(DESTDIR)$(bindir)/$(GCOV_INSTALL_NAME)$(exeext); \ + fi; \ + fi +# Install gcov-tool if it was compiled. + -if test "$(enable_as_accelerator)" != "yes" ; then \ + if [ -f gcov-tool$(exeext) ]; \ + then \ + rm -f $(DESTDIR)$(bindir)/$(GCOV_TOOL_INSTALL_NAME)$(exeext); \ + $(INSTALL_PROGRAM) \ + gcov-tool$(exeext) $(DESTDIR)$(bindir)/$(GCOV_TOOL_INSTALL_NAME)$(exeext); \ + fi; \ + fi +# Install gcov-dump if it was compiled. + -if test "$(enable_as_accelerator)" != "yes" ; then \ + if [ -f gcov-dump$(exeext) ]; \ + then \ + rm -f $(DESTDIR)$(bindir)/$(GCOV_DUMP_INSTALL_NAME)$(exeext); \ + $(INSTALL_PROGRAM) \ + gcov-dump$(exeext) $(DESTDIR)$(bindir)/$(GCOV_DUMP_INSTALL_NAME)$(exeext); \ + fi; \ + fi + +# Install the driver program as $(target_noncanonical)-gcc, +# $(target_noncanonical)-gcc-$(version), and also as gcc if native. +install-driver: installdirs xgcc$(exeext) + -rm -f $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext) + -$(INSTALL_PROGRAM) xgcc$(exeext) $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext) + -if test "$(enable_as_accelerator)" != "yes" ; then \ + if [ "$(GCC_INSTALL_NAME)" != "$(target_noncanonical)-gcc-$(version)" ]; then \ + rm -f $(DESTDIR)$(bindir)/$(FULL_DRIVER_NAME); \ + ( cd $(DESTDIR)$(bindir) && \ + $(LN) $(GCC_INSTALL_NAME)$(exeext) $(FULL_DRIVER_NAME) ); \ + fi; \ + if [ ! -f gcc-cross$(exeext) ] \ + && [ "$(GCC_INSTALL_NAME)" != "$(GCC_TARGET_INSTALL_NAME)" ]; then \ + rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-tmp$(exeext); \ + ( cd $(DESTDIR)$(bindir) && \ + $(LN) $(GCC_INSTALL_NAME)$(exeext) $(target_noncanonical)-gcc-tmp$(exeext) && \ + mv -f $(target_noncanonical)-gcc-tmp$(exeext) $(GCC_TARGET_INSTALL_NAME)$(exeext) ); \ + fi; \ + fi + +# Install the info files. +# $(INSTALL_DATA) might be a relative pathname, so we can't cd into srcdir +# to do the install. +install-info:: doc installdirs \ + $(DESTDIR)$(infodir)/cpp.info \ + $(DESTDIR)$(infodir)/gcc.info \ + $(DESTDIR)$(infodir)/cppinternals.info \ + $(DESTDIR)$(infodir)/gccinstall.info \ + $(DESTDIR)$(infodir)/gccint.info \ + lang.install-info + +$(DESTDIR)$(infodir)/%.info: doc/%.info installdirs + rm -f $@ + if [ -f $< ]; then \ + for f in $(<)*; do \ + realfile=`echo $$f | sed -e 's|.*/\([^/]*\)$$|\1|'`; \ + $(INSTALL_DATA) $$f $(DESTDIR)$(infodir)/$$realfile; \ + chmod a-x $(DESTDIR)$(infodir)/$$realfile; \ + done; \ + else true; fi + -if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \ + if [ -f $@ ]; then \ + install-info --dir-file=$(DESTDIR)$(infodir)/dir $@; \ + else true; fi; \ + else true; fi; + +dvi__strip_dir = `echo $$p | sed -e 's|^.*/||'`; + +install-dvi: $(DVIFILES) lang.install-dvi + @$(NORMAL_INSTALL) + test -z "$(dvidir)/gcc" || $(mkinstalldirs) "$(DESTDIR)$(dvidir)/gcc" + @list='$(DVIFILES)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(dvi__strip_dir) \ + echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/gcc/$$f'"; \ + $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/gcc/$$f"; \ + done + +pdf__strip_dir = `echo $$p | sed -e 's|^.*/||'`; + +install-pdf: $(PDFFILES) lang.install-pdf + @$(NORMAL_INSTALL) + test -z "$(pdfdir)/gcc" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)/gcc" + @list='$(PDFFILES)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(pdf__strip_dir) \ + echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/gcc/$$f'"; \ + $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/gcc/$$f"; \ + done + +html__strip_dir = `echo $$p | sed -e 's|^.*/||'`; + +install-html: $(HTMLS_BUILD) lang.install-html + @$(NORMAL_INSTALL) + test -z "$(htmldir)" || $(mkinstalldirs) "$(DESTDIR)$(htmldir)" + @list='$(HTMLS_INSTALL)'; for p in $$list; do \ + if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \ + f=$(html__strip_dir) \ + if test -d "$$d$$p"; then \ + echo " $(mkinstalldirs) '$(DESTDIR)$(htmldir)/$$f'"; \ + $(mkinstalldirs) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ + echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \ + else \ + echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \ + fi; \ + done + +# Install the man pages. +install-man: lang.install-man \ + $(DESTDIR)$(man1dir)/$(GCC_INSTALL_NAME)$(man1ext) \ + $(DESTDIR)$(man1dir)/$(CPP_INSTALL_NAME)$(man1ext) \ + $(DESTDIR)$(man1dir)/$(GCOV_INSTALL_NAME)$(man1ext) \ + $(DESTDIR)$(man1dir)/$(GCOV_TOOL_INSTALL_NAME)$(man1ext) \ + $(DESTDIR)$(man1dir)/$(GCOV_DUMP_INSTALL_NAME)$(man1ext) \ + $(if $(filter yes,@enable_lto@),$(DESTDIR)$(man1dir)/$(LTO_DUMP_INSTALL_NAME)$(man1ext)) \ + $(DESTDIR)$(man7dir)/fsf-funding$(man7ext) \ + $(DESTDIR)$(man7dir)/gfdl$(man7ext) \ + $(DESTDIR)$(man7dir)/gpl$(man7ext) + +$(DESTDIR)$(man7dir)/%$(man7ext): doc/%.7 installdirs + -rm -f $@ + -$(INSTALL_DATA) $< $@ + -chmod a-x $@ + +$(DESTDIR)$(man1dir)/$(GCC_INSTALL_NAME)$(man1ext): doc/gcc.1 installdirs + -rm -f $@ + -$(INSTALL_DATA) $< $@ + -chmod a-x $@ + +$(DESTDIR)$(man1dir)/$(CPP_INSTALL_NAME)$(man1ext): doc/cpp.1 installdirs + -rm -f $@ + -$(INSTALL_DATA) $< $@ + -chmod a-x $@ + +$(DESTDIR)$(man1dir)/$(GCOV_INSTALL_NAME)$(man1ext): doc/gcov.1 installdirs + -rm -f $@ + -$(INSTALL_DATA) $< $@ + -chmod a-x $@ + +$(DESTDIR)$(man1dir)/$(GCOV_TOOL_INSTALL_NAME)$(man1ext): doc/gcov-tool.1 installdirs + -rm -f $@ + -$(INSTALL_DATA) $< $@ + -chmod a-x $@ + +$(DESTDIR)$(man1dir)/$(GCOV_DUMP_INSTALL_NAME)$(man1ext): doc/gcov-dump.1 installdirs + -rm -f $@ + -$(INSTALL_DATA) $< $@ + -chmod a-x $@ + +$(DESTDIR)$(man1dir)/$(LTO_DUMP_INSTALL_NAME)$(man1ext): doc/lto-dump.1 installdirs + -rm -f $@ + -$(INSTALL_DATA) $< $@ + -chmod a-x $@ + +# Install all the header files built in the include subdirectory. +install-headers: $(INSTALL_HEADERS_DIR) +# Fix symlinks to absolute paths in the installed include directory to +# point to the installed directory, not the build directory. +# Don't need to use LN_S here since we really do need ln -s and no substitutes. + -files=`cd $(DESTDIR)$(libsubdir)/include-fixed; find . -type l -print 2>/dev/null`; \ + if [ $$? -eq 0 ]; then \ + dir=`cd include-fixed; ${PWD_COMMAND}`; \ + for i in $$files; do \ + dest=`ls -ld $(DESTDIR)$(libsubdir)/include-fixed/$$i | sed -n 's/.*-> //p'`; \ + if expr "$$dest" : "$$dir.*" > /dev/null; then \ + rm -f $(DESTDIR)$(libsubdir)/include-fixed/$$i; \ + ln -s `echo $$i | sed "s|/[^/]*|/..|g" | sed 's|/..$$||'``echo "$$dest" | sed "s|$$dir||"` $(DESTDIR)$(libsubdir)/include-fixed/$$i; \ + fi; \ + done; \ + fi + +# Create or recreate the gcc private include file directory. +install-include-dir: installdirs + $(mkinstalldirs) $(DESTDIR)$(libsubdir)/include + -rm -rf $(DESTDIR)$(libsubdir)/include-fixed + mkdir $(DESTDIR)$(libsubdir)/include-fixed + -chmod a+rx $(DESTDIR)$(libsubdir)/include-fixed + +# Create or recreate the install-tools include file directory. +itoolsdir = $(libexecsubdir)/install-tools +itoolsdatadir = $(libsubdir)/install-tools +install-itoolsdirs: installdirs + $(mkinstalldirs) $(DESTDIR)$(itoolsdatadir)/include + $(mkinstalldirs) $(DESTDIR)$(itoolsdir) + +# Install the include directory using tar. +install-headers-tar: stmp-int-hdrs install-include-dir +# We use `pwd`/include instead of just include to problems with CDPATH +# Unless a full pathname is provided, some shells would print the new CWD, +# found in CDPATH, corrupting the output. We could just redirect the +# output of `cd', but some shells lose on redirection within `()'s + (cd `${PWD_COMMAND}`/include ; \ + tar -cf - .; exit 0) | (cd $(DESTDIR)$(libsubdir)/include; tar xpf - ) + (cd `${PWD_COMMAND}`/include-fixed ; \ + tar -cf - .; exit 0) | (cd $(DESTDIR)$(libsubdir)/include-fixed; tar xpf - ) +# /bin/sh on some systems returns the status of the first tar, +# and that can lose with GNU tar which always writes a full block. +# So use `exit 0' to ignore its exit status. + +# Install the include directory using cpio. +install-headers-cpio: stmp-int-hdrs install-include-dir +# See discussion about the use of `pwd` above + cd `${PWD_COMMAND}`/include ; \ + find . -print | cpio -pdum $(DESTDIR)$(libsubdir)/include + cd `${PWD_COMMAND}`/include-fixed ; \ + find . -print | cpio -pdum $(DESTDIR)$(libsubdir)/include-fixed + +# Install the include directory using cp. +install-headers-cp: stmp-int-hdrs install-include-dir + cp -p -r include $(DESTDIR)$(libsubdir) + cp -p -r include-fixed $(DESTDIR)$(libsubdir) + +# Targets without dependencies, for use in prev-gcc during bootstrap. +real-install-headers-tar: + (cd `${PWD_COMMAND}`/include-fixed ; \ + tar -cf - .; exit 0) | (cd $(DESTDIR)$(libsubdir)/include-fixed; tar xpf - ) + +real-install-headers-cpio: + cd `${PWD_COMMAND}`/include-fixed ; \ + find . -print | cpio -pdum $(DESTDIR)$(libsubdir)/include-fixed + +real-install-headers-cp: + cp -p -r include-fixed $(DESTDIR)$(libsubdir) + +# Install supporting files for fixincludes to be run later. +install-mkheaders: stmp-int-hdrs install-itoolsdirs \ + macro_list fixinc_list + $(INSTALL_DATA) $(srcdir)/gsyslimits.h \ + $(DESTDIR)$(itoolsdatadir)/gsyslimits.h + $(INSTALL_DATA) macro_list $(DESTDIR)$(itoolsdatadir)/macro_list + $(INSTALL_DATA) fixinc_list $(DESTDIR)$(itoolsdatadir)/fixinc_list + set -e; for ml in `cat fixinc_list`; do \ + multi_dir=`echo $${ml} | sed -e 's/^[^;]*;//'`; \ + $(mkinstalldirs) $(DESTDIR)$(itoolsdatadir)/include$${multi_dir}; \ + $(INSTALL_DATA) include$${multi_dir}/limits.h $(DESTDIR)$(itoolsdatadir)/include$${multi_dir}/limits.h; \ + done + $(INSTALL_SCRIPT) $(srcdir)/../mkinstalldirs \ + $(DESTDIR)$(itoolsdir)/mkinstalldirs ; \ + sysroot_headers_suffix='$${sysroot_headers_suffix}'; \ + echo 'SYSTEM_HEADER_DIR="'"$(SYSTEM_HEADER_DIR)"'"' \ + > $(DESTDIR)$(itoolsdatadir)/mkheaders.conf + echo 'OTHER_FIXINCLUDES_DIRS="$(OTHER_FIXINCLUDES_DIRS)"' \ + >> $(DESTDIR)$(itoolsdatadir)/mkheaders.conf + echo 'STMP_FIXINC="$(STMP_FIXINC)"' \ + >> $(DESTDIR)$(itoolsdatadir)/mkheaders.conf + +# Use this target to install the program `collect2' under the name `collect2'. +install-collect2: collect2 installdirs + $(INSTALL_PROGRAM) collect2$(exeext) $(DESTDIR)$(libexecsubdir)/collect2$(exeext) +# Install the driver program as $(libsubdir)/gcc for collect2. + $(INSTALL_PROGRAM) xgcc$(exeext) $(DESTDIR)$(libexecsubdir)/gcc$(exeext) + +# Install lto-wrapper. +install-lto-wrapper: lto-wrapper$(exeext) + $(INSTALL_PROGRAM) lto-wrapper$(exeext) $(DESTDIR)$(libexecsubdir)/lto-wrapper$(exeext) + +install-gcc-ar: installdirs gcc-ar$(exeext) gcc-nm$(exeext) gcc-ranlib$(exeext) + if test "$(enable_as_accelerator)" != "yes" ; then \ + for i in gcc-ar gcc-nm gcc-ranlib; do \ + install_name=`echo $$i|sed '$(program_transform_name)'` ;\ + target_install_name=$(target_noncanonical)-`echo $$i|sed '$(program_transform_name)'` ; \ + rm -f $(DESTDIR)$(bindir)/$$install_name$(exeext) ; \ + $(INSTALL_PROGRAM) $$i$(exeext) $(DESTDIR)$(bindir)/$$install_name$(exeext) ;\ + if test -f gcc-cross$(exeext); then \ + :; \ + else \ + rm -f $(DESTDIR)$(bindir)/$$target_install_name$(exeext); \ + ( cd $(DESTDIR)$(bindir) && \ + $(LN) $$install_name$(exeext) $$target_install_name$(exeext) ) ; \ + fi ; \ + done; \ + fi + +# Cancel installation by deleting the installed files. +uninstall: lang.uninstall + -rm -rf $(DESTDIR)$(libsubdir) + -rm -rf $(DESTDIR)$(libexecsubdir) + -rm -rf $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext) + -rm -f $(DESTDIR)$(bindir)/$(CPP_INSTALL_NAME)$(exeext) + -if [ x$(cpp_install_dir) != x ]; then \ + rm -f $(DESTDIR)$(prefix)/$(cpp_install_dir)/$(CPP_INSTALL_NAME)$(exeext); \ + else true; fi + -rm -rf $(DESTDIR)$(bindir)/$(GCOV_INSTALL_NAME)$(exeext) + -rm -rf $(DESTDIR)$(man1dir)/$(GCC_INSTALL_NAME)$(man1ext) + -rm -rf $(DESTDIR)$(man1dir)/cpp$(man1ext) + -rm -f $(DESTDIR)$(infodir)/cpp.info* $(DESTDIR)$(infodir)/gcc.info* + -rm -f $(DESTDIR)$(infodir)/cppinternals.info* $(DESTDIR)$(infodir)/gccint.info* + for i in ar nm ranlib ; do \ + install_name=`echo gcc-$$i|sed '$(program_transform_name)'`$(exeext) ;\ + target_install_name=$(target_noncanonical)-`echo gcc-$$i|sed '$(program_transform_name)'`$(exeext) ; \ + rm -f $(DESTDIR)$(bindir)/$$install_name ; \ + rm -f $(DESTDIR)$(bindir)/$$target_install_name ; \ + done +# +# These targets are for the dejagnu testsuites. The file site.exp +# contains global variables that all the testsuites will use. + +target_subdir = @target_subdir@ + +site.exp: ./config.status Makefile + @echo "Making a new config file..." + -@rm -f ./site.tmp + @$(STAMP) site.exp + -@mv site.exp site.bak + @echo "## these variables are automatically generated by make ##" > ./site.tmp + @echo "# Do not edit here. If you wish to override these values" >> ./site.tmp + @echo "# add them to the last section" >> ./site.tmp + @echo "set rootme \"`${PWD_COMMAND}`\"" >> ./site.tmp + @echo "set srcdir \"`cd ${srcdir}; ${PWD_COMMAND}`\"" >> ./site.tmp + @echo "set host_triplet $(host)" >> ./site.tmp + @echo "set build_triplet $(build)" >> ./site.tmp + @echo "set target_triplet $(target)" >> ./site.tmp + @echo "set target_alias $(target_noncanonical)" >> ./site.tmp + @echo "set libiconv \"$(LIBICONV)\"" >> ./site.tmp +# CFLAGS is set even though it's empty to show we reserve the right to set it. + @echo "set CFLAGS \"\"" >> ./site.tmp + @echo "set CXXFLAGS \"\"" >> ./site.tmp + @echo "set HOSTCC \"$(CC)\"" >> ./site.tmp + @echo "set HOSTCXX \"$(CXX)\"" >> ./site.tmp + @echo "set HOSTCFLAGS \"$(CFLAGS)\"" >> ./site.tmp + @echo "set HOSTCXXFLAGS \"$(CXXFLAGS)\"" >> ./site.tmp +# TEST_ALWAYS_FLAGS are flags that should be passed to every compilation. +# They are passed first to allow individual tests to override them. + @echo "set TEST_ALWAYS_FLAGS \"$(SYSROOT_CFLAGS_FOR_TARGET)\"" >> ./site.tmp +# When running the tests we set GCC_EXEC_PREFIX to the install tree so that +# files that have already been installed there will be found. The -B option +# overrides it, so use of GCC_EXEC_PREFIX will not result in using GCC files +# from the install tree. + @echo "set TEST_GCC_EXEC_PREFIX \"$(libdir)/gcc/\"" >> ./site.tmp + @echo "set TESTING_IN_BUILD_TREE 1" >> ./site.tmp + @echo "set HAVE_LIBSTDCXX_V3 1" >> ./site.tmp + @if test "@enable_plugin@" = "yes" ; then \ + echo "set ENABLE_PLUGIN 1" >> ./site.tmp; \ + echo "set PLUGINCC \"$(PLUGINCC)\"" >> ./site.tmp; \ + echo "set PLUGINCFLAGS \"$(PLUGINCFLAGS)\"" >> ./site.tmp; \ + echo "set GMPINC \"$(GMPINC)\"" >> ./site.tmp; \ + fi +# If newlib has been configured, we need to pass -B to gcc so it can find +# newlib's crt0.o if it exists. This will cause a "path prefix not used" +# message if it doesn't, but the testsuite is supposed to ignore the message - +# it's too difficult to tell when to and when not to pass -B (not all targets +# have crt0's). We could only add the -B if ../newlib/crt0.o exists, but that +# seems like too selective a test. +# ??? Another way to solve this might be to rely on linker scripts. Then +# theoretically the -B won't be needed. +# We also need to pass -L ../ld so that the linker can find ldscripts. + @if [ -d $(objdir)/../$(target_subdir)/newlib ] \ + && [ "${host}" != "${target}" ]; then \ + echo "set newlib_cflags \"-I$(objdir)/../$(target_subdir)/newlib/targ-include -I\$$srcdir/../newlib/libc/include\"" >> ./site.tmp; \ + echo "set newlib_ldflags \"-B$(objdir)/../$(target_subdir)/newlib/\"" >> ./site.tmp; \ + echo "append CFLAGS \" \$$newlib_cflags\"" >> ./site.tmp; \ + echo "append CXXFLAGS \" \$$newlib_cflags\"" >> ./site.tmp; \ + echo "append LDFLAGS \" \$$newlib_ldflags\"" >> ./site.tmp; \ + else true; \ + fi + @if [ -d $(objdir)/../ld ] ; then \ + echo "append LDFLAGS \" -L$(objdir)/../ld\"" >> ./site.tmp; \ + else true; \ + fi + echo "set tmpdir $(objdir)/testsuite" >> ./site.tmp + @echo "set srcdir \"\$${srcdir}/testsuite\"" >> ./site.tmp + @if [ "X$(ALT_CC_UNDER_TEST)" != "X" ] ; then \ + echo "set ALT_CC_UNDER_TEST \"$(ALT_CC_UNDER_TEST)\"" >> ./site.tmp; \ + else true; \ + fi + @if [ "X$(ALT_CXX_UNDER_TEST)" != "X" ] ; then \ + echo "set ALT_CXX_UNDER_TEST \"$(ALT_CXX_UNDER_TEST)\"" >> ./site.tmp; \ + else true; \ + fi + @if [ "X$(COMPAT_OPTIONS)" != "X" ] ; then \ + echo "set COMPAT_OPTIONS \"$(COMPAT_OPTIONS)\"" >> ./site.tmp; \ + else true; \ + fi + @echo "## All variables above are generated by configure. Do Not Edit ##" >> ./site.tmp + @cat ./site.tmp > site.exp + @cat site.bak | sed \ + -e '1,/^## All variables above are.*##/ d' >> site.exp + -@rm -f ./site.tmp + +CHECK_TARGETS = @check_languages@ + +check: $(CHECK_TARGETS) + +check-subtargets: $(patsubst %,%-subtargets,$(CHECK_TARGETS)) + +# The idea is to parallelize testing of multilibs, for example: +# make -j3 check-gcc//sh-hms-sim/{-m1,-m2,-m3,-m3e,-m4}/{,-nofpu} +# will run 3 concurrent sessions of check-gcc, eventually testing +# all 10 combinations. GNU make is required, as is a shell that expands +# alternations within braces. +lang_checks_parallel = $(lang_checks:=//%) +$(lang_checks_parallel): site.exp + target=`echo "$@" | sed 's,//.*,,'`; \ + variant=`echo "$@" | sed 's,^[^/]*//,,'`; \ + vardots=`echo "$$variant" | sed 's,/,.,g'`; \ + $(MAKE) TESTSUITEDIR="testsuite.$$vardots" \ + RUNTESTFLAGS="--target_board=$$variant $(RUNTESTFLAGS)" \ + "$$target" + +TESTSUITEDIR = testsuite + +$(TESTSUITEDIR)/site.exp: site.exp + -test -d $(TESTSUITEDIR) || mkdir $(TESTSUITEDIR) + -rm -f $@ + sed '/set tmpdir/ s|testsuite$$|$(TESTSUITEDIR)|' < site.exp > $@ + +# This is only used for check-% targets that aren't parallelized. +$(filter-out $(lang_checks_parallelized),$(lang_checks)): check-% : site.exp + -test -d plugin || mkdir plugin + -test -d $(TESTSUITEDIR) || mkdir $(TESTSUITEDIR) + test -d $(TESTSUITEDIR)/$* || mkdir $(TESTSUITEDIR)/$* + -(rootme=`${PWD_COMMAND}`; export rootme; \ + srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ; \ + cd $(TESTSUITEDIR)/$*; \ + rm -f tmp-site.exp; \ + sed '/set tmpdir/ s|testsuite$$|$(TESTSUITEDIR)/$*|' \ + < ../../site.exp > tmp-site.exp; \ + $(SHELL) $${srcdir}/../move-if-change tmp-site.exp site.exp; \ + EXPECT=${EXPECT} ; export EXPECT ; \ + if [ -f $${rootme}/../expect/expect ] ; then \ + TCL_LIBRARY=`cd .. ; cd $${srcdir}/../tcl/library ; ${PWD_COMMAND}` ; \ + export TCL_LIBRARY ; fi ; \ + $(RUNTEST) --tool $* $(RUNTESTFLAGS)) + +$(patsubst %,%-subtargets,$(lang_checks)): check-%-subtargets: + @echo check-$* + +check_p_tool=$(firstword $(subst _, ,$*)) +check_p_count=$(check_$(check_p_tool)_parallelize) +check_p_subno=$(word 2,$(subst _, ,$*)) +check_p_numbers0:=1 2 3 4 5 6 7 8 9 +check_p_numbers1:=0 $(check_p_numbers0) +check_p_numbers2:=$(foreach i,$(check_p_numbers0),$(addprefix $(i),$(check_p_numbers1))) +check_p_numbers3:=$(addprefix 0,$(check_p_numbers1)) $(check_p_numbers2) +check_p_numbers4:=$(foreach i,$(check_p_numbers0),$(addprefix $(i),$(check_p_numbers3))) +check_p_numbers5:=$(addprefix 0,$(check_p_numbers3)) $(check_p_numbers4) +check_p_numbers6:=$(foreach i,$(check_p_numbers0),$(addprefix $(i),$(check_p_numbers5))) +check_p_numbers:=$(check_p_numbers0) $(check_p_numbers2) $(check_p_numbers4) $(check_p_numbers6) +check_p_subdir=$(subst _,,$*) +check_p_subdirs=$(wordlist 1,$(check_p_count),$(wordlist 1, \ + $(if $(GCC_TEST_PARALLEL_SLOTS),$(GCC_TEST_PARALLEL_SLOTS),128), \ + $(check_p_numbers))) + +# For parallelized check-% targets, this decides whether parallelization +# is desirable (if -jN is used). If desirable, recursive make is run with +# check-parallel-$lang{,1,2,3,4,5} etc. goals, which can be executed in +# parallel, as they are run in separate directories. +# check-parallel-$lang{,1,2,3,4,5} etc. goals invoke runtest with +# GCC_RUNTEST_PARALLELIZE_DIR var in the environment and runtest_file_p +# dejaGNU procedure is overridden to additionally synchronize through +# a $lang-parallel directory which tests will be run by which runtest instance. +# Afterwards contrib/dg-extract-results.sh is used to merge the sum and log +# files. If parallelization isn't desirable, only one recursive make +# is run with check-parallel-$lang goal and check_$lang_parallelize variable +# cleared to say that no additional arguments beyond $(RUNTESTFLAGS) +# should be passed to runtest. +# +# To parallelize some language check, add the corresponding check-$lang +# to lang_checks_parallelized variable and define check_$lang_parallelize +# variable. This is the upper limit to which it is useful to parallelize the +# check-$lang target. It doesn't make sense to try e.g. 128 goals for small +# testsuites like objc or go. +$(lang_checks_parallelized): check-% : site.exp + -rm -rf $(TESTSUITEDIR)/$*-parallel + @if [ -n "$(filter -j%, $(MFLAGS))" ]; then \ + test -d $(TESTSUITEDIR) || mkdir $(TESTSUITEDIR) || true; \ + test -d $(TESTSUITEDIR)/$*-parallel || mkdir $(TESTSUITEDIR)/$*-parallel || true; \ + GCC_RUNTEST_PARALLELIZE_DIR=`${PWD_COMMAND}`/$(TESTSUITEDIR)/$(check_p_tool)-parallel ; \ + export GCC_RUNTEST_PARALLELIZE_DIR ; \ + $(MAKE) TESTSUITEDIR="$(TESTSUITEDIR)" RUNTESTFLAGS="$(RUNTESTFLAGS)" \ + check-parallel-$* \ + $(patsubst %,check-parallel-$*_%, $(check_p_subdirs)); \ + sums= ; logs= ; \ + for dir in $(TESTSUITEDIR)/$* \ + $(patsubst %,$(TESTSUITEDIR)/$*%,$(check_p_subdirs));\ + do \ + if [ -d $$dir ]; then \ + mv -f $$dir/$*.sum $$dir/$*.sum.sep; mv -f $$dir/$*.log $$dir/$*.log.sep; \ + sums="$$sums $$dir/$*.sum.sep"; logs="$$logs $$dir/$*.log.sep"; \ + fi; \ + done; \ + $(SHELL) $(srcdir)/../contrib/dg-extract-results.sh $$sums \ + > $(TESTSUITEDIR)/$*/$*.sum; \ + $(SHELL) $(srcdir)/../contrib/dg-extract-results.sh -L $$logs \ + > $(TESTSUITEDIR)/$*/$*.log; \ + rm -rf $(TESTSUITEDIR)/$*-parallel || true; \ + else \ + $(MAKE) TESTSUITEDIR="$(TESTSUITEDIR)" RUNTESTFLAGS="$(RUNTESTFLAGS)" \ + check_$*_parallelize= check-parallel-$*; \ + fi + +check-parallel-% : site.exp + -@test -d plugin || mkdir plugin + -@test -d $(TESTSUITEDIR) || mkdir $(TESTSUITEDIR) + @test -d $(TESTSUITEDIR)/$(check_p_subdir) || mkdir $(TESTSUITEDIR)/$(check_p_subdir) + -$(if $(check_p_subno),@)(rootme=`${PWD_COMMAND}`; export rootme; \ + srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ; \ + if [ -n "$(check_p_subno)" ] \ + && [ -n "$$GCC_RUNTEST_PARALLELIZE_DIR" ] \ + && [ -f $(TESTSUITEDIR)/$(check_p_tool)-parallel/finished ]; then \ + rm -rf $(TESTSUITEDIR)/$(check_p_subdir); \ + else \ + cd $(TESTSUITEDIR)/$(check_p_subdir); \ + rm -f tmp-site.exp; \ + sed '/set tmpdir/ s|testsuite$$|$(TESTSUITEDIR)/$(check_p_subdir)|' \ + < ../../site.exp > tmp-site.exp; \ + $(SHELL) $${srcdir}/../move-if-change tmp-site.exp site.exp; \ + EXPECT=${EXPECT} ; export EXPECT ; \ + if [ -f $${rootme}/../expect/expect ] ; then \ + TCL_LIBRARY=`cd .. ; cd $${srcdir}/../tcl/library ; ${PWD_COMMAND}` ; \ + export TCL_LIBRARY ; \ + fi ; \ + $(RUNTEST) --tool $(check_p_tool) $(RUNTESTFLAGS); \ + if [ -n "$$GCC_RUNTEST_PARALLELIZE_DIR" ] ; then \ + touch $${rootme}/$(TESTSUITEDIR)/$(check_p_tool)-parallel/finished; \ + fi ; \ + fi ) + +# QMTest targets + +# The path to qmtest. +QMTEST_PATH=qmtest + +# The flags to pass to qmtest. +QMTESTFLAGS= + +# The flags to pass to "qmtest run". +QMTESTRUNFLAGS=-f none --result-stream dejagnu_stream.DejaGNUStream + +# The command to use to invoke qmtest. +QMTEST=${QMTEST_PATH} ${QMTESTFLAGS} + +# The tests (or suites) to run. +QMTEST_GPP_TESTS=g++ + +# The subdirectory of the OBJDIR that will be used to store the QMTest +# test database configuration and that will be used for temporary +# scratch space during QMTest's execution. +QMTEST_DIR=qmtestsuite + +# Create the QMTest database configuration. +${QMTEST_DIR} stamp-qmtest: + ${QMTEST} -D ${QMTEST_DIR} create-tdb \ + -c gcc_database.GCCDatabase \ + -a srcdir=`cd ${srcdir}/testsuite && ${PWD_COMMAND}` && \ + $(STAMP) stamp-qmtest + +# Create the QMTest context file. +${QMTEST_DIR}/context: stamp-qmtest + rm -f $@ + echo "CompilerTable.languages=c cplusplus" >> $@ + echo "CompilerTable.c_kind=GCC" >> $@ + echo "CompilerTable.c_path=${objdir}/xgcc" >> $@ + echo "CompilerTable.c_options=-B${objdir}/" >> $@ + echo "CompilerTable.cplusplus_kind=GCC" >> $@ + echo "CompilerTable.cplusplus_path=${objdir}/xg++" >> $@ + echo "CompilerTable.cplusplus_options=-B${objdir}/" >> $@ + echo "DejaGNUTest.target=${target_noncanonical}" >> $@ + +# Run the G++ testsuite using QMTest. +qmtest-g++: ${QMTEST_DIR}/context + cd ${QMTEST_DIR} && ${QMTEST} run ${QMTESTRUNFLAGS} -C context \ + -o g++.qmr ${QMTEST_GPP_TESTS} + +# Use the QMTest GUI. +qmtest-gui: ${QMTEST_DIR}/context + cd ${QMTEST_DIR} && ${QMTEST} gui -C context + +.PHONY: qmtest-g++ + +# Run Paranoia on real.cc. + +paranoia.o: $(srcdir)/../contrib/paranoia.cc $(CONFIG_H) $(SYSTEM_H) $(TREE_H) + g++ -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION) + +paranoia: paranoia.o real.o $(LIBIBERTY) + g++ -o $@ paranoia.o real.o $(LIBIBERTY) + +# These exist for maintenance purposes. + +CTAGS=@CTAGS@ +ETAGS=@ETAGS@ +CSCOPE=@CSCOPE@ + +# Update the tags table. +TAGS: lang.tags + (cd $(srcdir); \ + incs= ; \ + list='$(SUBDIRS)'; for dir in $$list; do \ + if test -f $$dir/TAGS; then \ + incs="$$incs --include $$dir/TAGS.sub"; \ + fi; \ + done; \ + $(ETAGS) -o TAGS.sub c-family/*.h c-family/*.cc \ + *.h *.cc \ + ../include/*.h ../libiberty/*.c \ + ../libcpp/*.cc ../libcpp/include/*.h \ + --language=none --regex="/\(char\|unsigned int\|int\|bool\|void\|HOST_WIDE_INT\|enum [A-Za-z_0-9]+\) [*]?\([A-Za-z_0-9]+\)/\2/" common.opt \ + --language=none --regex="/\(DEF_RTL_EXPR\|DEFTREECODE\|DEFGSCODE\|DEFTIMEVAR\|DEFPARAM\|DEFPARAMENUM5\)[ ]?(\([A-Za-z_0-9]+\)/\2/" rtl.def tree.def gimple.def timevar.def \ + ; \ + $(ETAGS) --include TAGS.sub $$incs) + +# ----------------------------------------------------- +# Rules for generating translated message descriptions. +# Disabled by autoconf if the tools are not available. +# ----------------------------------------------------- + +XGETTEXT = @XGETTEXT@ +GMSGFMT = @GMSGFMT@ +MSGMERGE = msgmerge +CATALOGS = $(patsubst %,po/%,@CATALOGS@) + +.PHONY: build- install- build-po install-po update-po + +# Dummy rules to deal with dependencies produced by use of +# "build-@POSUB@" and "install-@POSUB@" above, when NLS is disabled. +build-: ; @true +install-: ; @true + +build-po: $(CATALOGS) + +# This notation should be acceptable to all Make implementations used +# by people who are interested in updating .po files. +update-po: $(CATALOGS:.gmo=.pox) + +# N.B. We do not attempt to copy these into $(srcdir). The snapshot +# script does that. +.po.gmo: + $(mkinstalldirs) po + $(GMSGFMT) --statistics -o $@ $< + +# The new .po has to be gone over by hand, so we deposit it into +# build/po with a different extension. +# If build/po/gcc.pot exists, use it (it was just created), +# else use the one in srcdir. +.po.pox: + $(mkinstalldirs) po + $(MSGMERGE) $< `if test -f po/gcc.pot; \ + then echo po/gcc.pot; \ + else echo $(srcdir)/po/gcc.pot; fi` -o $@ + +# This rule has to look for .gmo modules in both srcdir and +# the cwd, and has to check that we actually have a catalog +# for each language, in case they weren't built or included +# with the distribution. +install-po: + $(mkinstalldirs) $(DESTDIR)$(datadir) + cats="$(CATALOGS)"; for cat in $$cats; do \ + lang=`basename $$cat | sed 's/\.gmo$$//'`; \ + if [ -f $$cat ]; then :; \ + elif [ -f $(srcdir)/$$cat ]; then cat=$(srcdir)/$$cat; \ + else continue; \ + fi; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + echo $(mkinstalldirs) $(DESTDIR)$$dir; \ + $(mkinstalldirs) $(DESTDIR)$$dir || exit 1; \ + echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc.mo; \ + $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc.mo; \ + done + +# Rule for regenerating the message template (gcc.pot). +# Instead of forcing everyone to edit POTFILES.in, which proved impractical, +# this rule has no dependencies and always regenerates gcc.pot. This is +# relatively harmless since the .po files do not directly depend on it. +# Note that exgettext has an awk script embedded in it which requires a +# fairly modern (POSIX-compliant) awk. +# The .pot file is left in the build directory. +gcc.pot: po/gcc.pot +po/gcc.pot: force + $(mkinstalldirs) po + $(MAKE) srcextra + AWK=$(AWK) $(SHELL) $(srcdir)/po/exgettext \ + $(XGETTEXT) gcc $(srcdir) + +# + +# Dependency information. + +# In order for parallel make to really start compiling the expensive +# objects from $(OBJS) as early as possible, build all their +# prerequisites strictly before all objects. +$(ALL_HOST_OBJS) : | $(generated_files) + +# Include the auto-generated dependencies for all host objects. +DEPFILES = \ + $(foreach obj,$(ALL_HOST_OBJS),\ + $(dir $(obj))$(DEPDIR)/$(patsubst %.o,%.Po,$(notdir $(obj)))) +-include $(DEPFILES) diff --git a/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-base-selected/gcc/gcc.cc.txt b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-base-selected/gcc/gcc.cc.txt new file mode 100644 index 0000000000..16bb07f2cd --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-base-selected/gcc/gcc.cc.txt @@ -0,0 +1,11239 @@ +/* Compiler driver program that can handle many languages. + Copyright (C) 1987-2023 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +/* This program is the user interface to the C compiler and possibly to +other compilers. It is used because compilation is a complicated procedure +which involves running several programs and passing temporary files between +them, forwarding the users switches to those programs selectively, +and deleting the temporary files at the end. + +CC recognizes how to compile each input file by suffixes in the file names. +Once it knows which kind of compilation to perform, the procedure for +compilation is specified by a string called a "spec". */ + +#define INCLUDE_STRING +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "multilib.h" /* before tm.h */ +#include "tm.h" +#include "xregex.h" +#include "obstack.h" +#include "intl.h" +#include "prefix.h" +#include "opt-suggestions.h" +#include "gcc.h" +#include "diagnostic.h" +#include "flags.h" +#include "opts.h" +#include "filenames.h" +#include "spellcheck.h" +#include "opts-jobserver.h" +#include "common/common-target.h" + + + +/* Manage the manipulation of env vars. + + We poison "getenv" and "putenv", so that all enviroment-handling is + done through this class. Note that poisoning happens in the + preprocessor at the identifier level, and doesn't distinguish between + env.getenv (); + and + getenv (); + Hence we need to use "get" for the accessor method, not "getenv". */ + +struct env_manager +{ + public: + void init (bool can_restore, bool debug); + const char *get (const char *name); + void xput (const char *string); + void restore (); + + private: + bool m_can_restore; + bool m_debug; + struct kv + { + char *m_key; + char *m_value; + }; + vec m_keys; + +}; + +/* The singleton instance of class env_manager. */ + +static env_manager env; + +/* Initializer for class env_manager. + + We can't do this as a constructor since we have a statically + allocated instance ("env" above). */ + +void +env_manager::init (bool can_restore, bool debug) +{ + m_can_restore = can_restore; + m_debug = debug; +} + +/* Get the value of NAME within the environment. Essentially + a wrapper for ::getenv, but adding logging, and the possibility + of caching results. */ + +const char * +env_manager::get (const char *name) +{ + const char *result = ::getenv (name); + if (m_debug) + fprintf (stderr, "env_manager::getenv (%s) -> %s\n", name, result); + return result; +} + +/* Put the given KEY=VALUE entry STRING into the environment. + If the env_manager was initialized with CAN_RESTORE set, then + also record the old value of KEY within the environment, so that it + can be later restored. */ + +void +env_manager::xput (const char *string) +{ + if (m_debug) + fprintf (stderr, "env_manager::xput (%s)\n", string); + if (verbose_flag) + fnotice (stderr, "%s\n", string); + + if (m_can_restore) + { + char *equals = strchr (const_cast (string), '='); + gcc_assert (equals); + + struct kv kv; + kv.m_key = xstrndup (string, equals - string); + const char *cur_value = ::getenv (kv.m_key); + if (m_debug) + fprintf (stderr, "saving old value: %s\n",cur_value); + kv.m_value = cur_value ? xstrdup (cur_value) : NULL; + m_keys.safe_push (kv); + } + + ::putenv (CONST_CAST (char *, string)); +} + +/* Undo any xputenv changes made since last restore. + Can only be called if the env_manager was initialized with + CAN_RESTORE enabled. */ + +void +env_manager::restore () +{ + unsigned int i; + struct kv *item; + + gcc_assert (m_can_restore); + + FOR_EACH_VEC_ELT_REVERSE (m_keys, i, item) + { + if (m_debug) + printf ("restoring saved key: %s value: %s\n", item->m_key, item->m_value); + if (item->m_value) + ::setenv (item->m_key, item->m_value, 1); + else + ::unsetenv (item->m_key); + free (item->m_key); + free (item->m_value); + } + + m_keys.truncate (0); +} + +/* Forbid other uses of getenv and putenv. */ +#if (GCC_VERSION >= 3000) +#pragma GCC poison getenv putenv +#endif + + + +/* By default there is no special suffix for target executables. */ +#ifdef TARGET_EXECUTABLE_SUFFIX +#define HAVE_TARGET_EXECUTABLE_SUFFIX +#else +#define TARGET_EXECUTABLE_SUFFIX "" +#endif + +/* By default there is no special suffix for host executables. */ +#ifdef HOST_EXECUTABLE_SUFFIX +#define HAVE_HOST_EXECUTABLE_SUFFIX +#else +#define HOST_EXECUTABLE_SUFFIX "" +#endif + +/* By default, the suffix for target object files is ".o". */ +#ifdef TARGET_OBJECT_SUFFIX +#define HAVE_TARGET_OBJECT_SUFFIX +#else +#define TARGET_OBJECT_SUFFIX ".o" +#endif + +static const char dir_separator_str[] = { DIR_SEPARATOR, 0 }; + +/* Most every one is fine with LIBRARY_PATH. For some, it conflicts. */ +#ifndef LIBRARY_PATH_ENV +#define LIBRARY_PATH_ENV "LIBRARY_PATH" +#endif + +/* If a stage of compilation returns an exit status >= 1, + compilation of that file ceases. */ + +#define MIN_FATAL_STATUS 1 + +/* Flag set by cppspec.cc to 1. */ +int is_cpp_driver; + +/* Flag set to nonzero if an @file argument has been supplied to gcc. */ +static bool at_file_supplied; + +/* Definition of string containing the arguments given to configure. */ +#include "configargs.h" + +/* Flag saying to print the command line options understood by gcc and its + sub-processes. */ + +static int print_help_list; + +/* Flag saying to print the version of gcc and its sub-processes. */ + +static int print_version; + +/* Flag that stores string prefix for which we provide bash completion. */ + +static const char *completion = NULL; + +/* Flag indicating whether we should ONLY print the command and + arguments (like verbose_flag) without executing the command. + Displayed arguments are quoted so that the generated command + line is suitable for execution. This is intended for use in + shell scripts to capture the driver-generated command line. */ +static int verbose_only_flag; + +/* Flag indicating how to print command line options of sub-processes. */ + +static int print_subprocess_help; + +/* Linker suffix passed to -fuse-ld=... */ +static const char *use_ld; + +/* Whether we should report subprocess execution times to a file. */ + +FILE *report_times_to_file = NULL; + +/* Nonzero means place this string before uses of /, so that include + and library files can be found in an alternate location. */ + +#ifdef TARGET_SYSTEM_ROOT +#define DEFAULT_TARGET_SYSTEM_ROOT (TARGET_SYSTEM_ROOT) +#else +#define DEFAULT_TARGET_SYSTEM_ROOT (0) +#endif +static const char *target_system_root = DEFAULT_TARGET_SYSTEM_ROOT; + +/* Nonzero means pass the updated target_system_root to the compiler. */ + +static int target_system_root_changed; + +/* Nonzero means append this string to target_system_root. */ + +static const char *target_sysroot_suffix = 0; + +/* Nonzero means append this string to target_system_root for headers. */ + +static const char *target_sysroot_hdrs_suffix = 0; + +/* Nonzero means write "temp" files in source directory + and use the source file's name in them, and don't delete them. */ + +static enum save_temps { + SAVE_TEMPS_NONE, /* no -save-temps */ + SAVE_TEMPS_CWD, /* -save-temps in current directory */ + SAVE_TEMPS_DUMP, /* -save-temps in dumpdir */ + SAVE_TEMPS_OBJ /* -save-temps in object directory */ +} save_temps_flag; + +/* Set this iff the dumppfx implied by a -save-temps=* option is to + override a -dumpdir option, if any. */ +static bool save_temps_overrides_dumpdir = false; + +/* -dumpdir, -dumpbase and -dumpbase-ext flags passed in, possibly + rearranged as they are to be passed down, e.g., dumpbase and + dumpbase_ext may be cleared if integrated with dumpdir or + dropped. */ +static char *dumpdir, *dumpbase, *dumpbase_ext; + +/* Usually the length of the string in dumpdir. However, during + linking, it may be shortened to omit a driver-added trailing dash, + by then replaced with a trailing period, that is still to be passed + to sub-processes in -dumpdir, but not to be generally used in spec + filename expansions. See maybe_run_linker. */ +static size_t dumpdir_length = 0; + +/* Set if the last character in dumpdir is (or was) a dash that the + driver added to dumpdir after dumpbase or linker output name. */ +static bool dumpdir_trailing_dash_added = false; + +/* Basename of dump and aux outputs, computed from dumpbase (given or + derived from output name), to override input_basename in non-%w %b + et al. */ +static char *outbase; +static size_t outbase_length = 0; + +/* The compiler version. */ + +static const char *compiler_version; + +/* The target version. */ + +static const char *const spec_version = DEFAULT_TARGET_VERSION; + +/* The target machine. */ + +static const char *spec_machine = DEFAULT_TARGET_MACHINE; +static const char *spec_host_machine = DEFAULT_REAL_TARGET_MACHINE; + +/* List of offload targets. Separated by colon. Empty string for + -foffload=disable. */ + +static char *offload_targets = NULL; + +#if OFFLOAD_DEFAULTED +/* Set to true if -foffload has not been used and offload_targets + is set to the configured in default. */ +static bool offload_targets_default; +#endif + +/* Nonzero if cross-compiling. + When -b is used, the value comes from the `specs' file. */ + +#ifdef CROSS_DIRECTORY_STRUCTURE +static const char *cross_compile = "1"; +#else +static const char *cross_compile = "0"; +#endif + +/* Greatest exit code of sub-processes that has been encountered up to + now. */ +static int greatest_status = 1; + +/* This is the obstack which we use to allocate many strings. */ + +static struct obstack obstack; + +/* This is the obstack to build an environment variable to pass to + collect2 that describes all of the relevant switches of what to + pass the compiler in building the list of pointers to constructors + and destructors. */ + +static struct obstack collect_obstack; + +/* Forward declaration for prototypes. */ +struct path_prefix; +struct prefix_list; + +static void init_spec (void); +static void store_arg (const char *, int, int); +static void insert_wrapper (const char *); +static char *load_specs (const char *); +static void read_specs (const char *, bool, bool); +static void set_spec (const char *, const char *, bool); +static struct compiler *lookup_compiler (const char *, size_t, const char *); +static char *build_search_list (const struct path_prefix *, const char *, + bool, bool); +static void xputenv (const char *); +static void putenv_from_prefixes (const struct path_prefix *, const char *, + bool); +static int access_check (const char *, int); +static char *find_a_file (const struct path_prefix *, const char *, int, bool); +static char *find_a_program (const char *); +static void add_prefix (struct path_prefix *, const char *, const char *, + int, int, int); +static void add_sysrooted_prefix (struct path_prefix *, const char *, + const char *, int, int, int); +static char *skip_whitespace (char *); +static void delete_if_ordinary (const char *); +static void delete_temp_files (void); +static void delete_failure_queue (void); +static void clear_failure_queue (void); +static int check_live_switch (int, int); +static const char *handle_braces (const char *); +static inline bool input_suffix_matches (const char *, const char *); +static inline bool switch_matches (const char *, const char *, int); +static inline void mark_matching_switches (const char *, const char *, int); +static inline void process_marked_switches (void); +static const char *process_brace_body (const char *, const char *, const char *, int, int); +static const struct spec_function *lookup_spec_function (const char *); +static const char *eval_spec_function (const char *, const char *, const char *); +static const char *handle_spec_function (const char *, bool *, const char *); +static char *save_string (const char *, int); +static void set_collect_gcc_options (void); +static int do_spec_1 (const char *, int, const char *); +static int do_spec_2 (const char *, const char *); +static void do_option_spec (const char *, const char *); +static void do_self_spec (const char *); +static const char *find_file (const char *); +static int is_directory (const char *, bool); +static const char *validate_switches (const char *, bool, bool); +static void validate_all_switches (void); +static inline void validate_switches_from_spec (const char *, bool); +static void give_switch (int, int); +static int default_arg (const char *, int); +static void set_multilib_dir (void); +static void print_multilib_info (void); +static void display_help (void); +static void add_preprocessor_option (const char *, int); +static void add_assembler_option (const char *, int); +static void add_linker_option (const char *, int); +static void process_command (unsigned int, struct cl_decoded_option *); +static int execute (void); +static void alloc_args (void); +static void clear_args (void); +static void fatal_signal (int); +#if defined(ENABLE_SHARED_LIBGCC) && !defined(REAL_LIBGCC_SPEC) +static void init_gcc_specs (struct obstack *, const char *, const char *, + const char *); +#endif +#if defined(HAVE_TARGET_OBJECT_SUFFIX) || defined(HAVE_TARGET_EXECUTABLE_SUFFIX) +static const char *convert_filename (const char *, int, int); +#endif + +static void try_generate_repro (const char **argv); +static const char *getenv_spec_function (int, const char **); +static const char *if_exists_spec_function (int, const char **); +static const char *if_exists_else_spec_function (int, const char **); +static const char *if_exists_then_else_spec_function (int, const char **); +static const char *sanitize_spec_function (int, const char **); +static const char *replace_outfile_spec_function (int, const char **); +static const char *remove_outfile_spec_function (int, const char **); +static const char *version_compare_spec_function (int, const char **); +static const char *include_spec_function (int, const char **); +static const char *find_file_spec_function (int, const char **); +static const char *find_plugindir_spec_function (int, const char **); +static const char *print_asm_header_spec_function (int, const char **); +static const char *compare_debug_dump_opt_spec_function (int, const char **); +static const char *compare_debug_self_opt_spec_function (int, const char **); +static const char *pass_through_libs_spec_func (int, const char **); +static const char *dumps_spec_func (int, const char **); +static const char *greater_than_spec_func (int, const char **); +static const char *debug_level_greater_than_spec_func (int, const char **); +static const char *dwarf_version_greater_than_spec_func (int, const char **); +static const char *find_fortran_preinclude_file (int, const char **); +static char *convert_white_space (char *); +static char *quote_spec (char *); +static char *quote_spec_arg (char *); +static bool not_actual_file_p (const char *); + + +/* The Specs Language + +Specs are strings containing lines, each of which (if not blank) +is made up of a program name, and arguments separated by spaces. +The program name must be exact and start from root, since no path +is searched and it is unreliable to depend on the current working directory. +Redirection of input or output is not supported; the subprograms must +accept filenames saying what files to read and write. + +In addition, the specs can contain %-sequences to substitute variable text +or for conditional text. Here is a table of all defined %-sequences. +Note that spaces are not generated automatically around the results of +expanding these sequences; therefore, you can concatenate them together +or with constant text in a single argument. + + %% substitute one % into the program name or argument. + %" substitute an empty argument. + %i substitute the name of the input file being processed. + %b substitute the basename for outputs related with the input file + being processed. This is often a substring of the input file name, + up to (and not including) the last period but, unless %w is active, + it is affected by the directory selected by -save-temps=*, by + -dumpdir, and, in case of multiple compilations, even by -dumpbase + and -dumpbase-ext and, in case of linking, by the linker output + name. When %w is active, it derives the main output name only from + the input file base name; when it is not, it names aux/dump output + file. + %B same as %b, but include the input file suffix (text after the last + period). + %gSUFFIX + substitute a file name that has suffix SUFFIX and is chosen + once per compilation, and mark the argument a la %d. To reduce + exposure to denial-of-service attacks, the file name is now + chosen in a way that is hard to predict even when previously + chosen file names are known. For example, `%g.s ... %g.o ... %g.s' + might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX matches + the regexp "[.0-9A-Za-z]*%O"; "%O" is treated exactly as if it + had been pre-processed. Previously, %g was simply substituted + with a file name chosen once per compilation, without regard + to any appended suffix (which was therefore treated just like + ordinary text), making such attacks more likely to succeed. + %|SUFFIX + like %g, but if -pipe is in effect, expands simply to "-". + %mSUFFIX + like %g, but if -pipe is in effect, expands to nothing. (We have both + %| and %m to accommodate differences between system assemblers; see + the AS_NEEDS_DASH_FOR_PIPED_INPUT target macro.) + %uSUFFIX + like %g, but generates a new temporary file name even if %uSUFFIX + was already seen. + %USUFFIX + substitutes the last file name generated with %uSUFFIX, generating a + new one if there is no such last file name. In the absence of any + %uSUFFIX, this is just like %gSUFFIX, except they don't share + the same suffix "space", so `%g.s ... %U.s ... %g.s ... %U.s' + would involve the generation of two distinct file names, one + for each `%g.s' and another for each `%U.s'. Previously, %U was + simply substituted with a file name chosen for the previous %u, + without regard to any appended suffix. + %jSUFFIX + substitutes the name of the HOST_BIT_BUCKET, if any, and if it is + writable, and if save-temps is off; otherwise, substitute the name + of a temporary file, just like %u. This temporary file is not + meant for communication between processes, but rather as a junk + disposal mechanism. + %.SUFFIX + substitutes .SUFFIX for the suffixes of a matched switch's args when + it is subsequently output with %*. SUFFIX is terminated by the next + space or %. + %d marks the argument containing or following the %d as a + temporary file name, so that file will be deleted if GCC exits + successfully. Unlike %g, this contributes no text to the argument. + %w marks the argument containing or following the %w as the + "output file" of this compilation. This puts the argument + into the sequence of arguments that %o will substitute later. + %V indicates that this compilation produces no "output file". + %W{...} + like %{...} but marks the last argument supplied within as a file + to be deleted on failure. + %@{...} + like %{...} but puts the result into a FILE and substitutes @FILE + if an @file argument has been supplied. + %o substitutes the names of all the output files, with spaces + automatically placed around them. You should write spaces + around the %o as well or the results are undefined. + %o is for use in the specs for running the linker. + Input files whose names have no recognized suffix are not compiled + at all, but they are included among the output files, so they will + be linked. + %O substitutes the suffix for object files. Note that this is + handled specially when it immediately follows %g, %u, or %U + (with or without a suffix argument) because of the need for + those to form complete file names. The handling is such that + %O is treated exactly as if it had already been substituted, + except that %g, %u, and %U do not currently support additional + SUFFIX characters following %O as they would following, for + example, `.o'. + %I Substitute any of -iprefix (made from GCC_EXEC_PREFIX), -isysroot + (made from TARGET_SYSTEM_ROOT), -isystem (made from COMPILER_PATH + and -B options) and -imultilib as necessary. + %s current argument is the name of a library or startup file of some sort. + Search for that file in a standard list of directories + and substitute the full name found. + %T current argument is the name of a linker script. + Search for that file in the current list of directories to scan for + libraries. If the file is located, insert a --script option into the + command line followed by the full path name found. If the file is + not found then generate an error message. + Note: the current working directory is not searched. + %eSTR Print STR as an error message. STR is terminated by a newline. + Use this when inconsistent options are detected. + %nSTR Print STR as a notice. STR is terminated by a newline. + %x{OPTION} Accumulate an option for %X. + %X Output the accumulated linker options specified by compilations. + %Y Output the accumulated assembler options specified by compilations. + %Z Output the accumulated preprocessor options specified by compilations. + %a process ASM_SPEC as a spec. + This allows config.h to specify part of the spec for running as. + %A process ASM_FINAL_SPEC as a spec. A capital A is actually + used here. This can be used to run a post-processor after the + assembler has done its job. + %D Dump out a -L option for each directory in startfile_prefixes. + If multilib_dir is set, extra entries are generated with it affixed. + %l process LINK_SPEC as a spec. + %L process LIB_SPEC as a spec. + %M Output multilib_os_dir. + %G process LIBGCC_SPEC as a spec. + %R Output the concatenation of target_system_root and + target_sysroot_suffix. + %S process STARTFILE_SPEC as a spec. A capital S is actually used here. + %E process ENDFILE_SPEC as a spec. A capital E is actually used here. + %C process CPP_SPEC as a spec. + %1 process CC1_SPEC as a spec. + %2 process CC1PLUS_SPEC as a spec. + %* substitute the variable part of a matched option. (See below.) + Note that each comma in the substituted string is replaced by + a single space. A space is appended after the last substition + unless there is more text in current sequence. + %S Similar to "%= 1 */ +#if HAVE_AS_COMPRESS_DEBUG == 0 +/* No assembler support. Ignore silently. */ +#define ASM_COMPRESS_DEBUG_SPEC \ + " %{gz*:} " +#elif HAVE_AS_COMPRESS_DEBUG == 1 +/* ELF gABI style. */ +#define ASM_COMPRESS_DEBUG_SPEC \ + " %{gz|gz=zlib:" AS_COMPRESS_DEBUG_OPTION "=zlib}" \ + " %{gz=none:" AS_COMPRESS_DEBUG_OPTION "=none}" \ + " %{gz=zlib-gnu:}" /* Ignore silently zlib-gnu option value. */ +#elif HAVE_AS_COMPRESS_DEBUG == 2 +/* ELF gABI style and ZSTD. */ +#define ASM_COMPRESS_DEBUG_SPEC \ + " %{gz|gz=zlib:" AS_COMPRESS_DEBUG_OPTION "=zlib}" \ + " %{gz=none:" AS_COMPRESS_DEBUG_OPTION "=none}" \ + " %{gz=zstd:" AS_COMPRESS_DEBUG_OPTION "=zstd}" \ + " %{gz=zlib-gnu:}" /* Ignore silently zlib-gnu option value. */ +#else +#error Unknown value for HAVE_AS_COMPRESS_DEBUG. +#endif +#endif /* HAVE_LD_COMPRESS_DEBUG >= 1 */ + +/* Define ASM_DEBUG_SPEC to be a spec suitable for translating '-g' + to the assembler, when compiling assembly sources only. */ +#ifndef ASM_DEBUG_SPEC +# if defined(HAVE_AS_GDWARF_5_DEBUG_FLAG) && defined(HAVE_AS_WORKING_DWARF_N_FLAG) +/* If --gdwarf-N is supported and as can handle even compiler generated + .debug_line with it, supply --gdwarf-N in ASM_DEBUG_OPTION_SPEC rather + than in ASM_DEBUG_SPEC, so that it applies to both .s and .c etc. + compilations. */ +# define ASM_DEBUG_DWARF_OPTION "" +# elif defined(HAVE_AS_GDWARF_5_DEBUG_FLAG) && !defined(HAVE_LD_BROKEN_PE_DWARF5) +# define ASM_DEBUG_DWARF_OPTION "%{%:dwarf-version-gt(4):--gdwarf-5;" \ + "%:dwarf-version-gt(3):--gdwarf-4;" \ + "%:dwarf-version-gt(2):--gdwarf-3;" \ + ":--gdwarf2}" +# else +# define ASM_DEBUG_DWARF_OPTION "--gdwarf2" +# endif +# if defined(DWARF2_DEBUGGING_INFO) && defined(HAVE_AS_GDWARF2_DEBUG_FLAG) +# define ASM_DEBUG_SPEC "%{g*:%{%:debug-level-gt(0):" \ + ASM_DEBUG_DWARF_OPTION "}}" ASM_MAP +# endif +# endif +#ifndef ASM_DEBUG_SPEC +# define ASM_DEBUG_SPEC "" +#endif + +/* Define ASM_DEBUG_OPTION_SPEC to be a spec suitable for translating '-g' + to the assembler when compiling all sources. */ +#ifndef ASM_DEBUG_OPTION_SPEC +# if defined(HAVE_AS_GDWARF_5_DEBUG_FLAG) && defined(HAVE_AS_WORKING_DWARF_N_FLAG) +# define ASM_DEBUG_OPTION_DWARF_OPT \ + "%{%:dwarf-version-gt(4):--gdwarf-5 ;" \ + "%:dwarf-version-gt(3):--gdwarf-4 ;" \ + "%:dwarf-version-gt(2):--gdwarf-3 ;" \ + ":--gdwarf2 }" +# if defined(DWARF2_DEBUGGING_INFO) +# define ASM_DEBUG_OPTION_SPEC "%{g*:%{%:debug-level-gt(0):" \ + ASM_DEBUG_OPTION_DWARF_OPT "}}" +# endif +# endif +#endif +#ifndef ASM_DEBUG_OPTION_SPEC +# define ASM_DEBUG_OPTION_SPEC "" +#endif + +/* Here is the spec for running the linker, after compiling all files. */ + +/* This is overridable by the target in case they need to specify the + -lgcc and -lc order specially, yet not require them to override all + of LINK_COMMAND_SPEC. */ +#ifndef LINK_GCC_C_SEQUENCE_SPEC +#define LINK_GCC_C_SEQUENCE_SPEC "%G %{!nolibc:%L %G}" +#endif + +#ifndef LINK_SSP_SPEC +#ifdef TARGET_LIBC_PROVIDES_SSP +#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \ + "|fstack-protector-strong|fstack-protector-explicit:}" +#else +#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \ + "|fstack-protector-strong|fstack-protector-explicit" \ + ":-lssp_nonshared -lssp}" +#endif +#endif + +#ifdef ENABLE_DEFAULT_PIE +#define PIE_SPEC "!no-pie" +#define NO_FPIE1_SPEC "fno-pie" +#define FPIE1_SPEC NO_FPIE1_SPEC ":;" +#define NO_FPIE2_SPEC "fno-PIE" +#define FPIE2_SPEC NO_FPIE2_SPEC ":;" +#define NO_FPIE_SPEC NO_FPIE1_SPEC "|" NO_FPIE2_SPEC +#define FPIE_SPEC NO_FPIE_SPEC ":;" +#define NO_FPIC1_SPEC "fno-pic" +#define FPIC1_SPEC NO_FPIC1_SPEC ":;" +#define NO_FPIC2_SPEC "fno-PIC" +#define FPIC2_SPEC NO_FPIC2_SPEC ":;" +#define NO_FPIC_SPEC NO_FPIC1_SPEC "|" NO_FPIC2_SPEC +#define FPIC_SPEC NO_FPIC_SPEC ":;" +#define NO_FPIE1_AND_FPIC1_SPEC NO_FPIE1_SPEC "|" NO_FPIC1_SPEC +#define FPIE1_OR_FPIC1_SPEC NO_FPIE1_AND_FPIC1_SPEC ":;" +#define NO_FPIE2_AND_FPIC2_SPEC NO_FPIE2_SPEC "|" NO_FPIC2_SPEC +#define FPIE2_OR_FPIC2_SPEC NO_FPIE2_AND_FPIC2_SPEC ":;" +#define NO_FPIE_AND_FPIC_SPEC NO_FPIE_SPEC "|" NO_FPIC_SPEC +#define FPIE_OR_FPIC_SPEC NO_FPIE_AND_FPIC_SPEC ":;" +#else +#define PIE_SPEC "pie" +#define FPIE1_SPEC "fpie" +#define NO_FPIE1_SPEC FPIE1_SPEC ":;" +#define FPIE2_SPEC "fPIE" +#define NO_FPIE2_SPEC FPIE2_SPEC ":;" +#define FPIE_SPEC FPIE1_SPEC "|" FPIE2_SPEC +#define NO_FPIE_SPEC FPIE_SPEC ":;" +#define FPIC1_SPEC "fpic" +#define NO_FPIC1_SPEC FPIC1_SPEC ":;" +#define FPIC2_SPEC "fPIC" +#define NO_FPIC2_SPEC FPIC2_SPEC ":;" +#define FPIC_SPEC FPIC1_SPEC "|" FPIC2_SPEC +#define NO_FPIC_SPEC FPIC_SPEC ":;" +#define FPIE1_OR_FPIC1_SPEC FPIE1_SPEC "|" FPIC1_SPEC +#define NO_FPIE1_AND_FPIC1_SPEC FPIE1_OR_FPIC1_SPEC ":;" +#define FPIE2_OR_FPIC2_SPEC FPIE2_SPEC "|" FPIC2_SPEC +#define NO_FPIE2_AND_FPIC2_SPEC FPIE1_OR_FPIC2_SPEC ":;" +#define FPIE_OR_FPIC_SPEC FPIE_SPEC "|" FPIC_SPEC +#define NO_FPIE_AND_FPIC_SPEC FPIE_OR_FPIC_SPEC ":;" +#endif + +#ifndef LINK_PIE_SPEC +#ifdef HAVE_LD_PIE +#ifndef LD_PIE_SPEC +#define LD_PIE_SPEC "-pie" +#endif +#else +#define LD_PIE_SPEC "" +#endif +#define LINK_PIE_SPEC "%{static|shared|r:;" PIE_SPEC ":" LD_PIE_SPEC "} " +#endif + +#ifndef LINK_BUILDID_SPEC +# if defined(HAVE_LD_BUILDID) && defined(ENABLE_LD_BUILDID) +# define LINK_BUILDID_SPEC "%{!r:--build-id} " +# endif +#endif + +#ifndef LTO_PLUGIN_SPEC +#define LTO_PLUGIN_SPEC "" +#endif + +/* Conditional to test whether the LTO plugin is used or not. + FIXME: For slim LTO we will need to enable plugin unconditionally. This + still cause problems with PLUGIN_LD != LD and when plugin is built but + not useable. For GCC 4.6 we don't support slim LTO and thus we can enable + plugin only when LTO is enabled. We still honor explicit + -fuse-linker-plugin if the linker used understands -plugin. */ + +/* The linker has some plugin support. */ +#if HAVE_LTO_PLUGIN > 0 +/* The linker used has full plugin support, use LTO plugin by default. */ +#if HAVE_LTO_PLUGIN == 2 +#define PLUGIN_COND "!fno-use-linker-plugin:%{!fno-lto" +#define PLUGIN_COND_CLOSE "}" +#else +/* The linker used has limited plugin support, use LTO plugin with explicit + -fuse-linker-plugin. */ +#define PLUGIN_COND "fuse-linker-plugin" +#define PLUGIN_COND_CLOSE "" +#endif +#define LINK_PLUGIN_SPEC \ + "%{" PLUGIN_COND": \ + -plugin %(linker_plugin_file) \ + -plugin-opt=%(lto_wrapper) \ + -plugin-opt=-fresolution=%u.res \ + " LTO_PLUGIN_SPEC "\ + %{flinker-output=*:-plugin-opt=-linker-output-known} \ + %{!nostdlib:%{!nodefaultlibs:%:pass-through-libs(%(link_gcc_c_sequence))}} \ + }" PLUGIN_COND_CLOSE +#else +/* The linker used doesn't support -plugin, reject -fuse-linker-plugin. */ +#define LINK_PLUGIN_SPEC "%{fuse-linker-plugin:\ + %e-fuse-linker-plugin is not supported in this configuration}" +#endif + +/* Linker command line options for -fsanitize= early on the command line. */ +#ifndef SANITIZER_EARLY_SPEC +#define SANITIZER_EARLY_SPEC "\ +%{!nostdlib:%{!r:%{!nodefaultlibs:%{%:sanitize(address):" LIBASAN_EARLY_SPEC "} \ + %{%:sanitize(hwaddress):" LIBHWASAN_EARLY_SPEC "} \ + %{%:sanitize(thread):" LIBTSAN_EARLY_SPEC "} \ + %{%:sanitize(leak):" LIBLSAN_EARLY_SPEC "}}}}" +#endif + +/* Linker command line options for -fsanitize= late on the command line. */ +#ifndef SANITIZER_SPEC +#define SANITIZER_SPEC "\ +%{!nostdlib:%{!r:%{!nodefaultlibs:%{%:sanitize(address):" LIBASAN_SPEC "\ + %{static:%ecannot specify -static with -fsanitize=address}}\ + %{%:sanitize(hwaddress):" LIBHWASAN_SPEC "\ + %{static:%ecannot specify -static with -fsanitize=hwaddress}}\ + %{%:sanitize(thread):" LIBTSAN_SPEC "\ + %{static:%ecannot specify -static with -fsanitize=thread}}\ + %{%:sanitize(undefined):" LIBUBSAN_SPEC "}\ + %{%:sanitize(leak):" LIBLSAN_SPEC "}}}}" +#endif + +#ifndef POST_LINK_SPEC +#define POST_LINK_SPEC "" +#endif + +/* This is the spec to use, once the code for creating the vtable + verification runtime library, libvtv.so, has been created. Currently + the vtable verification runtime functions are in libstdc++, so we use + the spec just below this one. */ +#ifndef VTABLE_VERIFICATION_SPEC +#if ENABLE_VTABLE_VERIFY +#define VTABLE_VERIFICATION_SPEC "\ +%{!nostdlib:%{!r:%{fvtable-verify=std: -lvtv -u_vtable_map_vars_start -u_vtable_map_vars_end}\ + %{fvtable-verify=preinit: -lvtv -u_vtable_map_vars_start -u_vtable_map_vars_end}}}" +#else +#define VTABLE_VERIFICATION_SPEC "\ +%{fvtable-verify=none:} \ +%{fvtable-verify=std: \ + %e-fvtable-verify=std is not supported in this configuration} \ +%{fvtable-verify=preinit: \ + %e-fvtable-verify=preinit is not supported in this configuration}" +#endif +#endif + +/* -u* was put back because both BSD and SysV seem to support it. */ +/* %{static|no-pie|static-pie:} simply prevents an error message: + 1. If the target machine doesn't handle -static. + 2. If PIE isn't enabled by default. + 3. If the target machine doesn't handle -static-pie. + */ +/* We want %{T*} after %{L*} and %D so that it can be used to specify linker + scripts which exist in user specified directories, or in standard + directories. */ +/* We pass any -flto flags on to the linker, which is expected + to understand them. In practice, this means it had better be collect2. */ +/* %{e*} includes -export-dynamic; see comment in common.opt. */ +#ifndef LINK_COMMAND_SPEC +#define LINK_COMMAND_SPEC "\ +%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\ + %(linker) " \ + LINK_PLUGIN_SPEC \ + "%{flto|flto=*:% linker_options; + +/* A vector of options to give to the assembler. + These options are accumulated by -Wa, + and substituted into the assembler command with %Y. */ +static vec assembler_options; + +/* A vector of options to give to the preprocessor. + These options are accumulated by -Wp, + and substituted into the preprocessor command with %Z. */ +static vec preprocessor_options; + +static char * +skip_whitespace (char *p) +{ + while (1) + { + /* A fully-blank line is a delimiter in the SPEC file and shouldn't + be considered whitespace. */ + if (p[0] == '\n' && p[1] == '\n' && p[2] == '\n') + return p + 1; + else if (*p == '\n' || *p == ' ' || *p == '\t') + p++; + else if (*p == '#') + { + while (*p != '\n') + p++; + p++; + } + else + break; + } + + return p; +} +/* Structures to keep track of prefixes to try when looking for files. */ + +struct prefix_list +{ + const char *prefix; /* String to prepend to the path. */ + struct prefix_list *next; /* Next in linked list. */ + int require_machine_suffix; /* Don't use without machine_suffix. */ + /* 2 means try both machine_suffix and just_machine_suffix. */ + int priority; /* Sort key - priority within list. */ + int os_multilib; /* 1 if OS multilib scheme should be used, + 0 for GCC multilib scheme. */ +}; + +struct path_prefix +{ + struct prefix_list *plist; /* List of prefixes to try */ + int max_len; /* Max length of a prefix in PLIST */ + const char *name; /* Name of this list (used in config stuff) */ +}; + +/* List of prefixes to try when looking for executables. */ + +static struct path_prefix exec_prefixes = { 0, 0, "exec" }; + +/* List of prefixes to try when looking for startup (crt0) files. */ + +static struct path_prefix startfile_prefixes = { 0, 0, "startfile" }; + +/* List of prefixes to try when looking for include files. */ + +static struct path_prefix include_prefixes = { 0, 0, "include" }; + +/* Suffix to attach to directories searched for commands. + This looks like `MACHINE/VERSION/'. */ + +static const char *machine_suffix = 0; + +/* Suffix to attach to directories searched for commands. + This is just `MACHINE/'. */ + +static const char *just_machine_suffix = 0; + +/* Adjusted value of GCC_EXEC_PREFIX envvar. */ + +static const char *gcc_exec_prefix; + +/* Adjusted value of standard_libexec_prefix. */ + +static const char *gcc_libexec_prefix; + +/* Default prefixes to attach to command names. */ + +#ifndef STANDARD_STARTFILE_PREFIX_1 +#define STANDARD_STARTFILE_PREFIX_1 "/lib/" +#endif +#ifndef STANDARD_STARTFILE_PREFIX_2 +#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib/" +#endif + +#ifdef CROSS_DIRECTORY_STRUCTURE /* Don't use these prefixes for a cross compiler. */ +#undef MD_EXEC_PREFIX +#undef MD_STARTFILE_PREFIX +#undef MD_STARTFILE_PREFIX_1 +#endif + +/* If no prefixes defined, use the null string, which will disable them. */ +#ifndef MD_EXEC_PREFIX +#define MD_EXEC_PREFIX "" +#endif +#ifndef MD_STARTFILE_PREFIX +#define MD_STARTFILE_PREFIX "" +#endif +#ifndef MD_STARTFILE_PREFIX_1 +#define MD_STARTFILE_PREFIX_1 "" +#endif + +/* These directories are locations set at configure-time based on the + --prefix option provided to configure. Their initializers are + defined in Makefile.in. These paths are not *directly* used when + gcc_exec_prefix is set because, in that case, we know where the + compiler has been installed, and use paths relative to that + location instead. */ +static const char *const standard_exec_prefix = STANDARD_EXEC_PREFIX; +static const char *const standard_libexec_prefix = STANDARD_LIBEXEC_PREFIX; +static const char *const standard_bindir_prefix = STANDARD_BINDIR_PREFIX; +static const char *const standard_startfile_prefix = STANDARD_STARTFILE_PREFIX; + +/* For native compilers, these are well-known paths containing + components that may be provided by the system. For cross + compilers, these paths are not used. */ +static const char *md_exec_prefix = MD_EXEC_PREFIX; +static const char *md_startfile_prefix = MD_STARTFILE_PREFIX; +static const char *md_startfile_prefix_1 = MD_STARTFILE_PREFIX_1; +static const char *const standard_startfile_prefix_1 + = STANDARD_STARTFILE_PREFIX_1; +static const char *const standard_startfile_prefix_2 + = STANDARD_STARTFILE_PREFIX_2; + +/* A relative path to be used in finding the location of tools + relative to the driver. */ +static const char *const tooldir_base_prefix = TOOLDIR_BASE_PREFIX; + +/* A prefix to be used when this is an accelerator compiler. */ +static const char *const accel_dir_suffix = ACCEL_DIR_SUFFIX; + +/* Subdirectory to use for locating libraries. Set by + set_multilib_dir based on the compilation options. */ + +static const char *multilib_dir; + +/* Subdirectory to use for locating libraries in OS conventions. Set by + set_multilib_dir based on the compilation options. */ + +static const char *multilib_os_dir; + +/* Subdirectory to use for locating libraries in multiarch conventions. Set by + set_multilib_dir based on the compilation options. */ + +static const char *multiarch_dir; + +/* Structure to keep track of the specs that have been defined so far. + These are accessed using %(specname) in a compiler or link + spec. */ + +struct spec_list +{ + /* The following 2 fields must be first */ + /* to allow EXTRA_SPECS to be initialized */ + const char *name; /* name of the spec. */ + const char *ptr; /* available ptr if no static pointer */ + + /* The following fields are not initialized */ + /* by EXTRA_SPECS */ + const char **ptr_spec; /* pointer to the spec itself. */ + struct spec_list *next; /* Next spec in linked list. */ + int name_len; /* length of the name */ + bool user_p; /* whether string come from file spec. */ + bool alloc_p; /* whether string was allocated */ + const char *default_ptr; /* The default value of *ptr_spec. */ +}; + +#define INIT_STATIC_SPEC(NAME,PTR) \ + { NAME, NULL, PTR, (struct spec_list *) 0, sizeof (NAME) - 1, false, false, \ + *PTR } + +/* List of statically defined specs. */ +static struct spec_list static_specs[] = +{ + INIT_STATIC_SPEC ("asm", &asm_spec), + INIT_STATIC_SPEC ("asm_debug", &asm_debug), + INIT_STATIC_SPEC ("asm_debug_option", &asm_debug_option), + INIT_STATIC_SPEC ("asm_final", &asm_final_spec), + INIT_STATIC_SPEC ("asm_options", &asm_options), + INIT_STATIC_SPEC ("invoke_as", &invoke_as), + INIT_STATIC_SPEC ("cpp", &cpp_spec), + INIT_STATIC_SPEC ("cpp_options", &cpp_options), + INIT_STATIC_SPEC ("cpp_debug_options", &cpp_debug_options), + INIT_STATIC_SPEC ("cpp_unique_options", &cpp_unique_options), + INIT_STATIC_SPEC ("trad_capable_cpp", &trad_capable_cpp), + INIT_STATIC_SPEC ("cc1", &cc1_spec), + INIT_STATIC_SPEC ("cc1_options", &cc1_options), + INIT_STATIC_SPEC ("cc1plus", &cc1plus_spec), + INIT_STATIC_SPEC ("link_gcc_c_sequence", &link_gcc_c_sequence_spec), + INIT_STATIC_SPEC ("link_ssp", &link_ssp_spec), + INIT_STATIC_SPEC ("endfile", &endfile_spec), + INIT_STATIC_SPEC ("link", &link_spec), + INIT_STATIC_SPEC ("lib", &lib_spec), + INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec), + INIT_STATIC_SPEC ("libgcc", &libgcc_spec), + INIT_STATIC_SPEC ("startfile", &startfile_spec), + INIT_STATIC_SPEC ("cross_compile", &cross_compile), + INIT_STATIC_SPEC ("version", &compiler_version), + INIT_STATIC_SPEC ("multilib", &multilib_select), + INIT_STATIC_SPEC ("multilib_defaults", &multilib_defaults), + INIT_STATIC_SPEC ("multilib_extra", &multilib_extra), + INIT_STATIC_SPEC ("multilib_matches", &multilib_matches), + INIT_STATIC_SPEC ("multilib_exclusions", &multilib_exclusions), + INIT_STATIC_SPEC ("multilib_options", &multilib_options), + INIT_STATIC_SPEC ("multilib_reuse", &multilib_reuse), + INIT_STATIC_SPEC ("linker", &linker_name_spec), + INIT_STATIC_SPEC ("linker_plugin_file", &linker_plugin_file_spec), + INIT_STATIC_SPEC ("lto_wrapper", <o_wrapper_spec), + INIT_STATIC_SPEC ("lto_gcc", <o_gcc_spec), + INIT_STATIC_SPEC ("post_link", &post_link_spec), + INIT_STATIC_SPEC ("link_libgcc", &link_libgcc_spec), + INIT_STATIC_SPEC ("md_exec_prefix", &md_exec_prefix), + INIT_STATIC_SPEC ("md_startfile_prefix", &md_startfile_prefix), + INIT_STATIC_SPEC ("md_startfile_prefix_1", &md_startfile_prefix_1), + INIT_STATIC_SPEC ("startfile_prefix_spec", &startfile_prefix_spec), + INIT_STATIC_SPEC ("sysroot_spec", &sysroot_spec), + INIT_STATIC_SPEC ("sysroot_suffix_spec", &sysroot_suffix_spec), + INIT_STATIC_SPEC ("sysroot_hdrs_suffix_spec", &sysroot_hdrs_suffix_spec), + INIT_STATIC_SPEC ("self_spec", &self_spec), +}; + +#ifdef EXTRA_SPECS /* additional specs needed */ +/* Structure to keep track of just the first two args of a spec_list. + That is all that the EXTRA_SPECS macro gives us. */ +struct spec_list_1 +{ + const char *const name; + const char *const ptr; +}; + +static const struct spec_list_1 extra_specs_1[] = { EXTRA_SPECS }; +static struct spec_list *extra_specs = (struct spec_list *) 0; +#endif + +/* List of dynamically allocates specs that have been defined so far. */ + +static struct spec_list *specs = (struct spec_list *) 0; + +/* List of static spec functions. */ + +static const struct spec_function static_spec_functions[] = +{ + { "getenv", getenv_spec_function }, + { "if-exists", if_exists_spec_function }, + { "if-exists-else", if_exists_else_spec_function }, + { "if-exists-then-else", if_exists_then_else_spec_function }, + { "sanitize", sanitize_spec_function }, + { "replace-outfile", replace_outfile_spec_function }, + { "remove-outfile", remove_outfile_spec_function }, + { "version-compare", version_compare_spec_function }, + { "include", include_spec_function }, + { "find-file", find_file_spec_function }, + { "find-plugindir", find_plugindir_spec_function }, + { "print-asm-header", print_asm_header_spec_function }, + { "compare-debug-dump-opt", compare_debug_dump_opt_spec_function }, + { "compare-debug-self-opt", compare_debug_self_opt_spec_function }, + { "pass-through-libs", pass_through_libs_spec_func }, + { "dumps", dumps_spec_func }, + { "gt", greater_than_spec_func }, + { "debug-level-gt", debug_level_greater_than_spec_func }, + { "dwarf-version-gt", dwarf_version_greater_than_spec_func }, + { "fortran-preinclude-file", find_fortran_preinclude_file}, +#ifdef EXTRA_SPEC_FUNCTIONS + EXTRA_SPEC_FUNCTIONS +#endif + { 0, 0 } +}; + +static int processing_spec_function; + +/* Add appropriate libgcc specs to OBSTACK, taking into account + various permutations of -shared-libgcc, -shared, and such. */ + +#if defined(ENABLE_SHARED_LIBGCC) && !defined(REAL_LIBGCC_SPEC) + +#ifndef USE_LD_AS_NEEDED +#define USE_LD_AS_NEEDED 0 +#endif + +static void +init_gcc_specs (struct obstack *obstack, const char *shared_name, + const char *static_name, const char *eh_name) +{ + char *buf; + +#if USE_LD_AS_NEEDED + buf = concat ("%{static|static-libgcc|static-pie:", static_name, " ", eh_name, "}" + "%{!static:%{!static-libgcc:%{!static-pie:" + "%{!shared-libgcc:", + static_name, " " LD_AS_NEEDED_OPTION " ", + shared_name, " " LD_NO_AS_NEEDED_OPTION + "}" + "%{shared-libgcc:", + shared_name, "%{!shared: ", static_name, "}" + "}}" +#else + buf = concat ("%{static|static-libgcc:", static_name, " ", eh_name, "}" + "%{!static:%{!static-libgcc:" + "%{!shared:" + "%{!shared-libgcc:", static_name, " ", eh_name, "}" + "%{shared-libgcc:", shared_name, " ", static_name, "}" + "}" +#ifdef LINK_EH_SPEC + "%{shared:" + "%{shared-libgcc:", shared_name, "}" + "%{!shared-libgcc:", static_name, "}" + "}" +#else + "%{shared:", shared_name, "}" +#endif +#endif + "}}", NULL); + + obstack_grow (obstack, buf, strlen (buf)); + free (buf); +} +#endif /* ENABLE_SHARED_LIBGCC */ + +/* Initialize the specs lookup routines. */ + +static void +init_spec (void) +{ + struct spec_list *next = (struct spec_list *) 0; + struct spec_list *sl = (struct spec_list *) 0; + int i; + + if (specs) + return; /* Already initialized. */ + + if (verbose_flag) + fnotice (stderr, "Using built-in specs.\n"); + +#ifdef EXTRA_SPECS + extra_specs = XCNEWVEC (struct spec_list, ARRAY_SIZE (extra_specs_1)); + + for (i = ARRAY_SIZE (extra_specs_1) - 1; i >= 0; i--) + { + sl = &extra_specs[i]; + sl->name = extra_specs_1[i].name; + sl->ptr = extra_specs_1[i].ptr; + sl->next = next; + sl->name_len = strlen (sl->name); + sl->ptr_spec = &sl->ptr; + gcc_assert (sl->ptr_spec != NULL); + sl->default_ptr = sl->ptr; + next = sl; + } +#endif + + for (i = ARRAY_SIZE (static_specs) - 1; i >= 0; i--) + { + sl = &static_specs[i]; + sl->next = next; + next = sl; + } + +#if defined(ENABLE_SHARED_LIBGCC) && !defined(REAL_LIBGCC_SPEC) + /* ??? If neither -shared-libgcc nor --static-libgcc was + seen, then we should be making an educated guess. Some proposed + heuristics for ELF include: + + (1) If "-Wl,--export-dynamic", then it's a fair bet that the + program will be doing dynamic loading, which will likely + need the shared libgcc. + + (2) If "-ldl", then it's also a fair bet that we're doing + dynamic loading. + + (3) For each ET_DYN we're linking against (either through -lfoo + or /some/path/foo.so), check to see whether it or one of + its dependencies depends on a shared libgcc. + + (4) If "-shared" + + If the runtime is fixed to look for program headers instead + of calling __register_frame_info at all, for each object, + use the shared libgcc if any EH symbol referenced. + + If crtstuff is fixed to not invoke __register_frame_info + automatically, for each object, use the shared libgcc if + any non-empty unwind section found. + + Doing any of this probably requires invoking an external program to + do the actual object file scanning. */ + { + const char *p = libgcc_spec; + int in_sep = 1; + + /* Transform the extant libgcc_spec into one that uses the shared libgcc + when given the proper command line arguments. */ + while (*p) + { + if (in_sep && *p == '-' && startswith (p, "-lgcc")) + { + init_gcc_specs (&obstack, + "-lgcc_s" +#ifdef USE_LIBUNWIND_EXCEPTIONS + " -lunwind" +#endif + , + "-lgcc", + "-lgcc_eh" +#ifdef USE_LIBUNWIND_EXCEPTIONS +# ifdef HAVE_LD_STATIC_DYNAMIC + " %{!static:%{!static-pie:" LD_STATIC_OPTION "}} -lunwind" + " %{!static:%{!static-pie:" LD_DYNAMIC_OPTION "}}" +# else + " -lunwind" +# endif +#endif + ); + + p += 5; + in_sep = 0; + } + else if (in_sep && *p == 'l' && startswith (p, "libgcc.a%s")) + { + /* Ug. We don't know shared library extensions. Hope that + systems that use this form don't do shared libraries. */ + init_gcc_specs (&obstack, + "-lgcc_s", + "libgcc.a%s", + "libgcc_eh.a%s" +#ifdef USE_LIBUNWIND_EXCEPTIONS + " -lunwind" +#endif + ); + p += 10; + in_sep = 0; + } + else + { + obstack_1grow (&obstack, *p); + in_sep = (*p == ' '); + p += 1; + } + } + + obstack_1grow (&obstack, '\0'); + libgcc_spec = XOBFINISH (&obstack, const char *); + } +#endif +#ifdef USE_AS_TRADITIONAL_FORMAT + /* Prepend "--traditional-format" to whatever asm_spec we had before. */ + { + static const char tf[] = "--traditional-format "; + obstack_grow (&obstack, tf, sizeof (tf) - 1); + obstack_grow0 (&obstack, asm_spec, strlen (asm_spec)); + asm_spec = XOBFINISH (&obstack, const char *); + } +#endif + +#if defined LINK_EH_SPEC || defined LINK_BUILDID_SPEC || \ + defined LINKER_HASH_STYLE +# ifdef LINK_BUILDID_SPEC + /* Prepend LINK_BUILDID_SPEC to whatever link_spec we had before. */ + obstack_grow (&obstack, LINK_BUILDID_SPEC, sizeof (LINK_BUILDID_SPEC) - 1); +# endif +# ifdef LINK_EH_SPEC + /* Prepend LINK_EH_SPEC to whatever link_spec we had before. */ + obstack_grow (&obstack, LINK_EH_SPEC, sizeof (LINK_EH_SPEC) - 1); +# endif +# ifdef LINKER_HASH_STYLE + /* Prepend --hash-style=LINKER_HASH_STYLE to whatever link_spec we had + before. */ + { + static const char hash_style[] = "--hash-style="; + obstack_grow (&obstack, hash_style, sizeof (hash_style) - 1); + obstack_grow (&obstack, LINKER_HASH_STYLE, sizeof (LINKER_HASH_STYLE) - 1); + obstack_1grow (&obstack, ' '); + } +# endif + obstack_grow0 (&obstack, link_spec, strlen (link_spec)); + link_spec = XOBFINISH (&obstack, const char *); +#endif + + specs = sl; +} + +/* Update the entry for SPEC in the static_specs table to point to VALUE, + ensuring that we free the previous value if necessary. Set alloc_p for the + entry to ALLOC_P: this determines whether we take ownership of VALUE (i.e. + whether we need to free it later on). */ +static void +set_static_spec (const char **spec, const char *value, bool alloc_p) +{ + struct spec_list *sl = NULL; + + for (unsigned i = 0; i < ARRAY_SIZE (static_specs); i++) + { + if (static_specs[i].ptr_spec == spec) + { + sl = static_specs + i; + break; + } + } + + gcc_assert (sl); + + if (sl->alloc_p) + { + const char *old = *spec; + free (const_cast (old)); + } + + *spec = value; + sl->alloc_p = alloc_p; +} + +/* Update a static spec to a new string, taking ownership of that + string's memory. */ +static void set_static_spec_owned (const char **spec, const char *val) +{ + return set_static_spec (spec, val, true); +} + +/* Update a static spec to point to a new value, but don't take + ownership of (i.e. don't free) that string. */ +static void set_static_spec_shared (const char **spec, const char *val) +{ + return set_static_spec (spec, val, false); +} + + +/* Change the value of spec NAME to SPEC. If SPEC is empty, then the spec is + removed; If the spec starts with a + then SPEC is added to the end of the + current spec. */ + +static void +set_spec (const char *name, const char *spec, bool user_p) +{ + struct spec_list *sl; + const char *old_spec; + int name_len = strlen (name); + int i; + + /* If this is the first call, initialize the statically allocated specs. */ + if (!specs) + { + struct spec_list *next = (struct spec_list *) 0; + for (i = ARRAY_SIZE (static_specs) - 1; i >= 0; i--) + { + sl = &static_specs[i]; + sl->next = next; + next = sl; + } + specs = sl; + } + + /* See if the spec already exists. */ + for (sl = specs; sl; sl = sl->next) + if (name_len == sl->name_len && !strcmp (sl->name, name)) + break; + + if (!sl) + { + /* Not found - make it. */ + sl = XNEW (struct spec_list); + sl->name = xstrdup (name); + sl->name_len = name_len; + sl->ptr_spec = &sl->ptr; + sl->alloc_p = 0; + *(sl->ptr_spec) = ""; + sl->next = specs; + sl->default_ptr = NULL; + specs = sl; + } + + old_spec = *(sl->ptr_spec); + *(sl->ptr_spec) = ((spec[0] == '+' && ISSPACE ((unsigned char)spec[1])) + ? concat (old_spec, spec + 1, NULL) + : xstrdup (spec)); + +#ifdef DEBUG_SPECS + if (verbose_flag) + fnotice (stderr, "Setting spec %s to '%s'\n\n", name, *(sl->ptr_spec)); +#endif + + /* Free the old spec. */ + if (old_spec && sl->alloc_p) + free (CONST_CAST (char *, old_spec)); + + sl->user_p = user_p; + sl->alloc_p = true; +} + +/* Accumulate a command (program name and args), and run it. */ + +typedef const char *const_char_p; /* For DEF_VEC_P. */ + +/* Vector of pointers to arguments in the current line of specifications. */ +static vec argbuf; + +/* Likewise, but for the current @file. */ +static vec at_file_argbuf; + +/* Whether an @file is currently open. */ +static bool in_at_file = false; + +/* Were the options -c, -S or -E passed. */ +static int have_c = 0; + +/* Was the option -o passed. */ +static int have_o = 0; + +/* Was the option -E passed. */ +static int have_E = 0; + +/* Pointer to output file name passed in with -o. */ +static const char *output_file = 0; + +/* This is the list of suffixes and codes (%g/%u/%U/%j) and the associated + temp file. If the HOST_BIT_BUCKET is used for %j, no entry is made for + it here. */ + +static struct temp_name { + const char *suffix; /* suffix associated with the code. */ + int length; /* strlen (suffix). */ + int unique; /* Indicates whether %g or %u/%U was used. */ + const char *filename; /* associated filename. */ + int filename_length; /* strlen (filename). */ + struct temp_name *next; +} *temp_names; + +/* Number of commands executed so far. */ + +static int execution_count; + +/* Number of commands that exited with a signal. */ + +static int signal_count; + +/* Allocate the argument vector. */ + +static void +alloc_args (void) +{ + argbuf.create (10); + at_file_argbuf.create (10); +} + +/* Clear out the vector of arguments (after a command is executed). */ + +static void +clear_args (void) +{ + argbuf.truncate (0); + at_file_argbuf.truncate (0); +} + +/* Add one argument to the vector at the end. + This is done when a space is seen or at the end of the line. + If DELETE_ALWAYS is nonzero, the arg is a filename + and the file should be deleted eventually. + If DELETE_FAILURE is nonzero, the arg is a filename + and the file should be deleted if this compilation fails. */ + +static void +store_arg (const char *arg, int delete_always, int delete_failure) +{ + if (in_at_file) + at_file_argbuf.safe_push (arg); + else + argbuf.safe_push (arg); + + if (delete_always || delete_failure) + { + const char *p; + /* If the temporary file we should delete is specified as + part of a joined argument extract the filename. */ + if (arg[0] == '-' + && (p = strrchr (arg, '='))) + arg = p + 1; + record_temp_file (arg, delete_always, delete_failure); + } +} + +/* Open a temporary @file into which subsequent arguments will be stored. */ + +static void +open_at_file (void) +{ + if (in_at_file) + fatal_error (input_location, "cannot open nested response file"); + else + in_at_file = true; +} + +/* Create a temporary @file name. */ + +static char *make_at_file (void) +{ + static int fileno = 0; + char filename[20]; + const char *base, *ext; + + if (!save_temps_flag) + return make_temp_file (""); + + base = dumpbase; + if (!(base && *base)) + base = dumpdir; + if (!(base && *base)) + base = "a"; + + sprintf (filename, ".args.%d", fileno++); + ext = filename; + + if (base == dumpdir && dumpdir_trailing_dash_added) + ext++; + + return concat (base, ext, NULL); +} + +/* Close the temporary @file and add @file to the argument list. */ + +static void +close_at_file (void) +{ + if (!in_at_file) + fatal_error (input_location, "cannot close nonexistent response file"); + + in_at_file = false; + + const unsigned int n_args = at_file_argbuf.length (); + if (n_args == 0) + return; + + char **argv = XALLOCAVEC (char *, n_args + 1); + char *temp_file = make_at_file (); + char *at_argument = concat ("@", temp_file, NULL); + FILE *f = fopen (temp_file, "w"); + int status; + unsigned int i; + + /* Copy the strings over. */ + for (i = 0; i < n_args; i++) + argv[i] = CONST_CAST (char *, at_file_argbuf[i]); + argv[i] = NULL; + + at_file_argbuf.truncate (0); + + if (f == NULL) + fatal_error (input_location, "could not open temporary response file %s", + temp_file); + + status = writeargv (argv, f); + + if (status) + fatal_error (input_location, + "could not write to temporary response file %s", + temp_file); + + status = fclose (f); + + if (status == EOF) + fatal_error (input_location, "could not close temporary response file %s", + temp_file); + + store_arg (at_argument, 0, 0); + + record_temp_file (temp_file, !save_temps_flag, !save_temps_flag); +} + +/* Load specs from a file name named FILENAME, replacing occurrences of + various different types of line-endings, \r\n, \n\r and just \r, with + a single \n. */ + +static char * +load_specs (const char *filename) +{ + int desc; + int readlen; + struct stat statbuf; + char *buffer; + char *buffer_p; + char *specs; + char *specs_p; + + if (verbose_flag) + fnotice (stderr, "Reading specs from %s\n", filename); + + /* Open and stat the file. */ + desc = open (filename, O_RDONLY, 0); + if (desc < 0) + { + failed: + /* This leaves DESC open, but the OS will save us. */ + fatal_error (input_location, "cannot read spec file %qs: %m", filename); + } + + if (stat (filename, &statbuf) < 0) + goto failed; + + /* Read contents of file into BUFFER. */ + buffer = XNEWVEC (char, statbuf.st_size + 1); + readlen = read (desc, buffer, (unsigned) statbuf.st_size); + if (readlen < 0) + goto failed; + buffer[readlen] = 0; + close (desc); + + specs = XNEWVEC (char, readlen + 1); + specs_p = specs; + for (buffer_p = buffer; buffer_p && *buffer_p; buffer_p++) + { + int skip = 0; + char c = *buffer_p; + if (c == '\r') + { + if (buffer_p > buffer && *(buffer_p - 1) == '\n') /* \n\r */ + skip = 1; + else if (*(buffer_p + 1) == '\n') /* \r\n */ + skip = 1; + else /* \r */ + c = '\n'; + } + if (! skip) + *specs_p++ = c; + } + *specs_p = '\0'; + + free (buffer); + return (specs); +} + +/* Read compilation specs from a file named FILENAME, + replacing the default ones. + + A suffix which starts with `*' is a definition for + one of the machine-specific sub-specs. The "suffix" should be + *asm, *cc1, *cpp, *link, *startfile, etc. + The corresponding spec is stored in asm_spec, etc., + rather than in the `compilers' vector. + + Anything invalid in the file is a fatal error. */ + +static void +read_specs (const char *filename, bool main_p, bool user_p) +{ + char *buffer; + char *p; + + buffer = load_specs (filename); + + /* Scan BUFFER for specs, putting them in the vector. */ + p = buffer; + while (1) + { + char *suffix; + char *spec; + char *in, *out, *p1, *p2, *p3; + + /* Advance P in BUFFER to the next nonblank nocomment line. */ + p = skip_whitespace (p); + if (*p == 0) + break; + + /* Is this a special command that starts with '%'? */ + /* Don't allow this for the main specs file, since it would + encourage people to overwrite it. */ + if (*p == '%' && !main_p) + { + p1 = p; + while (*p && *p != '\n') + p++; + + /* Skip '\n'. */ + p++; + + if (startswith (p1, "%include") + && (p1[sizeof "%include" - 1] == ' ' + || p1[sizeof "%include" - 1] == '\t')) + { + char *new_filename; + + p1 += sizeof ("%include"); + while (*p1 == ' ' || *p1 == '\t') + p1++; + + if (*p1++ != '<' || p[-2] != '>') + fatal_error (input_location, + "specs %%include syntax malformed after " + "%ld characters", + (long) (p1 - buffer + 1)); + + p[-2] = '\0'; + new_filename = find_a_file (&startfile_prefixes, p1, R_OK, true); + read_specs (new_filename ? new_filename : p1, false, user_p); + continue; + } + else if (startswith (p1, "%include_noerr") + && (p1[sizeof "%include_noerr" - 1] == ' ' + || p1[sizeof "%include_noerr" - 1] == '\t')) + { + char *new_filename; + + p1 += sizeof "%include_noerr"; + while (*p1 == ' ' || *p1 == '\t') + p1++; + + if (*p1++ != '<' || p[-2] != '>') + fatal_error (input_location, + "specs %%include syntax malformed after " + "%ld characters", + (long) (p1 - buffer + 1)); + + p[-2] = '\0'; + new_filename = find_a_file (&startfile_prefixes, p1, R_OK, true); + if (new_filename) + read_specs (new_filename, false, user_p); + else if (verbose_flag) + fnotice (stderr, "could not find specs file %s\n", p1); + continue; + } + else if (startswith (p1, "%rename") + && (p1[sizeof "%rename" - 1] == ' ' + || p1[sizeof "%rename" - 1] == '\t')) + { + int name_len; + struct spec_list *sl; + struct spec_list *newsl; + + /* Get original name. */ + p1 += sizeof "%rename"; + while (*p1 == ' ' || *p1 == '\t') + p1++; + + if (! ISALPHA ((unsigned char) *p1)) + fatal_error (input_location, + "specs %%rename syntax malformed after " + "%ld characters", + (long) (p1 - buffer)); + + p2 = p1; + while (*p2 && !ISSPACE ((unsigned char) *p2)) + p2++; + + if (*p2 != ' ' && *p2 != '\t') + fatal_error (input_location, + "specs %%rename syntax malformed after " + "%ld characters", + (long) (p2 - buffer)); + + name_len = p2 - p1; + *p2++ = '\0'; + while (*p2 == ' ' || *p2 == '\t') + p2++; + + if (! ISALPHA ((unsigned char) *p2)) + fatal_error (input_location, + "specs %%rename syntax malformed after " + "%ld characters", + (long) (p2 - buffer)); + + /* Get new spec name. */ + p3 = p2; + while (*p3 && !ISSPACE ((unsigned char) *p3)) + p3++; + + if (p3 != p - 1) + fatal_error (input_location, + "specs %%rename syntax malformed after " + "%ld characters", + (long) (p3 - buffer)); + *p3 = '\0'; + + for (sl = specs; sl; sl = sl->next) + if (name_len == sl->name_len && !strcmp (sl->name, p1)) + break; + + if (!sl) + fatal_error (input_location, + "specs %s spec was not found to be renamed", p1); + + if (strcmp (p1, p2) == 0) + continue; + + for (newsl = specs; newsl; newsl = newsl->next) + if (strcmp (newsl->name, p2) == 0) + fatal_error (input_location, + "%s: attempt to rename spec %qs to " + "already defined spec %qs", + filename, p1, p2); + + if (verbose_flag) + { + fnotice (stderr, "rename spec %s to %s\n", p1, p2); +#ifdef DEBUG_SPECS + fnotice (stderr, "spec is '%s'\n\n", *(sl->ptr_spec)); +#endif + } + + set_spec (p2, *(sl->ptr_spec), user_p); + if (sl->alloc_p) + free (CONST_CAST (char *, *(sl->ptr_spec))); + + *(sl->ptr_spec) = ""; + sl->alloc_p = 0; + continue; + } + else + fatal_error (input_location, + "specs unknown %% command after %ld characters", + (long) (p1 - buffer)); + } + + /* Find the colon that should end the suffix. */ + p1 = p; + while (*p1 && *p1 != ':' && *p1 != '\n') + p1++; + + /* The colon shouldn't be missing. */ + if (*p1 != ':') + fatal_error (input_location, + "specs file malformed after %ld characters", + (long) (p1 - buffer)); + + /* Skip back over trailing whitespace. */ + p2 = p1; + while (p2 > buffer && (p2[-1] == ' ' || p2[-1] == '\t')) + p2--; + + /* Copy the suffix to a string. */ + suffix = save_string (p, p2 - p); + /* Find the next line. */ + p = skip_whitespace (p1 + 1); + if (p[1] == 0) + fatal_error (input_location, + "specs file malformed after %ld characters", + (long) (p - buffer)); + + p1 = p; + /* Find next blank line or end of string. */ + while (*p1 && !(*p1 == '\n' && (p1[1] == '\n' || p1[1] == '\0'))) + p1++; + + /* Specs end at the blank line and do not include the newline. */ + spec = save_string (p, p1 - p); + p = p1; + + /* Delete backslash-newline sequences from the spec. */ + in = spec; + out = spec; + while (*in != 0) + { + if (in[0] == '\\' && in[1] == '\n') + in += 2; + else if (in[0] == '#') + while (*in && *in != '\n') + in++; + + else + *out++ = *in++; + } + *out = 0; + + if (suffix[0] == '*') + { + if (! strcmp (suffix, "*link_command")) + link_command_spec = spec; + else + { + set_spec (suffix + 1, spec, user_p); + free (spec); + } + } + else + { + /* Add this pair to the vector. */ + compilers + = XRESIZEVEC (struct compiler, compilers, n_compilers + 2); + + compilers[n_compilers].suffix = suffix; + compilers[n_compilers].spec = spec; + n_compilers++; + memset (&compilers[n_compilers], 0, sizeof compilers[n_compilers]); + } + + if (*suffix == 0) + link_command_spec = spec; + } + + if (link_command_spec == 0) + fatal_error (input_location, "spec file has no spec for linking"); + + XDELETEVEC (buffer); +} + +/* Record the names of temporary files we tell compilers to write, + and delete them at the end of the run. */ + +/* This is the common prefix we use to make temp file names. + It is chosen once for each run of this program. + It is substituted into a spec by %g or %j. + Thus, all temp file names contain this prefix. + In practice, all temp file names start with this prefix. + + This prefix comes from the envvar TMPDIR if it is defined; + otherwise, from the P_tmpdir macro if that is defined; + otherwise, in /usr/tmp or /tmp; + or finally the current directory if all else fails. */ + +static const char *temp_filename; + +/* Length of the prefix. */ + +static int temp_filename_length; + +/* Define the list of temporary files to delete. */ + +struct temp_file +{ + const char *name; + struct temp_file *next; +}; + +/* Queue of files to delete on success or failure of compilation. */ +static struct temp_file *always_delete_queue; +/* Queue of files to delete on failure of compilation. */ +static struct temp_file *failure_delete_queue; + +/* Record FILENAME as a file to be deleted automatically. + ALWAYS_DELETE nonzero means delete it if all compilation succeeds; + otherwise delete it in any case. + FAIL_DELETE nonzero means delete it if a compilation step fails; + otherwise delete it in any case. */ + +void +record_temp_file (const char *filename, int always_delete, int fail_delete) +{ + char *const name = xstrdup (filename); + + if (always_delete) + { + struct temp_file *temp; + for (temp = always_delete_queue; temp; temp = temp->next) + if (! filename_cmp (name, temp->name)) + { + free (name); + goto already1; + } + + temp = XNEW (struct temp_file); + temp->next = always_delete_queue; + temp->name = name; + always_delete_queue = temp; + + already1:; + } + + if (fail_delete) + { + struct temp_file *temp; + for (temp = failure_delete_queue; temp; temp = temp->next) + if (! filename_cmp (name, temp->name)) + { + free (name); + goto already2; + } + + temp = XNEW (struct temp_file); + temp->next = failure_delete_queue; + temp->name = name; + failure_delete_queue = temp; + + already2:; + } +} + +/* Delete all the temporary files whose names we previously recorded. */ + +#ifndef DELETE_IF_ORDINARY +#define DELETE_IF_ORDINARY(NAME,ST,VERBOSE_FLAG) \ +do \ + { \ + if (stat (NAME, &ST) >= 0 && S_ISREG (ST.st_mode)) \ + if (unlink (NAME) < 0) \ + if (VERBOSE_FLAG) \ + error ("%s: %m", (NAME)); \ + } while (0) +#endif + +static void +delete_if_ordinary (const char *name) +{ + struct stat st; +#ifdef DEBUG + int i, c; + + printf ("Delete %s? (y or n) ", name); + fflush (stdout); + i = getchar (); + if (i != '\n') + while ((c = getchar ()) != '\n' && c != EOF) + ; + + if (i == 'y' || i == 'Y') +#endif /* DEBUG */ + DELETE_IF_ORDINARY (name, st, verbose_flag); +} + +static void +delete_temp_files (void) +{ + struct temp_file *temp; + + for (temp = always_delete_queue; temp; temp = temp->next) + delete_if_ordinary (temp->name); + always_delete_queue = 0; +} + +/* Delete all the files to be deleted on error. */ + +static void +delete_failure_queue (void) +{ + struct temp_file *temp; + + for (temp = failure_delete_queue; temp; temp = temp->next) + delete_if_ordinary (temp->name); +} + +static void +clear_failure_queue (void) +{ + failure_delete_queue = 0; +} + +/* Call CALLBACK for each path in PATHS, breaking out early if CALLBACK + returns non-NULL. + If DO_MULTI is true iterate over the paths twice, first with multilib + suffix then without, otherwise iterate over the paths once without + adding a multilib suffix. When DO_MULTI is true, some attempt is made + to avoid visiting the same path twice, but we could do better. For + instance, /usr/lib/../lib is considered different from /usr/lib. + At least EXTRA_SPACE chars past the end of the path passed to + CALLBACK are available for use by the callback. + CALLBACK_INFO allows extra parameters to be passed to CALLBACK. + + Returns the value returned by CALLBACK. */ + +static void * +for_each_path (const struct path_prefix *paths, + bool do_multi, + size_t extra_space, + void *(*callback) (char *, void *), + void *callback_info) +{ + struct prefix_list *pl; + const char *multi_dir = NULL; + const char *multi_os_dir = NULL; + const char *multiarch_suffix = NULL; + const char *multi_suffix; + const char *just_multi_suffix; + char *path = NULL; + void *ret = NULL; + bool skip_multi_dir = false; + bool skip_multi_os_dir = false; + + multi_suffix = machine_suffix; + just_multi_suffix = just_machine_suffix; + if (do_multi && multilib_dir && strcmp (multilib_dir, ".") != 0) + { + multi_dir = concat (multilib_dir, dir_separator_str, NULL); + multi_suffix = concat (multi_suffix, multi_dir, NULL); + just_multi_suffix = concat (just_multi_suffix, multi_dir, NULL); + } + if (do_multi && multilib_os_dir && strcmp (multilib_os_dir, ".") != 0) + multi_os_dir = concat (multilib_os_dir, dir_separator_str, NULL); + if (multiarch_dir) + multiarch_suffix = concat (multiarch_dir, dir_separator_str, NULL); + + while (1) + { + size_t multi_dir_len = 0; + size_t multi_os_dir_len = 0; + size_t multiarch_len = 0; + size_t suffix_len; + size_t just_suffix_len; + size_t len; + + if (multi_dir) + multi_dir_len = strlen (multi_dir); + if (multi_os_dir) + multi_os_dir_len = strlen (multi_os_dir); + if (multiarch_suffix) + multiarch_len = strlen (multiarch_suffix); + suffix_len = strlen (multi_suffix); + just_suffix_len = strlen (just_multi_suffix); + + if (path == NULL) + { + len = paths->max_len + extra_space + 1; + len += MAX (MAX (suffix_len, multi_os_dir_len), multiarch_len); + path = XNEWVEC (char, len); + } + + for (pl = paths->plist; pl != 0; pl = pl->next) + { + len = strlen (pl->prefix); + memcpy (path, pl->prefix, len); + + /* Look first in MACHINE/VERSION subdirectory. */ + if (!skip_multi_dir) + { + memcpy (path + len, multi_suffix, suffix_len + 1); + ret = callback (path, callback_info); + if (ret) + break; + } + + /* Some paths are tried with just the machine (ie. target) + subdir. This is used for finding as, ld, etc. */ + if (!skip_multi_dir + && pl->require_machine_suffix == 2) + { + memcpy (path + len, just_multi_suffix, just_suffix_len + 1); + ret = callback (path, callback_info); + if (ret) + break; + } + + /* Now try the multiarch path. */ + if (!skip_multi_dir + && !pl->require_machine_suffix && multiarch_dir) + { + memcpy (path + len, multiarch_suffix, multiarch_len + 1); + ret = callback (path, callback_info); + if (ret) + break; + } + + /* Now try the base path. */ + if (!pl->require_machine_suffix + && !(pl->os_multilib ? skip_multi_os_dir : skip_multi_dir)) + { + const char *this_multi; + size_t this_multi_len; + + if (pl->os_multilib) + { + this_multi = multi_os_dir; + this_multi_len = multi_os_dir_len; + } + else + { + this_multi = multi_dir; + this_multi_len = multi_dir_len; + } + + if (this_multi_len) + memcpy (path + len, this_multi, this_multi_len + 1); + else + path[len] = '\0'; + + ret = callback (path, callback_info); + if (ret) + break; + } + } + if (pl) + break; + + if (multi_dir == NULL && multi_os_dir == NULL) + break; + + /* Run through the paths again, this time without multilibs. + Don't repeat any we have already seen. */ + if (multi_dir) + { + free (CONST_CAST (char *, multi_dir)); + multi_dir = NULL; + free (CONST_CAST (char *, multi_suffix)); + multi_suffix = machine_suffix; + free (CONST_CAST (char *, just_multi_suffix)); + just_multi_suffix = just_machine_suffix; + } + else + skip_multi_dir = true; + if (multi_os_dir) + { + free (CONST_CAST (char *, multi_os_dir)); + multi_os_dir = NULL; + } + else + skip_multi_os_dir = true; + } + + if (multi_dir) + { + free (CONST_CAST (char *, multi_dir)); + free (CONST_CAST (char *, multi_suffix)); + free (CONST_CAST (char *, just_multi_suffix)); + } + if (multi_os_dir) + free (CONST_CAST (char *, multi_os_dir)); + if (ret != path) + free (path); + return ret; +} + +/* Callback for build_search_list. Adds path to obstack being built. */ + +struct add_to_obstack_info { + struct obstack *ob; + bool check_dir; + bool first_time; +}; + +static void * +add_to_obstack (char *path, void *data) +{ + struct add_to_obstack_info *info = (struct add_to_obstack_info *) data; + + if (info->check_dir && !is_directory (path, false)) + return NULL; + + if (!info->first_time) + obstack_1grow (info->ob, PATH_SEPARATOR); + + obstack_grow (info->ob, path, strlen (path)); + + info->first_time = false; + return NULL; +} + +/* Add or change the value of an environment variable, outputting the + change to standard error if in verbose mode. */ +static void +xputenv (const char *string) +{ + env.xput (string); +} + +/* Build a list of search directories from PATHS. + PREFIX is a string to prepend to the list. + If CHECK_DIR_P is true we ensure the directory exists. + If DO_MULTI is true, multilib paths are output first, then + non-multilib paths. + This is used mostly by putenv_from_prefixes so we use `collect_obstack'. + It is also used by the --print-search-dirs flag. */ + +static char * +build_search_list (const struct path_prefix *paths, const char *prefix, + bool check_dir, bool do_multi) +{ + struct add_to_obstack_info info; + + info.ob = &collect_obstack; + info.check_dir = check_dir; + info.first_time = true; + + obstack_grow (&collect_obstack, prefix, strlen (prefix)); + obstack_1grow (&collect_obstack, '='); + + for_each_path (paths, do_multi, 0, add_to_obstack, &info); + + obstack_1grow (&collect_obstack, '\0'); + return XOBFINISH (&collect_obstack, char *); +} + +/* Rebuild the COMPILER_PATH and LIBRARY_PATH environment variables + for collect. */ + +static void +putenv_from_prefixes (const struct path_prefix *paths, const char *env_var, + bool do_multi) +{ + xputenv (build_search_list (paths, env_var, true, do_multi)); +} + +/* Check whether NAME can be accessed in MODE. This is like access, + except that it never considers directories to be executable. */ + +static int +access_check (const char *name, int mode) +{ + if (mode == X_OK) + { + struct stat st; + + if (stat (name, &st) < 0 + || S_ISDIR (st.st_mode)) + return -1; + } + + return access (name, mode); +} + +/* Callback for find_a_file. Appends the file name to the directory + path. If the resulting file exists in the right mode, return the + full pathname to the file. */ + +struct file_at_path_info { + const char *name; + const char *suffix; + int name_len; + int suffix_len; + int mode; +}; + +static void * +file_at_path (char *path, void *data) +{ + struct file_at_path_info *info = (struct file_at_path_info *) data; + size_t len = strlen (path); + + memcpy (path + len, info->name, info->name_len); + len += info->name_len; + + /* Some systems have a suffix for executable files. + So try appending that first. */ + if (info->suffix_len) + { + memcpy (path + len, info->suffix, info->suffix_len + 1); + if (access_check (path, info->mode) == 0) + return path; + } + + path[len] = '\0'; + if (access_check (path, info->mode) == 0) + return path; + + return NULL; +} + +/* Search for NAME using the prefix list PREFIXES. MODE is passed to + access to check permissions. If DO_MULTI is true, search multilib + paths then non-multilib paths, otherwise do not search multilib paths. + Return 0 if not found, otherwise return its name, allocated with malloc. */ + +static char * +find_a_file (const struct path_prefix *pprefix, const char *name, int mode, + bool do_multi) +{ + struct file_at_path_info info; + + /* Find the filename in question (special case for absolute paths). */ + + if (IS_ABSOLUTE_PATH (name)) + { + if (access (name, mode) == 0) + return xstrdup (name); + + return NULL; + } + + info.name = name; + info.suffix = (mode & X_OK) != 0 ? HOST_EXECUTABLE_SUFFIX : ""; + info.name_len = strlen (info.name); + info.suffix_len = strlen (info.suffix); + info.mode = mode; + + return (char*) for_each_path (pprefix, do_multi, + info.name_len + info.suffix_len, + file_at_path, &info); +} + +/* Specialization of find_a_file for programs that also takes into account + configure-specified default programs. */ + +static char* +find_a_program (const char *name) +{ + /* Do not search if default matches query. */ + +#ifdef DEFAULT_ASSEMBLER + if (! strcmp (name, "as") && access (DEFAULT_ASSEMBLER, X_OK) == 0) + return xstrdup (DEFAULT_ASSEMBLER); +#endif + +#ifdef DEFAULT_LINKER + if (! strcmp (name, "ld") && access (DEFAULT_LINKER, X_OK) == 0) + return xstrdup (DEFAULT_LINKER); +#endif + +#ifdef DEFAULT_DSYMUTIL + if (! strcmp (name, "dsymutil") && access (DEFAULT_DSYMUTIL, X_OK) == 0) + return xstrdup (DEFAULT_DSYMUTIL); +#endif + + return find_a_file (&exec_prefixes, name, X_OK, false); +} + +/* Ranking of prefixes in the sort list. -B prefixes are put before + all others. */ + +enum path_prefix_priority +{ + PREFIX_PRIORITY_B_OPT, + PREFIX_PRIORITY_LAST +}; + +/* Add an entry for PREFIX in PLIST. The PLIST is kept in ascending + order according to PRIORITY. Within each PRIORITY, new entries are + appended. + + If WARN is nonzero, we will warn if no file is found + through this prefix. WARN should point to an int + which will be set to 1 if this entry is used. + + COMPONENT is the value to be passed to update_path. + + REQUIRE_MACHINE_SUFFIX is 1 if this prefix can't be used without + the complete value of machine_suffix. + 2 means try both machine_suffix and just_machine_suffix. */ + +static void +add_prefix (struct path_prefix *pprefix, const char *prefix, + const char *component, /* enum prefix_priority */ int priority, + int require_machine_suffix, int os_multilib) +{ + struct prefix_list *pl, **prev; + int len; + + for (prev = &pprefix->plist; + (*prev) != NULL && (*prev)->priority <= priority; + prev = &(*prev)->next) + ; + + /* Keep track of the longest prefix. */ + + prefix = update_path (prefix, component); + len = strlen (prefix); + if (len > pprefix->max_len) + pprefix->max_len = len; + + pl = XNEW (struct prefix_list); + pl->prefix = prefix; + pl->require_machine_suffix = require_machine_suffix; + pl->priority = priority; + pl->os_multilib = os_multilib; + + /* Insert after PREV. */ + pl->next = (*prev); + (*prev) = pl; +} + +/* Same as add_prefix, but prepending target_system_root to prefix. */ +/* The target_system_root prefix has been relocated by gcc_exec_prefix. */ +static void +add_sysrooted_prefix (struct path_prefix *pprefix, const char *prefix, + const char *component, + /* enum prefix_priority */ int priority, + int require_machine_suffix, int os_multilib) +{ + if (!IS_ABSOLUTE_PATH (prefix)) + fatal_error (input_location, "system path %qs is not absolute", prefix); + + if (target_system_root) + { + char *sysroot_no_trailing_dir_separator = xstrdup (target_system_root); + size_t sysroot_len = strlen (target_system_root); + + if (sysroot_len > 0 + && target_system_root[sysroot_len - 1] == DIR_SEPARATOR) + sysroot_no_trailing_dir_separator[sysroot_len - 1] = '\0'; + + if (target_sysroot_suffix) + prefix = concat (sysroot_no_trailing_dir_separator, + target_sysroot_suffix, prefix, NULL); + else + prefix = concat (sysroot_no_trailing_dir_separator, prefix, NULL); + + free (sysroot_no_trailing_dir_separator); + + /* We have to override this because GCC's notion of sysroot + moves along with GCC. */ + component = "GCC"; + } + + add_prefix (pprefix, prefix, component, priority, + require_machine_suffix, os_multilib); +} + +/* Same as add_prefix, but prepending target_sysroot_hdrs_suffix to prefix. */ + +static void +add_sysrooted_hdrs_prefix (struct path_prefix *pprefix, const char *prefix, + const char *component, + /* enum prefix_priority */ int priority, + int require_machine_suffix, int os_multilib) +{ + if (!IS_ABSOLUTE_PATH (prefix)) + fatal_error (input_location, "system path %qs is not absolute", prefix); + + if (target_system_root) + { + char *sysroot_no_trailing_dir_separator = xstrdup (target_system_root); + size_t sysroot_len = strlen (target_system_root); + + if (sysroot_len > 0 + && target_system_root[sysroot_len - 1] == DIR_SEPARATOR) + sysroot_no_trailing_dir_separator[sysroot_len - 1] = '\0'; + + if (target_sysroot_hdrs_suffix) + prefix = concat (sysroot_no_trailing_dir_separator, + target_sysroot_hdrs_suffix, prefix, NULL); + else + prefix = concat (sysroot_no_trailing_dir_separator, prefix, NULL); + + free (sysroot_no_trailing_dir_separator); + + /* We have to override this because GCC's notion of sysroot + moves along with GCC. */ + component = "GCC"; + } + + add_prefix (pprefix, prefix, component, priority, + require_machine_suffix, os_multilib); +} + + +/* Execute the command specified by the arguments on the current line of spec. + When using pipes, this includes several piped-together commands + with `|' between them. + + Return 0 if successful, -1 if failed. */ + +static int +execute (void) +{ + int i; + int n_commands; /* # of command. */ + char *string; + struct pex_obj *pex; + struct command + { + const char *prog; /* program name. */ + const char **argv; /* vector of args. */ + }; + const char *arg; + + struct command *commands; /* each command buffer with above info. */ + + gcc_assert (!processing_spec_function); + + if (wrapper_string) + { + string = find_a_program (argbuf[0]); + if (string) + argbuf[0] = string; + insert_wrapper (wrapper_string); + } + + /* Count # of piped commands. */ + for (n_commands = 1, i = 0; argbuf.iterate (i, &arg); i++) + if (strcmp (arg, "|") == 0) + n_commands++; + + /* Get storage for each command. */ + commands = XALLOCAVEC (struct command, n_commands); + + /* Split argbuf into its separate piped processes, + and record info about each one. + Also search for the programs that are to be run. */ + + argbuf.safe_push (0); + + commands[0].prog = argbuf[0]; /* first command. */ + commands[0].argv = argbuf.address (); + + if (!wrapper_string) + { + string = find_a_program(commands[0].prog); + if (string) + commands[0].argv[0] = string; + } + + for (n_commands = 1, i = 0; argbuf.iterate (i, &arg); i++) + if (arg && strcmp (arg, "|") == 0) + { /* each command. */ +#if defined (__MSDOS__) || defined (OS2) || defined (VMS) + fatal_error (input_location, "%<-pipe%> not supported"); +#endif + argbuf[i] = 0; /* Termination of command args. */ + commands[n_commands].prog = argbuf[i + 1]; + commands[n_commands].argv + = &(argbuf.address ())[i + 1]; + string = find_a_program(commands[n_commands].prog); + if (string) + commands[n_commands].argv[0] = string; + n_commands++; + } + + /* If -v, print what we are about to do, and maybe query. */ + + if (verbose_flag) + { + /* For help listings, put a blank line between sub-processes. */ + if (print_help_list) + fputc ('\n', stderr); + + /* Print each piped command as a separate line. */ + for (i = 0; i < n_commands; i++) + { + const char *const *j; + + if (verbose_only_flag) + { + for (j = commands[i].argv; *j; j++) + { + const char *p; + for (p = *j; *p; ++p) + if (!ISALNUM ((unsigned char) *p) + && *p != '_' && *p != '/' && *p != '-' && *p != '.') + break; + if (*p || !*j) + { + fprintf (stderr, " \""); + for (p = *j; *p; ++p) + { + if (*p == '"' || *p == '\\' || *p == '$') + fputc ('\\', stderr); + fputc (*p, stderr); + } + fputc ('"', stderr); + } + /* If it's empty, print "". */ + else if (!**j) + fprintf (stderr, " \"\""); + else + fprintf (stderr, " %s", *j); + } + } + else + for (j = commands[i].argv; *j; j++) + /* If it's empty, print "". */ + if (!**j) + fprintf (stderr, " \"\""); + else + fprintf (stderr, " %s", *j); + + /* Print a pipe symbol after all but the last command. */ + if (i + 1 != n_commands) + fprintf (stderr, " |"); + fprintf (stderr, "\n"); + } + fflush (stderr); + if (verbose_only_flag != 0) + { + /* verbose_only_flag should act as if the spec was + executed, so increment execution_count before + returning. This prevents spurious warnings about + unused linker input files, etc. */ + execution_count++; + return 0; + } +#ifdef DEBUG + fnotice (stderr, "\nGo ahead? (y or n) "); + fflush (stderr); + i = getchar (); + if (i != '\n') + while (getchar () != '\n') + ; + + if (i != 'y' && i != 'Y') + return 0; +#endif /* DEBUG */ + } + +#ifdef ENABLE_VALGRIND_CHECKING + /* Run the each command through valgrind. To simplify prepending the + path to valgrind and the option "-q" (for quiet operation unless + something triggers), we allocate a separate argv array. */ + + for (i = 0; i < n_commands; i++) + { + const char **argv; + int argc; + int j; + + for (argc = 0; commands[i].argv[argc] != NULL; argc++) + ; + + argv = XALLOCAVEC (const char *, argc + 3); + + argv[0] = VALGRIND_PATH; + argv[1] = "-q"; + for (j = 2; j < argc + 2; j++) + argv[j] = commands[i].argv[j - 2]; + argv[j] = NULL; + + commands[i].argv = argv; + commands[i].prog = argv[0]; + } +#endif + + /* Run each piped subprocess. */ + + pex = pex_init (PEX_USE_PIPES | ((report_times || report_times_to_file) + ? PEX_RECORD_TIMES : 0), + progname, temp_filename); + if (pex == NULL) + fatal_error (input_location, "% failed: %m"); + + for (i = 0; i < n_commands; i++) + { + const char *errmsg; + int err; + const char *string = commands[i].argv[0]; + + errmsg = pex_run (pex, + ((i + 1 == n_commands ? PEX_LAST : 0) + | (string == commands[i].prog ? PEX_SEARCH : 0)), + string, CONST_CAST (char **, commands[i].argv), + NULL, NULL, &err); + if (errmsg != NULL) + { + errno = err; + fatal_error (input_location, + err ? G_("cannot execute %qs: %s: %m") + : G_("cannot execute %qs: %s"), + string, errmsg); + } + + if (i && string != commands[i].prog) + free (CONST_CAST (char *, string)); + } + + execution_count++; + + /* Wait for all the subprocesses to finish. */ + + { + int *statuses; + struct pex_time *times = NULL; + int ret_code = 0; + + statuses = XALLOCAVEC (int, n_commands); + if (!pex_get_status (pex, n_commands, statuses)) + fatal_error (input_location, "failed to get exit status: %m"); + + if (report_times || report_times_to_file) + { + times = XALLOCAVEC (struct pex_time, n_commands); + if (!pex_get_times (pex, n_commands, times)) + fatal_error (input_location, "failed to get process times: %m"); + } + + pex_free (pex); + + for (i = 0; i < n_commands; ++i) + { + int status = statuses[i]; + + if (WIFSIGNALED (status)) + switch (WTERMSIG (status)) + { + case SIGINT: + case SIGTERM: + /* SIGQUIT and SIGKILL are not available on MinGW. */ +#ifdef SIGQUIT + case SIGQUIT: +#endif +#ifdef SIGKILL + case SIGKILL: +#endif + /* The user (or environment) did something to the + inferior. Making this an ICE confuses the user into + thinking there's a compiler bug. Much more likely is + the user or OOM killer nuked it. */ + fatal_error (input_location, + "%s signal terminated program %s", + strsignal (WTERMSIG (status)), + commands[i].prog); + break; + +#ifdef SIGPIPE + case SIGPIPE: + /* SIGPIPE is a special case. It happens in -pipe mode + when the compiler dies before the preprocessor is + done, or the assembler dies before the compiler is + done. There's generally been an error already, and + this is just fallout. So don't generate another + error unless we would otherwise have succeeded. */ + if (signal_count || greatest_status >= MIN_FATAL_STATUS) + { + signal_count++; + ret_code = -1; + break; + } +#endif + /* FALLTHROUGH */ + + default: + /* The inferior failed to catch the signal. */ + internal_error_no_backtrace ("%s signal terminated program %s", + strsignal (WTERMSIG (status)), + commands[i].prog); + } + else if (WIFEXITED (status) + && WEXITSTATUS (status) >= MIN_FATAL_STATUS) + { + /* For ICEs in cc1, cc1obj, cc1plus see if it is + reproducible or not. */ + const char *p; + if (flag_report_bug + && WEXITSTATUS (status) == ICE_EXIT_CODE + && i == 0 + && (p = strrchr (commands[0].argv[0], DIR_SEPARATOR)) + && startswith (p + 1, "cc1")) + try_generate_repro (commands[0].argv); + if (WEXITSTATUS (status) > greatest_status) + greatest_status = WEXITSTATUS (status); + ret_code = -1; + } + + if (report_times || report_times_to_file) + { + struct pex_time *pt = ×[i]; + double ut, st; + + ut = ((double) pt->user_seconds + + (double) pt->user_microseconds / 1.0e6); + st = ((double) pt->system_seconds + + (double) pt->system_microseconds / 1.0e6); + + if (ut + st != 0) + { + if (report_times) + fnotice (stderr, "# %s %.2f %.2f\n", + commands[i].prog, ut, st); + + if (report_times_to_file) + { + int c = 0; + const char *const *j; + + fprintf (report_times_to_file, "%g %g", ut, st); + + for (j = &commands[i].prog; *j; j = &commands[i].argv[++c]) + { + const char *p; + for (p = *j; *p; ++p) + if (*p == '"' || *p == '\\' || *p == '$' + || ISSPACE (*p)) + break; + + if (*p) + { + fprintf (report_times_to_file, " \""); + for (p = *j; *p; ++p) + { + if (*p == '"' || *p == '\\' || *p == '$') + fputc ('\\', report_times_to_file); + fputc (*p, report_times_to_file); + } + fputc ('"', report_times_to_file); + } + else + fprintf (report_times_to_file, " %s", *j); + } + + fputc ('\n', report_times_to_file); + } + } + } + } + + if (commands[0].argv[0] != commands[0].prog) + free (CONST_CAST (char *, commands[0].argv[0])); + + return ret_code; + } +} + +static struct switchstr *switches; + +static int n_switches; + +static int n_switches_alloc; + +/* Set to zero if -fcompare-debug is disabled, positive if it's + enabled and we're running the first compilation, negative if it's + enabled and we're running the second compilation. For most of the + time, it's in the range -1..1, but it can be temporarily set to 2 + or 3 to indicate that the -fcompare-debug flags didn't come from + the command-line, but rather from the GCC_COMPARE_DEBUG environment + variable, until a synthesized -fcompare-debug flag is added to the + command line. */ +int compare_debug; + +/* Set to nonzero if we've seen the -fcompare-debug-second flag. */ +int compare_debug_second; + +/* Set to the flags that should be passed to the second compilation in + a -fcompare-debug compilation. */ +const char *compare_debug_opt; + +static struct switchstr *switches_debug_check[2]; + +static int n_switches_debug_check[2]; + +static int n_switches_alloc_debug_check[2]; + +static char *debug_check_temp_file[2]; + +/* Language is one of three things: + + 1) The name of a real programming language. + 2) NULL, indicating that no one has figured out + what it is yet. + 3) '*', indicating that the file should be passed + to the linker. */ +struct infile +{ + const char *name; + const char *language; + struct compiler *incompiler; + bool compiled; + bool preprocessed; +}; + +/* Also a vector of input files specified. */ + +static struct infile *infiles; + +int n_infiles; + +static int n_infiles_alloc; + +/* True if undefined environment variables encountered during spec processing + are ok to ignore, typically when we're running for --help or --version. */ + +static bool spec_undefvar_allowed; + +/* True if multiple input files are being compiled to a single + assembly file. */ + +static bool combine_inputs; + +/* This counts the number of libraries added by lang_specific_driver, so that + we can tell if there were any user supplied any files or libraries. */ + +static int added_libraries; + +/* And a vector of corresponding output files is made up later. */ + +const char **outfiles; + +#if defined(HAVE_TARGET_OBJECT_SUFFIX) || defined(HAVE_TARGET_EXECUTABLE_SUFFIX) + +/* Convert NAME to a new name if it is the standard suffix. DO_EXE + is true if we should look for an executable suffix. DO_OBJ + is true if we should look for an object suffix. */ + +static const char * +convert_filename (const char *name, int do_exe ATTRIBUTE_UNUSED, + int do_obj ATTRIBUTE_UNUSED) +{ +#if defined(HAVE_TARGET_EXECUTABLE_SUFFIX) + int i; +#endif + int len; + + if (name == NULL) + return NULL; + + len = strlen (name); + +#ifdef HAVE_TARGET_OBJECT_SUFFIX + /* Convert x.o to x.obj if TARGET_OBJECT_SUFFIX is ".obj". */ + if (do_obj && len > 2 + && name[len - 2] == '.' + && name[len - 1] == 'o') + { + obstack_grow (&obstack, name, len - 2); + obstack_grow0 (&obstack, TARGET_OBJECT_SUFFIX, strlen (TARGET_OBJECT_SUFFIX)); + name = XOBFINISH (&obstack, const char *); + } +#endif + +#if defined(HAVE_TARGET_EXECUTABLE_SUFFIX) + /* If there is no filetype, make it the executable suffix (which includes + the "."). But don't get confused if we have just "-o". */ + if (! do_exe || TARGET_EXECUTABLE_SUFFIX[0] == 0 || not_actual_file_p (name)) + return name; + + for (i = len - 1; i >= 0; i--) + if (IS_DIR_SEPARATOR (name[i])) + break; + + for (i++; i < len; i++) + if (name[i] == '.') + return name; + + obstack_grow (&obstack, name, len); + obstack_grow0 (&obstack, TARGET_EXECUTABLE_SUFFIX, + strlen (TARGET_EXECUTABLE_SUFFIX)); + name = XOBFINISH (&obstack, const char *); +#endif + + return name; +} +#endif + +/* Display the command line switches accepted by gcc. */ +static void +display_help (void) +{ + printf (_("Usage: %s [options] file...\n"), progname); + fputs (_("Options:\n"), stdout); + + fputs (_(" -pass-exit-codes Exit with highest error code from a phase.\n"), stdout); + fputs (_(" --help Display this information.\n"), stdout); + fputs (_(" --target-help Display target specific command line options " + "(including assembler and linker options).\n"), stdout); + fputs (_(" --help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...].\n"), stdout); + fputs (_(" Display specific types of command line options.\n"), stdout); + if (! verbose_flag) + fputs (_(" (Use '-v --help' to display command line options of sub-processes).\n"), stdout); + fputs (_(" --version Display compiler version information.\n"), stdout); + fputs (_(" -dumpspecs Display all of the built in spec strings.\n"), stdout); + fputs (_(" -dumpversion Display the version of the compiler.\n"), stdout); + fputs (_(" -dumpmachine Display the compiler's target processor.\n"), stdout); + fputs (_(" -foffload= Specify offloading targets.\n"), stdout); + fputs (_(" -print-search-dirs Display the directories in the compiler's search path.\n"), stdout); + fputs (_(" -print-libgcc-file-name Display the name of the compiler's companion library.\n"), stdout); + fputs (_(" -print-file-name= Display the full path to library .\n"), stdout); + fputs (_(" -print-prog-name= Display the full path to compiler component .\n"), stdout); + fputs (_("\ + -print-multiarch Display the target's normalized GNU triplet, used as\n\ + a component in the library path.\n"), stdout); + fputs (_(" -print-multi-directory Display the root directory for versions of libgcc.\n"), stdout); + fputs (_("\ + -print-multi-lib Display the mapping between command line options and\n\ + multiple library search directories.\n"), stdout); + fputs (_(" -print-multi-os-directory Display the relative path to OS libraries.\n"), stdout); + fputs (_(" -print-sysroot Display the target libraries directory.\n"), stdout); + fputs (_(" -print-sysroot-headers-suffix Display the sysroot suffix used to find headers.\n"), stdout); + fputs (_(" -Wa, Pass comma-separated on to the assembler.\n"), stdout); + fputs (_(" -Wp, Pass comma-separated on to the preprocessor.\n"), stdout); + fputs (_(" -Wl, Pass comma-separated on to the linker.\n"), stdout); + fputs (_(" -Xassembler Pass on to the assembler.\n"), stdout); + fputs (_(" -Xpreprocessor Pass on to the preprocessor.\n"), stdout); + fputs (_(" -Xlinker Pass on to the linker.\n"), stdout); + fputs (_(" -save-temps Do not delete intermediate files.\n"), stdout); + fputs (_(" -save-temps= Do not delete intermediate files.\n"), stdout); + fputs (_("\ + -no-canonical-prefixes Do not canonicalize paths when building relative\n\ + prefixes to other gcc components.\n"), stdout); + fputs (_(" -pipe Use pipes rather than intermediate files.\n"), stdout); + fputs (_(" -time Time the execution of each subprocess.\n"), stdout); + fputs (_(" -specs= Override built-in specs with the contents of .\n"), stdout); + fputs (_(" -std= Assume that the input sources are for .\n"), stdout); + fputs (_("\ + --sysroot= Use as the root directory for headers\n\ + and libraries.\n"), stdout); + fputs (_(" -B Add to the compiler's search paths.\n"), stdout); + fputs (_(" -v Display the programs invoked by the compiler.\n"), stdout); + fputs (_(" -### Like -v but options quoted and commands not executed.\n"), stdout); + fputs (_(" -E Preprocess only; do not compile, assemble or link.\n"), stdout); + fputs (_(" -S Compile only; do not assemble or link.\n"), stdout); + fputs (_(" -c Compile and assemble, but do not link.\n"), stdout); + fputs (_(" -o Place the output into .\n"), stdout); + fputs (_(" -pie Create a dynamically linked position independent\n\ + executable.\n"), stdout); + fputs (_(" -shared Create a shared library.\n"), stdout); + fputs (_("\ + -x Specify the language of the following input files.\n\ + Permissible languages include: c c++ assembler none\n\ + 'none' means revert to the default behavior of\n\ + guessing the language based on the file's extension.\n\ +"), stdout); + + printf (_("\ +\nOptions starting with -g, -f, -m, -O, -W, or --param are automatically\n\ + passed on to the various sub-processes invoked by %s. In order to pass\n\ + other options on to these processes the -W options must be used.\n\ +"), progname); + + /* The rest of the options are displayed by invocations of the various + sub-processes. */ +} + +static void +add_preprocessor_option (const char *option, int len) +{ + preprocessor_options.safe_push (save_string (option, len)); +} + +static void +add_assembler_option (const char *option, int len) +{ + assembler_options.safe_push (save_string (option, len)); +} + +static void +add_linker_option (const char *option, int len) +{ + linker_options.safe_push (save_string (option, len)); +} + +/* Allocate space for an input file in infiles. */ + +static void +alloc_infile (void) +{ + if (n_infiles_alloc == 0) + { + n_infiles_alloc = 16; + infiles = XNEWVEC (struct infile, n_infiles_alloc); + } + else if (n_infiles_alloc == n_infiles) + { + n_infiles_alloc *= 2; + infiles = XRESIZEVEC (struct infile, infiles, n_infiles_alloc); + } +} + +/* Store an input file with the given NAME and LANGUAGE in + infiles. */ + +static void +add_infile (const char *name, const char *language) +{ + alloc_infile (); + infiles[n_infiles].name = name; + infiles[n_infiles++].language = language; +} + +/* Allocate space for a switch in switches. */ + +static void +alloc_switch (void) +{ + if (n_switches_alloc == 0) + { + n_switches_alloc = 16; + switches = XNEWVEC (struct switchstr, n_switches_alloc); + } + else if (n_switches_alloc == n_switches) + { + n_switches_alloc *= 2; + switches = XRESIZEVEC (struct switchstr, switches, n_switches_alloc); + } +} + +/* Save an option OPT with N_ARGS arguments in array ARGS, marking it + as validated if VALIDATED and KNOWN if it is an internal switch. */ + +static void +save_switch (const char *opt, size_t n_args, const char *const *args, + bool validated, bool known) +{ + alloc_switch (); + switches[n_switches].part1 = opt + 1; + if (n_args == 0) + switches[n_switches].args = 0; + else + { + switches[n_switches].args = XNEWVEC (const char *, n_args + 1); + memcpy (switches[n_switches].args, args, n_args * sizeof (const char *)); + switches[n_switches].args[n_args] = NULL; + } + + switches[n_switches].live_cond = 0; + switches[n_switches].validated = validated; + switches[n_switches].known = known; + switches[n_switches].ordering = 0; + n_switches++; +} + +/* Set the SOURCE_DATE_EPOCH environment variable to the current time if it is + not set already. */ + +static void +set_source_date_epoch_envvar () +{ + /* Array size is 21 = ceil(log_10(2^64)) + 1 to hold string representations + of 64 bit integers. */ + char source_date_epoch[21]; + time_t tt; + + errno = 0; + tt = time (NULL); + if (tt < (time_t) 0 || errno != 0) + tt = (time_t) 0; + + snprintf (source_date_epoch, 21, "%llu", (unsigned long long) tt); + /* Using setenv instead of xputenv because we want the variable to remain + after finalizing so that it's still set in the second run when using + -fcompare-debug. */ + setenv ("SOURCE_DATE_EPOCH", source_date_epoch, 0); +} + +/* Handle an option DECODED that is unknown to the option-processing + machinery. */ + +static bool +driver_unknown_option_callback (const struct cl_decoded_option *decoded) +{ + const char *opt = decoded->arg; + if (opt[1] == 'W' && opt[2] == 'n' && opt[3] == 'o' && opt[4] == '-' + && !(decoded->errors & CL_ERR_NEGATIVE)) + { + /* Leave unknown -Wno-* options for the compiler proper, to be + diagnosed only if there are warnings. */ + save_switch (decoded->canonical_option[0], + decoded->canonical_option_num_elements - 1, + &decoded->canonical_option[1], false, true); + return false; + } + if (decoded->opt_index == OPT_SPECIAL_unknown) + { + /* Give it a chance to define it a spec file. */ + save_switch (decoded->canonical_option[0], + decoded->canonical_option_num_elements - 1, + &decoded->canonical_option[1], false, false); + return false; + } + else + return true; +} + +/* Handle an option DECODED that is not marked as CL_DRIVER. + LANG_MASK will always be CL_DRIVER. */ + +static void +driver_wrong_lang_callback (const struct cl_decoded_option *decoded, + unsigned int lang_mask ATTRIBUTE_UNUSED) +{ + /* At this point, non-driver options are accepted (and expected to + be passed down by specs) unless marked to be rejected by the + driver. Options to be rejected by the driver but accepted by the + compilers proper are treated just like completely unknown + options. */ + const struct cl_option *option = &cl_options[decoded->opt_index]; + + if (option->cl_reject_driver) + error ("unrecognized command-line option %qs", + decoded->orig_option_with_args_text); + else + save_switch (decoded->canonical_option[0], + decoded->canonical_option_num_elements - 1, + &decoded->canonical_option[1], false, true); +} + +static const char *spec_lang = 0; +static int last_language_n_infiles; + + +/* Check that GCC is configured to support the offload target. */ + +static bool +check_offload_target_name (const char *target, ptrdiff_t len) +{ + const char *n, *c = OFFLOAD_TARGETS; + while (c) + { + n = strchr (c, ','); + if (n == NULL) + n = strchr (c, '\0'); + if (len == n - c && strncmp (target, c, n - c) == 0) + break; + c = *n ? n + 1 : NULL; + } + if (!c) + { + auto_vec candidates; + size_t olen = strlen (OFFLOAD_TARGETS) + 1; + char *cand = XALLOCAVEC (char, olen); + memcpy (cand, OFFLOAD_TARGETS, olen); + for (c = strtok (cand, ","); c; c = strtok (NULL, ",")) + candidates.safe_push (c); + candidates.safe_push ("default"); + candidates.safe_push ("disable"); + + char *target2 = XALLOCAVEC (char, len + 1); + memcpy (target2, target, len); + target2[len] = '\0'; + + error ("GCC is not configured to support %qs as %<-foffload=%> argument", + target2); + + char *s; + const char *hint = candidates_list_and_hint (target2, s, candidates); + if (hint) + inform (UNKNOWN_LOCATION, + "valid %<-foffload=%> arguments are: %s; " + "did you mean %qs?", s, hint); + else + inform (UNKNOWN_LOCATION, "valid %<-foffload=%> arguments are: %s", s); + XDELETEVEC (s); + return false; + } + return true; +} + +/* Sanity check for -foffload-options. */ + +static void +check_foffload_target_names (const char *arg) +{ + const char *cur, *next, *end; + /* If option argument starts with '-' then no target is specified and we + do not need to parse it. */ + if (arg[0] == '-') + return; + end = strchr (arg, '='); + if (end == NULL) + { + error ("%<=%>options missing after %<-foffload-options=%>target"); + return; + } + + cur = arg; + while (cur < end) + { + next = strchr (cur, ','); + if (next == NULL) + next = end; + next = (next > end) ? end : next; + + /* Retain non-supported targets after printing an error as those will not + be processed; each enabled target only processes its triplet. */ + check_offload_target_name (cur, next - cur); + cur = next + 1; + } +} + +/* Parse -foffload option argument. */ + +static void +handle_foffload_option (const char *arg) +{ + const char *c, *cur, *n, *next, *end; + char *target; + + /* If option argument starts with '-' then no target is specified and we + do not need to parse it. */ + if (arg[0] == '-') + return; + + end = strchr (arg, '='); + if (end == NULL) + end = strchr (arg, '\0'); + cur = arg; + + while (cur < end) + { + next = strchr (cur, ','); + if (next == NULL) + next = end; + next = (next > end) ? end : next; + + target = XNEWVEC (char, next - cur + 1); + memcpy (target, cur, next - cur); + target[next - cur] = '\0'; + + /* Reset offloading list and continue. */ + if (strcmp (target, "default") == 0) + { + free (offload_targets); + offload_targets = NULL; + goto next_item; + } + + /* If 'disable' is passed to the option, clean the list of + offload targets and return, even if more targets follow. + Likewise if GCC is not configured to support that offload target. */ + if (strcmp (target, "disable") == 0 + || !check_offload_target_name (target, next - cur)) + { + free (offload_targets); + offload_targets = xstrdup (""); + return; + } + + if (!offload_targets) + { + offload_targets = target; + target = NULL; + } + else + { + /* Check that the target hasn't already presented in the list. */ + c = offload_targets; + do + { + n = strchr (c, ':'); + if (n == NULL) + n = strchr (c, '\0'); + + if (next - cur == n - c && strncmp (c, target, n - c) == 0) + break; + + c = n + 1; + } + while (*n); + + /* If duplicate is not found, append the target to the list. */ + if (c > n) + { + size_t offload_targets_len = strlen (offload_targets); + offload_targets + = XRESIZEVEC (char, offload_targets, + offload_targets_len + 1 + next - cur + 1); + offload_targets[offload_targets_len++] = ':'; + memcpy (offload_targets + offload_targets_len, target, next - cur + 1); + } + } +next_item: + cur = next + 1; + XDELETEVEC (target); + } +} + +/* Handle a driver option; arguments and return value as for + handle_option. */ + +static bool +driver_handle_option (struct gcc_options *opts, + struct gcc_options *opts_set, + const struct cl_decoded_option *decoded, + unsigned int lang_mask ATTRIBUTE_UNUSED, int kind, + location_t loc, + const struct cl_option_handlers *handlers ATTRIBUTE_UNUSED, + diagnostic_context *dc, + void (*) (void)) +{ + size_t opt_index = decoded->opt_index; + const char *arg = decoded->arg; + const char *compare_debug_replacement_opt; + int value = decoded->value; + bool validated = false; + bool do_save = true; + + gcc_assert (opts == &global_options); + gcc_assert (opts_set == &global_options_set); + gcc_assert (kind == DK_UNSPECIFIED); + gcc_assert (loc == UNKNOWN_LOCATION); + gcc_assert (dc == global_dc); + + switch (opt_index) + { + case OPT_dumpspecs: + { + struct spec_list *sl; + init_spec (); + for (sl = specs; sl; sl = sl->next) + printf ("*%s:\n%s\n\n", sl->name, *(sl->ptr_spec)); + if (link_command_spec) + printf ("*link_command:\n%s\n\n", link_command_spec); + exit (0); + } + + case OPT_dumpversion: + printf ("%s\n", spec_version); + exit (0); + + case OPT_dumpmachine: + printf ("%s\n", spec_machine); + exit (0); + + case OPT_dumpfullversion: + printf ("%s\n", BASEVER); + exit (0); + + case OPT__version: + print_version = 1; + + /* CPP driver cannot obtain switch from cc1_options. */ + if (is_cpp_driver) + add_preprocessor_option ("--version", strlen ("--version")); + add_assembler_option ("--version", strlen ("--version")); + add_linker_option ("--version", strlen ("--version")); + break; + + case OPT__completion_: + validated = true; + completion = decoded->arg; + break; + + case OPT__help: + print_help_list = 1; + + /* CPP driver cannot obtain switch from cc1_options. */ + if (is_cpp_driver) + add_preprocessor_option ("--help", 6); + add_assembler_option ("--help", 6); + add_linker_option ("--help", 6); + break; + + case OPT__help_: + print_subprocess_help = 2; + break; + + case OPT__target_help: + print_subprocess_help = 1; + + /* CPP driver cannot obtain switch from cc1_options. */ + if (is_cpp_driver) + add_preprocessor_option ("--target-help", 13); + add_assembler_option ("--target-help", 13); + add_linker_option ("--target-help", 13); + break; + + case OPT__no_sysroot_suffix: + case OPT_pass_exit_codes: + case OPT_print_search_dirs: + case OPT_print_file_name_: + case OPT_print_prog_name_: + case OPT_print_multi_lib: + case OPT_print_multi_directory: + case OPT_print_sysroot: + case OPT_print_multi_os_directory: + case OPT_print_multiarch: + case OPT_print_sysroot_headers_suffix: + case OPT_time: + case OPT_wrapper: + /* These options set the variables specified in common.opt + automatically, and do not need to be saved for spec + processing. */ + do_save = false; + break; + + case OPT_print_libgcc_file_name: + print_file_name = "libgcc.a"; + do_save = false; + break; + + case OPT_fuse_ld_bfd: + use_ld = ".bfd"; + break; + + case OPT_fuse_ld_gold: + use_ld = ".gold"; + break; + + case OPT_fuse_ld_mold: + use_ld = ".mold"; + break; + + case OPT_fcompare_debug_second: + compare_debug_second = 1; + break; + + case OPT_fcompare_debug: + switch (value) + { + case 0: + compare_debug_replacement_opt = "-fcompare-debug="; + arg = ""; + goto compare_debug_with_arg; + + case 1: + compare_debug_replacement_opt = "-fcompare-debug=-gtoggle"; + arg = "-gtoggle"; + goto compare_debug_with_arg; + + default: + gcc_unreachable (); + } + break; + + case OPT_fcompare_debug_: + compare_debug_replacement_opt = decoded->canonical_option[0]; + compare_debug_with_arg: + gcc_assert (decoded->canonical_option_num_elements == 1); + gcc_assert (arg != NULL); + if (*arg) + compare_debug = 1; + else + compare_debug = -1; + if (compare_debug < 0) + compare_debug_opt = NULL; + else + compare_debug_opt = arg; + save_switch (compare_debug_replacement_opt, 0, NULL, validated, true); + set_source_date_epoch_envvar (); + return true; + + case OPT_fdiagnostics_color_: + diagnostic_color_init (dc, value); + break; + + case OPT_fdiagnostics_urls_: + diagnostic_urls_init (dc, value); + break; + + case OPT_fdiagnostics_format_: + { + const char *basename = (opts->x_dump_base_name ? opts->x_dump_base_name + : opts->x_main_input_basename); + diagnostic_output_format_init (dc, basename, + (enum diagnostics_output_format)value); + break; + } + + case OPT_Wa_: + { + int prev, j; + /* Pass the rest of this option to the assembler. */ + + /* Split the argument at commas. */ + prev = 0; + for (j = 0; arg[j]; j++) + if (arg[j] == ',') + { + add_assembler_option (arg + prev, j - prev); + prev = j + 1; + } + + /* Record the part after the last comma. */ + add_assembler_option (arg + prev, j - prev); + } + do_save = false; + break; + + case OPT_Wp_: + { + int prev, j; + /* Pass the rest of this option to the preprocessor. */ + + /* Split the argument at commas. */ + prev = 0; + for (j = 0; arg[j]; j++) + if (arg[j] == ',') + { + add_preprocessor_option (arg + prev, j - prev); + prev = j + 1; + } + + /* Record the part after the last comma. */ + add_preprocessor_option (arg + prev, j - prev); + } + do_save = false; + break; + + case OPT_Wl_: + { + int prev, j; + /* Split the argument at commas. */ + prev = 0; + for (j = 0; arg[j]; j++) + if (arg[j] == ',') + { + add_infile (save_string (arg + prev, j - prev), "*"); + prev = j + 1; + } + /* Record the part after the last comma. */ + add_infile (arg + prev, "*"); + } + do_save = false; + break; + + case OPT_Xlinker: + add_infile (arg, "*"); + do_save = false; + break; + + case OPT_Xpreprocessor: + add_preprocessor_option (arg, strlen (arg)); + do_save = false; + break; + + case OPT_Xassembler: + add_assembler_option (arg, strlen (arg)); + do_save = false; + break; + + case OPT_l: + /* POSIX allows separation of -l and the lib arg; canonicalize + by concatenating -l with its arg */ + add_infile (concat ("-l", arg, NULL), "*"); + do_save = false; + break; + + case OPT_L: + /* Similarly, canonicalize -L for linkers that may not accept + separate arguments. */ + save_switch (concat ("-L", arg, NULL), 0, NULL, validated, true); + return true; + + case OPT_F: + /* Likewise -F. */ + save_switch (concat ("-F", arg, NULL), 0, NULL, validated, true); + return true; + + case OPT_save_temps: + if (!save_temps_flag) + save_temps_flag = SAVE_TEMPS_DUMP; + validated = true; + break; + + case OPT_save_temps_: + if (strcmp (arg, "cwd") == 0) + save_temps_flag = SAVE_TEMPS_CWD; + else if (strcmp (arg, "obj") == 0 + || strcmp (arg, "object") == 0) + save_temps_flag = SAVE_TEMPS_OBJ; + else + fatal_error (input_location, "%qs is an unknown %<-save-temps%> option", + decoded->orig_option_with_args_text); + save_temps_overrides_dumpdir = true; + break; + + case OPT_dumpdir: + free (dumpdir); + dumpdir = xstrdup (arg); + save_temps_overrides_dumpdir = false; + break; + + case OPT_dumpbase: + free (dumpbase); + dumpbase = xstrdup (arg); + break; + + case OPT_dumpbase_ext: + free (dumpbase_ext); + dumpbase_ext = xstrdup (arg); + break; + + case OPT_no_canonical_prefixes: + /* Already handled as a special case, so ignored here. */ + do_save = false; + break; + + case OPT_pipe: + validated = true; + /* These options set the variables specified in common.opt + automatically, but do need to be saved for spec + processing. */ + break; + + case OPT_specs_: + { + struct user_specs *user = XNEW (struct user_specs); + + user->next = (struct user_specs *) 0; + user->filename = arg; + if (user_specs_tail) + user_specs_tail->next = user; + else + user_specs_head = user; + user_specs_tail = user; + } + validated = true; + break; + + case OPT__sysroot_: + target_system_root = arg; + target_system_root_changed = 1; + /* Saving this option is useful to let self-specs decide to + provide a default one. */ + do_save = true; + validated = true; + break; + + case OPT_time_: + if (report_times_to_file) + fclose (report_times_to_file); + report_times_to_file = fopen (arg, "a"); + do_save = false; + break; + + case OPT____: + /* "-###" + This is similar to -v except that there is no execution + of the commands and the echoed arguments are quoted. It + is intended for use in shell scripts to capture the + driver-generated command line. */ + verbose_only_flag++; + verbose_flag = 1; + do_save = false; + break; + + case OPT_B: + { + size_t len = strlen (arg); + + /* Catch the case where the user has forgotten to append a + directory separator to the path. Note, they may be using + -B to add an executable name prefix, eg "i386-elf-", in + order to distinguish between multiple installations of + GCC in the same directory. Hence we must check to see + if appending a directory separator actually makes a + valid directory name. */ + if (!IS_DIR_SEPARATOR (arg[len - 1]) + && is_directory (arg, false)) + { + char *tmp = XNEWVEC (char, len + 2); + strcpy (tmp, arg); + tmp[len] = DIR_SEPARATOR; + tmp[++len] = 0; + arg = tmp; + } + + add_prefix (&exec_prefixes, arg, NULL, + PREFIX_PRIORITY_B_OPT, 0, 0); + add_prefix (&startfile_prefixes, arg, NULL, + PREFIX_PRIORITY_B_OPT, 0, 0); + add_prefix (&include_prefixes, arg, NULL, + PREFIX_PRIORITY_B_OPT, 0, 0); + } + validated = true; + break; + + case OPT_E: + have_E = true; + break; + + case OPT_x: + spec_lang = arg; + if (!strcmp (spec_lang, "none")) + /* Suppress the warning if -xnone comes after the last input + file, because alternate command interfaces like g++ might + find it useful to place -xnone after each input file. */ + spec_lang = 0; + else + last_language_n_infiles = n_infiles; + do_save = false; + break; + + case OPT_o: + have_o = 1; +#if defined(HAVE_TARGET_EXECUTABLE_SUFFIX) || defined(HAVE_TARGET_OBJECT_SUFFIX) + arg = convert_filename (arg, ! have_c, 0); +#endif + output_file = arg; + /* On some systems, ld cannot handle "-o" without a space. So + split the option from its argument. */ + save_switch ("-o", 1, &arg, validated, true); + return true; + +#ifdef ENABLE_DEFAULT_PIE + case OPT_pie: + /* -pie is turned on by default. */ +#endif + + case OPT_static_libgcc: + case OPT_shared_libgcc: + case OPT_static_libgfortran: + case OPT_static_libquadmath: + case OPT_static_libphobos: + case OPT_static_libgm2: + case OPT_static_libstdc__: + /* These are always valid; gcc.cc itself understands the first two + gfortranspec.cc understands -static-libgfortran, + libgfortran.spec handles -static-libquadmath, + d-spec.cc understands -static-libphobos, + gm2spec.cc understands -static-libgm2, + and g++spec.cc understands -static-libstdc++. */ + validated = true; + break; + + case OPT_fwpa: + flag_wpa = ""; + break; + + case OPT_foffload_options_: + check_foffload_target_names (arg); + break; + + case OPT_foffload_: + handle_foffload_option (arg); + if (arg[0] == '-' || NULL != strchr (arg, '=')) + save_switch (concat ("-foffload-options=", arg, NULL), + 0, NULL, validated, true); + do_save = false; + break; + + default: + /* Various driver options need no special processing at this + point, having been handled in a prescan above or being + handled by specs. */ + break; + } + + if (do_save) + save_switch (decoded->canonical_option[0], + decoded->canonical_option_num_elements - 1, + &decoded->canonical_option[1], validated, true); + return true; +} + +/* Return true if F2 is F1 followed by a single suffix, i.e., by a + period and additional characters other than a period. */ + +static inline bool +adds_single_suffix_p (const char *f2, const char *f1) +{ + size_t len = strlen (f1); + + return (strncmp (f1, f2, len) == 0 + && f2[len] == '.' + && strchr (f2 + len + 1, '.') == NULL); +} + +/* Put the driver's standard set of option handlers in *HANDLERS. */ + +static void +set_option_handlers (struct cl_option_handlers *handlers) +{ + handlers->unknown_option_callback = driver_unknown_option_callback; + handlers->wrong_lang_callback = driver_wrong_lang_callback; + handlers->num_handlers = 3; + handlers->handlers[0].handler = driver_handle_option; + handlers->handlers[0].mask = CL_DRIVER; + handlers->handlers[1].handler = common_handle_option; + handlers->handlers[1].mask = CL_COMMON; + handlers->handlers[2].handler = target_handle_option; + handlers->handlers[2].mask = CL_TARGET; +} + + +/* Return the index into infiles for the single non-library + non-lto-wpa input file, -1 if there isn't any, or -2 if there is + more than one. */ +static inline int +single_input_file_index () +{ + int ret = -1; + + for (int i = 0; i < n_infiles; i++) + { + if (infiles[i].language + && (infiles[i].language[0] == '*' + || (flag_wpa + && strcmp (infiles[i].language, "lto") == 0))) + continue; + + if (ret != -1) + return -2; + + ret = i; + } + + return ret; +} + +/* Create the vector `switches' and its contents. + Store its length in `n_switches'. */ + +static void +process_command (unsigned int decoded_options_count, + struct cl_decoded_option *decoded_options) +{ + const char *temp; + char *temp1; + char *tooldir_prefix, *tooldir_prefix2; + char *(*get_relative_prefix) (const char *, const char *, + const char *) = NULL; + struct cl_option_handlers handlers; + unsigned int j; + + gcc_exec_prefix = env.get ("GCC_EXEC_PREFIX"); + + n_switches = 0; + n_infiles = 0; + added_libraries = 0; + + /* Figure compiler version from version string. */ + + compiler_version = temp1 = xstrdup (version_string); + + for (; *temp1; ++temp1) + { + if (*temp1 == ' ') + { + *temp1 = '\0'; + break; + } + } + + /* Handle any -no-canonical-prefixes flag early, to assign the function + that builds relative prefixes. This function creates default search + paths that are needed later in normal option handling. */ + + for (j = 1; j < decoded_options_count; j++) + { + if (decoded_options[j].opt_index == OPT_no_canonical_prefixes) + { + get_relative_prefix = make_relative_prefix_ignore_links; + break; + } + } + if (! get_relative_prefix) + get_relative_prefix = make_relative_prefix; + + /* Set up the default search paths. If there is no GCC_EXEC_PREFIX, + see if we can create it from the pathname specified in + decoded_options[0].arg. */ + + gcc_libexec_prefix = standard_libexec_prefix; +#ifndef VMS + /* FIXME: make_relative_prefix doesn't yet work for VMS. */ + if (!gcc_exec_prefix) + { + gcc_exec_prefix = get_relative_prefix (decoded_options[0].arg, + standard_bindir_prefix, + standard_exec_prefix); + gcc_libexec_prefix = get_relative_prefix (decoded_options[0].arg, + standard_bindir_prefix, + standard_libexec_prefix); + if (gcc_exec_prefix) + xputenv (concat ("GCC_EXEC_PREFIX=", gcc_exec_prefix, NULL)); + } + else + { + /* make_relative_prefix requires a program name, but + GCC_EXEC_PREFIX is typically a directory name with a trailing + / (which is ignored by make_relative_prefix), so append a + program name. */ + char *tmp_prefix = concat (gcc_exec_prefix, "gcc", NULL); + gcc_libexec_prefix = get_relative_prefix (tmp_prefix, + standard_exec_prefix, + standard_libexec_prefix); + + /* The path is unrelocated, so fallback to the original setting. */ + if (!gcc_libexec_prefix) + gcc_libexec_prefix = standard_libexec_prefix; + + free (tmp_prefix); + } +#else +#endif + /* From this point onward, gcc_exec_prefix is non-null if the toolchain + is relocated. The toolchain was either relocated using GCC_EXEC_PREFIX + or an automatically created GCC_EXEC_PREFIX from + decoded_options[0].arg. */ + + /* Do language-specific adjustment/addition of flags. */ + lang_specific_driver (&decoded_options, &decoded_options_count, + &added_libraries); + + if (gcc_exec_prefix) + { + int len = strlen (gcc_exec_prefix); + + if (len > (int) sizeof ("/lib/gcc/") - 1 + && (IS_DIR_SEPARATOR (gcc_exec_prefix[len-1]))) + { + temp = gcc_exec_prefix + len - sizeof ("/lib/gcc/") + 1; + if (IS_DIR_SEPARATOR (*temp) + && filename_ncmp (temp + 1, "lib", 3) == 0 + && IS_DIR_SEPARATOR (temp[4]) + && filename_ncmp (temp + 5, "gcc", 3) == 0) + len -= sizeof ("/lib/gcc/") - 1; + } + + set_std_prefix (gcc_exec_prefix, len); + add_prefix (&exec_prefixes, gcc_libexec_prefix, "GCC", + PREFIX_PRIORITY_LAST, 0, 0); + add_prefix (&startfile_prefixes, gcc_exec_prefix, "GCC", + PREFIX_PRIORITY_LAST, 0, 0); + } + + /* COMPILER_PATH and LIBRARY_PATH have values + that are lists of directory names with colons. */ + + temp = env.get ("COMPILER_PATH"); + if (temp) + { + const char *startp, *endp; + char *nstore = (char *) alloca (strlen (temp) + 3); + + startp = endp = temp; + while (1) + { + if (*endp == PATH_SEPARATOR || *endp == 0) + { + strncpy (nstore, startp, endp - startp); + if (endp == startp) + strcpy (nstore, concat (".", dir_separator_str, NULL)); + else if (!IS_DIR_SEPARATOR (endp[-1])) + { + nstore[endp - startp] = DIR_SEPARATOR; + nstore[endp - startp + 1] = 0; + } + else + nstore[endp - startp] = 0; + add_prefix (&exec_prefixes, nstore, 0, + PREFIX_PRIORITY_LAST, 0, 0); + add_prefix (&include_prefixes, nstore, 0, + PREFIX_PRIORITY_LAST, 0, 0); + if (*endp == 0) + break; + endp = startp = endp + 1; + } + else + endp++; + } + } + + temp = env.get (LIBRARY_PATH_ENV); + if (temp && *cross_compile == '0') + { + const char *startp, *endp; + char *nstore = (char *) alloca (strlen (temp) + 3); + + startp = endp = temp; + while (1) + { + if (*endp == PATH_SEPARATOR || *endp == 0) + { + strncpy (nstore, startp, endp - startp); + if (endp == startp) + strcpy (nstore, concat (".", dir_separator_str, NULL)); + else if (!IS_DIR_SEPARATOR (endp[-1])) + { + nstore[endp - startp] = DIR_SEPARATOR; + nstore[endp - startp + 1] = 0; + } + else + nstore[endp - startp] = 0; + add_prefix (&startfile_prefixes, nstore, NULL, + PREFIX_PRIORITY_LAST, 0, 1); + if (*endp == 0) + break; + endp = startp = endp + 1; + } + else + endp++; + } + } + + /* Use LPATH like LIBRARY_PATH (for the CMU build program). */ + temp = env.get ("LPATH"); + if (temp && *cross_compile == '0') + { + const char *startp, *endp; + char *nstore = (char *) alloca (strlen (temp) + 3); + + startp = endp = temp; + while (1) + { + if (*endp == PATH_SEPARATOR || *endp == 0) + { + strncpy (nstore, startp, endp - startp); + if (endp == startp) + strcpy (nstore, concat (".", dir_separator_str, NULL)); + else if (!IS_DIR_SEPARATOR (endp[-1])) + { + nstore[endp - startp] = DIR_SEPARATOR; + nstore[endp - startp + 1] = 0; + } + else + nstore[endp - startp] = 0; + add_prefix (&startfile_prefixes, nstore, NULL, + PREFIX_PRIORITY_LAST, 0, 1); + if (*endp == 0) + break; + endp = startp = endp + 1; + } + else + endp++; + } + } + + /* Process the options and store input files and switches in their + vectors. */ + + last_language_n_infiles = -1; + + set_option_handlers (&handlers); + + for (j = 1; j < decoded_options_count; j++) + { + switch (decoded_options[j].opt_index) + { + case OPT_S: + case OPT_c: + case OPT_E: + have_c = 1; + break; + } + if (have_c) + break; + } + + for (j = 1; j < decoded_options_count; j++) + { + if (decoded_options[j].opt_index == OPT_SPECIAL_input_file) + { + const char *arg = decoded_options[j].arg; + +#ifdef HAVE_TARGET_OBJECT_SUFFIX + arg = convert_filename (arg, 0, access (arg, F_OK)); +#endif + add_infile (arg, spec_lang); + + continue; + } + + read_cmdline_option (&global_options, &global_options_set, + decoded_options + j, UNKNOWN_LOCATION, + CL_DRIVER, &handlers, global_dc); + } + + /* If the user didn't specify any, default to all configured offload + targets. */ + if (ENABLE_OFFLOADING && offload_targets == NULL) + { + handle_foffload_option (OFFLOAD_TARGETS); +#if OFFLOAD_DEFAULTED + offload_targets_default = true; +#endif + } + + /* Handle -gtoggle as it would later in toplev.cc:process_options to + make the debug-level-gt spec function work as expected. */ + if (flag_gtoggle) + { + if (debug_info_level == DINFO_LEVEL_NONE) + debug_info_level = DINFO_LEVEL_NORMAL; + else + debug_info_level = DINFO_LEVEL_NONE; + } + + if (output_file + && strcmp (output_file, "-") != 0 + && strcmp (output_file, HOST_BIT_BUCKET) != 0) + { + int i; + for (i = 0; i < n_infiles; i++) + if ((!infiles[i].language || infiles[i].language[0] != '*') + && canonical_filename_eq (infiles[i].name, output_file)) + fatal_error (input_location, + "input file %qs is the same as output file", + output_file); + } + + if (output_file != NULL && output_file[0] == '\0') + fatal_error (input_location, "output filename may not be empty"); + + /* -dumpdir and -save-temps=* both specify the location of aux/dump + outputs; the one that appears last prevails. When compiling + multiple sources, an explicit dumpbase (minus -ext) may be + combined with an explicit or implicit dumpdir, whereas when + linking, a specified or implied link output name (minus + extension) may be combined with a prevailing -save-temps=* or an + otherwise implied dumpdir, but not override a prevailing + -dumpdir. Primary outputs (e.g., linker output when linking + without -o, or .i, .s or .o outputs when processing multiple + inputs with -E, -S or -c, respectively) are NOT affected by these + -save-temps=/-dump* options, always landing in the current + directory and with the same basename as the input when an output + name is not given, but when they're intermediate outputs, they + are named like other aux outputs, so the options affect their + location and name. + + Here are some examples. There are several more in the + documentation of -o and -dump*, and some quite exhaustive tests + in gcc.misc-tests/outputs.exp. + + When compiling any number of sources, no -dump* nor + -save-temps=*, all outputs in cwd without prefix: + + # gcc -c b.c -gsplit-dwarf + -> cc1 [-dumpdir ./] -dumpbase b.c -dumpbase-ext .c # b.o b.dwo + + # gcc -c b.c d.c -gsplit-dwarf + -> cc1 [-dumpdir ./] -dumpbase b.c -dumpbase-ext .c # b.o b.dwo + && cc1 [-dumpdir ./] -dumpbase d.c -dumpbase-ext .c # d.o d.dwo + + When compiling and linking, no -dump* nor -save-temps=*, .o + outputs are temporary, aux outputs land in the dir of the output, + prefixed with the basename of the linker output: + + # gcc b.c d.c -o ab -gsplit-dwarf + -> cc1 -dumpdir ab- -dumpbase b.c -dumpbase-ext .c # ab-b.dwo + && cc1 -dumpdir ab- -dumpbase d.c -dumpbase-ext .c # ab-d.dwo + && link ... -o ab + + # gcc b.c d.c [-o a.out] -gsplit-dwarf + -> cc1 -dumpdir a- -dumpbase b.c -dumpbase-ext .c # a-b.dwo + && cc1 -dumpdir a- -dumpbase d.c -dumpbase-ext .c # a-d.dwo + && link ... [-o a.out] + + When compiling and linking, a prevailing -dumpdir fully overrides + the prefix of aux outputs given by the output name: + + # gcc -dumpdir f b.c d.c -gsplit-dwarf [-o [dir/]whatever] + -> cc1 -dumpdir f -dumpbase b.c -dumpbase-ext .c # fb.dwo + && cc1 -dumpdir f -dumpbase d.c -dumpbase-ext .c # fd.dwo + && link ... [-o whatever] + + When compiling multiple inputs, an explicit -dumpbase is combined + with -dumpdir, affecting aux outputs, but not the .o outputs: + + # gcc -dumpdir f -dumpbase g- b.c d.c -gsplit-dwarf -c + -> cc1 -dumpdir fg- -dumpbase b.c -dumpbase-ext .c # b.o fg-b.dwo + && cc1 -dumpdir fg- -dumpbase d.c -dumpbase-ext .c # d.o fg-d.dwo + + When compiling and linking with -save-temps, the .o outputs that + would have been temporary become aux outputs, so they get + affected by -dump* flags: + + # gcc -dumpdir f -dumpbase g- -save-temps b.c d.c + -> cc1 -dumpdir fg- -dumpbase b.c -dumpbase-ext .c # fg-b.o + && cc1 -dumpdir fg- -dumpbase d.c -dumpbase-ext .c # fg-d.o + && link + + If -save-temps=* prevails over -dumpdir, however, the explicit + -dumpdir is discarded, as if it wasn't there. The basename of + the implicit linker output, a.out or a.exe, becomes a- as the aux + output prefix for all compilations: + + # gcc [-dumpdir f] -save-temps=cwd b.c d.c + -> cc1 -dumpdir a- -dumpbase b.c -dumpbase-ext .c # a-b.o + && cc1 -dumpdir a- -dumpbase d.c -dumpbase-ext .c # a-d.o + && link + + A single -dumpbase, applying to multiple inputs, overrides the + linker output name, implied or explicit, as the aux output prefix: + + # gcc [-dumpdir f] -dumpbase g- -save-temps=cwd b.c d.c + -> cc1 -dumpdir g- -dumpbase b.c -dumpbase-ext .c # g-b.o + && cc1 -dumpdir g- -dumpbase d.c -dumpbase-ext .c # g-d.o + && link + + # gcc [-dumpdir f] -dumpbase g- -save-temps=cwd b.c d.c -o dir/h.out + -> cc1 -dumpdir g- -dumpbase b.c -dumpbase-ext .c # g-b.o + && cc1 -dumpdir g- -dumpbase d.c -dumpbase-ext .c # g-d.o + && link -o dir/h.out + + Now, if the linker output is NOT overridden as a prefix, but + -save-temps=* overrides implicit or explicit -dumpdir, the + effective dump dir combines the dir selected by the -save-temps=* + option with the basename of the specified or implied link output: + + # gcc [-dumpdir f] -save-temps=cwd b.c d.c -o dir/h.out + -> cc1 -dumpdir h- -dumpbase b.c -dumpbase-ext .c # h-b.o + && cc1 -dumpdir h- -dumpbase d.c -dumpbase-ext .c # h-d.o + && link -o dir/h.out + + # gcc [-dumpdir f] -save-temps=obj b.c d.c -o dir/h.out + -> cc1 -dumpdir dir/h- -dumpbase b.c -dumpbase-ext .c # dir/h-b.o + && cc1 -dumpdir dir/h- -dumpbase d.c -dumpbase-ext .c # dir/h-d.o + && link -o dir/h.out + + But then again, a single -dumpbase applying to multiple inputs + gets used instead of the linker output basename in the combined + dumpdir: + + # gcc [-dumpdir f] -dumpbase g- -save-temps=obj b.c d.c -o dir/h.out + -> cc1 -dumpdir dir/g- -dumpbase b.c -dumpbase-ext .c # dir/g-b.o + && cc1 -dumpdir dir/g- -dumpbase d.c -dumpbase-ext .c # dir/g-d.o + && link -o dir/h.out + + With a single input being compiled, the output basename does NOT + affect the dumpdir prefix. + + # gcc -save-temps=obj b.c -gsplit-dwarf -c -o dir/b.o + -> cc1 -dumpdir dir/ -dumpbase b.c -dumpbase-ext .c # dir/b.o dir/b.dwo + + but when compiling and linking even a single file, it does: + + # gcc -save-temps=obj b.c -o dir/h.out + -> cc1 -dumpdir dir/h- -dumpbase b.c -dumpbase-ext .c # dir/h-b.o + + unless an explicit -dumpdir prevails: + + # gcc -save-temps[=obj] -dumpdir g- b.c -o dir/h.out + -> cc1 -dumpdir g- -dumpbase b.c -dumpbase-ext .c # g-b.o + + */ + + bool explicit_dumpdir = dumpdir; + + if ((!save_temps_overrides_dumpdir && explicit_dumpdir) + || (output_file && not_actual_file_p (output_file))) + { + /* Do nothing. */ + } + + /* If -save-temps=obj and -o name, create the prefix to use for %b. + Otherwise just make -save-temps=obj the same as -save-temps=cwd. */ + else if (save_temps_flag != SAVE_TEMPS_CWD && output_file != NULL) + { + free (dumpdir); + dumpdir = NULL; + temp = lbasename (output_file); + if (temp != output_file) + dumpdir = xstrndup (output_file, + strlen (output_file) - strlen (temp)); + } + else if (dumpdir) + { + free (dumpdir); + dumpdir = NULL; + } + + if (save_temps_flag) + save_temps_flag = SAVE_TEMPS_DUMP; + + /* If there is any pathname component in an explicit -dumpbase, it + overrides dumpdir entirely, so discard it right away. Although + the presence of an explicit -dumpdir matters for the driver, it + shouldn't matter for other processes, that get all that's needed + from the -dumpdir and -dumpbase always passed to them. */ + if (dumpdir && dumpbase && lbasename (dumpbase) != dumpbase) + { + free (dumpdir); + dumpdir = NULL; + } + + /* Check that dumpbase_ext matches the end of dumpbase, drop it + otherwise. */ + if (dumpbase_ext && dumpbase && *dumpbase) + { + int lendb = strlen (dumpbase); + int lendbx = strlen (dumpbase_ext); + + /* -dumpbase-ext must be a suffix proper; discard it if it + matches all of -dumpbase, as that would make for an empty + basename. */ + if (lendbx >= lendb + || strcmp (dumpbase + lendb - lendbx, dumpbase_ext) != 0) + { + free (dumpbase_ext); + dumpbase_ext = NULL; + } + } + + /* -dumpbase with multiple sources goes into dumpdir. With a single + source, it does only if linking and if dumpdir was not explicitly + specified. */ + if (dumpbase && *dumpbase + && (single_input_file_index () == -2 + || (!have_c && !explicit_dumpdir))) + { + char *prefix; + + if (dumpbase_ext) + /* We checked that they match above. */ + dumpbase[strlen (dumpbase) - strlen (dumpbase_ext)] = '\0'; + + if (dumpdir) + prefix = concat (dumpdir, dumpbase, "-", NULL); + else + prefix = concat (dumpbase, "-", NULL); + + free (dumpdir); + free (dumpbase); + free (dumpbase_ext); + dumpbase = dumpbase_ext = NULL; + dumpdir = prefix; + dumpdir_trailing_dash_added = true; + } + + /* If dumpbase was not brought into dumpdir but we're linking, bring + output_file into dumpdir unless dumpdir was explicitly specified. + The test for !explicit_dumpdir is further below, because we want + to use the obase computation for a ghost outbase, passed to + GCC_COLLECT_OPTIONS. */ + else if (!have_c && (!explicit_dumpdir || (dumpbase && !*dumpbase))) + { + /* If we get here, we know dumpbase was not specified, or it was + specified as an empty string. If it was anything else, it + would have combined with dumpdir above, because the condition + for dumpbase to be used when present is broader than the + condition that gets us here. */ + gcc_assert (!dumpbase || !*dumpbase); + + const char *obase; + char *tofree = NULL; + if (!output_file || not_actual_file_p (output_file)) + obase = "a"; + else + { + obase = lbasename (output_file); + size_t blen = strlen (obase), xlen; + /* Drop the suffix if it's dumpbase_ext, if given, + otherwise .exe or the target executable suffix, or if the + output was explicitly named a.out, but not otherwise. */ + if (dumpbase_ext + ? (blen > (xlen = strlen (dumpbase_ext)) + && strcmp ((temp = (obase + blen - xlen)), + dumpbase_ext) == 0) + : ((temp = strrchr (obase + 1, '.')) + && (xlen = strlen (temp)) + && (strcmp (temp, ".exe") == 0 +#if defined(HAVE_TARGET_EXECUTABLE_SUFFIX) + || strcmp (temp, TARGET_EXECUTABLE_SUFFIX) == 0 +#endif + || strcmp (obase, "a.out") == 0))) + { + tofree = xstrndup (obase, blen - xlen); + obase = tofree; + } + } + + /* We wish to save this basename to the -dumpdir passed through + GCC_COLLECT_OPTIONS within maybe_run_linker, for e.g. LTO, + but we do NOT wish to add it to e.g. %b, so we keep + outbase_length as zero. */ + gcc_assert (!outbase); + outbase_length = 0; + + /* If we're building [dir1/]foo[.exe] out of a single input + [dir2/]foo.c that shares the same basename, dump to + [dir2/]foo.c.* rather than duplicating the basename into + [dir2/]foo-foo.c.*. */ + int idxin; + if (dumpbase + || ((idxin = single_input_file_index ()) >= 0 + && adds_single_suffix_p (lbasename (infiles[idxin].name), + obase))) + { + if (obase == tofree) + outbase = tofree; + else + { + outbase = xstrdup (obase); + free (tofree); + } + obase = tofree = NULL; + } + else + { + if (dumpdir) + { + char *p = concat (dumpdir, obase, "-", NULL); + free (dumpdir); + dumpdir = p; + } + else + dumpdir = concat (obase, "-", NULL); + + dumpdir_trailing_dash_added = true; + + free (tofree); + obase = tofree = NULL; + } + + if (!explicit_dumpdir || dumpbase) + { + /* Absent -dumpbase and present -dumpbase-ext have been applied + to the linker output name, so compute fresh defaults for each + compilation. */ + free (dumpbase_ext); + dumpbase_ext = NULL; + } + } + + /* Now, if we're compiling, or if we haven't used the dumpbase + above, then outbase (%B) is derived from dumpbase, if given, or + from the output name, given or implied. We can't precompute + implied output names, but that's ok, since they're derived from + input names. Just make sure we skip this if dumpbase is the + empty string: we want to use input names then, so don't set + outbase. */ + if ((dumpbase || have_c) + && !(dumpbase && !*dumpbase)) + { + gcc_assert (!outbase); + + if (dumpbase) + { + gcc_assert (single_input_file_index () != -2); + /* We do not want lbasename here; dumpbase with dirnames + overrides dumpdir entirely, even if dumpdir is + specified. */ + if (dumpbase_ext) + /* We've already checked above that the suffix matches. */ + outbase = xstrndup (dumpbase, + strlen (dumpbase) - strlen (dumpbase_ext)); + else + outbase = xstrdup (dumpbase); + } + else if (output_file && !not_actual_file_p (output_file)) + { + outbase = xstrdup (lbasename (output_file)); + char *p = strrchr (outbase + 1, '.'); + if (p) + *p = '\0'; + } + + if (outbase) + outbase_length = strlen (outbase); + } + + /* If there is any pathname component in an explicit -dumpbase, do + not use dumpdir, but retain it to pass it on to the compiler. */ + if (dumpdir) + dumpdir_length = strlen (dumpdir); + else + dumpdir_length = 0; + + /* Check that dumpbase_ext, if still present, still matches the end + of dumpbase, if present, and drop it otherwise. We only retained + it above when dumpbase was absent to maybe use it to drop the + extension from output_name before combining it with dumpdir. We + won't deal with -dumpbase-ext when -dumpbase is not explicitly + given, even if just to activate backward-compatible dumpbase: + dropping it on the floor is correct, expected and documented + behavior. Attempting to deal with a -dumpbase-ext that might + match the end of some input filename, or of the combination of + the output basename with the suffix of the input filename, + possible with an intermediate .gk extension for -fcompare-debug, + is just calling for trouble. */ + if (dumpbase_ext) + { + if (!dumpbase || !*dumpbase) + { + free (dumpbase_ext); + dumpbase_ext = NULL; + } + else + gcc_assert (strcmp (dumpbase + strlen (dumpbase) + - strlen (dumpbase_ext), dumpbase_ext) == 0); + } + + if (save_temps_flag && use_pipes) + { + /* -save-temps overrides -pipe, so that temp files are produced */ + if (save_temps_flag) + warning (0, "%<-pipe%> ignored because %<-save-temps%> specified"); + use_pipes = 0; + } + + if (!compare_debug) + { + const char *gcd = env.get ("GCC_COMPARE_DEBUG"); + + if (gcd && gcd[0] == '-') + { + compare_debug = 2; + compare_debug_opt = gcd; + } + else if (gcd && *gcd && strcmp (gcd, "0")) + { + compare_debug = 3; + compare_debug_opt = "-gtoggle"; + } + } + else if (compare_debug < 0) + { + compare_debug = 0; + gcc_assert (!compare_debug_opt); + } + + /* Set up the search paths. We add directories that we expect to + contain GNU Toolchain components before directories specified by + the machine description so that we will find GNU components (like + the GNU assembler) before those of the host system. */ + + /* If we don't know where the toolchain has been installed, use the + configured-in locations. */ + if (!gcc_exec_prefix) + { +#ifndef OS2 + add_prefix (&exec_prefixes, standard_libexec_prefix, "GCC", + PREFIX_PRIORITY_LAST, 1, 0); + add_prefix (&exec_prefixes, standard_libexec_prefix, "BINUTILS", + PREFIX_PRIORITY_LAST, 2, 0); + add_prefix (&exec_prefixes, standard_exec_prefix, "BINUTILS", + PREFIX_PRIORITY_LAST, 2, 0); +#endif + add_prefix (&startfile_prefixes, standard_exec_prefix, "BINUTILS", + PREFIX_PRIORITY_LAST, 1, 0); + } + + gcc_assert (!IS_ABSOLUTE_PATH (tooldir_base_prefix)); + tooldir_prefix2 = concat (tooldir_base_prefix, spec_machine, + dir_separator_str, NULL); + + /* Look for tools relative to the location from which the driver is + running, or, if that is not available, the configured prefix. */ + tooldir_prefix + = concat (gcc_exec_prefix ? gcc_exec_prefix : standard_exec_prefix, + spec_host_machine, dir_separator_str, spec_version, + accel_dir_suffix, dir_separator_str, tooldir_prefix2, NULL); + free (tooldir_prefix2); + + add_prefix (&exec_prefixes, + concat (tooldir_prefix, "bin", dir_separator_str, NULL), + "BINUTILS", PREFIX_PRIORITY_LAST, 0, 0); + add_prefix (&startfile_prefixes, + concat (tooldir_prefix, "lib", dir_separator_str, NULL), + "BINUTILS", PREFIX_PRIORITY_LAST, 0, 1); + free (tooldir_prefix); + +#if defined(TARGET_SYSTEM_ROOT_RELOCATABLE) && !defined(VMS) + /* If the normal TARGET_SYSTEM_ROOT is inside of $exec_prefix, + then consider it to relocate with the rest of the GCC installation + if GCC_EXEC_PREFIX is set. + ``make_relative_prefix'' is not compiled for VMS, so don't call it. */ + if (target_system_root && !target_system_root_changed && gcc_exec_prefix) + { + char *tmp_prefix = get_relative_prefix (decoded_options[0].arg, + standard_bindir_prefix, + target_system_root); + if (tmp_prefix && access_check (tmp_prefix, F_OK) == 0) + { + target_system_root = tmp_prefix; + target_system_root_changed = 1; + } + } +#endif + + /* More prefixes are enabled in main, after we read the specs file + and determine whether this is cross-compilation or not. */ + + if (n_infiles != 0 && n_infiles == last_language_n_infiles && spec_lang != 0) + warning (0, "%<-x %s%> after last input file has no effect", spec_lang); + + /* Synthesize -fcompare-debug flag from the GCC_COMPARE_DEBUG + environment variable. */ + if (compare_debug == 2 || compare_debug == 3) + { + const char *opt = concat ("-fcompare-debug=", compare_debug_opt, NULL); + save_switch (opt, 0, NULL, false, true); + compare_debug = 1; + } + + /* Ensure we only invoke each subprocess once. */ + if (n_infiles == 0 + && (print_subprocess_help || print_help_list || print_version)) + { + /* Create a dummy input file, so that we can pass + the help option on to the various sub-processes. */ + add_infile ("help-dummy", "c"); + } + + /* Decide if undefined variable references are allowed in specs. */ + + /* -v alone is safe. --version and --help alone or together are safe. Note + that -v would make them unsafe, as they'd then be run for subprocesses as + well, the location of which might depend on variables possibly coming + from self-specs. Note also that the command name is counted in + decoded_options_count. */ + + unsigned help_version_count = 0; + + if (print_version) + help_version_count++; + + if (print_help_list) + help_version_count++; + + spec_undefvar_allowed = + ((verbose_flag && decoded_options_count == 2) + || help_version_count == decoded_options_count - 1); + + alloc_switch (); + switches[n_switches].part1 = 0; + alloc_infile (); + infiles[n_infiles].name = 0; +} + +/* Store switches not filtered out by % 0 + && !strcmp (argbuf.last (), "|")) + argbuf.pop (); + + set_collect_gcc_options (); + + if (argbuf.length () > 0) + value = execute (); + } + + return value; +} + +/* Process the spec SPEC, with SOFT_MATCHED_PART designating the current value + of a matched * pattern which may be re-injected by way of %*. */ + +static int +do_spec_2 (const char *spec, const char *soft_matched_part) +{ + int result; + + clear_args (); + arg_going = 0; + delete_this_arg = 0; + this_is_output_file = 0; + this_is_library_file = 0; + this_is_linker_script = 0; + input_from_pipe = 0; + suffix_subst = NULL; + + result = do_spec_1 (spec, 0, soft_matched_part); + + end_going_arg (); + + return result; +} + +/* Process the given spec string and add any new options to the end + of the switches/n_switches array. */ + +static void +do_option_spec (const char *name, const char *spec) +{ + unsigned int i, value_count, value_len; + const char *p, *q, *value; + char *tmp_spec, *tmp_spec_p; + + if (configure_default_options[0].name == NULL) + return; + + for (i = 0; i < ARRAY_SIZE (configure_default_options); i++) + if (strcmp (configure_default_options[i].name, name) == 0) + break; + if (i == ARRAY_SIZE (configure_default_options)) + return; + + value = configure_default_options[i].value; + value_len = strlen (value); + + /* Compute the size of the final spec. */ + value_count = 0; + p = spec; + while ((p = strstr (p, "%(VALUE)")) != NULL) + { + p ++; + value_count ++; + } + + /* Replace each %(VALUE) by the specified value. */ + tmp_spec = (char *) alloca (strlen (spec) + 1 + + value_count * (value_len - strlen ("%(VALUE)"))); + tmp_spec_p = tmp_spec; + q = spec; + while ((p = strstr (q, "%(VALUE)")) != NULL) + { + memcpy (tmp_spec_p, q, p - q); + tmp_spec_p = tmp_spec_p + (p - q); + memcpy (tmp_spec_p, value, value_len); + tmp_spec_p += value_len; + q = p + strlen ("%(VALUE)"); + } + strcpy (tmp_spec_p, q); + + do_self_spec (tmp_spec); +} + +/* Process the given spec string and add any new options to the end + of the switches/n_switches array. */ + +static void +do_self_spec (const char *spec) +{ + int i; + + do_spec_2 (spec, NULL); + do_spec_1 (" ", 0, NULL); + + /* Mark % 0) + { + const char **argbuf_copy; + struct cl_decoded_option *decoded_options; + struct cl_option_handlers handlers; + unsigned int decoded_options_count; + unsigned int j; + + /* Create a copy of argbuf with a dummy argv[0] entry for + decode_cmdline_options_to_array. */ + argbuf_copy = XNEWVEC (const char *, + argbuf.length () + 1); + argbuf_copy[0] = ""; + memcpy (argbuf_copy + 1, argbuf.address (), + argbuf.length () * sizeof (const char *)); + + decode_cmdline_options_to_array (argbuf.length () + 1, + argbuf_copy, + CL_DRIVER, &decoded_options, + &decoded_options_count); + free (argbuf_copy); + + set_option_handlers (&handlers); + + for (j = 1; j < decoded_options_count; j++) + { + switch (decoded_options[j].opt_index) + { + case OPT_SPECIAL_input_file: + /* Specs should only generate options, not input + files. */ + if (strcmp (decoded_options[j].arg, "-") != 0) + fatal_error (input_location, + "switch %qs does not start with %<-%>", + decoded_options[j].arg); + else + fatal_error (input_location, + "spec-generated switch is just %<-%>"); + break; + + case OPT_fcompare_debug_second: + case OPT_fcompare_debug: + case OPT_fcompare_debug_: + case OPT_o: + /* Avoid duplicate processing of some options from + compare-debug specs; just save them here. */ + save_switch (decoded_options[j].canonical_option[0], + (decoded_options[j].canonical_option_num_elements + - 1), + &decoded_options[j].canonical_option[1], false, true); + break; + + default: + read_cmdline_option (&global_options, &global_options_set, + decoded_options + j, UNKNOWN_LOCATION, + CL_DRIVER, &handlers, global_dc); + break; + } + } + + free (decoded_options); + + alloc_switch (); + switches[n_switches].part1 = 0; + } +} + +/* Callback for processing %D and %I specs. */ + +struct spec_path_info { + const char *option; + const char *append; + size_t append_len; + bool omit_relative; + bool separate_options; +}; + +static void * +spec_path (char *path, void *data) +{ + struct spec_path_info *info = (struct spec_path_info *) data; + size_t len = 0; + char save = 0; + + if (info->omit_relative && !IS_ABSOLUTE_PATH (path)) + return NULL; + + if (info->append_len != 0) + { + len = strlen (path); + memcpy (path + len, info->append, info->append_len + 1); + } + + if (!is_directory (path, true)) + return NULL; + + do_spec_1 (info->option, 1, NULL); + if (info->separate_options) + do_spec_1 (" ", 0, NULL); + + if (info->append_len == 0) + { + len = strlen (path); + save = path[len - 1]; + if (IS_DIR_SEPARATOR (path[len - 1])) + path[len - 1] = '\0'; + } + + do_spec_1 (path, 1, NULL); + do_spec_1 (" ", 0, NULL); + + /* Must not damage the original path. */ + if (info->append_len == 0) + path[len - 1] = save; + + return NULL; +} + +/* True if we should compile INFILE. */ + +static bool +compile_input_file_p (struct infile *infile) +{ + if ((!infile->language) || (infile->language[0] != '*')) + if (infile->incompiler == input_file_compiler) + return true; + return false; +} + +/* Process each member of VEC as a spec. */ + +static void +do_specs_vec (vec vec) +{ + for (char *opt : vec) + { + do_spec_1 (opt, 1, NULL); + /* Make each accumulated option a separate argument. */ + do_spec_1 (" ", 0, NULL); + } +} + +/* Add options passed via -Xassembler or -Wa to COLLECT_AS_OPTIONS. */ + +static void +putenv_COLLECT_AS_OPTIONS (vec vec) +{ + if (vec.is_empty ()) + return; + + obstack_init (&collect_obstack); + obstack_grow (&collect_obstack, "COLLECT_AS_OPTIONS=", + strlen ("COLLECT_AS_OPTIONS=")); + + char *opt; + unsigned ix; + + FOR_EACH_VEC_ELT (vec, ix, opt) + { + obstack_1grow (&collect_obstack, '\''); + obstack_grow (&collect_obstack, opt, strlen (opt)); + obstack_1grow (&collect_obstack, '\''); + if (ix < vec.length () - 1) + obstack_1grow(&collect_obstack, ' '); + } + + obstack_1grow (&collect_obstack, '\0'); + xputenv (XOBFINISH (&collect_obstack, char *)); +} + +/* Process the sub-spec SPEC as a portion of a larger spec. + This is like processing a whole spec except that we do + not initialize at the beginning and we do not supply a + newline by default at the end. + INSWITCH nonzero means don't process %-sequences in SPEC; + in this case, % is treated as an ordinary character. + This is used while substituting switches. + INSWITCH nonzero also causes SPC not to terminate an argument. + + Value is zero unless a line was finished + and the command on that line reported an error. */ + +static int +do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part) +{ + const char *p = spec; + int c; + int i; + int value; + + /* If it's an empty string argument to a switch, keep it as is. */ + if (inswitch && !*p) + arg_going = 1; + + while ((c = *p++)) + /* If substituting a switch, treat all chars like letters. + Otherwise, NL, SPC, TAB and % are special. */ + switch (inswitch ? 'a' : c) + { + case '\n': + end_going_arg (); + + if (argbuf.length () > 0 + && !strcmp (argbuf.last (), "|")) + { + /* A `|' before the newline means use a pipe here, + but only if -pipe was specified. + Otherwise, execute now and don't pass the `|' as an arg. */ + if (use_pipes) + { + input_from_pipe = 1; + break; + } + else + argbuf.pop (); + } + + set_collect_gcc_options (); + + if (argbuf.length () > 0) + { + value = execute (); + if (value) + return value; + } + /* Reinitialize for a new command, and for a new argument. */ + clear_args (); + arg_going = 0; + delete_this_arg = 0; + this_is_output_file = 0; + this_is_library_file = 0; + this_is_linker_script = 0; + input_from_pipe = 0; + break; + + case '|': + end_going_arg (); + + /* Use pipe */ + obstack_1grow (&obstack, c); + arg_going = 1; + break; + + case '\t': + case ' ': + end_going_arg (); + + /* Reinitialize for a new argument. */ + delete_this_arg = 0; + this_is_output_file = 0; + this_is_library_file = 0; + this_is_linker_script = 0; + break; + + case '%': + switch (c = *p++) + { + case 0: + fatal_error (input_location, "spec %qs invalid", spec); + + case 'b': + /* Don't use %b in the linker command. */ + gcc_assert (suffixed_basename_length); + if (!this_is_output_file && dumpdir_length) + obstack_grow (&obstack, dumpdir, dumpdir_length); + if (this_is_output_file || !outbase_length) + obstack_grow (&obstack, input_basename, basename_length); + else + obstack_grow (&obstack, outbase, outbase_length); + if (compare_debug < 0) + obstack_grow (&obstack, ".gk", 3); + arg_going = 1; + break; + + case 'B': + /* Don't use %B in the linker command. */ + gcc_assert (suffixed_basename_length); + if (!this_is_output_file && dumpdir_length) + obstack_grow (&obstack, dumpdir, dumpdir_length); + if (this_is_output_file || !outbase_length) + obstack_grow (&obstack, input_basename, basename_length); + else + obstack_grow (&obstack, outbase, outbase_length); + if (compare_debug < 0) + obstack_grow (&obstack, ".gk", 3); + obstack_grow (&obstack, input_basename + basename_length, + suffixed_basename_length - basename_length); + + arg_going = 1; + break; + + case 'd': + delete_this_arg = 2; + break; + + /* Dump out the directories specified with LIBRARY_PATH, + followed by the absolute directories + that we search for startfiles. */ + case 'D': + { + struct spec_path_info info; + + info.option = "-L"; + info.append_len = 0; +#ifdef RELATIVE_PREFIX_NOT_LINKDIR + /* Used on systems which record the specified -L dirs + and use them to search for dynamic linking. + Relative directories always come from -B, + and it is better not to use them for searching + at run time. In particular, stage1 loses. */ + info.omit_relative = true; +#else + info.omit_relative = false; +#endif + info.separate_options = false; + + for_each_path (&startfile_prefixes, true, 0, spec_path, &info); + } + break; + + case 'e': + /* %efoo means report an error with `foo' as error message + and don't execute any more commands for this file. */ + { + const char *q = p; + char *buf; + while (*p != 0 && *p != '\n') + p++; + buf = (char *) alloca (p - q + 1); + strncpy (buf, q, p - q); + buf[p - q] = 0; + error ("%s", _(buf)); + return -1; + } + break; + case 'n': + /* %nfoo means report a notice with `foo' on stderr. */ + { + const char *q = p; + char *buf; + while (*p != 0 && *p != '\n') + p++; + buf = (char *) alloca (p - q + 1); + strncpy (buf, q, p - q); + buf[p - q] = 0; + inform (UNKNOWN_LOCATION, "%s", _(buf)); + if (*p) + p++; + } + break; + + case 'j': + { + struct stat st; + + /* If save_temps_flag is off, and the HOST_BIT_BUCKET is + defined, and it is not a directory, and it is + writable, use it. Otherwise, treat this like any + other temporary file. */ + + if ((!save_temps_flag) + && (stat (HOST_BIT_BUCKET, &st) == 0) && (!S_ISDIR (st.st_mode)) + && (access (HOST_BIT_BUCKET, W_OK) == 0)) + { + obstack_grow (&obstack, HOST_BIT_BUCKET, + strlen (HOST_BIT_BUCKET)); + delete_this_arg = 0; + arg_going = 1; + break; + } + } + goto create_temp_file; + case '|': + if (use_pipes) + { + obstack_1grow (&obstack, '-'); + delete_this_arg = 0; + arg_going = 1; + + /* consume suffix */ + while (*p == '.' || ISALNUM ((unsigned char) *p)) + p++; + if (p[0] == '%' && p[1] == 'O') + p += 2; + + break; + } + goto create_temp_file; + case 'm': + if (use_pipes) + { + /* consume suffix */ + while (*p == '.' || ISALNUM ((unsigned char) *p)) + p++; + if (p[0] == '%' && p[1] == 'O') + p += 2; + + break; + } + goto create_temp_file; + case 'g': + case 'u': + case 'U': + create_temp_file: + { + struct temp_name *t; + int suffix_length; + const char *suffix = p; + char *saved_suffix = NULL; + + while (*p == '.' || ISALNUM ((unsigned char) *p)) + p++; + suffix_length = p - suffix; + if (p[0] == '%' && p[1] == 'O') + { + p += 2; + /* We don't support extra suffix characters after %O. */ + if (*p == '.' || ISALNUM ((unsigned char) *p)) + fatal_error (input_location, + "spec %qs has invalid %<%%0%c%>", spec, *p); + if (suffix_length == 0) + suffix = TARGET_OBJECT_SUFFIX; + else + { + saved_suffix + = XNEWVEC (char, suffix_length + + strlen (TARGET_OBJECT_SUFFIX) + 1); + strncpy (saved_suffix, suffix, suffix_length); + strcpy (saved_suffix + suffix_length, + TARGET_OBJECT_SUFFIX); + } + suffix_length += strlen (TARGET_OBJECT_SUFFIX); + } + + if (compare_debug < 0) + { + suffix = concat (".gk", suffix, NULL); + suffix_length += 3; + } + + /* If -save-temps was specified, use that for the + temp file. */ + if (save_temps_flag) + { + char *tmp; + bool adjusted_suffix = false; + if (suffix_length + && !outbase_length && !basename_length + && !dumpdir_trailing_dash_added) + { + adjusted_suffix = true; + suffix++; + suffix_length--; + } + temp_filename_length + = dumpdir_length + suffix_length + 1; + if (outbase_length) + temp_filename_length += outbase_length; + else + temp_filename_length += basename_length; + tmp = (char *) alloca (temp_filename_length); + if (dumpdir_length) + memcpy (tmp, dumpdir, dumpdir_length); + if (outbase_length) + memcpy (tmp + dumpdir_length, outbase, + outbase_length); + else if (basename_length) + memcpy (tmp + dumpdir_length, input_basename, + basename_length); + memcpy (tmp + temp_filename_length - suffix_length - 1, + suffix, suffix_length); + if (adjusted_suffix) + { + adjusted_suffix = false; + suffix--; + suffix_length++; + } + tmp[temp_filename_length - 1] = '\0'; + temp_filename = tmp; + + if (filename_cmp (temp_filename, gcc_input_filename) != 0) + { +#ifndef HOST_LACKS_INODE_NUMBERS + struct stat st_temp; + + /* Note, set_input() resets input_stat_set to 0. */ + if (input_stat_set == 0) + { + input_stat_set = stat (gcc_input_filename, + &input_stat); + if (input_stat_set >= 0) + input_stat_set = 1; + } + + /* If we have the stat for the gcc_input_filename + and we can do the stat for the temp_filename + then the they could still refer to the same + file if st_dev/st_ino's are the same. */ + if (input_stat_set != 1 + || stat (temp_filename, &st_temp) < 0 + || input_stat.st_dev != st_temp.st_dev + || input_stat.st_ino != st_temp.st_ino) +#else + /* Just compare canonical pathnames. */ + char* input_realname = lrealpath (gcc_input_filename); + char* temp_realname = lrealpath (temp_filename); + bool files_differ = filename_cmp (input_realname, temp_realname); + free (input_realname); + free (temp_realname); + if (files_differ) +#endif + { + temp_filename + = save_string (temp_filename, + temp_filename_length - 1); + obstack_grow (&obstack, temp_filename, + temp_filename_length); + arg_going = 1; + delete_this_arg = 0; + break; + } + } + } + + /* See if we already have an association of %g/%u/%U and + suffix. */ + for (t = temp_names; t; t = t->next) + if (t->length == suffix_length + && strncmp (t->suffix, suffix, suffix_length) == 0 + && t->unique == (c == 'u' || c == 'U' || c == 'j')) + break; + + /* Make a new association if needed. %u and %j + require one. */ + if (t == 0 || c == 'u' || c == 'j') + { + if (t == 0) + { + t = XNEW (struct temp_name); + t->next = temp_names; + temp_names = t; + } + t->length = suffix_length; + if (saved_suffix) + { + t->suffix = saved_suffix; + saved_suffix = NULL; + } + else + t->suffix = save_string (suffix, suffix_length); + t->unique = (c == 'u' || c == 'U' || c == 'j'); + temp_filename = make_temp_file (t->suffix); + temp_filename_length = strlen (temp_filename); + t->filename = temp_filename; + t->filename_length = temp_filename_length; + } + + free (saved_suffix); + + obstack_grow (&obstack, t->filename, t->filename_length); + delete_this_arg = 1; + } + arg_going = 1; + break; + + case 'i': + if (combine_inputs) + { + /* We are going to expand `%i' into `@FILE', where FILE + is a newly-created temporary filename. The filenames + that would usually be expanded in place of %o will be + written to the temporary file. */ + if (at_file_supplied) + open_at_file (); + + for (i = 0; (int) i < n_infiles; i++) + if (compile_input_file_p (&infiles[i])) + { + store_arg (infiles[i].name, 0, 0); + infiles[i].compiled = true; + } + + if (at_file_supplied) + close_at_file (); + } + else + { + obstack_grow (&obstack, gcc_input_filename, + input_filename_length); + arg_going = 1; + } + break; + + case 'I': + { + struct spec_path_info info; + + if (multilib_dir) + { + do_spec_1 ("-imultilib", 1, NULL); + /* Make this a separate argument. */ + do_spec_1 (" ", 0, NULL); + do_spec_1 (multilib_dir, 1, NULL); + do_spec_1 (" ", 0, NULL); + } + + if (multiarch_dir) + { + do_spec_1 ("-imultiarch", 1, NULL); + /* Make this a separate argument. */ + do_spec_1 (" ", 0, NULL); + do_spec_1 (multiarch_dir, 1, NULL); + do_spec_1 (" ", 0, NULL); + } + + if (gcc_exec_prefix) + { + do_spec_1 ("-iprefix", 1, NULL); + /* Make this a separate argument. */ + do_spec_1 (" ", 0, NULL); + do_spec_1 (gcc_exec_prefix, 1, NULL); + do_spec_1 (" ", 0, NULL); + } + + if (target_system_root_changed || + (target_system_root && target_sysroot_hdrs_suffix)) + { + do_spec_1 ("-isysroot", 1, NULL); + /* Make this a separate argument. */ + do_spec_1 (" ", 0, NULL); + do_spec_1 (target_system_root, 1, NULL); + if (target_sysroot_hdrs_suffix) + do_spec_1 (target_sysroot_hdrs_suffix, 1, NULL); + do_spec_1 (" ", 0, NULL); + } + + info.option = "-isystem"; + info.append = "include"; + info.append_len = strlen (info.append); + info.omit_relative = false; + info.separate_options = true; + + for_each_path (&include_prefixes, false, info.append_len, + spec_path, &info); + + info.append = "include-fixed"; + if (*sysroot_hdrs_suffix_spec) + info.append = concat (info.append, dir_separator_str, + multilib_dir, NULL); + else if (multiarch_dir) + { + /* For multiarch, search include-fixed/ + before include-fixed. */ + info.append = concat (info.append, dir_separator_str, + multiarch_dir, NULL); + info.append_len = strlen (info.append); + for_each_path (&include_prefixes, false, info.append_len, + spec_path, &info); + + info.append = "include-fixed"; + } + info.append_len = strlen (info.append); + for_each_path (&include_prefixes, false, info.append_len, + spec_path, &info); + } + break; + + case 'o': + /* We are going to expand `%o' into `@FILE', where FILE + is a newly-created temporary filename. The filenames + that would usually be expanded in place of %o will be + written to the temporary file. */ + if (at_file_supplied) + open_at_file (); + + for (i = 0; i < n_infiles + lang_specific_extra_outfiles; i++) + if (outfiles[i]) + store_arg (outfiles[i], 0, 0); + + if (at_file_supplied) + close_at_file (); + break; + + case 'O': + obstack_grow (&obstack, TARGET_OBJECT_SUFFIX, strlen (TARGET_OBJECT_SUFFIX)); + arg_going = 1; + break; + + case 's': + this_is_library_file = 1; + break; + + case 'T': + this_is_linker_script = 1; + break; + + case 'V': + outfiles[input_file_number] = NULL; + break; + + case 'w': + this_is_output_file = 1; + break; + + case 'W': + { + unsigned int cur_index = argbuf.length (); + /* Handle the {...} following the %W. */ + if (*p != '{') + fatal_error (input_location, + "spec %qs has invalid %<%%W%c%>", spec, *p); + p = handle_braces (p + 1); + if (p == 0) + return -1; + end_going_arg (); + /* If any args were output, mark the last one for deletion + on failure. */ + if (argbuf.length () != cur_index) + record_temp_file (argbuf.last (), 0, 1); + break; + } + + case '@': + /* Handle the {...} following the %@. */ + if (*p != '{') + fatal_error (input_location, + "spec %qs has invalid %<%%@%c%>", spec, *p); + if (at_file_supplied) + open_at_file (); + p = handle_braces (p + 1); + if (at_file_supplied) + close_at_file (); + if (p == 0) + return -1; + break; + + /* %x{OPTION} records OPTION for %X to output. */ + case 'x': + { + const char *p1 = p; + char *string; + + /* Skip past the option value and make a copy. */ + if (*p != '{') + fatal_error (input_location, + "spec %qs has invalid %<%%x%c%>", spec, *p); + while (*p++ != '}') + ; + string = save_string (p1 + 1, p - p1 - 2); + + /* See if we already recorded this option. */ + for (const char *opt : linker_options) + if (! strcmp (string, opt)) + { + free (string); + return 0; + } + + /* This option is new; add it. */ + add_linker_option (string, strlen (string)); + free (string); + } + break; + + /* Dump out the options accumulated previously using %x. */ + case 'X': + do_specs_vec (linker_options); + break; + + /* Dump out the options accumulated previously using -Wa,. */ + case 'Y': + do_specs_vec (assembler_options); + break; + + /* Dump out the options accumulated previously using -Wp,. */ + case 'Z': + do_specs_vec (preprocessor_options); + break; + + /* Here are digits and numbers that just process + a certain constant string as a spec. */ + + case '1': + value = do_spec_1 (cc1_spec, 0, NULL); + if (value != 0) + return value; + break; + + case '2': + value = do_spec_1 (cc1plus_spec, 0, NULL); + if (value != 0) + return value; + break; + + case 'a': + value = do_spec_1 (asm_spec, 0, NULL); + if (value != 0) + return value; + break; + + case 'A': + value = do_spec_1 (asm_final_spec, 0, NULL); + if (value != 0) + return value; + break; + + case 'C': + { + const char *const spec + = (input_file_compiler->cpp_spec + ? input_file_compiler->cpp_spec + : cpp_spec); + value = do_spec_1 (spec, 0, NULL); + if (value != 0) + return value; + } + break; + + case 'E': + value = do_spec_1 (endfile_spec, 0, NULL); + if (value != 0) + return value; + break; + + case 'l': + value = do_spec_1 (link_spec, 0, NULL); + if (value != 0) + return value; + break; + + case 'L': + value = do_spec_1 (lib_spec, 0, NULL); + if (value != 0) + return value; + break; + + case 'M': + if (multilib_os_dir == NULL) + obstack_1grow (&obstack, '.'); + else + obstack_grow (&obstack, multilib_os_dir, + strlen (multilib_os_dir)); + break; + + case 'G': + value = do_spec_1 (libgcc_spec, 0, NULL); + if (value != 0) + return value; + break; + + case 'R': + /* We assume there is a directory + separator at the end of this string. */ + if (target_system_root) + { + obstack_grow (&obstack, target_system_root, + strlen (target_system_root)); + if (target_sysroot_suffix) + obstack_grow (&obstack, target_sysroot_suffix, + strlen (target_sysroot_suffix)); + } + break; + + case 'S': + value = do_spec_1 (startfile_spec, 0, NULL); + if (value != 0) + return value; + break; + + /* Here we define characters other than letters and digits. */ + + case '{': + p = handle_braces (p); + if (p == 0) + return -1; + break; + + case ':': + p = handle_spec_function (p, NULL, soft_matched_part); + if (p == 0) + return -1; + break; + + case '%': + obstack_1grow (&obstack, '%'); + break; + + case '.': + { + unsigned len = 0; + + while (p[len] && p[len] != ' ' && p[len] != '%') + len++; + suffix_subst = save_string (p - 1, len + 1); + p += len; + } + break; + + /* Henceforth ignore the option(s) matching the pattern + after the %<. */ + case '<': + case '>': + { + unsigned len = 0; + int have_wildcard = 0; + int i; + int switch_option; + + if (c == '>') + switch_option = SWITCH_IGNORE | SWITCH_KEEP_FOR_GCC; + else + switch_option = SWITCH_IGNORE; + + while (p[len] && p[len] != ' ' && p[len] != '\t') + len++; + + if (p[len-1] == '*') + have_wildcard = 1; + + for (i = 0; i < n_switches; i++) + if (!strncmp (switches[i].part1, p, len - have_wildcard) + && (have_wildcard || switches[i].part1[len] == '\0')) + { + switches[i].live_cond |= switch_option; + /* User switch be validated from validate_all_switches. + when the definition is seen from the spec file. + If not defined anywhere, will be rejected. */ + if (switches[i].known) + switches[i].validated = true; + } + + p += len; + } + break; + + case '*': + if (soft_matched_part) + { + if (soft_matched_part[0]) + do_spec_1 (soft_matched_part, 1, NULL); + /* Only insert a space after the substitution if it is at the + end of the current sequence. So if: + + "%{foo=*:bar%*}%{foo=*:one%*two}" + + matches -foo=hello then it will produce: + + barhello onehellotwo + */ + if (*p == 0 || *p == '}') + do_spec_1 (" ", 0, NULL); + } + else + /* Catch the case where a spec string contains something like + '%{foo:%*}'. i.e. there is no * in the pattern on the left + hand side of the :. */ + error ("spec failure: %<%%*%> has not been initialized by pattern match"); + break; + + /* Process a string found as the value of a spec given by name. + This feature allows individual machine descriptions + to add and use their own specs. */ + case '(': + { + const char *name = p; + struct spec_list *sl; + int len; + + /* The string after the S/P is the name of a spec that is to be + processed. */ + while (*p && *p != ')') + p++; + + /* See if it's in the list. */ + for (len = p - name, sl = specs; sl; sl = sl->next) + if (sl->name_len == len && !strncmp (sl->name, name, len)) + { + name = *(sl->ptr_spec); +#ifdef DEBUG_SPECS + fnotice (stderr, "Processing spec (%s), which is '%s'\n", + sl->name, name); +#endif + break; + } + + if (sl) + { + value = do_spec_1 (name, 0, NULL); + if (value != 0) + return value; + } + + /* Discard the closing paren. */ + if (*p) + p++; + } + break; + + case '"': + /* End a previous argument, if there is one, then issue an + empty argument. */ + end_going_arg (); + arg_going = 1; + end_going_arg (); + break; + + default: + error ("spec failure: unrecognized spec option %qc", c); + break; + } + break; + + case '\\': + /* Backslash: treat next character as ordinary. */ + c = *p++; + + /* When adding more cases that previously matched default, make + sure to adjust quote_spec_char_p as well. */ + + /* Fall through. */ + default: + /* Ordinary character: put it into the current argument. */ + obstack_1grow (&obstack, c); + arg_going = 1; + } + + /* End of string. If we are processing a spec function, we need to + end any pending argument. */ + if (processing_spec_function) + end_going_arg (); + + return 0; +} + +/* Look up a spec function. */ + +static const struct spec_function * +lookup_spec_function (const char *name) +{ + const struct spec_function *sf; + + for (sf = static_spec_functions; sf->name != NULL; sf++) + if (strcmp (sf->name, name) == 0) + return sf; + + return NULL; +} + +/* Evaluate a spec function. */ + +static const char * +eval_spec_function (const char *func, const char *args, + const char *soft_matched_part) +{ + const struct spec_function *sf; + const char *funcval; + + /* Saved spec processing context. */ + vec save_argbuf; + + int save_arg_going; + int save_delete_this_arg; + int save_this_is_output_file; + int save_this_is_library_file; + int save_input_from_pipe; + int save_this_is_linker_script; + const char *save_suffix_subst; + + int save_growing_size; + void *save_growing_value = NULL; + + sf = lookup_spec_function (func); + if (sf == NULL) + fatal_error (input_location, "unknown spec function %qs", func); + + /* Push the spec processing context. */ + save_argbuf = argbuf; + + save_arg_going = arg_going; + save_delete_this_arg = delete_this_arg; + save_this_is_output_file = this_is_output_file; + save_this_is_library_file = this_is_library_file; + save_this_is_linker_script = this_is_linker_script; + save_input_from_pipe = input_from_pipe; + save_suffix_subst = suffix_subst; + + /* If we have some object growing now, finalize it so the args and function + eval proceed from a cleared context. This is needed to prevent the first + constructed arg from mistakenly including the growing value. We'll push + this value back on the obstack once the function evaluation is done, to + restore a consistent processing context for our caller. This is fine as + the address of growing objects isn't guaranteed to remain stable until + they are finalized, and we expect this situation to be rare enough for + the extra copy not to be an issue. */ + save_growing_size = obstack_object_size (&obstack); + if (save_growing_size > 0) + save_growing_value = obstack_finish (&obstack); + + /* Create a new spec processing context, and build the function + arguments. */ + + alloc_args (); + if (do_spec_2 (args, soft_matched_part) < 0) + fatal_error (input_location, "error in arguments to spec function %qs", + func); + + /* argbuf_index is an index for the next argument to be inserted, and + so contains the count of the args already inserted. */ + + funcval = (*sf->func) (argbuf.length (), + argbuf.address ()); + + /* Pop the spec processing context. */ + argbuf.release (); + argbuf = save_argbuf; + + arg_going = save_arg_going; + delete_this_arg = save_delete_this_arg; + this_is_output_file = save_this_is_output_file; + this_is_library_file = save_this_is_library_file; + this_is_linker_script = save_this_is_linker_script; + input_from_pipe = save_input_from_pipe; + suffix_subst = save_suffix_subst; + + if (save_growing_size > 0) + obstack_grow (&obstack, save_growing_value, save_growing_size); + + return funcval; +} + +/* Handle a spec function call of the form: + + %:function(args) + + ARGS is processed as a spec in a separate context and split into an + argument vector in the normal fashion. The function returns a string + containing a spec which we then process in the caller's context, or + NULL if no processing is required. + + If RETVAL_NONNULL is not NULL, then store a bool whether function + returned non-NULL. + + SOFT_MATCHED_PART holds the current value of a matched * pattern, which + may be re-expanded with a %* as part of the function arguments. */ + +static const char * +handle_spec_function (const char *p, bool *retval_nonnull, + const char *soft_matched_part) +{ + char *func, *args; + const char *endp, *funcval; + int count; + + processing_spec_function++; + + /* Get the function name. */ + for (endp = p; *endp != '\0'; endp++) + { + if (*endp == '(') /* ) */ + break; + /* Only allow [A-Za-z0-9], -, and _ in function names. */ + if (!ISALNUM (*endp) && !(*endp == '-' || *endp == '_')) + fatal_error (input_location, "malformed spec function name"); + } + if (*endp != '(') /* ) */ + fatal_error (input_location, "no arguments for spec function"); + func = save_string (p, endp - p); + p = ++endp; + + /* Get the arguments. */ + for (count = 0; *endp != '\0'; endp++) + { + /* ( */ + if (*endp == ')') + { + if (count == 0) + break; + count--; + } + else if (*endp == '(') /* ) */ + count++; + } + /* ( */ + if (*endp != ')') + fatal_error (input_location, "malformed spec function arguments"); + args = save_string (p, endp - p); + p = ++endp; + + /* p now points to just past the end of the spec function expression. */ + + funcval = eval_spec_function (func, args, soft_matched_part); + if (funcval != NULL && do_spec_1 (funcval, 0, NULL) < 0) + p = NULL; + if (retval_nonnull) + *retval_nonnull = funcval != NULL; + + free (func); + free (args); + + processing_spec_function--; + + return p; +} + +/* Inline subroutine of handle_braces. Returns true if the current + input suffix matches the atom bracketed by ATOM and END_ATOM. */ +static inline bool +input_suffix_matches (const char *atom, const char *end_atom) +{ + return (input_suffix + && !strncmp (input_suffix, atom, end_atom - atom) + && input_suffix[end_atom - atom] == '\0'); +} + +/* Subroutine of handle_braces. Returns true if the current + input file's spec name matches the atom bracketed by ATOM and END_ATOM. */ +static bool +input_spec_matches (const char *atom, const char *end_atom) +{ + return (input_file_compiler + && input_file_compiler->suffix + && input_file_compiler->suffix[0] != '\0' + && !strncmp (input_file_compiler->suffix + 1, atom, + end_atom - atom) + && input_file_compiler->suffix[end_atom - atom + 1] == '\0'); +} + +/* Subroutine of handle_braces. Returns true if a switch + matching the atom bracketed by ATOM and END_ATOM appeared on the + command line. */ +static bool +switch_matches (const char *atom, const char *end_atom, int starred) +{ + int i; + int len = end_atom - atom; + int plen = starred ? len : -1; + + for (i = 0; i < n_switches; i++) + if (!strncmp (switches[i].part1, atom, len) + && (starred || switches[i].part1[len] == '\0') + && check_live_switch (i, plen)) + return true; + + /* Check if a switch with separated form matching the atom. + We check -D and -U switches. */ + else if (switches[i].args != 0) + { + if ((*switches[i].part1 == 'D' || *switches[i].part1 == 'U') + && *switches[i].part1 == atom[0]) + { + if (!strncmp (switches[i].args[0], &atom[1], len - 1) + && (starred || (switches[i].part1[1] == '\0' + && switches[i].args[0][len - 1] == '\0')) + && check_live_switch (i, (starred ? 1 : -1))) + return true; + } + } + + return false; +} + +/* Inline subroutine of handle_braces. Mark all of the switches which + match ATOM (extends to END_ATOM; STARRED indicates whether there + was a star after the atom) for later processing. */ +static inline void +mark_matching_switches (const char *atom, const char *end_atom, int starred) +{ + int i; + int len = end_atom - atom; + int plen = starred ? len : -1; + + for (i = 0; i < n_switches; i++) + if (!strncmp (switches[i].part1, atom, len) + && (starred || switches[i].part1[len] == '\0') + && check_live_switch (i, plen)) + switches[i].ordering = 1; +} + +/* Inline subroutine of handle_braces. Process all the currently + marked switches through give_switch, and clear the marks. */ +static inline void +process_marked_switches (void) +{ + int i; + + for (i = 0; i < n_switches; i++) + if (switches[i].ordering == 1) + { + switches[i].ordering = 0; + give_switch (i, 0); + } +} + +/* Handle a %{ ... } construct. P points just inside the leading {. + Returns a pointer one past the end of the brace block, or 0 + if we call do_spec_1 and that returns -1. */ + +static const char * +handle_braces (const char *p) +{ + const char *atom, *end_atom; + const char *d_atom = NULL, *d_end_atom = NULL; + char *esc_buf = NULL, *d_esc_buf = NULL; + int esc; + const char *orig = p; + + bool a_is_suffix; + bool a_is_spectype; + bool a_is_starred; + bool a_is_negated; + bool a_matched; + + bool a_must_be_last = false; + bool ordered_set = false; + bool disjunct_set = false; + bool disj_matched = false; + bool disj_starred = true; + bool n_way_choice = false; + bool n_way_matched = false; + +#define SKIP_WHITE() do { while (*p == ' ' || *p == '\t') p++; } while (0) + + do + { + if (a_must_be_last) + goto invalid; + + /* Scan one "atom" (S in the description above of %{}, possibly + with '!', '.', '@', ',', or '*' modifiers). */ + a_matched = false; + a_is_suffix = false; + a_is_starred = false; + a_is_negated = false; + a_is_spectype = false; + + SKIP_WHITE (); + if (*p == '!') + p++, a_is_negated = true; + + SKIP_WHITE (); + if (*p == '%' && p[1] == ':') + { + atom = NULL; + end_atom = NULL; + p = handle_spec_function (p + 2, &a_matched, NULL); + } + else + { + if (*p == '.') + p++, a_is_suffix = true; + else if (*p == ',') + p++, a_is_spectype = true; + + atom = p; + esc = 0; + while (ISIDNUM (*p) || *p == '-' || *p == '+' || *p == '=' + || *p == ',' || *p == '.' || *p == '@' || *p == '\\') + { + if (*p == '\\') + { + p++; + if (!*p) + fatal_error (input_location, + "braced spec %qs ends in escape", orig); + esc++; + } + p++; + } + end_atom = p; + + if (esc) + { + const char *ap; + char *ep; + + if (esc_buf && esc_buf != d_esc_buf) + free (esc_buf); + esc_buf = NULL; + ep = esc_buf = (char *) xmalloc (end_atom - atom - esc + 1); + for (ap = atom; ap != end_atom; ap++, ep++) + { + if (*ap == '\\') + ap++; + *ep = *ap; + } + *ep = '\0'; + atom = esc_buf; + end_atom = ep; + } + + if (*p == '*') + p++, a_is_starred = 1; + } + + SKIP_WHITE (); + switch (*p) + { + case '&': case '}': + /* Substitute the switch(es) indicated by the current atom. */ + ordered_set = true; + if (disjunct_set || n_way_choice || a_is_negated || a_is_suffix + || a_is_spectype || atom == end_atom) + goto invalid; + + mark_matching_switches (atom, end_atom, a_is_starred); + + if (*p == '}') + process_marked_switches (); + break; + + case '|': case ':': + /* Substitute some text if the current atom appears as a switch + or suffix. */ + disjunct_set = true; + if (ordered_set) + goto invalid; + + if (atom && atom == end_atom) + { + if (!n_way_choice || disj_matched || *p == '|' + || a_is_negated || a_is_suffix || a_is_spectype + || a_is_starred) + goto invalid; + + /* An empty term may appear as the last choice of an + N-way choice set; it means "otherwise". */ + a_must_be_last = true; + disj_matched = !n_way_matched; + disj_starred = false; + } + else + { + if ((a_is_suffix || a_is_spectype) && a_is_starred) + goto invalid; + + if (!a_is_starred) + disj_starred = false; + + /* Don't bother testing this atom if we already have a + match. */ + if (!disj_matched && !n_way_matched) + { + if (atom == NULL) + /* a_matched is already set by handle_spec_function. */; + else if (a_is_suffix) + a_matched = input_suffix_matches (atom, end_atom); + else if (a_is_spectype) + a_matched = input_spec_matches (atom, end_atom); + else + a_matched = switch_matches (atom, end_atom, a_is_starred); + + if (a_matched != a_is_negated) + { + disj_matched = true; + d_atom = atom; + d_end_atom = end_atom; + d_esc_buf = esc_buf; + } + } + } + + if (*p == ':') + { + /* Found the body, that is, the text to substitute if the + current disjunction matches. */ + p = process_brace_body (p + 1, d_atom, d_end_atom, disj_starred, + disj_matched && !n_way_matched); + if (p == 0) + goto done; + + /* If we have an N-way choice, reset state for the next + disjunction. */ + if (*p == ';') + { + n_way_choice = true; + n_way_matched |= disj_matched; + disj_matched = false; + disj_starred = true; + d_atom = d_end_atom = NULL; + } + } + break; + + default: + goto invalid; + } + } + while (*p++ != '}'); + + done: + if (d_esc_buf && d_esc_buf != esc_buf) + free (d_esc_buf); + if (esc_buf) + free (esc_buf); + + return p; + + invalid: + fatal_error (input_location, "braced spec %qs is invalid at %qc", orig, *p); + +#undef SKIP_WHITE +} + +/* Subroutine of handle_braces. Scan and process a brace substitution body + (X in the description of %{} syntax). P points one past the colon; + ATOM and END_ATOM bracket the first atom which was found to be true + (present) in the current disjunction; STARRED indicates whether all + the atoms in the current disjunction were starred (for syntax validation); + MATCHED indicates whether the disjunction matched or not, and therefore + whether or not the body is to be processed through do_spec_1 or just + skipped. Returns a pointer to the closing } or ;, or 0 if do_spec_1 + returns -1. */ + +static const char * +process_brace_body (const char *p, const char *atom, const char *end_atom, + int starred, int matched) +{ + const char *body, *end_body; + unsigned int nesting_level; + bool have_subst = false; + + /* Locate the closing } or ;, honoring nested braces. + Trim trailing whitespace. */ + body = p; + nesting_level = 1; + for (;;) + { + if (*p == '{') + nesting_level++; + else if (*p == '}') + { + if (!--nesting_level) + break; + } + else if (*p == ';' && nesting_level == 1) + break; + else if (*p == '%' && p[1] == '*' && nesting_level == 1) + have_subst = true; + else if (*p == '\0') + goto invalid; + p++; + } + + end_body = p; + while (end_body[-1] == ' ' || end_body[-1] == '\t') + end_body--; + + if (have_subst && !starred) + goto invalid; + + if (matched) + { + /* Copy the substitution body to permanent storage and execute it. + If have_subst is false, this is a simple matter of running the + body through do_spec_1... */ + char *string = save_string (body, end_body - body); + if (!have_subst) + { + if (do_spec_1 (string, 0, NULL) < 0) + { + free (string); + return 0; + } + } + else + { + /* ... but if have_subst is true, we have to process the + body once for each matching switch, with %* set to the + variant part of the switch. */ + unsigned int hard_match_len = end_atom - atom; + int i; + + for (i = 0; i < n_switches; i++) + if (!strncmp (switches[i].part1, atom, hard_match_len) + && check_live_switch (i, hard_match_len)) + { + if (do_spec_1 (string, 0, + &switches[i].part1[hard_match_len]) < 0) + { + free (string); + return 0; + } + /* Pass any arguments this switch has. */ + give_switch (i, 1); + suffix_subst = NULL; + } + } + free (string); + } + + return p; + + invalid: + fatal_error (input_location, "braced spec body %qs is invalid", body); +} + +/* Return 0 iff switch number SWITCHNUM is obsoleted by a later switch + on the command line. PREFIX_LENGTH is the length of XXX in an {XXX*} + spec, or -1 if either exact match or %* is used. + + A -O switch is obsoleted by a later -O switch. A -f, -g, -m, or -W switch + whose value does not begin with "no-" is obsoleted by the same value + with the "no-", similarly for a switch with the "no-" prefix. */ + +static int +check_live_switch (int switchnum, int prefix_length) +{ + const char *name = switches[switchnum].part1; + int i; + + /* If we already processed this switch and determined if it was + live or not, return our past determination. */ + if (switches[switchnum].live_cond != 0) + return ((switches[switchnum].live_cond & SWITCH_LIVE) != 0 + && (switches[switchnum].live_cond & SWITCH_FALSE) == 0 + && (switches[switchnum].live_cond & SWITCH_IGNORE_PERMANENTLY) + == 0); + + /* In the common case of {*}, a negating + switch would always match, so ignore that case. We will just + send the conflicting switches to the compiler phase. */ + if (prefix_length >= 0 && prefix_length <= 1) + return 1; + + /* Now search for duplicate in a manner that depends on the name. */ + switch (*name) + { + case 'O': + for (i = switchnum + 1; i < n_switches; i++) + if (switches[i].part1[0] == 'O') + { + switches[switchnum].validated = true; + switches[switchnum].live_cond = SWITCH_FALSE; + return 0; + } + break; + + case 'W': case 'f': case 'm': case 'g': + if (startswith (name + 1, "no-")) + { + /* We have Xno-YYY, search for XYYY. */ + for (i = switchnum + 1; i < n_switches; i++) + if (switches[i].part1[0] == name[0] + && ! strcmp (&switches[i].part1[1], &name[4])) + { + /* --specs are validated with the validate_switches mechanism. */ + if (switches[switchnum].known) + switches[switchnum].validated = true; + switches[switchnum].live_cond = SWITCH_FALSE; + return 0; + } + } + else + { + /* We have XYYY, search for Xno-YYY. */ + for (i = switchnum + 1; i < n_switches; i++) + if (switches[i].part1[0] == name[0] + && switches[i].part1[1] == 'n' + && switches[i].part1[2] == 'o' + && switches[i].part1[3] == '-' + && !strcmp (&switches[i].part1[4], &name[1])) + { + /* --specs are validated with the validate_switches mechanism. */ + if (switches[switchnum].known) + switches[switchnum].validated = true; + switches[switchnum].live_cond = SWITCH_FALSE; + return 0; + } + } + break; + } + + /* Otherwise the switch is live. */ + switches[switchnum].live_cond |= SWITCH_LIVE; + return 1; +} + +/* Pass a switch to the current accumulating command + in the same form that we received it. + SWITCHNUM identifies the switch; it is an index into + the vector of switches gcc received, which is `switches'. + This cannot fail since it never finishes a command line. + + If OMIT_FIRST_WORD is nonzero, then we omit .part1 of the argument. */ + +static void +give_switch (int switchnum, int omit_first_word) +{ + if ((switches[switchnum].live_cond & SWITCH_IGNORE) != 0) + return; + + if (!omit_first_word) + { + do_spec_1 ("-", 0, NULL); + do_spec_1 (switches[switchnum].part1, 1, NULL); + } + + if (switches[switchnum].args != 0) + { + const char **p; + for (p = switches[switchnum].args; *p; p++) + { + const char *arg = *p; + + do_spec_1 (" ", 0, NULL); + if (suffix_subst) + { + unsigned length = strlen (arg); + int dot = 0; + + while (length-- && !IS_DIR_SEPARATOR (arg[length])) + if (arg[length] == '.') + { + (CONST_CAST (char *, arg))[length] = 0; + dot = 1; + break; + } + do_spec_1 (arg, 1, NULL); + if (dot) + (CONST_CAST (char *, arg))[length] = '.'; + do_spec_1 (suffix_subst, 1, NULL); + } + else + do_spec_1 (arg, 1, NULL); + } + } + + do_spec_1 (" ", 0, NULL); + switches[switchnum].validated = true; +} + +/* Print GCC configuration (e.g. version, thread model, target, + configuration_arguments) to a given FILE. */ + +static void +print_configuration (FILE *file) +{ + int n; + const char *thrmod; + + fnotice (file, "Target: %s\n", spec_machine); + fnotice (file, "Configured with: %s\n", configuration_arguments); + +#ifdef THREAD_MODEL_SPEC + /* We could have defined THREAD_MODEL_SPEC to "%*" by default, + but there's no point in doing all this processing just to get + thread_model back. */ + obstack_init (&obstack); + do_spec_1 (THREAD_MODEL_SPEC, 0, thread_model); + obstack_1grow (&obstack, '\0'); + thrmod = XOBFINISH (&obstack, const char *); +#else + thrmod = thread_model; +#endif + + fnotice (file, "Thread model: %s\n", thrmod); + fnotice (file, "Supported LTO compression algorithms: zlib"); +#ifdef HAVE_ZSTD_H + fnotice (file, " zstd"); +#endif + fnotice (file, "\n"); + + /* compiler_version is truncated at the first space when initialized + from version string, so truncate version_string at the first space + before comparing. */ + for (n = 0; version_string[n]; n++) + if (version_string[n] == ' ') + break; + + if (! strncmp (version_string, compiler_version, n) + && compiler_version[n] == 0) + fnotice (file, "gcc version %s %s\n", version_string, + pkgversion_string); + else + fnotice (file, "gcc driver version %s %sexecuting gcc version %s\n", + version_string, pkgversion_string, compiler_version); + +} + +#define RETRY_ICE_ATTEMPTS 3 + +/* Returns true if FILE1 and FILE2 contain equivalent data, 0 otherwise. */ + +static bool +files_equal_p (char *file1, char *file2) +{ + struct stat st1, st2; + off_t n, len; + int fd1, fd2; + const int bufsize = 8192; + char *buf = XNEWVEC (char, bufsize); + + fd1 = open (file1, O_RDONLY); + fd2 = open (file2, O_RDONLY); + + if (fd1 < 0 || fd2 < 0) + goto error; + + if (fstat (fd1, &st1) < 0 || fstat (fd2, &st2) < 0) + goto error; + + if (st1.st_size != st2.st_size) + goto error; + + for (n = st1.st_size; n; n -= len) + { + len = n; + if ((int) len > bufsize / 2) + len = bufsize / 2; + + if (read (fd1, buf, len) != (int) len + || read (fd2, buf + bufsize / 2, len) != (int) len) + { + goto error; + } + + if (memcmp (buf, buf + bufsize / 2, len) != 0) + goto error; + } + + free (buf); + close (fd1); + close (fd2); + + return 1; + +error: + free (buf); + close (fd1); + close (fd2); + return 0; +} + +/* Check that compiler's output doesn't differ across runs. + TEMP_STDOUT_FILES and TEMP_STDERR_FILES are arrays of files, containing + stdout and stderr for each compiler run. Return true if all of + TEMP_STDOUT_FILES and TEMP_STDERR_FILES are equivalent. */ + +static bool +check_repro (char **temp_stdout_files, char **temp_stderr_files) +{ + int i; + for (i = 0; i < RETRY_ICE_ATTEMPTS - 2; ++i) + { + if (!files_equal_p (temp_stdout_files[i], temp_stdout_files[i + 1]) + || !files_equal_p (temp_stderr_files[i], temp_stderr_files[i + 1])) + { + fnotice (stderr, "The bug is not reproducible, so it is" + " likely a hardware or OS problem.\n"); + break; + } + } + return i == RETRY_ICE_ATTEMPTS - 2; +} + +enum attempt_status { + ATTEMPT_STATUS_FAIL_TO_RUN, + ATTEMPT_STATUS_SUCCESS, + ATTEMPT_STATUS_ICE +}; + + +/* Run compiler with arguments NEW_ARGV to reproduce the ICE, storing stdout + to OUT_TEMP and stderr to ERR_TEMP. If APPEND is TRUE, append to OUT_TEMP + and ERR_TEMP instead of truncating. If EMIT_SYSTEM_INFO is TRUE, also write + GCC configuration into to ERR_TEMP. Return ATTEMPT_STATUS_FAIL_TO_RUN if + compiler failed to run, ATTEMPT_STATUS_ICE if compiled ICE-ed and + ATTEMPT_STATUS_SUCCESS otherwise. */ + +static enum attempt_status +run_attempt (const char **new_argv, const char *out_temp, + const char *err_temp, int emit_system_info, int append) +{ + + if (emit_system_info) + { + FILE *file_out = fopen (err_temp, "a"); + print_configuration (file_out); + fputs ("\n", file_out); + fclose (file_out); + } + + int exit_status; + const char *errmsg; + struct pex_obj *pex; + int err; + int pex_flags = PEX_USE_PIPES | PEX_LAST; + enum attempt_status status = ATTEMPT_STATUS_FAIL_TO_RUN; + + if (append) + pex_flags |= PEX_STDOUT_APPEND | PEX_STDERR_APPEND; + + pex = pex_init (PEX_USE_PIPES, new_argv[0], NULL); + if (!pex) + fatal_error (input_location, "% failed: %m"); + + errmsg = pex_run (pex, pex_flags, new_argv[0], + CONST_CAST2 (char *const *, const char **, &new_argv[1]), + out_temp, err_temp, &err); + if (errmsg != NULL) + { + errno = err; + fatal_error (input_location, + err ? G_ ("cannot execute %qs: %s: %m") + : G_ ("cannot execute %qs: %s"), + new_argv[0], errmsg); + } + + if (!pex_get_status (pex, 1, &exit_status)) + goto out; + + switch (WEXITSTATUS (exit_status)) + { + case ICE_EXIT_CODE: + status = ATTEMPT_STATUS_ICE; + break; + + case SUCCESS_EXIT_CODE: + status = ATTEMPT_STATUS_SUCCESS; + break; + + default: + ; + } + +out: + pex_free (pex); + return status; +} + +/* This routine reads lines from IN file, adds C++ style comments + at the begining of each line and writes result into OUT. */ + +static void +insert_comments (const char *file_in, const char *file_out) +{ + FILE *in = fopen (file_in, "rb"); + FILE *out = fopen (file_out, "wb"); + char line[256]; + + bool add_comment = true; + while (fgets (line, sizeof (line), in)) + { + if (add_comment) + fputs ("// ", out); + fputs (line, out); + add_comment = strchr (line, '\n') != NULL; + } + + fclose (in); + fclose (out); +} + +/* This routine adds preprocessed source code into the given ERR_FILE. + To do this, it adds "-E" to NEW_ARGV and execute RUN_ATTEMPT routine to + add information in report file. RUN_ATTEMPT should return + ATTEMPT_STATUS_SUCCESS, in other case we cannot generate the report. */ + +static void +do_report_bug (const char **new_argv, const int nargs, + char **out_file, char **err_file) +{ + int i, status; + int fd = open (*out_file, O_RDWR | O_APPEND); + if (fd < 0) + return; + write (fd, "\n//", 3); + for (i = 0; i < nargs; i++) + { + write (fd, " ", 1); + write (fd, new_argv[i], strlen (new_argv[i])); + } + write (fd, "\n\n", 2); + close (fd); + new_argv[nargs] = "-E"; + new_argv[nargs + 1] = NULL; + + status = run_attempt (new_argv, *out_file, *err_file, 0, 1); + + if (status == ATTEMPT_STATUS_SUCCESS) + { + fnotice (stderr, "Preprocessed source stored into %s file," + " please attach this to your bugreport.\n", *out_file); + /* Make sure it is not deleted. */ + free (*out_file); + *out_file = NULL; + } +} + +/* Try to reproduce ICE. If bug is reproducible, generate report .err file + containing GCC configuration, backtrace, compiler's command line options + and preprocessed source code. */ + +static void +try_generate_repro (const char **argv) +{ + int i, nargs, out_arg = -1, quiet = 0, attempt; + const char **new_argv; + char *temp_files[RETRY_ICE_ATTEMPTS * 2]; + char **temp_stdout_files = &temp_files[0]; + char **temp_stderr_files = &temp_files[RETRY_ICE_ATTEMPTS]; + + if (gcc_input_filename == NULL || ! strcmp (gcc_input_filename, "-")) + return; + + for (nargs = 0; argv[nargs] != NULL; ++nargs) + /* Only retry compiler ICEs, not preprocessor ones. */ + if (! strcmp (argv[nargs], "-E")) + return; + else if (argv[nargs][0] == '-' && argv[nargs][1] == 'o') + { + if (out_arg == -1) + out_arg = nargs; + else + return; + } + /* If the compiler is going to output any time information, + it might varry between invocations. */ + else if (! strcmp (argv[nargs], "-quiet")) + quiet = 1; + else if (! strcmp (argv[nargs], "-ftime-report")) + return; + + if (out_arg == -1 || !quiet) + return; + + memset (temp_files, '\0', sizeof (temp_files)); + new_argv = XALLOCAVEC (const char *, nargs + 4); + memcpy (new_argv, argv, (nargs + 1) * sizeof (const char *)); + new_argv[nargs++] = "-frandom-seed=0"; + new_argv[nargs++] = "-fdump-noaddr"; + new_argv[nargs] = NULL; + if (new_argv[out_arg][2] == '\0') + new_argv[out_arg + 1] = "-"; + else + new_argv[out_arg] = "-o-"; + + int status; + for (attempt = 0; attempt < RETRY_ICE_ATTEMPTS; ++attempt) + { + int emit_system_info = 0; + int append = 0; + temp_stdout_files[attempt] = make_temp_file (".out"); + temp_stderr_files[attempt] = make_temp_file (".err"); + + if (attempt == RETRY_ICE_ATTEMPTS - 1) + { + append = 1; + emit_system_info = 1; + } + + status = run_attempt (new_argv, temp_stdout_files[attempt], + temp_stderr_files[attempt], emit_system_info, + append); + + if (status != ATTEMPT_STATUS_ICE) + { + fnotice (stderr, "The bug is not reproducible, so it is" + " likely a hardware or OS problem.\n"); + goto out; + } + } + + if (!check_repro (temp_stdout_files, temp_stderr_files)) + goto out; + + { + /* Insert commented out backtrace into report file. */ + char **stderr_commented = &temp_stdout_files[RETRY_ICE_ATTEMPTS - 1]; + insert_comments (temp_stderr_files[RETRY_ICE_ATTEMPTS - 1], + *stderr_commented); + + /* In final attempt we append compiler options and preprocesssed code to last + generated .out file with configuration and backtrace. */ + char **err = &temp_stderr_files[RETRY_ICE_ATTEMPTS - 1]; + do_report_bug (new_argv, nargs, stderr_commented, err); + } + +out: + for (i = 0; i < RETRY_ICE_ATTEMPTS * 2; i++) + if (temp_files[i]) + { + unlink (temp_stdout_files[i]); + free (temp_stdout_files[i]); + } +} + +/* Search for a file named NAME trying various prefixes including the + user's -B prefix and some standard ones. + Return the absolute file name found. If nothing is found, return NAME. */ + +static const char * +find_file (const char *name) +{ + char *newname = find_a_file (&startfile_prefixes, name, R_OK, true); + return newname ? newname : name; +} + +/* Determine whether a directory exists. If LINKER, return 0 for + certain fixed names not needed by the linker. */ + +static int +is_directory (const char *path1, bool linker) +{ + int len1; + char *path; + char *cp; + struct stat st; + + /* Ensure the string ends with "/.". The resulting path will be a + directory even if the given path is a symbolic link. */ + len1 = strlen (path1); + path = (char *) alloca (3 + len1); + memcpy (path, path1, len1); + cp = path + len1; + if (!IS_DIR_SEPARATOR (cp[-1])) + *cp++ = DIR_SEPARATOR; + *cp++ = '.'; + *cp = '\0'; + + /* Exclude directories that the linker is known to search. */ + if (linker + && IS_DIR_SEPARATOR (path[0]) + && ((cp - path == 6 + && filename_ncmp (path + 1, "lib", 3) == 0) + || (cp - path == 10 + && filename_ncmp (path + 1, "usr", 3) == 0 + && IS_DIR_SEPARATOR (path[4]) + && filename_ncmp (path + 5, "lib", 3) == 0))) + return 0; + + return (stat (path, &st) >= 0 && S_ISDIR (st.st_mode)); +} + +/* Set up the various global variables to indicate that we're processing + the input file named FILENAME. */ + +void +set_input (const char *filename) +{ + const char *p; + + gcc_input_filename = filename; + input_filename_length = strlen (gcc_input_filename); + input_basename = lbasename (gcc_input_filename); + + /* Find a suffix starting with the last period, + and set basename_length to exclude that suffix. */ + basename_length = strlen (input_basename); + suffixed_basename_length = basename_length; + p = input_basename + basename_length; + while (p != input_basename && *p != '.') + --p; + if (*p == '.' && p != input_basename) + { + basename_length = p - input_basename; + input_suffix = p + 1; + } + else + input_suffix = ""; + + /* If a spec for 'g', 'u', or 'U' is seen with -save-temps then + we will need to do a stat on the gcc_input_filename. The + INPUT_STAT_SET signals that the stat is needed. */ + input_stat_set = 0; +} + +/* On fatal signals, delete all the temporary files. */ + +static void +fatal_signal (int signum) +{ + signal (signum, SIG_DFL); + delete_failure_queue (); + delete_temp_files (); + /* Get the same signal again, this time not handled, + so its normal effect occurs. */ + kill (getpid (), signum); +} + +/* Compare the contents of the two files named CMPFILE[0] and + CMPFILE[1]. Return zero if they're identical, nonzero + otherwise. */ + +static int +compare_files (char *cmpfile[]) +{ + int ret = 0; + FILE *temp[2] = { NULL, NULL }; + int i; + +#if HAVE_MMAP_FILE + { + size_t length[2]; + void *map[2] = { NULL, NULL }; + + for (i = 0; i < 2; i++) + { + struct stat st; + + if (stat (cmpfile[i], &st) < 0 || !S_ISREG (st.st_mode)) + { + error ("%s: could not determine length of compare-debug file %s", + gcc_input_filename, cmpfile[i]); + ret = 1; + break; + } + + length[i] = st.st_size; + } + + if (!ret && length[0] != length[1]) + { + error ("%s: %<-fcompare-debug%> failure (length)", gcc_input_filename); + ret = 1; + } + + if (!ret) + for (i = 0; i < 2; i++) + { + int fd = open (cmpfile[i], O_RDONLY); + if (fd < 0) + { + error ("%s: could not open compare-debug file %s", + gcc_input_filename, cmpfile[i]); + ret = 1; + break; + } + + map[i] = mmap (NULL, length[i], PROT_READ, MAP_PRIVATE, fd, 0); + close (fd); + + if (map[i] == (void *) MAP_FAILED) + { + ret = -1; + break; + } + } + + if (!ret) + { + if (memcmp (map[0], map[1], length[0]) != 0) + { + error ("%s: %<-fcompare-debug%> failure", gcc_input_filename); + ret = 1; + } + } + + for (i = 0; i < 2; i++) + if (map[i]) + munmap ((caddr_t) map[i], length[i]); + + if (ret >= 0) + return ret; + + ret = 0; + } +#endif + + for (i = 0; i < 2; i++) + { + temp[i] = fopen (cmpfile[i], "r"); + if (!temp[i]) + { + error ("%s: could not open compare-debug file %s", + gcc_input_filename, cmpfile[i]); + ret = 1; + break; + } + } + + if (!ret && temp[0] && temp[1]) + for (;;) + { + int c0, c1; + c0 = fgetc (temp[0]); + c1 = fgetc (temp[1]); + + if (c0 != c1) + { + error ("%s: %<-fcompare-debug%> failure", + gcc_input_filename); + ret = 1; + break; + } + + if (c0 == EOF) + break; + } + + for (i = 1; i >= 0; i--) + { + if (temp[i]) + fclose (temp[i]); + } + + return ret; +} + +driver::driver (bool can_finalize, bool debug) : + explicit_link_files (NULL), + decoded_options (NULL) +{ + env.init (can_finalize, debug); +} + +driver::~driver () +{ + XDELETEVEC (explicit_link_files); + XDELETEVEC (decoded_options); +} + +/* driver::main is implemented as a series of driver:: method calls. */ + +int +driver::main (int argc, char **argv) +{ + bool early_exit; + + set_progname (argv[0]); + expand_at_files (&argc, &argv); + decode_argv (argc, const_cast (argv)); + global_initializations (); + build_multilib_strings (); + set_up_specs (); + putenv_COLLECT_AS_OPTIONS (assembler_options); + putenv_COLLECT_GCC (argv[0]); + maybe_putenv_COLLECT_LTO_WRAPPER (); + maybe_putenv_OFFLOAD_TARGETS (); + handle_unrecognized_options (); + + if (completion) + { + m_option_proposer.suggest_completion (completion); + return 0; + } + + if (!maybe_print_and_exit ()) + return 0; + + early_exit = prepare_infiles (); + if (early_exit) + return get_exit_code (); + + do_spec_on_infiles (); + maybe_run_linker (argv[0]); + final_actions (); + return get_exit_code (); +} + +/* Locate the final component of argv[0] after any leading path, and set + the program name accordingly. */ + +void +driver::set_progname (const char *argv0) const +{ + const char *p = argv0 + strlen (argv0); + while (p != argv0 && !IS_DIR_SEPARATOR (p[-1])) + --p; + progname = p; + + xmalloc_set_program_name (progname); +} + +/* Expand any @ files within the command-line args, + setting at_file_supplied if any were expanded. */ + +void +driver::expand_at_files (int *argc, char ***argv) const +{ + char **old_argv = *argv; + + expandargv (argc, argv); + + /* Determine if any expansions were made. */ + if (*argv != old_argv) + at_file_supplied = true; +} + +/* Decode the command-line arguments from argc/argv into the + decoded_options array. */ + +void +driver::decode_argv (int argc, const char **argv) +{ + init_opts_obstack (); + init_options_struct (&global_options, &global_options_set); + + decode_cmdline_options_to_array (argc, argv, + CL_DRIVER, + &decoded_options, &decoded_options_count); +} + +/* Perform various initializations and setup. */ + +void +driver::global_initializations () +{ + /* Unlock the stdio streams. */ + unlock_std_streams (); + + gcc_init_libintl (); + + diagnostic_initialize (global_dc, 0); + diagnostic_color_init (global_dc); + diagnostic_urls_init (global_dc); + +#ifdef GCC_DRIVER_HOST_INITIALIZATION + /* Perform host dependent initialization when needed. */ + GCC_DRIVER_HOST_INITIALIZATION; +#endif + + if (atexit (delete_temp_files) != 0) + fatal_error (input_location, "atexit failed"); + + if (signal (SIGINT, SIG_IGN) != SIG_IGN) + signal (SIGINT, fatal_signal); +#ifdef SIGHUP + if (signal (SIGHUP, SIG_IGN) != SIG_IGN) + signal (SIGHUP, fatal_signal); +#endif + if (signal (SIGTERM, SIG_IGN) != SIG_IGN) + signal (SIGTERM, fatal_signal); +#ifdef SIGPIPE + if (signal (SIGPIPE, SIG_IGN) != SIG_IGN) + signal (SIGPIPE, fatal_signal); +#endif +#ifdef SIGCHLD + /* We *MUST* set SIGCHLD to SIG_DFL so that the wait4() call will + receive the signal. A different setting is inheritable */ + signal (SIGCHLD, SIG_DFL); +#endif + + /* Parsing and gimplification sometimes need quite large stack. + Increase stack size limits if possible. */ + stack_limit_increase (64 * 1024 * 1024); + + /* Allocate the argument vector. */ + alloc_args (); + + obstack_init (&obstack); +} + +/* Build multilib_select, et. al from the separate lines that make up each + multilib selection. */ + +void +driver::build_multilib_strings () const +{ + { + const char *p; + const char *const *q = multilib_raw; + int need_space; + + obstack_init (&multilib_obstack); + while ((p = *q++) != (char *) 0) + obstack_grow (&multilib_obstack, p, strlen (p)); + + obstack_1grow (&multilib_obstack, 0); + multilib_select = XOBFINISH (&multilib_obstack, const char *); + + q = multilib_matches_raw; + while ((p = *q++) != (char *) 0) + obstack_grow (&multilib_obstack, p, strlen (p)); + + obstack_1grow (&multilib_obstack, 0); + multilib_matches = XOBFINISH (&multilib_obstack, const char *); + + q = multilib_exclusions_raw; + while ((p = *q++) != (char *) 0) + obstack_grow (&multilib_obstack, p, strlen (p)); + + obstack_1grow (&multilib_obstack, 0); + multilib_exclusions = XOBFINISH (&multilib_obstack, const char *); + + q = multilib_reuse_raw; + while ((p = *q++) != (char *) 0) + obstack_grow (&multilib_obstack, p, strlen (p)); + + obstack_1grow (&multilib_obstack, 0); + multilib_reuse = XOBFINISH (&multilib_obstack, const char *); + + need_space = FALSE; + for (size_t i = 0; i < ARRAY_SIZE (multilib_defaults_raw); i++) + { + if (need_space) + obstack_1grow (&multilib_obstack, ' '); + obstack_grow (&multilib_obstack, + multilib_defaults_raw[i], + strlen (multilib_defaults_raw[i])); + need_space = TRUE; + } + + obstack_1grow (&multilib_obstack, 0); + multilib_defaults = XOBFINISH (&multilib_obstack, const char *); + } +} + +/* Set up the spec-handling machinery. */ + +void +driver::set_up_specs () const +{ + const char *spec_machine_suffix; + char *specs_file; + size_t i; + +#ifdef INIT_ENVIRONMENT + /* Set up any other necessary machine specific environment variables. */ + xputenv (INIT_ENVIRONMENT); +#endif + + /* Make a table of what switches there are (switches, n_switches). + Make a table of specified input files (infiles, n_infiles). + Decode switches that are handled locally. */ + + process_command (decoded_options_count, decoded_options); + + /* Initialize the vector of specs to just the default. + This means one element containing 0s, as a terminator. */ + + compilers = XNEWVAR (struct compiler, sizeof default_compilers); + memcpy (compilers, default_compilers, sizeof default_compilers); + n_compilers = n_default_compilers; + + /* Read specs from a file if there is one. */ + + machine_suffix = concat (spec_host_machine, dir_separator_str, spec_version, + accel_dir_suffix, dir_separator_str, NULL); + just_machine_suffix = concat (spec_machine, dir_separator_str, NULL); + + specs_file = find_a_file (&startfile_prefixes, "specs", R_OK, true); + /* Read the specs file unless it is a default one. */ + if (specs_file != 0 && strcmp (specs_file, "specs")) + read_specs (specs_file, true, false); + else + init_spec (); + +#ifdef ACCEL_COMPILER + spec_machine_suffix = machine_suffix; +#else + spec_machine_suffix = just_machine_suffix; +#endif + + /* We need to check standard_exec_prefix/spec_machine_suffix/specs + for any override of as, ld and libraries. */ + specs_file = (char *) alloca (strlen (standard_exec_prefix) + + strlen (spec_machine_suffix) + sizeof ("specs")); + strcpy (specs_file, standard_exec_prefix); + strcat (specs_file, spec_machine_suffix); + strcat (specs_file, "specs"); + if (access (specs_file, R_OK) == 0) + read_specs (specs_file, true, false); + + /* Process any configure-time defaults specified for the command line + options, via OPTION_DEFAULT_SPECS. */ + for (i = 0; i < ARRAY_SIZE (option_default_specs); i++) + do_option_spec (option_default_specs[i].name, + option_default_specs[i].spec); + + /* Process DRIVER_SELF_SPECS, adding any new options to the end + of the command line. */ + + for (i = 0; i < ARRAY_SIZE (driver_self_specs); i++) + do_self_spec (driver_self_specs[i]); + + /* If not cross-compiling, look for executables in the standard + places. */ + if (*cross_compile == '0') + { + if (*md_exec_prefix) + { + add_prefix (&exec_prefixes, md_exec_prefix, "GCC", + PREFIX_PRIORITY_LAST, 0, 0); + } + } + + /* Process sysroot_suffix_spec. */ + if (*sysroot_suffix_spec != 0 + && !no_sysroot_suffix + && do_spec_2 (sysroot_suffix_spec, NULL) == 0) + { + if (argbuf.length () > 1) + error ("spec failure: more than one argument to " + "%"); + else if (argbuf.length () == 1) + target_sysroot_suffix = xstrdup (argbuf.last ()); + } + +#ifdef HAVE_LD_SYSROOT + /* Pass the --sysroot option to the linker, if it supports that. If + there is a sysroot_suffix_spec, it has already been processed by + this point, so target_system_root really is the system root we + should be using. */ + if (target_system_root) + { + obstack_grow (&obstack, "%(sysroot_spec) ", strlen ("%(sysroot_spec) ")); + obstack_grow0 (&obstack, link_spec, strlen (link_spec)); + set_spec ("link", XOBFINISH (&obstack, const char *), false); + } +#endif + + /* Process sysroot_hdrs_suffix_spec. */ + if (*sysroot_hdrs_suffix_spec != 0 + && !no_sysroot_suffix + && do_spec_2 (sysroot_hdrs_suffix_spec, NULL) == 0) + { + if (argbuf.length () > 1) + error ("spec failure: more than one argument " + "to %"); + else if (argbuf.length () == 1) + target_sysroot_hdrs_suffix = xstrdup (argbuf.last ()); + } + + /* Look for startfiles in the standard places. */ + if (*startfile_prefix_spec != 0 + && do_spec_2 (startfile_prefix_spec, NULL) == 0 + && do_spec_1 (" ", 0, NULL) == 0) + { + for (const char *arg : argbuf) + add_sysrooted_prefix (&startfile_prefixes, arg, "BINUTILS", + PREFIX_PRIORITY_LAST, 0, 1); + } + /* We should eventually get rid of all these and stick to + startfile_prefix_spec exclusively. */ + else if (*cross_compile == '0' || target_system_root) + { + if (*md_startfile_prefix) + add_sysrooted_prefix (&startfile_prefixes, md_startfile_prefix, + "GCC", PREFIX_PRIORITY_LAST, 0, 1); + + if (*md_startfile_prefix_1) + add_sysrooted_prefix (&startfile_prefixes, md_startfile_prefix_1, + "GCC", PREFIX_PRIORITY_LAST, 0, 1); + + /* If standard_startfile_prefix is relative, base it on + standard_exec_prefix. This lets us move the installed tree + as a unit. If GCC_EXEC_PREFIX is defined, base + standard_startfile_prefix on that as well. + + If the prefix is relative, only search it for native compilers; + otherwise we will search a directory containing host libraries. */ + if (IS_ABSOLUTE_PATH (standard_startfile_prefix)) + add_sysrooted_prefix (&startfile_prefixes, + standard_startfile_prefix, "BINUTILS", + PREFIX_PRIORITY_LAST, 0, 1); + else if (*cross_compile == '0') + { + add_prefix (&startfile_prefixes, + concat (gcc_exec_prefix + ? gcc_exec_prefix : standard_exec_prefix, + machine_suffix, + standard_startfile_prefix, NULL), + NULL, PREFIX_PRIORITY_LAST, 0, 1); + } + + /* Sysrooted prefixes are relocated because target_system_root is + also relocated by gcc_exec_prefix. */ + if (*standard_startfile_prefix_1) + add_sysrooted_prefix (&startfile_prefixes, + standard_startfile_prefix_1, "BINUTILS", + PREFIX_PRIORITY_LAST, 0, 1); + if (*standard_startfile_prefix_2) + add_sysrooted_prefix (&startfile_prefixes, + standard_startfile_prefix_2, "BINUTILS", + PREFIX_PRIORITY_LAST, 0, 1); + } + + /* Process any user specified specs in the order given on the command + line. */ + for (struct user_specs *uptr = user_specs_head; uptr; uptr = uptr->next) + { + char *filename = find_a_file (&startfile_prefixes, uptr->filename, + R_OK, true); + read_specs (filename ? filename : uptr->filename, false, true); + } + + /* Process any user self specs. */ + { + struct spec_list *sl; + for (sl = specs; sl; sl = sl->next) + if (sl->name_len == sizeof "self_spec" - 1 + && !strcmp (sl->name, "self_spec")) + do_self_spec (*sl->ptr_spec); + } + + if (compare_debug) + { + enum save_temps save; + + if (!compare_debug_second) + { + n_switches_debug_check[1] = n_switches; + n_switches_alloc_debug_check[1] = n_switches_alloc; + switches_debug_check[1] = XDUPVEC (struct switchstr, switches, + n_switches_alloc); + + do_self_spec ("%:compare-debug-self-opt()"); + n_switches_debug_check[0] = n_switches; + n_switches_alloc_debug_check[0] = n_switches_alloc; + switches_debug_check[0] = switches; + + n_switches = n_switches_debug_check[1]; + n_switches_alloc = n_switches_alloc_debug_check[1]; + switches = switches_debug_check[1]; + } + + /* Avoid crash when computing %j in this early. */ + save = save_temps_flag; + save_temps_flag = SAVE_TEMPS_NONE; + + compare_debug = -compare_debug; + do_self_spec ("%:compare-debug-self-opt()"); + + save_temps_flag = save; + + if (!compare_debug_second) + { + n_switches_debug_check[1] = n_switches; + n_switches_alloc_debug_check[1] = n_switches_alloc; + switches_debug_check[1] = switches; + compare_debug = -compare_debug; + n_switches = n_switches_debug_check[0]; + n_switches_alloc = n_switches_debug_check[0]; + switches = switches_debug_check[0]; + } + } + + + /* If we have a GCC_EXEC_PREFIX envvar, modify it for cpp's sake. */ + if (gcc_exec_prefix) + gcc_exec_prefix = concat (gcc_exec_prefix, spec_host_machine, + dir_separator_str, spec_version, + accel_dir_suffix, dir_separator_str, NULL); + + /* Now we have the specs. + Set the `valid' bits for switches that match anything in any spec. */ + + validate_all_switches (); + + /* Now that we have the switches and the specs, set + the subdirectory based on the options. */ + set_multilib_dir (); +} + +/* Set up to remember the pathname of gcc and any options + needed for collect. We use argv[0] instead of progname because + we need the complete pathname. */ + +void +driver::putenv_COLLECT_GCC (const char *argv0) const +{ + obstack_init (&collect_obstack); + obstack_grow (&collect_obstack, "COLLECT_GCC=", sizeof ("COLLECT_GCC=") - 1); + obstack_grow (&collect_obstack, argv0, strlen (argv0) + 1); + xputenv (XOBFINISH (&collect_obstack, char *)); +} + +/* Set up to remember the pathname of the lto wrapper. */ + +void +driver::maybe_putenv_COLLECT_LTO_WRAPPER () const +{ + char *lto_wrapper_file; + + if (have_c) + lto_wrapper_file = NULL; + else + lto_wrapper_file = find_a_program ("lto-wrapper"); + if (lto_wrapper_file) + { + lto_wrapper_file = convert_white_space (lto_wrapper_file); + set_static_spec_owned (<o_wrapper_spec, lto_wrapper_file); + obstack_init (&collect_obstack); + obstack_grow (&collect_obstack, "COLLECT_LTO_WRAPPER=", + sizeof ("COLLECT_LTO_WRAPPER=") - 1); + obstack_grow (&collect_obstack, lto_wrapper_spec, + strlen (lto_wrapper_spec) + 1); + xputenv (XOBFINISH (&collect_obstack, char *)); + } + +} + +/* Set up to remember the names of offload targets. */ + +void +driver::maybe_putenv_OFFLOAD_TARGETS () const +{ + if (offload_targets && offload_targets[0] != '\0') + { + obstack_grow (&collect_obstack, "OFFLOAD_TARGET_NAMES=", + sizeof ("OFFLOAD_TARGET_NAMES=") - 1); + obstack_grow (&collect_obstack, offload_targets, + strlen (offload_targets) + 1); + xputenv (XOBFINISH (&collect_obstack, char *)); +#if OFFLOAD_DEFAULTED + if (offload_targets_default) + xputenv ("OFFLOAD_TARGET_DEFAULT=1"); +#endif + } + + free (offload_targets); + offload_targets = NULL; +} + +/* Reject switches that no pass was interested in. */ + +void +driver::handle_unrecognized_options () +{ + for (size_t i = 0; (int) i < n_switches; i++) + if (! switches[i].validated) + { + const char *hint = m_option_proposer.suggest_option (switches[i].part1); + if (hint) + error ("unrecognized command-line option %<-%s%>;" + " did you mean %<-%s%>?", + switches[i].part1, hint); + else + error ("unrecognized command-line option %<-%s%>", + switches[i].part1); + } +} + +/* Handle the various -print-* options, returning 0 if the driver + should exit, or nonzero if the driver should continue. */ + +int +driver::maybe_print_and_exit () const +{ + if (print_search_dirs) + { + printf (_("install: %s%s\n"), + gcc_exec_prefix ? gcc_exec_prefix : standard_exec_prefix, + gcc_exec_prefix ? "" : machine_suffix); + printf (_("programs: %s\n"), + build_search_list (&exec_prefixes, "", false, false)); + printf (_("libraries: %s\n"), + build_search_list (&startfile_prefixes, "", false, true)); + return (0); + } + + if (print_file_name) + { + printf ("%s\n", find_file (print_file_name)); + return (0); + } + + if (print_prog_name) + { + if (use_ld != NULL && ! strcmp (print_prog_name, "ld")) + { + /* Append USE_LD to the default linker. */ +#ifdef DEFAULT_LINKER + char *ld; +# ifdef HAVE_HOST_EXECUTABLE_SUFFIX + int len = (sizeof (DEFAULT_LINKER) + - sizeof (HOST_EXECUTABLE_SUFFIX)); + ld = NULL; + if (len > 0) + { + char *default_linker = xstrdup (DEFAULT_LINKER); + /* Strip HOST_EXECUTABLE_SUFFIX if DEFAULT_LINKER contains + HOST_EXECUTABLE_SUFFIX. */ + if (! strcmp (&default_linker[len], HOST_EXECUTABLE_SUFFIX)) + { + default_linker[len] = '\0'; + ld = concat (default_linker, use_ld, + HOST_EXECUTABLE_SUFFIX, NULL); + } + } + if (ld == NULL) +# endif + ld = concat (DEFAULT_LINKER, use_ld, NULL); + if (access (ld, X_OK) == 0) + { + printf ("%s\n", ld); + return (0); + } +#endif + print_prog_name = concat (print_prog_name, use_ld, NULL); + } + char *newname = find_a_program (print_prog_name); + printf ("%s\n", (newname ? newname : print_prog_name)); + return (0); + } + + if (print_multi_lib) + { + print_multilib_info (); + return (0); + } + + if (print_multi_directory) + { + if (multilib_dir == NULL) + printf (".\n"); + else + printf ("%s\n", multilib_dir); + return (0); + } + + if (print_multiarch) + { + if (multiarch_dir == NULL) + printf ("\n"); + else + printf ("%s\n", multiarch_dir); + return (0); + } + + if (print_sysroot) + { + if (target_system_root) + { + if (target_sysroot_suffix) + printf ("%s%s\n", target_system_root, target_sysroot_suffix); + else + printf ("%s\n", target_system_root); + } + return (0); + } + + if (print_multi_os_directory) + { + if (multilib_os_dir == NULL) + printf (".\n"); + else + printf ("%s\n", multilib_os_dir); + return (0); + } + + if (print_sysroot_headers_suffix) + { + if (*sysroot_hdrs_suffix_spec) + { + printf("%s\n", (target_sysroot_hdrs_suffix + ? target_sysroot_hdrs_suffix + : "")); + return (0); + } + else + /* The error status indicates that only one set of fixed + headers should be built. */ + fatal_error (input_location, + "not configured with sysroot headers suffix"); + } + + if (print_help_list) + { + display_help (); + + if (! verbose_flag) + { + printf (_("\nFor bug reporting instructions, please see:\n")); + printf ("%s.\n", bug_report_url); + + return (0); + } + + /* We do not exit here. Instead we have created a fake input file + called 'help-dummy' which needs to be compiled, and we pass this + on the various sub-processes, along with the --help switch. + Ensure their output appears after ours. */ + fputc ('\n', stdout); + fflush (stdout); + } + + if (print_version) + { + printf (_("%s %s%s\n"), progname, pkgversion_string, + version_string); + printf ("Copyright %s 2023 Free Software Foundation, Inc.\n", + _("(C)")); + fputs (_("This is free software; see the source for copying conditions. There is NO\n\ +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"), + stdout); + if (! verbose_flag) + return 0; + + /* We do not exit here. We use the same mechanism of --help to print + the version of the sub-processes. */ + fputc ('\n', stdout); + fflush (stdout); + } + + if (verbose_flag) + { + print_configuration (stderr); + if (n_infiles == 0) + return (0); + } + + return 1; +} + +/* Figure out what to do with each input file. + Return true if we need to exit early from "main", false otherwise. */ + +bool +driver::prepare_infiles () +{ + size_t i; + int lang_n_infiles = 0; + + if (n_infiles == added_libraries) + fatal_error (input_location, "no input files"); + + if (seen_error ()) + /* Early exit needed from main. */ + return true; + + /* Make a place to record the compiler output file names + that correspond to the input files. */ + + i = n_infiles; + i += lang_specific_extra_outfiles; + outfiles = XCNEWVEC (const char *, i); + + /* Record which files were specified explicitly as link input. */ + + explicit_link_files = XCNEWVEC (char, n_infiles); + + combine_inputs = have_o || flag_wpa; + + for (i = 0; (int) i < n_infiles; i++) + { + const char *name = infiles[i].name; + struct compiler *compiler = lookup_compiler (name, + strlen (name), + infiles[i].language); + + if (compiler && !(compiler->combinable)) + combine_inputs = false; + + if (lang_n_infiles > 0 && compiler != input_file_compiler + && infiles[i].language && infiles[i].language[0] != '*') + infiles[i].incompiler = compiler; + else if (compiler) + { + lang_n_infiles++; + input_file_compiler = compiler; + infiles[i].incompiler = compiler; + } + else + { + /* Since there is no compiler for this input file, assume it is a + linker file. */ + explicit_link_files[i] = 1; + infiles[i].incompiler = NULL; + } + infiles[i].compiled = false; + infiles[i].preprocessed = false; + } + + if (!combine_inputs && have_c && have_o && lang_n_infiles > 1) + fatal_error (input_location, + "cannot specify %<-o%> with %<-c%>, %<-S%> or %<-E%> " + "with multiple files"); + + /* No early exit needed from main; we can continue. */ + return false; +} + +/* Run the spec machinery on each input file. */ + +void +driver::do_spec_on_infiles () const +{ + size_t i; + + for (i = 0; (int) i < n_infiles; i++) + { + int this_file_error = 0; + + /* Tell do_spec what to substitute for %i. */ + + input_file_number = i; + set_input (infiles[i].name); + + if (infiles[i].compiled) + continue; + + /* Use the same thing in %o, unless cp->spec says otherwise. */ + + outfiles[i] = gcc_input_filename; + + /* Figure out which compiler from the file's suffix. */ + + input_file_compiler + = lookup_compiler (infiles[i].name, input_filename_length, + infiles[i].language); + + if (input_file_compiler) + { + /* Ok, we found an applicable compiler. Run its spec. */ + + if (input_file_compiler->spec[0] == '#') + { + error ("%s: %s compiler not installed on this system", + gcc_input_filename, &input_file_compiler->spec[1]); + this_file_error = 1; + } + else + { + int value; + + if (compare_debug) + { + free (debug_check_temp_file[0]); + debug_check_temp_file[0] = NULL; + + free (debug_check_temp_file[1]); + debug_check_temp_file[1] = NULL; + } + + value = do_spec (input_file_compiler->spec); + infiles[i].compiled = true; + if (value < 0) + this_file_error = 1; + else if (compare_debug && debug_check_temp_file[0]) + { + if (verbose_flag) + inform (UNKNOWN_LOCATION, + "recompiling with %<-fcompare-debug%>"); + + compare_debug = -compare_debug; + n_switches = n_switches_debug_check[1]; + n_switches_alloc = n_switches_alloc_debug_check[1]; + switches = switches_debug_check[1]; + + value = do_spec (input_file_compiler->spec); + + compare_debug = -compare_debug; + n_switches = n_switches_debug_check[0]; + n_switches_alloc = n_switches_alloc_debug_check[0]; + switches = switches_debug_check[0]; + + if (value < 0) + { + error ("during %<-fcompare-debug%> recompilation"); + this_file_error = 1; + } + + gcc_assert (debug_check_temp_file[1] + && filename_cmp (debug_check_temp_file[0], + debug_check_temp_file[1])); + + if (verbose_flag) + inform (UNKNOWN_LOCATION, "comparing final insns dumps"); + + if (compare_files (debug_check_temp_file)) + this_file_error = 1; + } + + if (compare_debug) + { + free (debug_check_temp_file[0]); + debug_check_temp_file[0] = NULL; + + free (debug_check_temp_file[1]); + debug_check_temp_file[1] = NULL; + } + } + } + + /* If this file's name does not contain a recognized suffix, + record it as explicit linker input. */ + + else + explicit_link_files[i] = 1; + + /* Clear the delete-on-failure queue, deleting the files in it + if this compilation failed. */ + + if (this_file_error) + { + delete_failure_queue (); + errorcount++; + } + /* If this compilation succeeded, don't delete those files later. */ + clear_failure_queue (); + } + + /* Reset the input file name to the first compile/object file name, for use + with %b in LINK_SPEC. We use the first input file that we can find + a compiler to compile it instead of using infiles.language since for + languages other than C we use aliases that we then lookup later. */ + if (n_infiles > 0) + { + int i; + + for (i = 0; i < n_infiles ; i++) + if (infiles[i].incompiler + || (infiles[i].language && infiles[i].language[0] != '*')) + { + set_input (infiles[i].name); + break; + } + } + + if (!seen_error ()) + { + /* Make sure INPUT_FILE_NUMBER points to first available open + slot. */ + input_file_number = n_infiles; + if (lang_specific_pre_link ()) + errorcount++; + } +} + +/* If we have to run the linker, do it now. */ + +void +driver::maybe_run_linker (const char *argv0) const +{ + size_t i; + int linker_was_run = 0; + int num_linker_inputs; + + /* Determine if there are any linker input files. */ + num_linker_inputs = 0; + for (i = 0; (int) i < n_infiles; i++) + if (explicit_link_files[i] || outfiles[i] != NULL) + num_linker_inputs++; + + /* Arrange for temporary file names created during linking to take + on names related with the linker output rather than with the + inputs when appropriate. */ + if (outbase && *outbase) + { + if (dumpdir) + { + char *tofree = dumpdir; + gcc_checking_assert (strlen (dumpdir) == dumpdir_length); + dumpdir = concat (dumpdir, outbase, ".", NULL); + free (tofree); + } + else + dumpdir = concat (outbase, ".", NULL); + dumpdir_length += strlen (outbase) + 1; + dumpdir_trailing_dash_added = true; + } + else if (dumpdir_trailing_dash_added) + { + gcc_assert (dumpdir[dumpdir_length - 1] == '-'); + dumpdir[dumpdir_length - 1] = '.'; + } + + if (dumpdir_trailing_dash_added) + { + gcc_assert (dumpdir_length > 0); + gcc_assert (dumpdir[dumpdir_length - 1] == '.'); + dumpdir_length--; + } + + free (outbase); + input_basename = outbase = NULL; + outbase_length = suffixed_basename_length = basename_length = 0; + + /* Run ld to link all the compiler output files. */ + + if (num_linker_inputs > 0 && !seen_error () && print_subprocess_help < 2) + { + int tmp = execution_count; + + detect_jobserver (); + + if (! have_c) + { +#if HAVE_LTO_PLUGIN > 0 +#if HAVE_LTO_PLUGIN == 2 + const char *fno_use_linker_plugin = "fno-use-linker-plugin"; +#else + const char *fuse_linker_plugin = "fuse-linker-plugin"; +#endif +#endif + + /* We'll use ld if we can't find collect2. */ + if (! strcmp (linker_name_spec, "collect2")) + { + char *s = find_a_program ("collect2"); + if (s == NULL) + set_static_spec_shared (&linker_name_spec, "ld"); + } + +#if HAVE_LTO_PLUGIN > 0 +#if HAVE_LTO_PLUGIN == 2 + if (!switch_matches (fno_use_linker_plugin, + fno_use_linker_plugin + + strlen (fno_use_linker_plugin), 0)) +#else + if (switch_matches (fuse_linker_plugin, + fuse_linker_plugin + + strlen (fuse_linker_plugin), 0)) +#endif + { + char *temp_spec = find_a_file (&exec_prefixes, + LTOPLUGINSONAME, R_OK, + false); + if (!temp_spec) + fatal_error (input_location, + "%<-fuse-linker-plugin%>, but %s not found", + LTOPLUGINSONAME); + linker_plugin_file_spec = convert_white_space (temp_spec); + } +#endif + set_static_spec_shared (<o_gcc_spec, argv0); + } + + /* Rebuild the COMPILER_PATH and LIBRARY_PATH environment variables + for collect. */ + putenv_from_prefixes (&exec_prefixes, "COMPILER_PATH", false); + putenv_from_prefixes (&startfile_prefixes, LIBRARY_PATH_ENV, true); + + if (print_subprocess_help == 1) + { + printf (_("\nLinker options\n==============\n\n")); + printf (_("Use \"-Wl,OPTION\" to pass \"OPTION\"" + " to the linker.\n\n")); + fflush (stdout); + } + int value = do_spec (link_command_spec); + if (value < 0) + errorcount = 1; + linker_was_run = (tmp != execution_count); + } + + /* If options said don't run linker, + complain about input files to be given to the linker. */ + + if (! linker_was_run && !seen_error ()) + for (i = 0; (int) i < n_infiles; i++) + if (explicit_link_files[i] + && !(infiles[i].language && infiles[i].language[0] == '*')) + { + warning (0, "%s: linker input file unused because linking not done", + outfiles[i]); + if (access (outfiles[i], F_OK) < 0) + /* This is can be an indication the user specifed an errorneous + separated option value, (or used the wrong prefix for an + option). */ + error ("%s: linker input file not found: %m", outfiles[i]); + } +} + +/* The end of "main". */ + +void +driver::final_actions () const +{ + /* Delete some or all of the temporary files we made. */ + + if (seen_error ()) + delete_failure_queue (); + delete_temp_files (); + + if (print_help_list) + { + printf (("\nFor bug reporting instructions, please see:\n")); + printf ("%s\n", bug_report_url); + } +} + +/* Detect whether jobserver is active and working. If not drop + --jobserver-auth from MAKEFLAGS. */ + +void +driver::detect_jobserver () const +{ + jobserver_info jinfo; + if (!jinfo.is_active && !jinfo.skipped_makeflags.empty ()) + xputenv (xstrdup (jinfo.skipped_makeflags.c_str ())); +} + +/* Determine what the exit code of the driver should be. */ + +int +driver::get_exit_code () const +{ + return (signal_count != 0 ? 2 + : seen_error () ? (pass_exit_codes ? greatest_status : 1) + : 0); +} + +/* Find the proper compilation spec for the file name NAME, + whose length is LENGTH. LANGUAGE is the specified language, + or 0 if this file is to be passed to the linker. */ + +static struct compiler * +lookup_compiler (const char *name, size_t length, const char *language) +{ + struct compiler *cp; + + /* If this was specified by the user to be a linker input, indicate that. */ + if (language != 0 && language[0] == '*') + return 0; + + /* Otherwise, look for the language, if one is spec'd. */ + if (language != 0) + { + for (cp = compilers + n_compilers - 1; cp >= compilers; cp--) + if (cp->suffix[0] == '@' && !strcmp (cp->suffix + 1, language)) + { + if (name != NULL && strcmp (name, "-") == 0 + && (strcmp (cp->suffix, "@c-header") == 0 + || strcmp (cp->suffix, "@c++-header") == 0) + && !have_E) + fatal_error (input_location, + "cannot use %<-%> as input filename for a " + "precompiled header"); + + return cp; + } + + error ("language %s not recognized", language); + return 0; + } + + /* Look for a suffix. */ + for (cp = compilers + n_compilers - 1; cp >= compilers; cp--) + { + if (/* The suffix `-' matches only the file name `-'. */ + (!strcmp (cp->suffix, "-") && !strcmp (name, "-")) + || (strlen (cp->suffix) < length + /* See if the suffix matches the end of NAME. */ + && !strcmp (cp->suffix, + name + length - strlen (cp->suffix)) + )) + break; + } + +#if defined (OS2) ||defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Look again, but case-insensitively this time. */ + if (cp < compilers) + for (cp = compilers + n_compilers - 1; cp >= compilers; cp--) + { + if (/* The suffix `-' matches only the file name `-'. */ + (!strcmp (cp->suffix, "-") && !strcmp (name, "-")) + || (strlen (cp->suffix) < length + /* See if the suffix matches the end of NAME. */ + && ((!strcmp (cp->suffix, + name + length - strlen (cp->suffix)) + || !strpbrk (cp->suffix, "ABCDEFGHIJKLMNOPQRSTUVWXYZ")) + && !strcasecmp (cp->suffix, + name + length - strlen (cp->suffix))) + )) + break; + } +#endif + + if (cp >= compilers) + { + if (cp->spec[0] != '@') + /* A non-alias entry: return it. */ + return cp; + + /* An alias entry maps a suffix to a language. + Search for the language; pass 0 for NAME and LENGTH + to avoid infinite recursion if language not found. */ + return lookup_compiler (NULL, 0, cp->spec + 1); + } + return 0; +} + +static char * +save_string (const char *s, int len) +{ + char *result = XNEWVEC (char, len + 1); + + gcc_checking_assert (strlen (s) >= (unsigned int) len); + memcpy (result, s, len); + result[len] = 0; + return result; +} + + +static inline void +validate_switches_from_spec (const char *spec, bool user) +{ + const char *p = spec; + char c; + while ((c = *p++)) + if (c == '%' + && (*p == '{' + || *p == '<' + || (*p == 'W' && *++p == '{') + || (*p == '@' && *++p == '{'))) + /* We have a switch spec. */ + p = validate_switches (p + 1, user, *p == '{'); +} + +static void +validate_all_switches (void) +{ + struct compiler *comp; + struct spec_list *spec; + + for (comp = compilers; comp->spec; comp++) + validate_switches_from_spec (comp->spec, false); + + /* Look through the linked list of specs read from the specs file. */ + for (spec = specs; spec; spec = spec->next) + validate_switches_from_spec (*spec->ptr_spec, spec->user_p); + + validate_switches_from_spec (link_command_spec, false); +} + +/* Look at the switch-name that comes after START and mark as valid + all supplied switches that match it. If BRACED, handle other + switches after '|' and '&', and specs after ':' until ';' or '}', + going back for more switches after ';'. Without BRACED, handle + only one atom. Return a pointer to whatever follows the handled + items, after the closing brace if BRACED. */ + +static const char * +validate_switches (const char *start, bool user_spec, bool braced) +{ + const char *p = start; + const char *atom; + size_t len; + int i; + bool suffix; + bool starred; + +#define SKIP_WHITE() do { while (*p == ' ' || *p == '\t') p++; } while (0) + +next_member: + suffix = false; + starred = false; + + SKIP_WHITE (); + + if (*p == '!') + p++; + + SKIP_WHITE (); + if (*p == '.' || *p == ',') + suffix = true, p++; + + atom = p; + while (ISIDNUM (*p) || *p == '-' || *p == '+' || *p == '=' + || *p == ',' || *p == '.' || *p == '@') + p++; + len = p - atom; + + if (*p == '*') + starred = true, p++; + + SKIP_WHITE (); + + if (!suffix) + { + /* Mark all matching switches as valid. */ + for (i = 0; i < n_switches; i++) + if (!strncmp (switches[i].part1, atom, len) + && (starred || switches[i].part1[len] == '\0') + && (switches[i].known || user_spec)) + switches[i].validated = true; + } + + if (!braced) + return p; + + if (*p) p++; + if (*p && (p[-1] == '|' || p[-1] == '&')) + goto next_member; + + if (*p && p[-1] == ':') + { + while (*p && *p != ';' && *p != '}') + { + if (*p == '%') + { + p++; + if (*p == '{' || *p == '<') + p = validate_switches (p+1, user_spec, *p == '{'); + else if (p[0] == 'W' && p[1] == '{') + p = validate_switches (p+2, user_spec, true); + else if (p[0] == '@' && p[1] == '{') + p = validate_switches (p+2, user_spec, true); + } + else + p++; + } + + if (*p) p++; + if (*p && p[-1] == ';') + goto next_member; + } + + return p; +#undef SKIP_WHITE +} + +struct mdswitchstr +{ + const char *str; + int len; +}; + +static struct mdswitchstr *mdswitches; +static int n_mdswitches; + +/* Check whether a particular argument was used. The first time we + canonicalize the switches to keep only the ones we care about. */ + +struct used_arg_t +{ + public: + int operator () (const char *p, int len); + void finalize (); + + private: + struct mswitchstr + { + const char *str; + const char *replace; + int len; + int rep_len; + }; + + mswitchstr *mswitches; + int n_mswitches; + +}; + +used_arg_t used_arg; + +int +used_arg_t::operator () (const char *p, int len) +{ + int i, j; + + if (!mswitches) + { + struct mswitchstr *matches; + const char *q; + int cnt = 0; + + /* Break multilib_matches into the component strings of string + and replacement string. */ + for (q = multilib_matches; *q != '\0'; q++) + if (*q == ';') + cnt++; + + matches + = (struct mswitchstr *) alloca ((sizeof (struct mswitchstr)) * cnt); + i = 0; + q = multilib_matches; + while (*q != '\0') + { + matches[i].str = q; + while (*q != ' ') + { + if (*q == '\0') + { + invalid_matches: + fatal_error (input_location, "multilib spec %qs is invalid", + multilib_matches); + } + q++; + } + matches[i].len = q - matches[i].str; + + matches[i].replace = ++q; + while (*q != ';' && *q != '\0') + { + if (*q == ' ') + goto invalid_matches; + q++; + } + matches[i].rep_len = q - matches[i].replace; + i++; + if (*q == ';') + q++; + } + + /* Now build a list of the replacement string for switches that we care + about. Make sure we allocate at least one entry. This prevents + xmalloc from calling fatal, and prevents us from re-executing this + block of code. */ + mswitches + = XNEWVEC (struct mswitchstr, n_mdswitches + (n_switches ? n_switches : 1)); + for (i = 0; i < n_switches; i++) + if ((switches[i].live_cond & SWITCH_IGNORE) == 0) + { + int xlen = strlen (switches[i].part1); + for (j = 0; j < cnt; j++) + if (xlen == matches[j].len + && ! strncmp (switches[i].part1, matches[j].str, xlen)) + { + mswitches[n_mswitches].str = matches[j].replace; + mswitches[n_mswitches].len = matches[j].rep_len; + mswitches[n_mswitches].replace = (char *) 0; + mswitches[n_mswitches].rep_len = 0; + n_mswitches++; + break; + } + } + + /* Add MULTILIB_DEFAULTS switches too, as long as they were not present + on the command line nor any options mutually incompatible with + them. */ + for (i = 0; i < n_mdswitches; i++) + { + const char *r; + + for (q = multilib_options; *q != '\0'; *q && q++) + { + while (*q == ' ') + q++; + + r = q; + while (strncmp (q, mdswitches[i].str, mdswitches[i].len) != 0 + || strchr (" /", q[mdswitches[i].len]) == NULL) + { + while (*q != ' ' && *q != '/' && *q != '\0') + q++; + if (*q != '/') + break; + q++; + } + + if (*q != ' ' && *q != '\0') + { + while (*r != ' ' && *r != '\0') + { + q = r; + while (*q != ' ' && *q != '/' && *q != '\0') + q++; + + if (used_arg (r, q - r)) + break; + + if (*q != '/') + { + mswitches[n_mswitches].str = mdswitches[i].str; + mswitches[n_mswitches].len = mdswitches[i].len; + mswitches[n_mswitches].replace = (char *) 0; + mswitches[n_mswitches].rep_len = 0; + n_mswitches++; + break; + } + + r = q + 1; + } + break; + } + } + } + } + + for (i = 0; i < n_mswitches; i++) + if (len == mswitches[i].len && ! strncmp (p, mswitches[i].str, len)) + return 1; + + return 0; +} + +void used_arg_t::finalize () +{ + XDELETEVEC (mswitches); + mswitches = NULL; + n_mswitches = 0; +} + + +static int +default_arg (const char *p, int len) +{ + int i; + + for (i = 0; i < n_mdswitches; i++) + if (len == mdswitches[i].len && ! strncmp (p, mdswitches[i].str, len)) + return 1; + + return 0; +} + +/* Work out the subdirectory to use based on the options. The format of + multilib_select is a list of elements. Each element is a subdirectory + name followed by a list of options followed by a semicolon. The format + of multilib_exclusions is the same, but without the preceding + directory. First gcc will check the exclusions, if none of the options + beginning with an exclamation point are present, and all of the other + options are present, then we will ignore this completely. Passing + that, gcc will consider each multilib_select in turn using the same + rules for matching the options. If a match is found, that subdirectory + will be used. + A subdirectory name is optionally followed by a colon and the corresponding + multiarch name. */ + +static void +set_multilib_dir (void) +{ + const char *p; + unsigned int this_path_len; + const char *this_path, *this_arg; + const char *start, *end; + int not_arg; + int ok, ndfltok, first; + + n_mdswitches = 0; + start = multilib_defaults; + while (*start == ' ' || *start == '\t') + start++; + while (*start != '\0') + { + n_mdswitches++; + while (*start != ' ' && *start != '\t' && *start != '\0') + start++; + while (*start == ' ' || *start == '\t') + start++; + } + + if (n_mdswitches) + { + int i = 0; + + mdswitches = XNEWVEC (struct mdswitchstr, n_mdswitches); + for (start = multilib_defaults; *start != '\0'; start = end + 1) + { + while (*start == ' ' || *start == '\t') + start++; + + if (*start == '\0') + break; + + for (end = start + 1; + *end != ' ' && *end != '\t' && *end != '\0'; end++) + ; + + obstack_grow (&multilib_obstack, start, end - start); + obstack_1grow (&multilib_obstack, 0); + mdswitches[i].str = XOBFINISH (&multilib_obstack, const char *); + mdswitches[i++].len = end - start; + + if (*end == '\0') + break; + } + } + + p = multilib_exclusions; + while (*p != '\0') + { + /* Ignore newlines. */ + if (*p == '\n') + { + ++p; + continue; + } + + /* Check the arguments. */ + ok = 1; + while (*p != ';') + { + if (*p == '\0') + { + invalid_exclusions: + fatal_error (input_location, "multilib exclusions %qs is invalid", + multilib_exclusions); + } + + if (! ok) + { + ++p; + continue; + } + + this_arg = p; + while (*p != ' ' && *p != ';') + { + if (*p == '\0') + goto invalid_exclusions; + ++p; + } + + if (*this_arg != '!') + not_arg = 0; + else + { + not_arg = 1; + ++this_arg; + } + + ok = used_arg (this_arg, p - this_arg); + if (not_arg) + ok = ! ok; + + if (*p == ' ') + ++p; + } + + if (ok) + return; + + ++p; + } + + first = 1; + p = multilib_select; + + /* Append multilib reuse rules if any. With those rules, we can reuse + one multilib for certain different options sets. */ + if (strlen (multilib_reuse) > 0) + p = concat (p, multilib_reuse, NULL); + + while (*p != '\0') + { + /* Ignore newlines. */ + if (*p == '\n') + { + ++p; + continue; + } + + /* Get the initial path. */ + this_path = p; + while (*p != ' ') + { + if (*p == '\0') + { + invalid_select: + fatal_error (input_location, "multilib select %qs %qs is invalid", + multilib_select, multilib_reuse); + } + ++p; + } + this_path_len = p - this_path; + + /* Check the arguments. */ + ok = 1; + ndfltok = 1; + ++p; + while (*p != ';') + { + if (*p == '\0') + goto invalid_select; + + if (! ok) + { + ++p; + continue; + } + + this_arg = p; + while (*p != ' ' && *p != ';') + { + if (*p == '\0') + goto invalid_select; + ++p; + } + + if (*this_arg != '!') + not_arg = 0; + else + { + not_arg = 1; + ++this_arg; + } + + /* If this is a default argument, we can just ignore it. + This is true even if this_arg begins with '!'. Beginning + with '!' does not mean that this argument is necessarily + inappropriate for this library: it merely means that + there is a more specific library which uses this + argument. If this argument is a default, we need not + consider that more specific library. */ + ok = used_arg (this_arg, p - this_arg); + if (not_arg) + ok = ! ok; + + if (! ok) + ndfltok = 0; + + if (default_arg (this_arg, p - this_arg)) + ok = 1; + + if (*p == ' ') + ++p; + } + + if (ok && first) + { + if (this_path_len != 1 + || this_path[0] != '.') + { + char *new_multilib_dir = XNEWVEC (char, this_path_len + 1); + char *q; + + strncpy (new_multilib_dir, this_path, this_path_len); + new_multilib_dir[this_path_len] = '\0'; + q = strchr (new_multilib_dir, ':'); + if (q != NULL) + *q = '\0'; + multilib_dir = new_multilib_dir; + } + first = 0; + } + + if (ndfltok) + { + const char *q = this_path, *end = this_path + this_path_len; + + while (q < end && *q != ':') + q++; + if (q < end) + { + const char *q2 = q + 1, *ml_end = end; + char *new_multilib_os_dir; + + while (q2 < end && *q2 != ':') + q2++; + if (*q2 == ':') + ml_end = q2; + if (ml_end - q == 1) + multilib_os_dir = xstrdup ("."); + else + { + new_multilib_os_dir = XNEWVEC (char, ml_end - q); + memcpy (new_multilib_os_dir, q + 1, ml_end - q - 1); + new_multilib_os_dir[ml_end - q - 1] = '\0'; + multilib_os_dir = new_multilib_os_dir; + } + + if (q2 < end && *q2 == ':') + { + char *new_multiarch_dir = XNEWVEC (char, end - q2); + memcpy (new_multiarch_dir, q2 + 1, end - q2 - 1); + new_multiarch_dir[end - q2 - 1] = '\0'; + multiarch_dir = new_multiarch_dir; + } + break; + } + } + + ++p; + } + + multilib_dir = + targetm_common.compute_multilib ( + switches, + n_switches, + multilib_dir, + multilib_defaults, + multilib_select, + multilib_matches, + multilib_exclusions, + multilib_reuse); + + if (multilib_dir == NULL && multilib_os_dir != NULL + && strcmp (multilib_os_dir, ".") == 0) + { + free (CONST_CAST (char *, multilib_os_dir)); + multilib_os_dir = NULL; + } + else if (multilib_dir != NULL && multilib_os_dir == NULL) + multilib_os_dir = multilib_dir; +} + +/* Print out the multiple library subdirectory selection + information. This prints out a series of lines. Each line looks + like SUBDIRECTORY;@OPTION@OPTION, with as many options as is + required. Only the desired options are printed out, the negative + matches. The options are print without a leading dash. There are + no spaces to make it easy to use the information in the shell. + Each subdirectory is printed only once. This assumes the ordering + generated by the genmultilib script. Also, we leave out ones that match + the exclusions. */ + +static void +print_multilib_info (void) +{ + const char *p = multilib_select; + const char *last_path = 0, *this_path; + int skip; + int not_arg; + unsigned int last_path_len = 0; + + while (*p != '\0') + { + skip = 0; + /* Ignore newlines. */ + if (*p == '\n') + { + ++p; + continue; + } + + /* Get the initial path. */ + this_path = p; + while (*p != ' ') + { + if (*p == '\0') + { + invalid_select: + fatal_error (input_location, + "multilib select %qs is invalid", multilib_select); + } + + ++p; + } + + /* When --disable-multilib was used but target defines + MULTILIB_OSDIRNAMES, entries starting with .: (and not starting + with .:: for multiarch configurations) are there just to find + multilib_os_dir, so skip them from output. */ + if (this_path[0] == '.' && this_path[1] == ':' && this_path[2] != ':') + skip = 1; + + /* Check for matches with the multilib_exclusions. We don't bother + with the '!' in either list. If any of the exclusion rules match + all of its options with the select rule, we skip it. */ + { + const char *e = multilib_exclusions; + const char *this_arg; + + while (*e != '\0') + { + int m = 1; + /* Ignore newlines. */ + if (*e == '\n') + { + ++e; + continue; + } + + /* Check the arguments. */ + while (*e != ';') + { + const char *q; + int mp = 0; + + if (*e == '\0') + { + invalid_exclusion: + fatal_error (input_location, + "multilib exclusion %qs is invalid", + multilib_exclusions); + } + + if (! m) + { + ++e; + continue; + } + + this_arg = e; + + while (*e != ' ' && *e != ';') + { + if (*e == '\0') + goto invalid_exclusion; + ++e; + } + + q = p + 1; + while (*q != ';') + { + const char *arg; + int len = e - this_arg; + + if (*q == '\0') + goto invalid_select; + + arg = q; + + while (*q != ' ' && *q != ';') + { + if (*q == '\0') + goto invalid_select; + ++q; + } + + if (! strncmp (arg, this_arg, + (len < q - arg) ? q - arg : len) + || default_arg (this_arg, e - this_arg)) + { + mp = 1; + break; + } + + if (*q == ' ') + ++q; + } + + if (! mp) + m = 0; + + if (*e == ' ') + ++e; + } + + if (m) + { + skip = 1; + break; + } + + if (*e != '\0') + ++e; + } + } + + if (! skip) + { + /* If this is a duplicate, skip it. */ + skip = (last_path != 0 + && (unsigned int) (p - this_path) == last_path_len + && ! filename_ncmp (last_path, this_path, last_path_len)); + + last_path = this_path; + last_path_len = p - this_path; + } + + /* If all required arguments are default arguments, and no default + arguments appear in the ! argument list, then we can skip it. + We will already have printed a directory identical to this one + which does not require that default argument. */ + if (! skip) + { + const char *q; + bool default_arg_ok = false; + + q = p + 1; + while (*q != ';') + { + const char *arg; + + if (*q == '\0') + goto invalid_select; + + if (*q == '!') + { + not_arg = 1; + q++; + } + else + not_arg = 0; + arg = q; + + while (*q != ' ' && *q != ';') + { + if (*q == '\0') + goto invalid_select; + ++q; + } + + if (default_arg (arg, q - arg)) + { + /* Stop checking if any default arguments appeared in not + list. */ + if (not_arg) + { + default_arg_ok = false; + break; + } + + default_arg_ok = true; + } + else if (!not_arg) + { + /* Stop checking if any required argument is not provided by + default arguments. */ + default_arg_ok = false; + break; + } + + if (*q == ' ') + ++q; + } + + /* Make sure all default argument is OK for this multi-lib set. */ + if (default_arg_ok) + skip = 1; + else + skip = 0; + } + + if (! skip) + { + const char *p1; + + for (p1 = last_path; p1 < p && *p1 != ':'; p1++) + putchar (*p1); + putchar (';'); + } + + ++p; + while (*p != ';') + { + int use_arg; + + if (*p == '\0') + goto invalid_select; + + if (skip) + { + ++p; + continue; + } + + use_arg = *p != '!'; + + if (use_arg) + putchar ('@'); + + while (*p != ' ' && *p != ';') + { + if (*p == '\0') + goto invalid_select; + if (use_arg) + putchar (*p); + ++p; + } + + if (*p == ' ') + ++p; + } + + if (! skip) + { + /* If there are extra options, print them now. */ + if (multilib_extra && *multilib_extra) + { + int print_at = TRUE; + const char *q; + + for (q = multilib_extra; *q != '\0'; q++) + { + if (*q == ' ') + print_at = TRUE; + else + { + if (print_at) + putchar ('@'); + putchar (*q); + print_at = FALSE; + } + } + } + + putchar ('\n'); + } + + ++p; + } +} + +/* getenv built-in spec function. + + Returns the value of the environment variable given by its first argument, + concatenated with the second argument. If the variable is not defined, a + fatal error is issued unless such undefs are internally allowed, in which + case the variable name prefixed by a '/' is used as the variable value. + + The leading '/' allows using the result at a spot where a full path would + normally be expected and when the actual value doesn't really matter since + undef vars are allowed. */ + +static const char * +getenv_spec_function (int argc, const char **argv) +{ + const char *value; + const char *varname; + + char *result; + char *ptr; + size_t len; + + if (argc != 2) + return NULL; + + varname = argv[0]; + value = env.get (varname); + + /* If the variable isn't defined and this is allowed, craft our expected + return value. Assume variable names used in specs strings don't contain + any active spec character so don't need escaping. */ + if (!value && spec_undefvar_allowed) + { + result = XNEWVAR (char, strlen(varname) + 2); + sprintf (result, "/%s", varname); + return result; + } + + if (!value) + fatal_error (input_location, + "environment variable %qs not defined", varname); + + /* We have to escape every character of the environment variable so + they are not interpreted as active spec characters. A + particularly painful case is when we are reading a variable + holding a windows path complete with \ separators. */ + len = strlen (value) * 2 + strlen (argv[1]) + 1; + result = XNEWVAR (char, len); + for (ptr = result; *value; ptr += 2) + { + ptr[0] = '\\'; + ptr[1] = *value++; + } + + strcpy (ptr, argv[1]); + + return result; +} + +/* if-exists built-in spec function. + + Checks to see if the file specified by the absolute pathname in + ARGS exists. Returns that pathname if found. + + The usual use for this function is to check for a library file + (whose name has been expanded with %s). */ + +static const char * +if_exists_spec_function (int argc, const char **argv) +{ + /* Must have only one argument. */ + if (argc == 1 && IS_ABSOLUTE_PATH (argv[0]) && ! access (argv[0], R_OK)) + return argv[0]; + + return NULL; +} + +/* if-exists-else built-in spec function. + + This is like if-exists, but takes an additional argument which + is returned if the first argument does not exist. */ + +static const char * +if_exists_else_spec_function (int argc, const char **argv) +{ + /* Must have exactly two arguments. */ + if (argc != 2) + return NULL; + + if (IS_ABSOLUTE_PATH (argv[0]) && ! access (argv[0], R_OK)) + return argv[0]; + + return argv[1]; +} + +/* if-exists-then-else built-in spec function. + + Checks to see if the file specified by the absolute pathname in + the first arg exists. Returns the second arg if so, otherwise returns + the third arg if it is present. */ + +static const char * +if_exists_then_else_spec_function (int argc, const char **argv) +{ + + /* Must have two or three arguments. */ + if (argc != 2 && argc != 3) + return NULL; + + if (IS_ABSOLUTE_PATH (argv[0]) && ! access (argv[0], R_OK)) + return argv[1]; + + if (argc == 3) + return argv[2]; + + return NULL; +} + +/* sanitize built-in spec function. + + This returns non-NULL, if sanitizing address, thread or + any of the undefined behavior sanitizers. */ + +static const char * +sanitize_spec_function (int argc, const char **argv) +{ + if (argc != 1) + return NULL; + + if (strcmp (argv[0], "address") == 0) + return (flag_sanitize & SANITIZE_USER_ADDRESS) ? "" : NULL; + if (strcmp (argv[0], "hwaddress") == 0) + return (flag_sanitize & SANITIZE_USER_HWADDRESS) ? "" : NULL; + if (strcmp (argv[0], "kernel-address") == 0) + return (flag_sanitize & SANITIZE_KERNEL_ADDRESS) ? "" : NULL; + if (strcmp (argv[0], "kernel-hwaddress") == 0) + return (flag_sanitize & SANITIZE_KERNEL_HWADDRESS) ? "" : NULL; + if (strcmp (argv[0], "thread") == 0) + return (flag_sanitize & SANITIZE_THREAD) ? "" : NULL; + if (strcmp (argv[0], "undefined") == 0) + return ((flag_sanitize + & ~flag_sanitize_trap + & (SANITIZE_UNDEFINED | SANITIZE_UNDEFINED_NONDEFAULT))) + ? "" : NULL; + if (strcmp (argv[0], "leak") == 0) + return ((flag_sanitize + & (SANITIZE_ADDRESS | SANITIZE_LEAK | SANITIZE_THREAD)) + == SANITIZE_LEAK) ? "" : NULL; + return NULL; +} + +/* replace-outfile built-in spec function. + + This looks for the first argument in the outfiles array's name and + replaces it with the second argument. */ + +static const char * +replace_outfile_spec_function (int argc, const char **argv) +{ + int i; + /* Must have exactly two arguments. */ + if (argc != 2) + abort (); + + for (i = 0; i < n_infiles; i++) + { + if (outfiles[i] && !filename_cmp (outfiles[i], argv[0])) + outfiles[i] = xstrdup (argv[1]); + } + return NULL; +} + +/* remove-outfile built-in spec function. + * + * This looks for the first argument in the outfiles array's name and + * removes it. */ + +static const char * +remove_outfile_spec_function (int argc, const char **argv) +{ + int i; + /* Must have exactly one argument. */ + if (argc != 1) + abort (); + + for (i = 0; i < n_infiles; i++) + { + if (outfiles[i] && !filename_cmp (outfiles[i], argv[0])) + outfiles[i] = NULL; + } + return NULL; +} + +/* Given two version numbers, compares the two numbers. + A version number must match the regular expression + ([1-9][0-9]*|0)(\.([1-9][0-9]*|0))* +*/ +static int +compare_version_strings (const char *v1, const char *v2) +{ + int rresult; + regex_t r; + + if (regcomp (&r, "^([1-9][0-9]*|0)(\\.([1-9][0-9]*|0))*$", + REG_EXTENDED | REG_NOSUB) != 0) + abort (); + rresult = regexec (&r, v1, 0, NULL, 0); + if (rresult == REG_NOMATCH) + fatal_error (input_location, "invalid version number %qs", v1); + else if (rresult != 0) + abort (); + rresult = regexec (&r, v2, 0, NULL, 0); + if (rresult == REG_NOMATCH) + fatal_error (input_location, "invalid version number %qs", v2); + else if (rresult != 0) + abort (); + + return strverscmp (v1, v2); +} + + +/* version_compare built-in spec function. + + This takes an argument of the following form: + + [] + + and produces "result" if the comparison evaluates to true, + and nothing if it doesn't. + + The supported values are: + + >= true if switch is a later (or same) version than arg1 + !> opposite of >= + < true if switch is an earlier version than arg1 + !< opposite of < + >< true if switch is arg1 or later, and earlier than arg2 + <> true if switch is earlier than arg1 or is arg2 or later + + If the switch is not present, the condition is false unless + the first character of the is '!'. + + For example, + %:version-compare(>= 10.3 mmacosx-version-min= -lmx) + adds -lmx if -mmacosx-version-min=10.3.9 was passed. */ + +static const char * +version_compare_spec_function (int argc, const char **argv) +{ + int comp1, comp2; + size_t switch_len; + const char *switch_value = NULL; + int nargs = 1, i; + bool result; + + if (argc < 3) + fatal_error (input_location, "too few arguments to %%:version-compare"); + if (argv[0][0] == '\0') + abort (); + if ((argv[0][1] == '<' || argv[0][1] == '>') && argv[0][0] != '!') + nargs = 2; + if (argc != nargs + 3) + fatal_error (input_location, "too many arguments to %%:version-compare"); + + switch_len = strlen (argv[nargs + 1]); + for (i = 0; i < n_switches; i++) + if (!strncmp (switches[i].part1, argv[nargs + 1], switch_len) + && check_live_switch (i, switch_len)) + switch_value = switches[i].part1 + switch_len; + + if (switch_value == NULL) + comp1 = comp2 = -1; + else + { + comp1 = compare_version_strings (switch_value, argv[1]); + if (nargs == 2) + comp2 = compare_version_strings (switch_value, argv[2]); + else + comp2 = -1; /* This value unused. */ + } + + switch (argv[0][0] << 8 | argv[0][1]) + { + case '>' << 8 | '=': + result = comp1 >= 0; + break; + case '!' << 8 | '<': + result = comp1 >= 0 || switch_value == NULL; + break; + case '<' << 8: + result = comp1 < 0; + break; + case '!' << 8 | '>': + result = comp1 < 0 || switch_value == NULL; + break; + case '>' << 8 | '<': + result = comp1 >= 0 && comp2 < 0; + break; + case '<' << 8 | '>': + result = comp1 < 0 || comp2 >= 0; + break; + + default: + fatal_error (input_location, + "unknown operator %qs in %%:version-compare", argv[0]); + } + if (! result) + return NULL; + + return argv[nargs + 2]; +} + +/* %:include builtin spec function. This differs from %include in that it + can be nested inside a spec, and thus be conditionalized. It takes + one argument, the filename, and looks for it in the startfile path. + The result is always NULL, i.e. an empty expansion. */ + +static const char * +include_spec_function (int argc, const char **argv) +{ + char *file; + + if (argc != 1) + abort (); + + file = find_a_file (&startfile_prefixes, argv[0], R_OK, true); + read_specs (file ? file : argv[0], false, false); + + return NULL; +} + +/* %:find-file spec function. This function replaces its argument by + the file found through find_file, that is the -print-file-name gcc + program option. */ +static const char * +find_file_spec_function (int argc, const char **argv) +{ + const char *file; + + if (argc != 1) + abort (); + + file = find_file (argv[0]); + return file; +} + + +/* %:find-plugindir spec function. This function replaces its argument + by the -iplugindir= option. `dir' is found through find_file, that + is the -print-file-name gcc program option. */ +static const char * +find_plugindir_spec_function (int argc, const char **argv ATTRIBUTE_UNUSED) +{ + const char *option; + + if (argc != 0) + abort (); + + option = concat ("-iplugindir=", find_file ("plugin"), NULL); + return option; +} + + +/* %:print-asm-header spec function. Print a banner to say that the + following output is from the assembler. */ + +static const char * +print_asm_header_spec_function (int arg ATTRIBUTE_UNUSED, + const char **argv ATTRIBUTE_UNUSED) +{ + printf (_("Assembler options\n=================\n\n")); + printf (_("Use \"-Wa,OPTION\" to pass \"OPTION\" to the assembler.\n\n")); + fflush (stdout); + return NULL; +} + +/* Get a random number for -frandom-seed */ + +static unsigned HOST_WIDE_INT +get_random_number (void) +{ + unsigned HOST_WIDE_INT ret = 0; + int fd; + + fd = open ("/dev/urandom", O_RDONLY); + if (fd >= 0) + { + read (fd, &ret, sizeof (HOST_WIDE_INT)); + close (fd); + if (ret) + return ret; + } + + /* Get some more or less random data. */ +#ifdef HAVE_GETTIMEOFDAY + { + struct timeval tv; + + gettimeofday (&tv, NULL); + ret = tv.tv_sec * 1000 + tv.tv_usec / 1000; + } +#else + { + time_t now = time (NULL); + + if (now != (time_t)-1) + ret = (unsigned) now; + } +#endif + + return ret ^ getpid (); +} + +/* %:compare-debug-dump-opt spec function. Save the last argument, + expected to be the last -fdump-final-insns option, or generate a + temporary. */ + +static const char * +compare_debug_dump_opt_spec_function (int arg, + const char **argv ATTRIBUTE_UNUSED) +{ + char *ret; + char *name; + int which; + static char random_seed[HOST_BITS_PER_WIDE_INT / 4 + 3]; + + if (arg != 0) + fatal_error (input_location, + "too many arguments to %%:compare-debug-dump-opt"); + + do_spec_2 ("%{fdump-final-insns=*:%*}", NULL); + do_spec_1 (" ", 0, NULL); + + if (argbuf.length () > 0 + && strcmp (argv[argbuf.length () - 1], ".") != 0) + { + if (!compare_debug) + return NULL; + + name = xstrdup (argv[argbuf.length () - 1]); + ret = NULL; + } + else + { + if (argbuf.length () > 0) + do_spec_2 ("%B.gkd", NULL); + else if (!compare_debug) + return NULL; + else + do_spec_2 ("%{!save-temps*:%g.gkd}%{save-temps*:%B.gkd}", NULL); + + do_spec_1 (" ", 0, NULL); + + gcc_assert (argbuf.length () > 0); + + name = xstrdup (argbuf.last ()); + + char *arg = quote_spec (xstrdup (name)); + ret = concat ("-fdump-final-insns=", arg, NULL); + free (arg); + } + + which = compare_debug < 0; + debug_check_temp_file[which] = name; + + if (!which) + { + unsigned HOST_WIDE_INT value = get_random_number (); + + sprintf (random_seed, HOST_WIDE_INT_PRINT_HEX, value); + } + + if (*random_seed) + { + char *tmp = ret; + ret = concat ("%{!frandom-seed=*:-frandom-seed=", random_seed, "} ", + ret, NULL); + free (tmp); + } + + if (which) + *random_seed = 0; + + return ret; +} + +/* %:compare-debug-self-opt spec function. Expands to the options + that are to be passed in the second compilation of + compare-debug. */ + +static const char * +compare_debug_self_opt_spec_function (int arg, + const char **argv ATTRIBUTE_UNUSED) +{ + if (arg != 0) + fatal_error (input_location, + "too many arguments to %%:compare-debug-self-opt"); + + if (compare_debug >= 0) + return NULL; + + return concat ("\ +%= argc) + break; + else if (!*lopt) + lopt = argv[n]; + prepended = concat (prepended, "-plugin-opt=-pass-through=-l", + lopt, " ", NULL); + } + else if (!strcmp (".a", argv[n] + strlen (argv[n]) - 2)) + { + prepended = concat (prepended, "-plugin-opt=-pass-through=", + argv[n], " ", NULL); + } + if (prepended != old) + free (old); + } + return prepended; +} + +static bool +not_actual_file_p (const char *name) +{ + return (strcmp (name, "-") == 0 + || strcmp (name, HOST_BIT_BUCKET) == 0); +} + +/* %:dumps spec function. Take an optional argument that overrides + the default extension for -dumpbase and -dumpbase-ext. + Return -dumpdir, -dumpbase and -dumpbase-ext, if needed. */ +const char * +dumps_spec_func (int argc, const char **argv ATTRIBUTE_UNUSED) +{ + const char *ext = dumpbase_ext; + char *p; + + char *args[3] = { NULL, NULL, NULL }; + int nargs = 0; + + /* Do not compute a default for -dumpbase-ext when -dumpbase was + given explicitly. */ + if (dumpbase && *dumpbase && !ext) + ext = ""; + + if (argc == 1) + { + /* Do not override the explicitly-specified -dumpbase-ext with + the specs-provided overrider. */ + if (!ext) + ext = argv[0]; + } + else if (argc != 0) + fatal_error (input_location, "too many arguments for %%:dumps"); + + if (dumpdir) + { + p = quote_spec_arg (xstrdup (dumpdir)); + args[nargs++] = concat (" -dumpdir ", p, NULL); + free (p); + } + + if (!ext) + ext = input_basename + basename_length; + + /* Use the precomputed outbase, or compute dumpbase from + input_basename, just like %b would. */ + char *base; + + if (dumpbase && *dumpbase) + { + base = xstrdup (dumpbase); + p = base + outbase_length; + gcc_checking_assert (strncmp (base, outbase, outbase_length) == 0); + gcc_checking_assert (strcmp (p, ext) == 0); + } + else if (outbase_length) + { + base = xstrndup (outbase, outbase_length); + p = NULL; + } + else + { + base = xstrndup (input_basename, suffixed_basename_length); + p = base + basename_length; + } + + if (compare_debug < 0 || !p || strcmp (p, ext) != 0) + { + if (p) + *p = '\0'; + + const char *gk; + if (compare_debug < 0) + gk = ".gk"; + else + gk = ""; + + p = concat (base, gk, ext, NULL); + + free (base); + base = p; + } + + base = quote_spec_arg (base); + args[nargs++] = concat (" -dumpbase ", base, NULL); + free (base); + + if (*ext) + { + p = quote_spec_arg (xstrdup (ext)); + args[nargs++] = concat (" -dumpbase-ext ", p, NULL); + free (p); + } + + const char *ret = concat (args[0], args[1], args[2], NULL); + while (nargs > 0) + free (args[--nargs]); + + return ret; +} + +/* Returns "" if ARGV[ARGC - 2] is greater than ARGV[ARGC-1]. + Otherwise, return NULL. */ + +static const char * +greater_than_spec_func (int argc, const char **argv) +{ + char *converted; + + if (argc == 1) + return NULL; + + gcc_assert (argc >= 2); + + long arg = strtol (argv[argc - 2], &converted, 10); + gcc_assert (converted != argv[argc - 2]); + + long lim = strtol (argv[argc - 1], &converted, 10); + gcc_assert (converted != argv[argc - 1]); + + if (arg > lim) + return ""; + + return NULL; +} + +/* Returns "" if debug_info_level is greater than ARGV[ARGC-1]. + Otherwise, return NULL. */ + +static const char * +debug_level_greater_than_spec_func (int argc, const char **argv) +{ + char *converted; + + if (argc != 1) + fatal_error (input_location, + "wrong number of arguments to %%:debug-level-gt"); + + long arg = strtol (argv[0], &converted, 10); + gcc_assert (converted != argv[0]); + + if (debug_info_level > arg) + return ""; + + return NULL; +} + +/* Returns "" if dwarf_version is greater than ARGV[ARGC-1]. + Otherwise, return NULL. */ + +static const char * +dwarf_version_greater_than_spec_func (int argc, const char **argv) +{ + char *converted; + + if (argc != 1) + fatal_error (input_location, + "wrong number of arguments to %%:dwarf-version-gt"); + + long arg = strtol (argv[0], &converted, 10); + gcc_assert (converted != argv[0]); + + if (dwarf_version > arg) + return ""; + + return NULL; +} + +static void +path_prefix_reset (path_prefix *prefix) +{ + struct prefix_list *iter, *next; + iter = prefix->plist; + while (iter) + { + next = iter->next; + free (const_cast (iter->prefix)); + XDELETE (iter); + iter = next; + } + prefix->plist = 0; + prefix->max_len = 0; +} + +/* The function takes 3 arguments: OPTION name, file name and location + where we search for Fortran modules. + When the FILE is found by find_file, return OPTION=path_to_file. */ + +static const char * +find_fortran_preinclude_file (int argc, const char **argv) +{ + char *result = NULL; + if (argc != 3) + return NULL; + + struct path_prefix prefixes = { 0, 0, "preinclude" }; + + /* Search first for 'finclude' folder location for a header file + installed by the compiler (similar to omp_lib.h). */ + add_prefix (&prefixes, argv[2], NULL, 0, 0, 0); +#ifdef TOOL_INCLUDE_DIR + /* Then search: ///finclude */ + add_prefix (&prefixes, TOOL_INCLUDE_DIR "/finclude/", + NULL, 0, 0, 0); +#endif +#ifdef NATIVE_SYSTEM_HEADER_DIR + /* Then search: /usr/include/finclude/ */ + add_sysrooted_hdrs_prefix (&prefixes, NATIVE_SYSTEM_HEADER_DIR "/finclude/", + NULL, 0, 0, 0); +#endif + + const char *path = find_a_file (&include_prefixes, argv[1], R_OK, false); + if (path != NULL) + result = concat (argv[0], path, NULL); + else + { + path = find_a_file (&prefixes, argv[1], R_OK, false); + if (path != NULL) + result = concat (argv[0], path, NULL); + } + + path_prefix_reset (&prefixes); + return result; +} + +/* If any character in ORIG fits QUOTE_P (_, P), reallocate the string + so as to precede every one of them with a backslash. Return the + original string or the reallocated one. */ + +static inline char * +quote_string (char *orig, bool (*quote_p)(char, void *), void *p) +{ + int len, number_of_space = 0; + + for (len = 0; orig[len]; len++) + if (quote_p (orig[len], p)) + number_of_space++; + + if (number_of_space) + { + char *new_spec = (char *) xmalloc (len + number_of_space + 1); + int j, k; + for (j = 0, k = 0; j <= len; j++, k++) + { + if (quote_p (orig[j], p)) + new_spec[k++] = '\\'; + new_spec[k] = orig[j]; + } + free (orig); + return new_spec; + } + else + return orig; +} + +/* Return true iff C is any of the characters convert_white_space + should quote. */ + +static inline bool +whitespace_to_convert_p (char c, void *) +{ + return (c == ' ' || c == '\t'); +} + +/* Insert backslash before spaces in ORIG (usually a file path), to + avoid being broken by spec parser. + + This function is needed as do_spec_1 treats white space (' ' and '\t') + as the end of an argument. But in case of -plugin /usr/gcc install/xxx.so, + the file name should be treated as a single argument rather than being + broken into multiple. Solution is to insert '\\' before the space in a + file name. + + This function converts and only converts all occurrence of ' ' + to '\\' + ' ' and '\t' to '\\' + '\t'. For example: + "a b" -> "a\\ b" + "a b" -> "a\\ \\ b" + "a\tb" -> "a\\\tb" + "a\\ b" -> "a\\\\ b" + + orig: input null-terminating string that was allocated by xalloc. The + memory it points to might be freed in this function. Behavior undefined + if ORIG wasn't xalloced or was freed already at entry. + + Return: ORIG if no conversion needed. Otherwise a newly allocated string + that was converted from ORIG. */ + +static char * +convert_white_space (char *orig) +{ + return quote_string (orig, whitespace_to_convert_p, NULL); +} + +/* Return true iff C matches any of the spec active characters. */ +static inline bool +quote_spec_char_p (char c, void *) +{ + switch (c) + { + case ' ': + case '\t': + case '\n': + case '|': + case '%': + case '\\': + return true; + + default: + return false; + } +} + +/* Like convert_white_space, but deactivate all active spec chars by + quoting them. */ + +static inline char * +quote_spec (char *orig) +{ + return quote_string (orig, quote_spec_char_p, NULL); +} + +/* Like quote_spec, but also turn an empty string into the spec for an + empty argument. */ + +static inline char * +quote_spec_arg (char *orig) +{ + if (!*orig) + { + free (orig); + return xstrdup ("%\""); + } + + return quote_spec (orig); +} + +/* Restore all state within gcc.cc to the initial state, so that the driver + code can be safely re-run in-process. + + Many const char * variables are referenced by static specs (see + INIT_STATIC_SPEC above). These variables are restored to their default + values by a simple loop over the static specs. + + For other variables, we directly restore them all to their initial + values (often implicitly 0). + + Free the various obstacks in this file, along with "opts_obstack" + from opts.cc. + + This function also restores any environment variables that were changed. */ + +void +driver::finalize () +{ + env.restore (); + diagnostic_finish (global_dc); + + is_cpp_driver = 0; + at_file_supplied = 0; + print_help_list = 0; + print_version = 0; + verbose_only_flag = 0; + print_subprocess_help = 0; + use_ld = NULL; + report_times_to_file = NULL; + target_system_root = DEFAULT_TARGET_SYSTEM_ROOT; + target_system_root_changed = 0; + target_sysroot_suffix = 0; + target_sysroot_hdrs_suffix = 0; + save_temps_flag = SAVE_TEMPS_NONE; + save_temps_overrides_dumpdir = false; + dumpdir_trailing_dash_added = false; + free (dumpdir); + free (dumpbase); + free (dumpbase_ext); + free (outbase); + dumpdir = dumpbase = dumpbase_ext = outbase = NULL; + dumpdir_length = outbase_length = 0; + spec_machine = DEFAULT_TARGET_MACHINE; + greatest_status = 1; + + obstack_free (&obstack, NULL); + obstack_free (&opts_obstack, NULL); /* in opts.cc */ + obstack_free (&collect_obstack, NULL); + + link_command_spec = LINK_COMMAND_SPEC; + + obstack_free (&multilib_obstack, NULL); + + user_specs_head = NULL; + user_specs_tail = NULL; + + /* Within the "compilers" vec, the fields "suffix" and "spec" were + statically allocated for the default compilers, but dynamically + allocated for additional compilers. Delete them for the latter. */ + for (int i = n_default_compilers; i < n_compilers; i++) + { + free (const_cast (compilers[i].suffix)); + free (const_cast (compilers[i].spec)); + } + XDELETEVEC (compilers); + compilers = NULL; + n_compilers = 0; + + linker_options.truncate (0); + assembler_options.truncate (0); + preprocessor_options.truncate (0); + + path_prefix_reset (&exec_prefixes); + path_prefix_reset (&startfile_prefixes); + path_prefix_reset (&include_prefixes); + + machine_suffix = 0; + just_machine_suffix = 0; + gcc_exec_prefix = 0; + gcc_libexec_prefix = 0; + set_static_spec_shared (&md_exec_prefix, MD_EXEC_PREFIX); + set_static_spec_shared (&md_startfile_prefix, MD_STARTFILE_PREFIX); + set_static_spec_shared (&md_startfile_prefix_1, MD_STARTFILE_PREFIX_1); + multilib_dir = 0; + multilib_os_dir = 0; + multiarch_dir = 0; + + /* Free any specs dynamically-allocated by set_spec. + These will be at the head of the list, before the + statically-allocated ones. */ + if (specs) + { + while (specs != static_specs) + { + spec_list *next = specs->next; + free (const_cast (specs->name)); + XDELETE (specs); + specs = next; + } + specs = 0; + } + for (unsigned i = 0; i < ARRAY_SIZE (static_specs); i++) + { + spec_list *sl = &static_specs[i]; + if (sl->alloc_p) + { + free (const_cast (*(sl->ptr_spec))); + sl->alloc_p = false; + } + *(sl->ptr_spec) = sl->default_ptr; + } +#ifdef EXTRA_SPECS + extra_specs = NULL; +#endif + + processing_spec_function = 0; + + clear_args (); + + have_c = 0; + have_o = 0; + + temp_names = NULL; + execution_count = 0; + signal_count = 0; + + temp_filename = NULL; + temp_filename_length = 0; + always_delete_queue = NULL; + failure_delete_queue = NULL; + + XDELETEVEC (switches); + switches = NULL; + n_switches = 0; + n_switches_alloc = 0; + + compare_debug = 0; + compare_debug_second = 0; + compare_debug_opt = NULL; + for (int i = 0; i < 2; i++) + { + switches_debug_check[i] = NULL; + n_switches_debug_check[i] = 0; + n_switches_alloc_debug_check[i] = 0; + debug_check_temp_file[i] = NULL; + } + + XDELETEVEC (infiles); + infiles = NULL; + n_infiles = 0; + n_infiles_alloc = 0; + + combine_inputs = false; + added_libraries = 0; + XDELETEVEC (outfiles); + outfiles = NULL; + spec_lang = 0; + last_language_n_infiles = 0; + gcc_input_filename = NULL; + input_file_number = 0; + input_filename_length = 0; + basename_length = 0; + suffixed_basename_length = 0; + input_basename = NULL; + input_suffix = NULL; + /* We don't need to purge "input_stat", just to unset "input_stat_set". */ + input_stat_set = 0; + input_file_compiler = NULL; + arg_going = 0; + delete_this_arg = 0; + this_is_output_file = 0; + this_is_library_file = 0; + this_is_linker_script = 0; + input_from_pipe = 0; + suffix_subst = NULL; + + mdswitches = NULL; + n_mdswitches = 0; + + used_arg.finalize (); +} + +/* PR jit/64810. + Targets can provide configure-time default options in + OPTION_DEFAULT_SPECS. The jit needs to access these, but + they are expressed in the spec language. + + Run just enough of the driver to be able to expand these + specs, and then call the callback CB on each + such option. The options strings are *without* a leading + '-' character e.g. ("march=x86-64"). Finally, clean up. */ + +void +driver_get_configure_time_options (void (*cb) (const char *option, + void *user_data), + void *user_data) +{ + size_t i; + + obstack_init (&obstack); + init_opts_obstack (); + n_switches = 0; + + for (i = 0; i < ARRAY_SIZE (option_default_specs); i++) + do_option_spec (option_default_specs[i].name, + option_default_specs[i].spec); + + for (i = 0; (int) i < n_switches; i++) + { + gcc_assert (switches[i].part1); + (*cb) (switches[i].part1, user_data); + } + + obstack_free (&opts_obstack, NULL); + obstack_free (&obstack, NULL); + n_switches = 0; +} diff --git a/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-debian-patch-inputs/debian/patches/cross-install-location.diff.txt b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-debian-patch-inputs/debian/patches/cross-install-location.diff.txt new file mode 100644 index 0000000000..ef5f64b661 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-debian-patch-inputs/debian/patches/cross-install-location.diff.txt @@ -0,0 +1,497 @@ +--- a/src/fixincludes/Makefile.in ++++ b/src/fixincludes/Makefile.in +@@ -52,9 +52,9 @@ target_noncanonical:=@target_noncanonica + gcc_version := $(shell @get_gcc_base_ver@ $(srcdir)/../gcc/BASE-VER) + + # Directory in which the compiler finds libraries etc. +-libsubdir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version) ++libsubdir = $(libdir)/gcc-cross/$(target_noncanonical)/$(gcc_version) + # Directory in which the compiler finds executables +-libexecsubdir = $(libexecdir)/gcc/$(target_noncanonical)/$(gcc_version) ++libexecsubdir = $(libexecdir)/gcc-cross/$(target_noncanonical)/$(gcc_version) + # Where our executable files go + itoolsdir = $(libexecsubdir)/install-tools + # Where our data files go +--- a/src/libgfortran/Makefile.in ++++ b/src/libgfortran/Makefile.in +@@ -750,7 +750,7 @@ gcc_version := $(shell @get_gcc_base_ver + @LIBGFOR_USE_SYMVER_GNU_TRUE@@LIBGFOR_USE_SYMVER_TRUE@version_dep = gfortran.ver + @LIBGFOR_USE_SYMVER_SUN_TRUE@@LIBGFOR_USE_SYMVER_TRUE@version_dep = gfortran.ver-sun gfortran.ver + gfor_c_HEADERS = ISO_Fortran_binding.h +-gfor_cdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include ++gfor_cdir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include + LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) \ + $(lt_host_flags) + +@@ -765,12 +765,12 @@ libgfortran_la_LDFLAGS = -version-info ` + + libgfortran_la_DEPENDENCIES = $(version_dep) libgfortran.spec $(LIBQUADLIB_DEP) + cafexeclib_LTLIBRARIES = libcaf_single.la +-cafexeclibdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR) ++cafexeclibdir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)$(MULTISUBDIR) + libcaf_single_la_SOURCES = caf/single.c + libcaf_single_la_LDFLAGS = -static + libcaf_single_la_DEPENDENCIES = caf/libcaf.h + libcaf_single_la_LINK = $(LINK) $(libcaf_single_la_LDFLAGS) +-@IEEE_SUPPORT_TRUE@fincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR)/finclude ++@IEEE_SUPPORT_TRUE@fincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)$(MULTISUBDIR)/finclude + @IEEE_SUPPORT_TRUE@nodist_finclude_HEADERS = ieee_arithmetic.mod ieee_exceptions.mod ieee_features.mod + AM_CPPFLAGS = -iquote$(srcdir)/io -I$(srcdir)/$(MULTISRCTOP)../gcc \ + -I$(srcdir)/$(MULTISRCTOP)../gcc/config $(LIBQUADINCLUDE) \ +--- a/src/libgfortran/Makefile.am ++++ b/src/libgfortran/Makefile.am +@@ -39,7 +39,7 @@ version_dep = + endif + + gfor_c_HEADERS = ISO_Fortran_binding.h +-gfor_cdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include ++gfor_cdir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include + + LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) \ + $(lt_host_flags) +@@ -55,14 +55,14 @@ libgfortran_la_LDFLAGS = -version-info ` + libgfortran_la_DEPENDENCIES = $(version_dep) libgfortran.spec $(LIBQUADLIB_DEP) + + cafexeclib_LTLIBRARIES = libcaf_single.la +-cafexeclibdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR) ++cafexeclibdir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)$(MULTISUBDIR) + libcaf_single_la_SOURCES = caf/single.c + libcaf_single_la_LDFLAGS = -static + libcaf_single_la_DEPENDENCIES = caf/libcaf.h + libcaf_single_la_LINK = $(LINK) $(libcaf_single_la_LDFLAGS) + + if IEEE_SUPPORT +-fincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR)/finclude ++fincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)$(MULTISUBDIR)/finclude + nodist_finclude_HEADERS = ieee_arithmetic.mod ieee_exceptions.mod ieee_features.mod + endif + +--- a/src/lto-plugin/Makefile.in ++++ b/src/lto-plugin/Makefile.in +@@ -342,7 +342,7 @@ with_libiberty = @with_libiberty@ + ACLOCAL_AMFLAGS = -I .. -I ../config + AUTOMAKE_OPTIONS = no-dependencies + gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) +-libexecsubdir := $(libexecdir)/gcc/$(real_target_noncanonical)/$(gcc_version)$(accel_dir_suffix) ++libexecsubdir := $(libexecdir)/gcc-cross/$(real_target_noncanonical)/$(gcc_version)$(accel_dir_suffix) + AM_CPPFLAGS = -I$(top_srcdir)/../include $(DEFS) + AM_CFLAGS = @ac_lto_plugin_warn_cflags@ $(CET_HOST_FLAGS) -DBASE_VERSION='"$(gcc_version)"' + AM_LDFLAGS = @ac_lto_plugin_ldflags@ @ac_lto_plugin_extra_ldflags@ +--- a/src/lto-plugin/Makefile.am ++++ b/src/lto-plugin/Makefile.am +@@ -5,7 +5,7 @@ AUTOMAKE_OPTIONS = no-dependencies + + gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) + target_noncanonical := @target_noncanonical@ +-libexecsubdir := $(libexecdir)/gcc/$(real_target_noncanonical)/$(gcc_version)$(accel_dir_suffix) ++libexecsubdir := $(libexecdir)/gcc-cross/$(real_target_noncanonical)/$(gcc_version)$(accel_dir_suffix) + + AM_CPPFLAGS = -I$(top_srcdir)/../include $(DEFS) + AM_CFLAGS = @ac_lto_plugin_warn_cflags@ $(CET_HOST_FLAGS) -DBASE_VERSION='"$(gcc_version)"' +--- a/src/libitm/Makefile.in ++++ b/src/libitm/Makefile.in +@@ -459,7 +459,7 @@ SUBDIRS = testsuite + gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) + abi_version = -fabi-version=4 + search_path = $(addprefix $(top_srcdir)/config/, $(config_path)) $(top_srcdir) +-libsubincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include ++libsubincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include + AM_CPPFLAGS = $(addprefix -I, $(search_path)) + AM_CFLAGS = $(XCFLAGS) + AM_CXXFLAGS = $(XCFLAGS) -std=gnu++0x -funwind-tables -fno-exceptions \ +--- a/src/libitm/Makefile.am ++++ b/src/libitm/Makefile.am +@@ -12,7 +12,7 @@ abi_version = -fabi-version=4 + config_path = @config_path@ + search_path = $(addprefix $(top_srcdir)/config/, $(config_path)) $(top_srcdir) + +-libsubincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include ++libsubincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include + + vpath % $(strip $(search_path)) + +--- a/src/gcc/gcc.cc ++++ b/src/gcc/gcc.cc +@@ -4828,7 +4828,7 @@ process_command (unsigned int decoded_op + GCC_EXEC_PREFIX is typically a directory name with a trailing + / (which is ignored by make_relative_prefix), so append a + program name. */ +- char *tmp_prefix = concat (gcc_exec_prefix, "gcc", NULL); ++ char *tmp_prefix = concat (gcc_exec_prefix, "gcc-cross", NULL); + gcc_libexec_prefix = get_relative_prefix (tmp_prefix, + standard_exec_prefix, + standard_libexec_prefix); +@@ -4854,15 +4854,15 @@ process_command (unsigned int decoded_op + { + int len = strlen (gcc_exec_prefix); + +- if (len > (int) sizeof ("/lib/gcc/") - 1 ++ if (len > (int) sizeof ("/lib/gcc-cross/") - 1 + && (IS_DIR_SEPARATOR (gcc_exec_prefix[len-1]))) + { +- temp = gcc_exec_prefix + len - sizeof ("/lib/gcc/") + 1; ++ temp = gcc_exec_prefix + len - sizeof ("/lib/gcc-cross/") + 1; + if (IS_DIR_SEPARATOR (*temp) + && filename_ncmp (temp + 1, "lib", 3) == 0 + && IS_DIR_SEPARATOR (temp[4]) +- && filename_ncmp (temp + 5, "gcc", 3) == 0) +- len -= sizeof ("/lib/gcc/") - 1; ++ && filename_ncmp (temp + 5, "gcc-cross", 3) == 0) ++ len -= sizeof ("/lib/gcc-cross/") - 1; + } + + set_std_prefix (gcc_exec_prefix, len); +--- a/src/gcc/Makefile.in ++++ b/src/gcc/Makefile.in +@@ -635,9 +635,9 @@ libexecdir = @libexecdir@ + # -------- + + # Directory in which the compiler finds libraries etc. +-libsubdir = $(libdir)/gcc/$(real_target_noncanonical)/$(version)$(accel_dir_suffix) ++libsubdir = $(libdir)/gcc-cross/$(real_target_noncanonical)/$(version)$(accel_dir_suffix) + # Directory in which the compiler finds executables +-libexecsubdir = $(libexecdir)/gcc/$(real_target_noncanonical)/$(version)$(accel_dir_suffix) ++libexecsubdir = $(libexecdir)/gcc-cross/$(real_target_noncanonical)/$(version)$(accel_dir_suffix) + # Directory in which all plugin resources are installed + plugin_resourcesdir = $(libsubdir)/plugin + # Directory in which plugin headers are installed +@@ -2318,8 +2318,8 @@ default-d.o: config/default-d.cc + + DRIVER_DEFINES = \ + -DSTANDARD_STARTFILE_PREFIX=\"$(unlibsubdir)/\" \ +- -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc/\" \ +- -DSTANDARD_LIBEXEC_PREFIX=\"$(libexecdir)/gcc/\" \ ++ -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc-cross/\" \ ++ -DSTANDARD_LIBEXEC_PREFIX=\"$(libexecdir)/gcc-cross/\" \ + -DDEFAULT_TARGET_VERSION=\"$(version)\" \ + -DDEFAULT_REAL_TARGET_MACHINE=\"$(real_target_noncanonical)\" \ + -DDEFAULT_TARGET_MACHINE=\"$(target_noncanonical)\" \ +@@ -3039,7 +3039,7 @@ PREPROCESSOR_DEFINES = \ + -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \ + -DNATIVE_SYSTEM_HEADER_DIR=\"$(NATIVE_SYSTEM_HEADER_DIR)\" \ + -DPREFIX=\"$(prefix)/\" \ +- -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc/\" \ ++ -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc-cross/\" \ + @TARGET_SYSTEM_ROOT_DEFINE@ + + CFLAGS-cppbuiltin.o += $(PREPROCESSOR_DEFINES) -DBASEVER=$(BASEVER_s) +--- a/src/libssp/Makefile.in ++++ b/src/libssp/Makefile.in +@@ -366,7 +366,7 @@ gcc_version := $(shell @get_gcc_base_ver + @LIBSSP_USE_SYMVER_SUN_TRUE@@LIBSSP_USE_SYMVER_TRUE@version_dep = ssp.map-sun + AM_CFLAGS = -Wall $(XCFLAGS) + toolexeclib_LTLIBRARIES = libssp.la libssp_nonshared.la +-libsubincludedir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/include ++libsubincludedir = $(libdir)/gcc-cross/$(target_noncanonical)/$(gcc_version)/include + nobase_libsubinclude_HEADERS = ssp/ssp.h ssp/string.h ssp/stdio.h ssp/unistd.h + libssp_la_SOURCES = \ + ssp.c gets-chk.c memcpy-chk.c memmove-chk.c mempcpy-chk.c \ +--- a/src/libssp/Makefile.am ++++ b/src/libssp/Makefile.am +@@ -39,7 +39,7 @@ AM_CFLAGS += $(XCFLAGS) + toolexeclib_LTLIBRARIES = libssp.la libssp_nonshared.la + + target_noncanonical = @target_noncanonical@ +-libsubincludedir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/include ++libsubincludedir = $(libdir)/gcc-cross/$(target_noncanonical)/$(gcc_version)/include + nobase_libsubinclude_HEADERS = ssp/ssp.h ssp/string.h ssp/stdio.h ssp/unistd.h + + libssp_la_SOURCES = \ +--- a/src/libquadmath/Makefile.in ++++ b/src/libquadmath/Makefile.in +@@ -468,7 +468,7 @@ AUTOMAKE_OPTIONS = foreign info-in-build + + @BUILD_LIBQUADMATH_TRUE@libquadmath_la_DEPENDENCIES = $(version_dep) $(libquadmath_la_LIBADD) + @BUILD_LIBQUADMATH_TRUE@nodist_libsubinclude_HEADERS = quadmath.h quadmath_weak.h +-@BUILD_LIBQUADMATH_TRUE@libsubincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include ++@BUILD_LIBQUADMATH_TRUE@libsubincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include + @BUILD_LIBQUADMATH_TRUE@libquadmath_la_SOURCES = \ + @BUILD_LIBQUADMATH_TRUE@ math/x2y2m1q.c math/acoshq.c math/fmodq.c \ + @BUILD_LIBQUADMATH_TRUE@ math/acosq.c math/frexpq.c \ +--- a/src/libquadmath/Makefile.am ++++ b/src/libquadmath/Makefile.am +@@ -41,7 +41,7 @@ libquadmath_la_LDFLAGS = -version-info ` + libquadmath_la_DEPENDENCIES = $(version_dep) $(libquadmath_la_LIBADD) + + nodist_libsubinclude_HEADERS = quadmath.h quadmath_weak.h +-libsubincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include ++libsubincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include + + libquadmath_la_SOURCES = \ + math/x2y2m1q.c math/acoshq.c math/fmodq.c \ +--- a/src/libobjc/Makefile.in ++++ b/src/libobjc/Makefile.in +@@ -48,7 +48,7 @@ extra_ldflags_libobjc = @extra_ldflags_l + top_builddir = . + + libdir = $(exec_prefix)/lib +-libsubdir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version) ++libsubdir = $(libdir)/gcc-cross/$(target_noncanonical)/$(gcc_version) + + # Multilib support variables. + MULTISRCTOP = +--- a/src/libada/Makefile.in ++++ b/src/libada/Makefile.in +@@ -70,7 +70,7 @@ GCC_DIR=$(MULTIBUILDTOP)../../$(host_sub + + target_noncanonical:=@target_noncanonical@ + version := $(shell @get_gcc_base_ver@ $(srcdir)/../gcc/BASE-VER) +-libsubdir := $(libdir)/gcc/$(target_noncanonical)/$(version)$(MULTISUBDIR) ++libsubdir := $(libdir)/gcc-cross/$(target_noncanonical)/$(version)$(MULTISUBDIR) + ADA_RTS_DIR=$(GCC_DIR)/ada/rts$(subst /,_,$(MULTISUBDIR)) + + # exeext should not be used because it's the *host* exeext. We're building +--- a/src/libgomp/Makefile.in ++++ b/src/libgomp/Makefile.in +@@ -516,8 +516,8 @@ gcc_version := $(shell @get_gcc_base_ver + search_path = $(addprefix $(top_srcdir)/config/, $(config_path)) $(top_srcdir) \ + $(top_srcdir)/../include + +-fincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR)/finclude +-libsubincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include ++fincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)$(MULTISUBDIR)/finclude ++libsubincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include + AM_CPPFLAGS = $(addprefix -I, $(search_path)) + AM_CFLAGS = $(XCFLAGS) + AM_LDFLAGS = $(XLDFLAGS) $(SECTION_LDFLAGS) $(OPT_LDFLAGS) +--- a/src/libgomp/Makefile.am ++++ b/src/libgomp/Makefile.am +@@ -11,8 +11,8 @@ config_path = @config_path@ + search_path = $(addprefix $(top_srcdir)/config/, $(config_path)) $(top_srcdir) \ + $(top_srcdir)/../include + +-fincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR)/finclude +-libsubincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include ++fincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)$(MULTISUBDIR)/finclude ++libsubincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include + + vpath % $(strip $(search_path)) + +--- a/src/libgcc/Makefile.in ++++ b/src/libgcc/Makefile.in +@@ -200,7 +200,7 @@ STRIP = @STRIP@ + STRIP_FOR_TARGET = $(STRIP) + + # Directory in which the compiler finds libraries etc. +-libsubdir = $(libdir)/gcc/$(real_host_noncanonical)/$(version)@accel_dir_suffix@ ++libsubdir = $(libdir)/gcc-cross/$(real_host_noncanonical)/$(version)@accel_dir_suffix@ + # Used to install the shared libgcc. + slibdir = @slibdir@ + # Maybe used for DLLs on Windows targets. +--- a/src/libffi/include/Makefile.am ++++ b/src/libffi/include/Makefile.am +@@ -8,6 +8,6 @@ EXTRA_DIST=ffi.h.in + + # Where generated headers like ffitarget.h get installed. + gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) +-toollibffidir := $(libdir)/gcc/$(target_alias)/$(gcc_version)/include ++toollibffidir := $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include + + toollibffi_HEADERS = ffi.h ffitarget.h +--- a/src/libffi/include/Makefile.in ++++ b/src/libffi/include/Makefile.in +@@ -326,7 +326,7 @@ EXTRA_DIST = ffi.h.in + + # Where generated headers like ffitarget.h get installed. + gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) +-toollibffidir := $(libdir)/gcc/$(target_alias)/$(gcc_version)/include ++toollibffidir := $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include + toollibffi_HEADERS = ffi.h ffitarget.h + all: all-am + +--- a/src/libcc1/Makefile.am ++++ b/src/libcc1/Makefile.am +@@ -40,7 +40,7 @@ libiberty = $(if $(wildcard $(libiberty_ + $(Wc)$(libiberty_normal))) + libiberty_dep = $(patsubst $(Wc)%,%,$(libiberty)) + +-plugindir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/plugin ++plugindir = $(libdir)/gcc-cross/$(target_noncanonical)/$(gcc_version)/plugin + cc1libdir = $(libdir)/$(libsuffix) + + if ENABLE_PLUGIN +--- a/src/libcc1/Makefile.in ++++ b/src/libcc1/Makefile.in +@@ -396,7 +396,7 @@ libiberty = $(if $(wildcard $(libiberty_ + $(Wc)$(libiberty_normal))) + + libiberty_dep = $(patsubst $(Wc)%,%,$(libiberty)) +-plugindir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/plugin ++plugindir = $(libdir)/gcc-cross/$(target_noncanonical)/$(gcc_version)/plugin + cc1libdir = $(libdir)/$(libsuffix) + @ENABLE_PLUGIN_TRUE@plugin_LTLIBRARIES = libcc1plugin.la libcp1plugin.la + @ENABLE_PLUGIN_TRUE@cc1lib_LTLIBRARIES = libcc1.la +--- a/src/libsanitizer/Makefile.am ++++ b/src/libsanitizer/Makefile.am +@@ -1,6 +1,6 @@ + ACLOCAL_AMFLAGS = -I .. -I ../config + +-sanincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include/sanitizer ++sanincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include/sanitizer + + nodist_saninclude_HEADERS = + +--- a/src/libsanitizer/Makefile.in ++++ b/src/libsanitizer/Makefile.in +@@ -361,7 +361,7 @@ top_build_prefix = @top_build_prefix@ + top_builddir = @top_builddir@ + top_srcdir = @top_srcdir@ + ACLOCAL_AMFLAGS = -I .. -I ../config +-sanincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include/sanitizer ++sanincludedir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version)/include/sanitizer + nodist_saninclude_HEADERS = $(am__append_1) + @SANITIZER_SUPPORTED_TRUE@SUBDIRS = sanitizer_common $(am__append_2) \ + @SANITIZER_SUPPORTED_TRUE@ $(am__append_3) lsan asan ubsan \ +--- a/src/libphobos/configure.ac ++++ b/src/libphobos/configure.ac +@@ -256,6 +256,8 @@ AC_SUBST(SPEC_PHOBOS_DEPS) + libtool_VERSION=4:0:0 + AC_SUBST(libtool_VERSION) + ++# trigger rebuild of the configure file ++ + # Set default flags (after DRUNTIME_WERROR!) + if test -z "$GDCFLAGS"; then + GDCFLAGS="-g -O2" +--- a/src/libphobos/m4/druntime.m4 ++++ b/src/libphobos/m4/druntime.m4 +@@ -114,6 +114,7 @@ AC_DEFUN([DRUNTIME_INSTALL_DIRECTORIES], + + # Default case for install directory for D sources files. + gdc_include_dir='$(libdir)/gcc/${target_alias}/${gcc_version}/include/d' ++ gdc_include_dir='${libdir}/gcc-cross/${target_alias}'/${gcc_version}/include/d + AC_SUBST(gdc_include_dir) + ]) + +--- a/src/gcc/ada/gcc-interface/Makefile.in ++++ b/src/gcc/ada/gcc-interface/Makefile.in +@@ -921,7 +921,7 @@ toolexeclibdir = $(ADA_RTL_OBJ_DIR) + + ADA_INCLUDE_DIR = $(libsubdir)/adainclude + ADA_RTL_OBJ_DIR = $(libsubdir)/adalib +-ADA_RTL_DSO_DIR = $(toolexeclibdir) ++ADA_RTL_DSO_DIR = $(subst /gcc/,/gcc-cross/,$(toolexeclibdir)) + + # Special flags + +--- a/src/c++tools/Makefile.in ++++ b/src/c++tools/Makefile.in +@@ -21,7 +21,7 @@ bindir := @bindir@ + libexecdir := @libexecdir@ + target_noncanonical := @target_noncanonical@ + gcc_version := $(shell @get_gcc_base_ver@ $(srcdir)/../gcc/BASE-VER) +-libexecsubdir := $(libexecdir)/gcc/$(target_noncanonical)/$(gcc_version) ++libexecsubdir := $(libexecdir)/gcc-cross/$(target_noncanonical)/$(gcc_version) + INSTALL := @INSTALL@ + INSTALL_PROGRAM := @INSTALL_PROGRAM@ + INSTALL_STRIP_PROGRAM := $(srcdir)/../install-sh -c -s +--- a/src/libgm2/libm2cor/Makefile.am ++++ b/src/libgm2/libm2cor/Makefile.am +@@ -27,7 +27,7 @@ MAKEOVERRIDES= + gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) + + # Directory in which the compiler finds libraries etc. +-libsubdir = $(libdir)/gcc/$(target_alias)/$(gcc_version) ++libsubdir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version) + # Used to install the shared libgcc. + slibdir = @slibdir@ + +--- a/src/libgm2/libm2cor/Makefile.in ++++ b/src/libgm2/libm2cor/Makefile.in +@@ -391,7 +391,7 @@ MAKEOVERRIDES = + gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) + + # Directory in which the compiler finds libraries etc. +-libsubdir = $(libdir)/gcc/$(target_alias)/$(gcc_version) ++libsubdir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version) + MULTIDIR := $(shell $(CC) $(CFLAGS) -print-multi-directory) + MULTIOSDIR := $(shell $(CC) $(CFLAGS) -print-multi-os-directory) + MULTIOSSUBDIR := $(shell if test x$(MULTIOSDIR) != x.; then echo /$(MULTIOSDIR); fi) +--- a/src/libgm2/libm2iso/Makefile.am ++++ b/src/libgm2/libm2iso/Makefile.am +@@ -27,7 +27,7 @@ MAKEOVERRIDES= + gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) + + # Directory in which the compiler finds libraries etc. +-libsubdir = $(libdir)/gcc/$(target_alias)/$(gcc_version) ++libsubdir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version) + # Used to install the shared libgcc. + # was slibdir = @slibdir@ + slibdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR) +--- a/src/libgm2/libm2iso/Makefile.in ++++ b/src/libgm2/libm2iso/Makefile.in +@@ -416,7 +416,7 @@ MAKEOVERRIDES = + gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) + + # Directory in which the compiler finds libraries etc. +-libsubdir = $(libdir)/gcc/$(target_alias)/$(gcc_version) ++libsubdir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version) + MULTIDIR := $(shell $(CC) $(CFLAGS) -print-multi-directory) + MULTIOSDIR := $(shell $(CC) $(CFLAGS) -print-multi-os-directory) + MULTIOSSUBDIR := $(shell if test x$(MULTIOSDIR) != x.; then echo /$(MULTIOSDIR); fi) +--- a/src/libgm2/libm2log/Makefile.am ++++ b/src/libgm2/libm2log/Makefile.am +@@ -27,7 +27,7 @@ MAKEOVERRIDES= + gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) + + # Directory in which the compiler finds libraries etc. +-libsubdir = $(libdir)/gcc/$(target_alias)/$(gcc_version) ++libsubdir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version) + # Used to install the shared libgcc. + slibdir = @slibdir@ + +--- a/src/libgm2/libm2log/Makefile.in ++++ b/src/libgm2/libm2log/Makefile.in +@@ -380,7 +380,7 @@ MAKEOVERRIDES = + gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) + + # Directory in which the compiler finds libraries etc. +-libsubdir = $(libdir)/gcc/$(target_alias)/$(gcc_version) ++libsubdir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version) + MULTIDIR := $(shell $(CC) $(CFLAGS) -print-multi-directory) + MULTIOSDIR := $(shell $(CC) $(CFLAGS) -print-multi-os-directory) + MULTIOSSUBDIR := $(shell if test x$(MULTIOSDIR) != x.; then echo /$(MULTIOSDIR); fi) +--- a/src/libgm2/libm2min/Makefile.am ++++ b/src/libgm2/libm2min/Makefile.am +@@ -27,7 +27,7 @@ MAKEOVERRIDES= + gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) + + # Directory in which the compiler finds libraries etc. +-libsubdir = $(libdir)/gcc/$(target_alias)/$(gcc_version) ++libsubdir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version) + # Used to install the shared libgcc. + slibdir = @slibdir@ + +--- a/src/libgm2/libm2min/Makefile.in ++++ b/src/libgm2/libm2min/Makefile.in +@@ -370,7 +370,7 @@ MAKEOVERRIDES = + gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) + + # Directory in which the compiler finds libraries etc. +-libsubdir = $(libdir)/gcc/$(target_alias)/$(gcc_version) ++libsubdir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version) + MULTIDIR := $(shell $(CC) $(CFLAGS) -print-multi-directory) + MULTIOSDIR := $(shell $(CC) $(CFLAGS) -print-multi-os-directory) + MULTIOSSUBDIR := $(shell if test x$(MULTIOSDIR) != x.; then echo /$(MULTIOSDIR); fi) +--- a/src/libgm2/libm2pim/Makefile.am ++++ b/src/libgm2/libm2pim/Makefile.am +@@ -27,7 +27,7 @@ MAKEOVERRIDES= + gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) + + # Directory in which the compiler finds libraries etc. +-libsubdir = $(libdir)/gcc/$(target_alias)/$(gcc_version) ++libsubdir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version) + # Used to install the shared libgcc. + slibdir = @slibdir@ + +--- a/src/libgm2/libm2pim/Makefile.in ++++ b/src/libgm2/libm2pim/Makefile.in +@@ -405,7 +405,7 @@ MAKEOVERRIDES = + gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) + + # Directory in which the compiler finds libraries etc. +-libsubdir = $(libdir)/gcc/$(target_alias)/$(gcc_version) ++libsubdir = $(libdir)/gcc-cross/$(target_alias)/$(gcc_version) + MULTIDIR := $(shell $(CC) $(CFLAGS) -print-multi-directory) + MULTIOSDIR := $(shell $(CC) $(CFLAGS) -print-multi-os-directory) + MULTIOSSUBDIR := $(shell if test x$(MULTIOSDIR) != x.; then echo /$(MULTIOSDIR); fi) diff --git a/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-debian-patch-inputs/debian/rules.patch.txt b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-debian-patch-inputs/debian/rules.patch.txt new file mode 100644 index 0000000000..4e64d8cca9 --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/source-artifacts/gcc-debian-patch-inputs/debian/rules.patch.txt @@ -0,0 +1,425 @@ +# -*- makefile -*- +# rules to patch the unpacked files in the source directory +# --------------------------------------------------------------------------- +# various rules to unpack addons and (un)apply patches. +# - patch / apply-patches +# - unpatch / reverse-patches + +.NOTPARALLEL: + +patchdir ?= debian/patches +series_file ?= $(patchdir)/series + +# which patches should be applied? + +debian_patches = \ + git-updates \ + +# git-updates \ + +ifneq ($(GFDL_INVARIANT_FREE),yes) + debian_patches += \ + rename-info-files \ + +# git-doc-updates \ + +else +endif +debian_patches += \ + gcc-gfdl-build + +# libstdc++-pic \ + +debian_patches += \ + gcc-textdomain \ + gcc-distro-specs \ + gcc-driver-extra-langs \ + gcc-hash-style-gnu \ + libstdc++-doclink \ + libstdc++-man-3cxx \ + libstdc++-test-installed \ + libstdc++-doxygen-SOURCE_DATE_EPOCH \ + alpha-no-ev4-directive \ + note-gnu-stack \ + libgomp-omp_h-multilib \ + libgo-testsuite \ + libgo-cleanfiles \ + gcc-target-include-asm \ + libgo-revert-timeout-exp \ + libgo-setcontext-config \ + gcc-auto-build \ + libitm-no-fortify-source \ + sparc64-biarch-long-double-128 \ + pr66368 \ + pr67590 \ + libffi-race-condition \ + cuda-float128 \ + t-libunwind-elf-Wl-z-defs \ + gcc-force-cross-layout \ + gcc-search-prefixed-as-ld \ + kfreebsd-decimal-float \ + pr87808 \ + pr94253 \ + gcc-arm-disable-guality-tests \ + musl-ssp \ + pr79724-revert \ + pr104290-followup \ + arc-stddef \ + pr107475 \ + gccrs-bootstrap-mipsel \ + pr88552 \ + hppa64-libgcov-fallback \ + toplevel-add-gprofng \ + toplevel-add-libsframe \ + libiberty-sha1-1 \ + libiberty-sha1-2 \ + pr113030 \ + libsanitizer-timebits \ + asan-allocator-base \ + gcc-vhdl \ + pr110934 \ + 0001-Ada-remove-conversions-with-C-struct-timeval-from-GN \ + 0002-Ada-remove-C-conversions-with-C-struct-timespec-from \ + 0003-Ada-remove-conversions-with-C-time_t-from-System.OS_ \ + 0003-Ada-define-time_t-timeval-timespec-C-types-in-a-sing \ + 0005-Ada-import-nanosleep-from-System.OS_Primitives.Timed_ \ + 0006-Ada-select-64-bits-time-functions-from-GNU-libc-when- \ + pr11897 \ + +ifneq (,$(newlib_tarball)) + debian_patches += newlib-amdgcn-locks +endif + +# with glibc (>= 2.31) +ifeq (,$(filter $(distrelease),wheezy jessie stretch buster precise xenial bionic)) + debian_patches += libsanitizer-no-crypt +endif + +ifneq (,$(filter $(distrelease),lunar)) + debian_patches += rust-enabled +endif + +ifneq (,$(filter $(distrelease),precise xenial bionic focal groovy hirsute)) + debian_patches += pr100067-revert +endif + +ifneq (,$(filter $(distrelease), jessie stretch buster bullseye precise trusty xenial bionic focal groovy hirsute)) + debian_patches += dwarf5-revert-default + ifneq ($(GFDL_INVARIANT_FREE),yes) + debian_patches += dwarf5-revert-default-doc + endif +endif + +ifeq (,$(filter $(distrelease),$(no_timet64_distreleases))) + debian_patches += pr99832-distro +endif + +# TODO: +# pr81829 \ + +# $(if $(filter yes, $(DEB_CROSS)),,gcc-print-file-name) \ +# libstdc++-nothumb-check \ + +hardening_patches = +ifneq (,$(filter $(derivative),Ubuntu)) + ifneq (,$(findstring gcc-13, $(PKGSOURCE))) + hardening_patches += \ + gcc-distro-specs-ubuntu-doc \ + testsuite-hardening-format \ + testsuite-hardening-printf-types \ + testsuite-hardening-updates \ + testsuite-glibc-warnings + endif +else ifneq (,$(filter $(derivative),Debian)) + ifneq (,$(findstring gcc-13, $(PKGSOURCE))) +# ifneq ($(with_pie),yes) +# hardening_patches += \ +# ignore-pie-specs-when-not-enabled +# endif + endif +endif + +# FIXME 4.5: Drop and adjust symbols files +ifneq (,$(findstring 4.4, $(PKGSOURCE))) + debian_patches += pr39491 +endif + +# Patches for non-core languages. + +ifeq ($(GFDL_INVARIANT_FREE),yes) + debian_patches += gm2-texinfo +endif + +# Most of the time, it would be safe to apply them whether the +# language is selected or not. But when working on a new GCC version, +# it is convenient to concentrate on core languages, and refresh them +# later when working on the specific language. +ifeq ($(with_ada),yes) + debian_patches += ada-gcc-name + debian_patches += ada-verbose + ifeq ($(biarch64),yes) + debian_patches += ada-nobiarch-check + endif + debian_patches += ada-link-lib + debian_patches += ada-gnattools-cross + ifeq ($(with_gnatsjlj),yes) + debian_patches += ada-sjlj + endif + debian_patches += ada-lib-info-source-date-epoch + # FIXME: debian_patches += ada-749574 + debian_patches += ada-perl-shebang +endif + +# FIXME: still relevant? +# gdc-multiarch + +ifeq ($(GFDL_INVARIANT_FREE),yes) + debian_patches += gdc-texinfo +endif +ifeq (,$(filter $(DEB_TARGET_ARCH),amd64 i386 armhf)) + debian_patches += disable-gdc-tests +endif + +debian_patches += alpha-ieee +ifneq ($(GFDL_INVARIANT_FREE),yes) + debian_patches += alpha-ieee-doc +endif + +# all patches below this line are applied for gcc-snapshot builds as well + +ifneq (,$(findstring gcc-snapshot, $(PKGSOURCE))) + debian_patches = +endif + +debian_patches += \ + sys-auxv-header \ + gdc-dynamic-link-phobos \ + ia64-disable-selective-scheduling \ + libstdc++-pythondir \ + gcc-verbose-lto-link \ + +ifeq ($(with_ada),yes) + ifeq ($(DEB_TARGET_ARCH),armel) + debian_patches += ada-armel-libatomic + endif + debian_patches += \ + ada-kfreebsd +endif + +ifeq ($(with_ibm_branch),yes) + debian_patches += ibm-branch +endif + +ifeq ($(with_softfloat),yes) + debian_patches += arm-multilib-soft-float +else ifeq ($(multilib),yes) + ifneq (,$(biarchhfarchs)$(biarchsfarchs)) + ifneq (,$(filter $(distrelease), precise)) + debian_patches += arm-multilib-softfp$(if $(filter yes,$(DEB_CROSS)),-cross) + else + debian_patches += arm-multilib-soft$(if $(filter yes,$(DEB_CROSS)),-cross) + endif + endif +endif +ifneq (,$(filter $(distrelease), precise trusty xenial bionic focal groovy hirsute)) + debian_patches += arm-multilib-defaults +endif + +ifeq ($(DEB_CROSS),yes) + debian_patches += cross-fixes + debian_patches += cross-install-location +endif + +debian_patches += hurd-amd64 +debian_patches += hurd-multiarch +debian_patches += hurd-multilib-multiarch +ifeq ($(DEB_TARGET_ARCH_OS),hurd) + debian_patches += hurd-changes + # FIXME: #1005297, PR 104660 + debian_patches += libgo-hurd-hack +endif + +debian_patches += gcc-ice-dump +debian_patches += gcc-ice-apport +debian_patches += skip-bootstrap-multilib +debian_patches += libffi-ro-eh_frame_sect + +# sigaction on sparc changed between glibc 2.19 and 2.21 +ifeq (,$(filter 2.1%, $(shell dpkg-query -l libc-bin | awk '/^.i/ {print $$3}'))) + # keep it, gets remove in GCC from time to time + #debian_patches += pr67899 +endif + +debian_patches += gcc-multiarch +debian_patches += config-ml +ifneq ($(single_package),yes) + ifeq ($(with_multiarch_cxxheaders),yes) + debian_patches += g++-multiarch-incdir + debian_patches += canonical-cpppath + endif +endif +ifneq (,$(filter $(build_type), build-cross cross-build-cross)) + debian_patches += cross-no-locale-include + debian_patches += cross-biarch +endif +debian_patches += gcc-multilib-multiarch + +ifneq ($(trunk_build),yes) +ifneq (,$(filter $(derivative),Ubuntu)) + debian_patches += gcc-as-needed + ifeq (,$(filter $(distrelease), precise trusty xenial)) + debian_patches += gcc-as-needed-gold + endif +else # Debian + ifeq (,$(filter $(distrelease), jessie stretch)) + debian_patches += gcc-as-needed gcc-as-needed-gold + endif +endif +endif + +debian_patches += libgomp-kfreebsd-testsuite +debian_patches += go-testsuite + +# don't remove, this is regularly overwritten, see PR sanitizer/63958. +#debian_patches += libasan-sparc + +series_stamp = $(stampdir)/02-series-stamp +series: $(series_stamp) +$(series_stamp): + echo $(strip $(addsuffix .diff,$(debian_patches))) \ + | sed -r 's/ +/ /g' | tr " " "\n" > $(series_file) +ifneq (,$(strip $(hardening_patches))) + ifneq ($(trunk_build),yes) + echo $(strip $(addsuffix .diff,$(hardening_patches))) \ + | sed -r 's/ +/ /g' | tr " " "\n" >> $(series_file) + endif +endif + sed -r 's/(.)$$/\1 -p1/' -i $(series_file) + touch $@ + +autoconf_files = $(shell lsdiff --no-filename $(foreach patch,$(debian_patches),$(patchdir)/$(patch).diff) \ + | sed -rn '/(configure\.ac|acinclude.m4)$$/s:[^/]+/src/:src/:p' | sort -u) +autoconf_dirs = $(sort $(dir $(autoconf_files))) + +automake_files = $(addprefix ./, $(filter-out none, \ + $(shell lsdiff --no-filename $(foreach patch,$(debian_patches),$(patchdir)/$(patch).diff) \ + | sed -rn '/Makefile\.(am|in)$$/s:[^/]+/src/:src/:p' | sort -u))) + +autoconf_version = 2.69 +ifneq (,$(filter $(distrelease),stretch buster trusty xenial bionic focal groovy)) + autoconf_version = +endif +ifeq ($(trunk_build),yes) + # The actual version depends on the build-dependencies set by + # variable AUTO_BUILD_DEP in rules.conf. Here, we assume the + # correct version is installed. + #autoconf_version = +endif + +# FIXME: the auto* stuff is done every time for every subdir, which +# leads to build errors. Idea: record the auto* calls in the patch +# files (AUTO ) and run them separately, +# maybe only once per directory). +$(patch_stamp): $(unpack_stamp) $(series_stamp) + sync + QUILT_PATCHES=$(patchdir) QUILT_PATCH_OPTS='-E' \ + quilt --quiltrc /dev/null push -a || test $$? = 2 + + : # only needed when we have changes, and currently fails with autogen 5.18 + : #cd $(srcdir)/fixincludes && ./genfixes + + sync + echo -n $(autoconf_dirs) | xargs -d ' ' -L 1 -P $(USE_CPUS) -I{} \ + sh -c 'echo "Running autoconf$(autoconf_version) in {}..." ; \ + cd $(CURDIR)/{} && rm -f configure && \ + AUTOM4TE=/usr/bin/autom4te$(autoconf_version) autoconf$(autoconf_version)' + + for i in $(debian_patches) $(hardening_patches); do \ + echo -e "\n$$i:" >> pxxx; \ + sed -n 's/^# *DP: */ /p' $(patchdir)/$$i.diff >> pxxx; \ + done +# -$(srcdir)/move-if-change pxxx $@ + + : # generate the distro-defaults.h header + rm -f $(srcdir)/gcc/distro-defaults.h + ( \ + echo '/* distro specific configuration injected by the distro build. */'; \ + echo ''; \ + echo '#ifndef ACCEL_COMPILER' \ + ) >> $(srcdir)/gcc/distro-defaults.h +ifeq ($(with_async_unwind),yes) + echo '#define DIST_DEFAULT_ASYNC_UNWIND 1' \ + >> $(srcdir)/gcc/distro-defaults.h +endif +ifeq ($(with_ssp)-$(with_ssp_default),yes-yes) + echo '#define DIST_DEFAULT_SSP 1' \ + >> $(srcdir)/gcc/distro-defaults.h + ifeq (,$(filter $(distrelease), precise trusty)) + echo '#define DIST_DEFAULT_SSP_STRONG 1' \ + >> $(srcdir)/gcc/distro-defaults.h + endif + echo '#define DIST_DEFAULT_FORMAT_SECURITY 1' \ + >> $(srcdir)/gcc/distro-defaults.h +endif +ifneq (,$(filter $(derivative),Ubuntu)) + ifneq (,$(filter $(distrelease),lucid precise trusty xenial bionic focal jammy kinetic lunar mantic)) + ( \ + echo '#define DIST_DEFAULT_FORTIFY_SOURCE 2'; \ + echo '#define DIST_DEFAULT_FORTIFY_SOURCE_S "2"' \ + ) >> $(srcdir)/gcc/distro-defaults.h + else + ( \ + echo '#define DIST_DEFAULT_FORTIFY_SOURCE 3'; \ + echo '#define DIST_DEFAULT_FORTIFY_SOURCE_S "3"' \ + ) >> $(srcdir)/gcc/distro-defaults.h + endif + echo '#define DIST_DEFAULT_RELRO 1' \ + >> $(srcdir)/gcc/distro-defaults.h + echo '#define DIST_DEFAULT_BIND_NOW 1' \ + >> $(srcdir)/gcc/distro-defaults.h + ifeq ($(with_stack_clash),yes) + echo '#define DIST_DEFAULT_STACK_CLASH 1' \ + >> $(srcdir)/gcc/distro-defaults.h + endif + ifeq ($(with_cf_protection),yes) + echo '#define DIST_DEFAULT_CF_PROTECTION 1' \ + >> $(srcdir)/gcc/distro-defaults.h + endif +else ifneq (,$(filter $(derivative),Debian)) + ifneq (,$(findstring gcc-13, $(PKGSOURCE))) + endif +endif +ifeq ($(with_timet64),yes) + echo '#define DIST_DEFAULT_TIMET64 1' \ + >> $(srcdir)/gcc/distro-defaults.h +endif +ifneq (,$(filter $(derivative),Ubuntu)) + ifeq (,$(filter $(distrelease),lucid precise trusty xenial bionic focal jammy kinetic lunar mantic)) + echo '#define DIST_DEFAULT_PKG_METADATA_SPEC 1' \ + >> $(srcdir)/gcc/distro-defaults.h + endif +else ifneq (,$(filter $(derivative),Debian)) + ifeq (,$(filter $(distrelease),lenny squeeze wheezy jessie stretch buster bookworm)) + echo '#define DIST_DEFAULT_PKG_METADATA_SPEC 1' \ + >> $(srcdir)/gcc/distro-defaults.h + endif +endif + echo '#endif' \ + >> $(srcdir)/gcc/distro-defaults.h + + mv pxxx $@ + +unpatch: + QUILT_PATCHES=$(patchdir) \ + quilt --quiltrc /dev/null pop -a -R || test $$? = 2 + rm -rf .pc + +update-patches: $(series_stamp) + export QUILT_PATCHES=$(patchdir); \ + quilt pop -a; \ + export QUILT_REFRESH_ARGS="--no-timestamps --no-index -pab"; \ + export QUILT_DIFF_ARGS="--no-timestamps --no-index -pab"; \ + while quilt push; do quilt refresh --no-timestamps --no-index -pab; done + +patch: $(patch_stamp) +.PHONY: patch series quilt autotools diff --git a/research/h25-gcc-libexec-phase-frame/snapshots/pinned/unit03/source-artifacts/plugin-members/usr/lib/gcc/x86_64-linux-gnu/13/plugin/include/configargs.h.txt b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/unit03/source-artifacts/plugin-members/usr/lib/gcc/x86_64-linux-gnu/13/plugin/include/configargs.h.txt new file mode 100644 index 0000000000..68e4b7f3cf --- /dev/null +++ b/research/h25-gcc-libexec-phase-frame/snapshots/pinned/unit03/source-artifacts/plugin-members/usr/lib/gcc/x86_64-linux-gnu/13/plugin/include/configargs.h.txt @@ -0,0 +1,7 @@ +/* Generated automatically. */ +static const char configuration_arguments[] = "../src/configure -v --with-pkgversion='Ubuntu 13.3.0-6ubuntu2~24.04.1' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-EldibY/gcc-13-13.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-13-EldibY/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2"; +static const char thread_model[] = "posix"; + +static const struct { + const char *name, *value; +} configure_default_options[] = { { "abi", "m64" }, { "cpu", "generic" }, { "arch_32", "i686" }, { "arch_64", "x86-64" }, { "tune", "generic" } };