aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2014-07-29 17:14:04 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2014-07-29 17:14:04 +0200
commitb8e6830b3446b34cb3aee27d94bca490546c7d07 (patch)
treef5fcc246ae710bb3b2516c5782c97cf5eece13b3
parent094cf3330c711e995e3cd1e2cf6b81fd88b6b7b1 (diff)
downloadgcc-b8e6830b3446b34cb3aee27d94bca490546c7d07.zip
gcc-b8e6830b3446b34cb3aee27d94bca490546c7d07.tar.gz
gcc-b8e6830b3446b34cb3aee27d94bca490546c7d07.tar.bz2
[multiple changes]
2014-07-29 Robert Dewar <dewar@adacore.com> * sem_util.adb, sem_util.ads, sem_res.adb, exp_ch6.adb: Invert predicate No_Predicate_Test_On_Arguments, new name is Predicate_Tests_On_Arguments (with the opposite sense). 2014-07-29 Hristian Kirtchev <kirtchev@adacore.com> * sem_attr.adb (Resolve_Attribute): Clean up the code for attribute 'Access. Do not generate an elaboration flag for a stand alone expression function. The expression of an expression function is now frozen when the expression function appears as the prefix of attribute 'Access. * sem_ch6.adb (Analyze_Expression_Function): Remove local variable New_Decl and update all references to it after the rewriting has taken place. Establish the linkages between the generated spec and body. From-SVN: r213212
-rw-r--r--gcc/ada/ChangeLog18
-rw-r--r--gcc/ada/exp_ch6.adb2
-rw-r--r--gcc/ada/sem_attr.adb90
-rw-r--r--gcc/ada/sem_ch6.adb18
-rw-r--r--gcc/ada/sem_res.adb6
-rw-r--r--gcc/ada/sem_util.adb76
-rw-r--r--gcc/ada/sem_util.ads11
7 files changed, 140 insertions, 81 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 6a55099..ed9c608 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,5 +1,23 @@
2014-07-29 Robert Dewar <dewar@adacore.com>
+ * sem_util.adb, sem_util.ads, sem_res.adb, exp_ch6.adb: Invert
+ predicate No_Predicate_Test_On_Arguments, new name is
+ Predicate_Tests_On_Arguments (with the opposite sense).
+
+2014-07-29 Hristian Kirtchev <kirtchev@adacore.com>
+
+ * sem_attr.adb (Resolve_Attribute): Clean up the code for
+ attribute 'Access. Do not generate an elaboration flag for a
+ stand alone expression function. The expression of an expression
+ function is now frozen when the expression function appears as
+ the prefix of attribute 'Access.
+ * sem_ch6.adb (Analyze_Expression_Function): Remove local
+ variable New_Decl and update all references to it after the
+ rewriting has taken place. Establish the linkages between the
+ generated spec and body.
+
+2014-07-29 Robert Dewar <dewar@adacore.com>
+
* sem_prag.adb (ip, rv): Prevent from being optimized away.
* gnatls.adb (gnatls): Set E_Fatal exit status if ali file not found.
* s-imgllb.adb, s-imgllw.adb, s-imgwiu.adb, s-imgbiu.adb: Minor
diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb
index 610aa17..0688a3c 100644
--- a/gcc/ada/exp_ch6.adb
+++ b/gcc/ada/exp_ch6.adb
@@ -1754,7 +1754,7 @@ package body Exp_Ch6 is
-- Skip predicate checks for special cases
- and then not No_Predicate_Test_On_Arguments (Subp)
+ and then Predicate_Tests_On_Arguments (Subp)
then
Append_To (Post_Call,
Make_Predicate_Check (Atyp, Actual));
diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb
index bc75fed..20395b4 100644
--- a/gcc/ada/sem_attr.adb
+++ b/gcc/ada/sem_attr.adb
@@ -86,7 +86,9 @@ package body Sem_Attr is
-- used so that we can abandon the processing so we don't run into
-- trouble with cascaded errors.
- -- The following array is the list of attributes defined in the Ada 83 RM:
+ -- The following array is the list of attributes defined in the Ada 83 RM.
+ -- In Ada 83 mode, these are the only recognized attributes. In other Ada
+ -- modes all these attributes are recognized, even if removed in Ada 95.
Attribute_83 : constant Attribute_Class_Array := Attribute_Class_Array'(
Attribute_Address |
@@ -10565,11 +10567,18 @@ package body Sem_Attr is
Set_Address_Taken (Entity (P));
end if;
- if Is_Entity_Name (P) then
+ -- Deal with possible elaboration check
+
+ if Is_Entity_Name (P) and then Is_Subprogram (Entity (P)) then
declare
- E : constant Entity_Id := Entity (P);
- Decl : Node_Id;
- Flag : Entity_Id;
+ Subp_Id : constant Entity_Id := Entity (P);
+ Scop : constant Entity_Id := Scope (Subp_Id);
+ Subp_Decl : constant Node_Id :=
+ Unit_Declaration_Node (Subp_Id);
+
+ Flag_Id : Entity_Id;
+ HSS : Node_Id;
+ Stmt : Node_Id;
-- If the access has been taken and the body of the subprogram
-- has not been see yet, indirect calls must be protected with
@@ -10578,40 +10587,67 @@ package body Sem_Attr is
-- a subprogram the body will appear in the same declarative
-- part, and we must insert a check in the eventual body itself
-- using the elaboration flag that we generate now. The check
- -- is then inserted when the body is expanded.
+ -- is then inserted when the body is expanded. This processing
+ -- is not needed for a stand alone expression function because
+ -- the internally generated spec and body are always inserted
+ -- as a pair in the same declarative list.
begin
- if Is_Subprogram (E)
- and then Expander_Active
- and then Comes_From_Source (E)
+ if Expander_Active
+ and then Comes_From_Source (Subp_Id)
and then Comes_From_Source (N)
- and then In_Open_Scopes (Scope (E))
- and then
- Ekind_In (Scope (E), E_Block, E_Procedure, E_Function)
- and then not Has_Completion (E)
- and then No (Elaboration_Entity (E))
- and then Nkind (Unit_Declaration_Node (E)) =
- N_Subprogram_Declaration
+ and then In_Open_Scopes (Scop)
+ and then Ekind_In (Scop, E_Block, E_Procedure, E_Function)
+ and then not Has_Completion (Subp_Id)
+ and then No (Elaboration_Entity (Subp_Id))
+ and then Nkind (Subp_Decl) = N_Subprogram_Declaration
+ and then Nkind (Original_Node (Subp_Decl)) /=
+ N_Expression_Function
then
-- Create elaboration variable for it
- Flag := Make_Temporary (Loc, 'E');
- Decl :=
+ Flag_Id := Make_Temporary (Loc, 'E');
+ Set_Elaboration_Entity (Subp_Id, Flag_Id);
+ Set_Is_Frozen (Flag_Id);
+
+ -- Insert declaration for flag after subprogram
+ -- declaration. Note that attribute reference may
+ -- appear within a nested scope.
+
+ Insert_After_And_Analyze (Subp_Decl,
Make_Object_Declaration (Loc,
- Defining_Identifier => Flag,
+ Defining_Identifier => Flag_Id,
Object_Definition =>
New_Occurrence_Of (Standard_Short_Integer, Loc),
Expression =>
- Make_Integer_Literal (Loc, Uint_0));
- Set_Elaboration_Entity (E, Flag);
- Set_Is_Frozen (Flag);
+ Make_Integer_Literal (Loc, Uint_0)));
+ end if;
- -- Insert declaration for flag after subprogram
- -- declaration. Note that attribute reference may
- -- appear within a nested scope.
+ -- Taking the 'Access of an expression function freezes its
+ -- expression (RM 13.14 10.3/3). This does not apply to an
+ -- expression function that acts as a completion because the
+ -- generated body is immediately analyzed and the expression
+ -- is automatically frozen.
+
+ if Ekind (Subp_Id) = E_Function
+ and then Nkind (Subp_Decl) = N_Subprogram_Declaration
+ and then Nkind (Original_Node (Subp_Decl)) =
+ N_Expression_Function
+ and then Present (Corresponding_Body (Subp_Decl))
+ and then not Analyzed (Corresponding_Body (Subp_Decl))
+ then
+ HSS :=
+ Handled_Statement_Sequence
+ (Unit_Declaration_Node
+ (Corresponding_Body (Subp_Decl)));
+
+ if Present (HSS) then
+ Stmt := First (Statements (HSS));
- Insert_After (Unit_Declaration_Node (E), Decl);
- Analyze (Decl);
+ if Nkind (Stmt) = N_Simple_Return_Statement then
+ Freeze_Expression (Expression (Stmt));
+ end if;
+ end if;
end if;
end;
end if;
diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb
index 727a3be..5a99a2c 100644
--- a/gcc/ada/sem_ch6.adb
+++ b/gcc/ada/sem_ch6.adb
@@ -266,7 +266,6 @@ package body Sem_Ch6 is
-- declaration is completed. Def_Id is needed to analyze the spec.
New_Body : Node_Id;
- New_Decl : Node_Id;
New_Spec : Node_Id;
Ret : Node_Id;
@@ -434,10 +433,7 @@ package body Sem_Ch6 is
("an expression function is not a legal protected operation", N);
end if;
- New_Decl :=
- Make_Subprogram_Declaration (Loc, Specification => Spec);
-
- Rewrite (N, New_Decl);
+ Rewrite (N, Make_Subprogram_Declaration (Loc, Specification => Spec));
-- Correct the parent pointer of the aspect specification list to
-- reference the rewritten node.
@@ -447,7 +443,15 @@ package body Sem_Ch6 is
end if;
Analyze (N);
- Set_Is_Inlined (Defining_Entity (New_Decl));
+ Set_Is_Inlined (Defining_Entity (N));
+
+ -- Establish the linkages between the spec and the body. These are
+ -- used when the expression function acts as the prefix of attribute
+ -- 'Access in order to freeze the original expression which has been
+ -- moved to the generated body.
+
+ Set_Corresponding_Body (N, Defining_Entity (New_Body));
+ Set_Corresponding_Spec (New_Body, Defining_Entity (N));
-- To prevent premature freeze action, insert the new body at the end
-- of the current declarations, or at the end of the package spec.
@@ -461,7 +465,7 @@ package body Sem_Ch6 is
declare
Decls : List_Id := List_Containing (N);
Par : constant Node_Id := Parent (Decls);
- Id : constant Entity_Id := Defining_Entity (New_Decl);
+ Id : constant Entity_Id := Defining_Entity (N);
begin
if Nkind (Par) = N_Package_Specification
diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb
index f559ec3..dab6c8f 100644
--- a/gcc/ada/sem_res.adb
+++ b/gcc/ada/sem_res.adb
@@ -1974,7 +1974,7 @@ package body Sem_Res is
if Nkind (Decl) = N_Subprogram_Body then
Spec := Corresponding_Spec (Decl);
- if not No (Spec) then
+ if Present (Spec) then
Decl := Unit_Declaration_Node (Spec);
end if;
end if;
@@ -4051,9 +4051,9 @@ package body Sem_Res is
-- Apply predicate tests except in certain special cases. Note
-- that it might be more consistent to apply these only when
-- expansion is active (in Exp_Ch6.Expand_Actuals), as we do
- -- for the outbound predicate tests.
+ -- for the outbound predicate tests ???
- if not No_Predicate_Test_On_Arguments (Nam) then
+ if Predicate_Tests_On_Arguments (Nam) then
Apply_Predicate_Check (A, F_Typ);
end if;
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
index e8131cb..4434d5b 100644
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -13785,44 +13785,6 @@ package body Sem_Util is
Actual_Id := Next_Actual (Actual_Id);
end Next_Actual;
- ------------------------------------
- -- No_Predicate_Test_On_Arguments --
- ------------------------------------
-
- function No_Predicate_Test_On_Arguments (Subp : Entity_Id) return Boolean is
- begin
- -- Do not test predicates on call to generated default Finalize, since
- -- we are not interested in whether something we are finalizing (and
- -- typically destroying) satisfies its predicates.
-
- if Chars (Subp) = Name_Finalize
- and then not Comes_From_Source (Subp)
- then
- return True;
-
- -- Do not test predicates on call to Init_Proc, since if needed the
- -- predicate test will occur at some other point.
-
- elsif Is_Init_Proc (Subp) then
- return True;
-
- -- Do not test predicates on call to predicate function, since this
- -- would cause infinite recursion.
-
- elsif Ekind (Subp) = E_Function
- and then (Is_Predicate_Function (Subp)
- or else
- Is_Predicate_Function_M (Subp))
- then
- return True;
-
- -- For now, no other cases
-
- else
- return False;
- end if;
- end No_Predicate_Test_On_Arguments;
-
---------------------
-- No_Scalar_Parts --
---------------------
@@ -14755,6 +14717,44 @@ package body Sem_Util is
end if;
end Original_Corresponding_Operation;
+ ----------------------------------
+ -- Predicate_Tests_On_Arguments --
+ ----------------------------------
+
+ function Predicate_Tests_On_Arguments (Subp : Entity_Id) return Boolean is
+ begin
+ -- Do not test predicates on call to generated default Finalize, since
+ -- we are not interested in whether something we are finalizing (and
+ -- typically destroying) satisfies its predicates.
+
+ if Chars (Subp) = Name_Finalize
+ and then not Comes_From_Source (Subp)
+ then
+ return False;
+
+ -- Do not test predicates on call to Init_Proc, since if needed the
+ -- predicate test will occur at some other point.
+
+ elsif Is_Init_Proc (Subp) then
+ return False;
+
+ -- Do not test predicates on call to predicate function, since this
+ -- would cause infinite recursion.
+
+ elsif Ekind (Subp) = E_Function
+ and then (Is_Predicate_Function (Subp)
+ or else
+ Is_Predicate_Function_M (Subp))
+ then
+ return False;
+
+ -- For now, no other exceptions
+
+ else
+ return True;
+ end if;
+ end Predicate_Tests_On_Arguments;
+
-----------------------
-- Private_Component --
-----------------------
diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads
index 62d995e..970b2ba 100644
--- a/gcc/ada/sem_util.ads
+++ b/gcc/ada/sem_util.ads
@@ -1582,11 +1582,6 @@ package Sem_Util is
-- Note that the result produced is always an expression, not a parameter
-- association node, even if named notation was used.
- function No_Predicate_Test_On_Arguments (Subp : Entity_Id) return Boolean;
- -- Subp is the entity for a subprogram call. This function returns True to
- -- eliminate predicate tests on the input or output arguments in a call to
- -- this subprogram. See body for exact cases currently covered.
-
function No_Scalar_Parts (T : Entity_Id) return Boolean;
-- Tests if type T can be determined at compile time to have no scalar
-- parts in the sense of the Valid_Scalars attribute. Returns True if
@@ -1634,6 +1629,12 @@ package Sem_Util is
-- Name_uPre, Name_uPost, Name_uInvariant, or Name_uType_Invariant being
-- returned to represent the corresponding aspects with x'Class names.
+ function Predicate_Tests_On_Arguments (Subp : Entity_Id) return Boolean;
+ -- Subp is the entity for a subprogram call. This function returns True if
+ -- predicate tests are required for the arguments in this call (this is the
+ -- normal case). It returns False for special cases where these predicate
+ -- tests should be skipped (see body for details).
+
function Primitive_Names_Match (E1, E2 : Entity_Id) return Boolean;
-- Returns True if the names of both entities correspond with matching
-- primitives. This routine includes support for the case in which one
#n220'>220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733
#! /usr/bin/autogen
AutoGen definitions Makefile.tpl;

// Makefile.in is generated from Makefile.tpl by 'autogen Makefile.def'.
// This file was originally written by Nathanael Nerode.
//
//   Copyright 2002-2021 Free Software Foundation
//
// This file 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; see the file COPYING3.  If not see
// <http://www.gnu.org/licenses/>.


// "missing" indicates that that module doesn't supply
// that recursive target in its Makefile.

build_modules= { module= libiberty; };
build_modules= { module= bison; };
build_modules= { module= flex; };
build_modules= { module= m4; };
build_modules= { module= texinfo; };
build_modules= { module= fixincludes; };
build_modules= { module= libcpp;
                 extra_configure_flags='--disable-nls am_cv_func_iconv=no';};

host_modules= { module= bfd; bootstrap=true; };
host_modules= { module= opcodes; bootstrap=true; };
host_modules= { module= binutils; bootstrap=true; };
host_modules= { module= bison; no_check_cross= true; };
host_modules= { module= cgen; };
host_modules= { module= dejagnu; };
host_modules= { module= etc; };
host_modules= { module= fastjar; no_check_cross= true; };
host_modules= { module= fixincludes; bootstrap=true;
		missing= TAGS;
		missing= install-dvi; };
host_modules= { module= flex; no_check_cross= true; };
host_modules= { module= gas; bootstrap=true; };
host_modules= { module= gcc; bootstrap=true; 
		extra_make_flags="$(EXTRA_GCC_FLAGS)"; };
host_modules= { module= gmp; lib_path=.libs; bootstrap=true;
		// Work around in-tree gmp configure bug with missing flex.
		extra_configure_flags='--disable-shared LEX="touch lex.yy.c"';
		extra_make_flags='AM_CFLAGS="-DNO_ASM"';
		no_install= true;
		// none-*-* disables asm optimizations, bootstrap-testing
		// the compiler more thoroughly.
	        host="none-${host_vendor}-${host_os}";
		// gmp's configure will complain if given anything
		// different from host for target.
	        target="none-${host_vendor}-${host_os}"; };
host_modules= { module= mpfr; lib_path=src/.libs; bootstrap=true;
		extra_configure_flags='--disable-shared @extra_mpfr_configure_flags@';
		extra_make_flags='AM_CFLAGS="-DNO_ASM"';
		no_install= true; };
host_modules= { module= mpc; lib_path=src/.libs; bootstrap=true;
		extra_configure_flags='--disable-shared @extra_mpc_gmp_configure_flags@ @extra_mpc_mpfr_configure_flags@ --disable-maintainer-mode';
		no_install= true; };
host_modules= { module= isl; lib_path=.libs; bootstrap=true;
		extra_configure_flags='--disable-shared @extra_isl_gmp_configure_flags@';
		extra_make_flags='V=1';
		no_install= true; };
host_modules= { module= libelf; lib_path=.libs; bootstrap=true;
		extra_configure_flags='--disable-shared';
		no_install= true; };
host_modules= { module= gold; bootstrap=true; };
host_modules= { module= gprof; };
host_modules= { module= gprofng; };
host_modules= { module= intl; bootstrap=true; };
host_modules= { module= tcl;
                missing=mostlyclean; };
host_modules= { module= itcl; };
host_modules= { module= ld; bootstrap=true; };
host_modules= { module= libbacktrace; bootstrap=true; };
host_modules= { module= libcpp; bootstrap=true; };
// As with libiconv, don't install any of libcody
host_modules= { module= libcody; bootstrap=true;
		no_install= true;
		missing= pdf;
		missing= html;
		missing= info;
		missing= dvi;
		missing= install-pdf;
		missing= install-html;
		missing= install-info;
		missing= install-dvi;
		missing=TAGS; };
host_modules= { module= libdecnumber; bootstrap=true;
		missing=TAGS; };
host_modules= { module= libgui; };
host_modules= { module= libiberty; bootstrap=true;
	        extra_configure_flags='@extra_host_libiberty_configure_flags@';};
// Linker plugins may need their own build of libiberty; see
// gcc/doc/install.texi.  We take care that this build of libiberty doesn't get
// installed.  It's a helper library for linker plugins, so we pay attention to
// @extra_linker_plugin_flags@ and @extra_linker_plugin_configure_flags@.
host_modules= { module= libiberty-linker-plugin; bootstrap=true;
		module_srcdir=libiberty;
	        extra_configure_flags='@extra_host_libiberty_configure_flags@ --disable-install-libiberty @extra_linker_plugin_flags@ @extra_linker_plugin_configure_flags@';
		extra_make_flags='@extra_linker_plugin_flags@'; };
// We abuse missing to avoid installing anything for libiconv.
host_modules= { module= libiconv;
		bootstrap=true;
		extra_configure_flags='--disable-shared';
		no_install= true;
		missing= pdf;
		missing= html;
		missing= info;
		missing= install-pdf;
		missing= install-html;
		missing= install-info; };
host_modules= { module= m4; };
host_modules= { module= readline; };
host_modules= { module= sid; };
host_modules= { module= sim; };
host_modules= { module= texinfo; no_install= true; };
host_modules= { module= zlib; no_install=true; no_check=true;
		bootstrap=true;
	        extra_configure_flags='@extra_host_zlib_configure_flags@';};
host_modules= { module= gnulib; };
host_modules= { module= gdbsupport; };
host_modules= { module= gdbserver; };
host_modules= { module= gdb; };
host_modules= { module= expect; };
host_modules= { module= guile; };
host_modules= { module= tk; };
host_modules= { module= libtermcap; no_check=true; 
                missing=mostlyclean;
                missing=clean;
                missing=distclean;
                missing=maintainer-clean; };
host_modules= { module= utils; no_check=true; };
host_modules= { module= c++tools;
                missing=TAGS; };
host_modules= { module= gnattools; };
host_modules= { module= lto-plugin; bootstrap=true;
		extra_configure_flags='--enable-shared @extra_linker_plugin_flags@ @extra_linker_plugin_configure_flags@';
		extra_make_flags='@extra_linker_plugin_flags@'; };
host_modules= { module= libcc1; extra_configure_flags=--enable-shared; };
host_modules= { module= gotools; };
host_modules= { module= libctf; bootstrap=true; };
host_modules= { module= libsframe; bootstrap=true; };

target_modules = { module= libstdc++-v3;
		   bootstrap=true;
		   lib_path=src/.libs;
		   raw_cxx=true; };
target_modules = { module= libsanitizer;
		   bootstrap=true;
		   lib_path=.libs;
		   raw_cxx=true; };
target_modules = { module= libvtv;
		   bootstrap=true;
		   lib_path=.libs;
		   raw_cxx=true; };
target_modules = { module= liboffloadmic;
		   lib_path=.libs;
		   extra_configure_flags='@extra_liboffloadmic_configure_flags@'; };
target_modules = { module= libssp; lib_path=.libs; };
target_modules = { module= newlib; };
target_modules = { module= libgcc; bootstrap=true; no_check=true;
		  missing=TAGS;
		  missing=install-dvi; };
target_modules = { module= libbacktrace; };
target_modules = { module= libquadmath; };
target_modules = { module= libgfortran; };
target_modules = { module= libobjc;
		  missing=TAGS;
		  missing=install-dvi; };
target_modules = { module= libgo; };
target_modules = { module= libphobos;
		   lib_path=src/.libs; };
target_modules = { module= libtermcap; no_check=true;
                   missing=mostlyclean;
                   missing=clean;
                   missing=distclean;
                   missing=maintainer-clean; };
target_modules = { module= winsup; };
target_modules = { module= libgloss; no_check=true; };
target_modules = { module= libffi; no_install=true; };
target_modules = { module= zlib; };
target_modules = { module= rda; };
target_modules = { module= libada; };
target_modules = { module= libgomp; bootstrap= true; lib_path=.libs; };
target_modules = { module= libitm; lib_path=.libs; };
target_modules = { module= libatomic; lib_path=.libs; };

// These are (some of) the make targets to be done in each subdirectory.
// Not all; these are the ones which don't have special options.
// "depend" indicates that a target depends on another target uniformly
// for each subdirectory.  There can be several such lines per target.
recursive_targets = { make_target= info; 
                      depend=configure; };
recursive_targets = { make_target= dvi; 
                      depend=configure; };
recursive_targets = { make_target= pdf; 
                      depend=configure; };
recursive_targets = { make_target= html; 
                      depend=configure; };
recursive_targets = { make_target= TAGS; 
                      depend=configure; };
recursive_targets = { make_target= install-info; 
                      depend=configure;
                      depend=info; };
recursive_targets = { make_target= install-dvi;
                      depend=configure;
                      depend=dvi; };
recursive_targets = { make_target= install-pdf; 
                      depend=configure;
                      depend=pdf; };
recursive_targets = { make_target= install-html; 
                      depend=configure;
                      depend=html; };
recursive_targets = { make_target= installcheck; 
                      depend=configure; };
recursive_targets = { make_target= mostlyclean; };
recursive_targets = { make_target= clean; };
recursive_targets = { make_target= distclean; };
recursive_targets = { make_target= maintainer-clean; };

// Flags which need to be passed down.

// Directories etc.
flags_to_pass = { flag= DESTDIR ; };
flags_to_pass = { flag= RPATH_ENVVAR ; };
flags_to_pass = { flag= TARGET_SUBDIR ; };
flags_to_pass = { flag= bindir ; };
flags_to_pass = { flag= datadir ; };
flags_to_pass = { flag= exec_prefix ; };
flags_to_pass = { flag= includedir ; };
flags_to_pass = { flag= datarootdir ; };
flags_to_pass = { flag= docdir ; };
flags_to_pass = { flag= infodir ; };
flags_to_pass = { flag= pdfdir ; };
flags_to_pass = { flag= htmldir ; };
flags_to_pass = { flag= libdir ; };
flags_to_pass = { flag= libexecdir ; };
flags_to_pass = { flag= lispdir ; };
flags_to_pass = { flag= localstatedir ; };
flags_to_pass = { flag= mandir ; };
flags_to_pass = { flag= oldincludedir ; };
flags_to_pass = { flag= prefix ; };
flags_to_pass = { flag= sbindir ; };
flags_to_pass = { flag= sharedstatedir ; };
flags_to_pass = { flag= sysconfdir ; };
flags_to_pass = { flag= tooldir ; };
flags_to_pass = { flag= build_tooldir ; };
flags_to_pass = { flag= target_alias ; };

// Build tools
flags_to_pass = { flag= AWK ; };
flags_to_pass = { flag= BISON ; };
flags_to_pass = { flag= CC_FOR_BUILD ; };
flags_to_pass = { flag= CFLAGS_FOR_BUILD ; };
flags_to_pass = { flag= CXX_FOR_BUILD ; };
flags_to_pass = { flag= EXPECT ; };
flags_to_pass = { flag= FLEX ; };
flags_to_pass = { flag= INSTALL ; };
flags_to_pass = { flag= INSTALL_DATA ; };
flags_to_pass = { flag= INSTALL_PROGRAM ; };
flags_to_pass = { flag= INSTALL_SCRIPT ; };
flags_to_pass = { flag= LDFLAGS_FOR_BUILD ; };
flags_to_pass = { flag= LEX ; };
flags_to_pass = { flag= M4 ; };
flags_to_pass = { flag= MAKE ; };
flags_to_pass = { flag= RUNTEST ; };
flags_to_pass = { flag= RUNTESTFLAGS ; };
flags_to_pass = { flag= SED ; };
flags_to_pass = { flag= SHELL ; };
flags_to_pass = { flag= YACC ; };

// Host tools
flags_to_pass = { flag= ADAFLAGS ; optional=true ; };
flags_to_pass = { flag= ADA_CFLAGS ; };
flags_to_pass = { flag= AR_FLAGS ; };
flags_to_pass = { flag= BOOT_ADAFLAGS ; optional=true ; };
flags_to_pass = { flag= BOOT_CFLAGS ; };
flags_to_pass = { flag= BOOT_LDFLAGS ; };
flags_to_pass = { flag= CFLAGS ; };
flags_to_pass = { flag= CXXFLAGS ; };
flags_to_pass = { flag= LDFLAGS ; };
flags_to_pass = { flag= LIBCFLAGS ; };
flags_to_pass = { flag= LIBCXXFLAGS ; };
flags_to_pass = { flag= STAGE1_CHECKING ; };
flags_to_pass = { flag= STAGE1_LANGUAGES ; };
flags_to_pass = { flag= GNATBIND ; };
flags_to_pass = { flag= GNATMAKE ; };
flags_to_pass = { flag= GDC ; };
flags_to_pass = { flag= GDCFLAGS ; };

// Target tools
flags_to_pass = { flag= AR_FOR_TARGET ; };
flags_to_pass = { flag= AS_FOR_TARGET ; };
flags_to_pass = { flag= CC_FOR_TARGET ; };
flags_to_pass = { flag= CFLAGS_FOR_TARGET ; };
flags_to_pass = { flag= CPPFLAGS_FOR_TARGET ; };
flags_to_pass = { flag= CXXFLAGS_FOR_TARGET ; };
flags_to_pass = { flag= DLLTOOL_FOR_TARGET ; };
flags_to_pass = { flag= DSYMUTIL_FOR_TARGET ; };
flags_to_pass = { flag= FLAGS_FOR_TARGET ; };
flags_to_pass = { flag= GFORTRAN_FOR_TARGET ; };
flags_to_pass = { flag= GOC_FOR_TARGET ; };
flags_to_pass = { flag= GOCFLAGS_FOR_TARGET ; };
flags_to_pass = { flag= GDC_FOR_TARGET ; };
flags_to_pass = { flag= GDCFLAGS_FOR_TARGET ; };
flags_to_pass = { flag= LD_FOR_TARGET ; };
flags_to_pass = { flag= LIPO_FOR_TARGET ; };
flags_to_pass = { flag= LDFLAGS_FOR_TARGET ; };
flags_to_pass = { flag= LIBCFLAGS_FOR_TARGET ; };
flags_to_pass = { flag= LIBCXXFLAGS_FOR_TARGET ; };
flags_to_pass = { flag= NM_FOR_TARGET ; };
flags_to_pass = { flag= OBJDUMP_FOR_TARGET ; };
flags_to_pass = { flag= OBJCOPY_FOR_TARGET ; };
flags_to_pass = { flag= RANLIB_FOR_TARGET ; };
flags_to_pass = { flag= READELF_FOR_TARGET ; };
flags_to_pass = { flag= STRIP_FOR_TARGET ; };
flags_to_pass = { flag= WINDRES_FOR_TARGET ; };
flags_to_pass = { flag= WINDMC_FOR_TARGET ; };

// Miscellaneous
flags_to_pass = { flag= BUILD_CONFIG ; };
flags_to_pass = { flag= LANGUAGES ; optional=true ; };
flags_to_pass = { flag= LEAN ; };

// Inter-module dependencies

// Build modules
dependencies = { module=all-build-bison; on=all-build-texinfo; };
dependencies = { module=all-build-flex; on=all-build-texinfo; };
dependencies = { module=all-build-flex; on=all-build-bison; };
dependencies = { module=all-build-flex; on=all-build-m4; };
dependencies = { module=all-build-libiberty; on=all-build-texinfo; };
dependencies = { module=all-build-m4; on=all-build-texinfo; };
dependencies = { module=all-build-fixincludes; on=all-build-libiberty; };
dependencies = { module=all-build-libcpp; on=all-build-libiberty; };

// Host modules specific to gcc.
dependencies = { module=configure-gcc; on=configure-intl; };
dependencies = { module=configure-gcc; on=all-gmp; };
dependencies = { module=configure-gcc; on=all-mpfr; };
dependencies = { module=configure-gcc; on=all-mpc; };
dependencies = { module=configure-gcc; on=all-isl; };
dependencies = { module=configure-gcc; on=all-lto-plugin; };
dependencies = { module=configure-gcc; on=all-binutils; };
dependencies = { module=configure-gcc; on=all-gas; };
dependencies = { module=configure-gcc; on=all-ld; };
dependencies = { module=configure-gcc; on=all-gold; };
dependencies = { module=configure-gcc; on=all-libelf; };
dependencies = { module=configure-gcc; on=all-libiconv; };
dependencies = { module=all-gcc; on=all-libiberty; hard=true; };
dependencies = { module=all-gcc; on=all-intl; };
dependencies = { module=all-gcc; on=all-mpfr; };
dependencies = { module=all-gcc; on=all-mpc; };
dependencies = { module=all-gcc; on=all-isl; };
dependencies = { module=all-gcc; on=all-build-texinfo; };
dependencies = { module=all-gcc; on=all-build-bison; };
dependencies = { module=all-gcc; on=all-build-flex; };
dependencies = { module=all-gcc; on=all-build-libiberty; };
dependencies = { module=all-gcc; on=all-build-fixincludes; };
dependencies = { module=all-gcc; on=all-build-libcpp; };
dependencies = { module=all-gcc; on=all-zlib; };
dependencies = { module=all-gcc; on=all-libbacktrace; hard=true; };
dependencies = { module=all-gcc; on=all-libcpp; hard=true; };
dependencies = { module=all-gcc; on=all-libcody; hard=true; };
dependencies = { module=all-gcc; on=all-libdecnumber; hard=true; };
dependencies = { module=all-gcc; on=all-libiberty; };
dependencies = { module=all-gcc; on=all-fixincludes; };
dependencies = { module=all-gcc; on=all-lto-plugin; };
dependencies = { module=all-gcc; on=all-libiconv; };
dependencies = { module=info-gcc; on=all-build-libiberty; };
dependencies = { module=dvi-gcc; on=all-build-libiberty; };
dependencies = { module=pdf-gcc; on=all-build-libiberty; };
dependencies = { module=html-gcc; on=all-build-libiberty; };
dependencies = { module=install-gcc ; on=install-fixincludes; };
dependencies = { module=install-gcc ; on=install-lto-plugin; };
dependencies = { module=install-strip-gcc ; on=install-strip-fixincludes; };
dependencies = { module=install-strip-gcc ; on=install-strip-lto-plugin; };

dependencies = { module=configure-libcpp; on=configure-libiberty; hard=true; };
dependencies = { module=configure-libcpp; on=configure-intl; };
dependencies = { module=configure-libcpp; on=all-libiconv; };
dependencies = { module=all-libcpp; on=all-libiberty; hard=true; };
dependencies = { module=all-libcpp; on=all-intl; };
dependencies = { module=all-libcpp; on=all-libiconv; };

dependencies = { module=all-fixincludes; on=all-libiberty; };

dependencies = { module=all-gnattools; on=all-target-libada; };
dependencies = { module=all-gnattools; on=all-target-libstdc++-v3; };

// Depending on the specific configuration, the LTO plugin will either use the
// generic libiberty build or the specific build for linker plugins.
dependencies = { module=all-lto-plugin; on=all-libiberty; };
dependencies = { module=all-lto-plugin; on=all-libiberty-linker-plugin; };

dependencies = { module=configure-libcc1; on=configure-gcc; };
dependencies = { module=all-libcc1; on=all-gcc; };

// we want version.o from gcc, and implicitly depend on libcody
dependencies = { module=all-c++tools; on=all-gcc; };
dependencies = { module=all-gotools; on=all-target-libgo; };

dependencies = { module=all-utils; on=all-libiberty; };

dependencies = { module=configure-intl; on=all-libiconv; };
dependencies = { module=configure-mpfr; on=all-gmp; };
dependencies = { module=configure-mpc; on=all-mpfr; };
dependencies = { module=configure-isl; on=all-gmp; };
dependencies = { module=all-intl; on=all-libiconv; };

// Host modules specific to gdb.
dependencies = { module=configure-gdb; on=all-intl; };
dependencies = { module=configure-gdb; on=configure-sim; };
dependencies = { module=configure-gdb; on=all-bfd; };
dependencies = { module=configure-gdb; on=all-gnulib; };
dependencies = { module=configure-gdb; on=all-gdbsupport; };
// Depend on all-libiconv so that configure checks for iconv
// functions will work.
dependencies = { module=configure-gdb; on=all-libiconv; };
dependencies = { module=all-gdb; on=all-libiberty; };
dependencies = { module=all-gdb; on=all-libiconv; };
dependencies = { module=all-gdb; on=all-gnulib; };
dependencies = { module=all-gdb; on=all-gdbsupport; };
dependencies = { module=all-gdb; on=all-opcodes; };
dependencies = { module=all-gdb; on=all-readline; };
dependencies = { module=all-gdb; on=all-build-bison; };
dependencies = { module=all-gdb; on=all-sim; };
dependencies = { module=all-gdb; on=all-libdecnumber; };
dependencies = { module=all-gdb; on=all-libtermcap; };
dependencies = { module=all-gdb; on=all-libctf; };
dependencies = { module=all-gdb; on=all-libbacktrace; };

// Host modules specific to gdbserver.
dependencies = { module=configure-gdbserver; on=all-gnulib; };
dependencies = { module=all-gdbserver; on=all-gdbsupport; };
dependencies = { module=all-gdbserver; on=all-gnulib; };
dependencies = { module=all-gdbserver; on=all-libiberty; };

dependencies = { module=configure-libgui; on=configure-tcl; };
dependencies = { module=configure-libgui; on=configure-tk; };
dependencies = { module=all-libgui; on=all-tcl; };
dependencies = { module=all-libgui; on=all-tk; };
dependencies = { module=all-libgui; on=all-itcl; };

dependencies = { module=configure-gdbsupport; on=configure-gnulib; };
dependencies = { module=configure-gdbsupport; on=configure-intl; };
dependencies = { module=all-gdbsupport; on=all-gnulib; };
dependencies = { module=all-gdbsupport; on=all-intl; };

// Host modules specific to binutils.
// build libsframe before bfd for encoder/decoder support for linking
// SFrame sections
dependencies = { module=configure-bfd; on=configure-libiberty; hard=true; };
dependencies = { module=configure-bfd; on=configure-intl; };
dependencies = { module=all-bfd; on=all-libiberty; };
dependencies = { module=all-bfd; on=all-intl; };
dependencies = { module=all-bfd; on=all-zlib; };
dependencies = { module=all-bfd; on=all-libsframe; };
dependencies = { module=configure-opcodes; on=configure-libiberty; hard=true; };
dependencies = { module=all-opcodes; on=all-libiberty; };

// We must build gas before binutils, gprof, ld and gold to avoid race
// condition in the prev-gcc/as script during bootstrap of combined tree
// with GCC and binutils.  See PR gas/14899 for details.
dependencies = { module=configure-binutils; on=configure-intl; };
dependencies = { module=all-binutils; on=all-libiberty; };
dependencies = { module=all-binutils; on=all-opcodes; };
dependencies = { module=all-binutils; on=all-bfd; };
dependencies = { module=all-binutils; on=all-build-flex; };
dependencies = { module=all-binutils; on=all-build-bison; };
dependencies = { module=all-binutils; on=all-intl; };
dependencies = { module=all-binutils; on=all-gas; };
dependencies = { module=all-binutils; on=all-libctf; };
dependencies = { module=all-ld; on=all-libctf; };
dependencies = { module=all-binutils; on=all-libsframe; };

// We put install-opcodes before install-binutils because the installed
// binutils might be on PATH, and they might need the shared opcodes
// library.
dependencies = { module=install-binutils; on=install-opcodes; };
dependencies = { module=install-strip-binutils; on=install-strip-opcodes; };

// Likewise for ld, libctf, and bfd.
dependencies = { module=install-bfd; on=install-libsframe; };
dependencies = { module=install-libctf; on=install-bfd; };
dependencies = { module=install-ld; on=install-bfd; };
dependencies = { module=install-ld; on=install-libctf; };
dependencies = { module=install-strip-libctf; on=install-strip-bfd; };
dependencies = { module=install-strip-ld; on=install-strip-bfd; };
dependencies = { module=install-strip-ld; on=install-strip-libctf; };

// libopcodes depends on libbfd
dependencies = { module=configure-opcodes; on=configure-bfd; hard=true; };
dependencies = { module=install-opcodes; on=install-bfd; };
dependencies = { module=install-strip-opcodes; on=install-strip-bfd; };

dependencies = { module=configure-gas; on=configure-intl; };
dependencies = { module=all-gas; on=all-libiberty; };
dependencies = { module=all-gas; on=all-opcodes; };
dependencies = { module=all-gas; on=all-bfd; };
dependencies = { module=all-gas; on=all-intl; };
dependencies = { module=configure-gprof; on=configure-intl; };
dependencies = { module=all-gprof; on=all-libiberty; };
dependencies = { module=all-gprof; on=all-bfd; };
dependencies = { module=all-gprof; on=all-opcodes; };
dependencies = { module=all-gprof; on=all-intl; };
dependencies = { module=all-gprof; on=all-gas; };

dependencies = { module=configure-gprofng; on=configure-intl; };
dependencies = { module=all-gprofng; on=all-libiberty; };
dependencies = { module=all-gprofng; on=all-bfd; };
dependencies = { module=all-gprofng; on=all-opcodes; };
dependencies = { module=all-gprofng; on=all-intl; };
dependencies = { module=all-gprofng; on=all-gas; };
dependencies = { module=install-gprofng; on=install-opcodes; };
dependencies = { module=install-gprofng; on=install-bfd; };

dependencies = { module=configure-ld; on=configure-intl; };
dependencies = { module=all-ld; on=all-libiberty; };
dependencies = { module=all-ld; on=all-bfd; };
dependencies = { module=all-ld; on=all-opcodes; };
dependencies = { module=all-ld; on=all-build-bison; };
dependencies = { module=all-ld; on=all-build-flex; };
dependencies = { module=all-ld; on=all-intl; };
dependencies = { module=all-ld; on=all-gas; };
dependencies = { module=all-ld; on=all-binutils; };
dependencies = { module=install-ld; on=install-gold; };
dependencies = { module=install-strip-ld; on=install-strip-gold; };
dependencies = { module=configure-gold; on=configure-intl; };
dependencies = { module=all-gold; on=all-libiberty; };
dependencies = { module=all-gold; on=all-intl; };
dependencies = { module=all-gold; on=all-bfd; };
dependencies = { module=all-gold; on=all-build-bison; };
dependencies = { module=all-gold; on=all-gas; };
dependencies = { module=check-gold; on=all-binutils; };
dependencies = { module=check-gold; on=all-gas; };

dependencies = { module=configure-opcodes; on=configure-intl; };
dependencies = { module=all-opcodes; on=all-bfd; };
dependencies = { module=all-opcodes; on=all-libiberty; };
dependencies = { module=all-opcodes; on=all-intl; };

// Other host modules in the 'src' repository.
dependencies = { module=all-dejagnu; on=all-tcl; };
dependencies = { module=all-dejagnu; on=all-expect; };
dependencies = { module=all-dejagnu; on=all-tk; };
dependencies = { module=configure-expect; on=configure-tcl; };
dependencies = { module=configure-expect; on=configure-tk; };
dependencies = { module=all-expect; on=all-tcl; };
dependencies = { module=all-expect; on=all-tk; };

// We put install-tcl before install-itcl because itcl wants to run a
// program on installation which uses the Tcl libraries.
dependencies = { module=configure-itcl; on=configure-tcl; };
dependencies = { module=configure-itcl; on=configure-tk; };
dependencies = { module=all-itcl; on=all-tcl; };
dependencies = { module=all-itcl; on=all-tk; };
dependencies = { module=install-itcl; on=install-tcl; };
dependencies = { module=install-strip-itcl; on=install-strip-tcl; };

dependencies = { module=configure-tk; on=configure-tcl; };
dependencies = { module=all-tk; on=all-tcl; };

dependencies = { module=all-sid; on=all-libiberty; };
dependencies = { module=all-sid; on=all-bfd; };
dependencies = { module=all-sid; on=all-opcodes; };
dependencies = { module=all-sid; on=all-tcl; };
dependencies = { module=all-sid; on=all-tk; };
dependencies = { module=install-sid; on=install-tcl; };
dependencies = { module=install-strip-sid; on=install-strip-tcl; };
dependencies = { module=install-sid; on=install-tk; };
dependencies = { module=install-strip-sid; on=install-strip-tk; };

dependencies = { module=configure-sim; on=all-gnulib; };
dependencies = { module=configure-sim; on=configure-intl; };
dependencies = { module=all-sim; on=all-intl; };
dependencies = { module=all-sim; on=all-libiberty; };
dependencies = { module=all-sim; on=all-bfd; };
dependencies = { module=all-sim; on=all-opcodes; };
dependencies = { module=configure-sim; on=all-readline; };

// Other host modules.
dependencies = { module=all-fastjar; on=all-zlib; };
dependencies = { module=all-fastjar; on=all-build-texinfo; };
dependencies = { module=all-fastjar; on=all-libiberty; };
dependencies = { module=all-libctf; on=all-libiberty; hard=true; };
dependencies = { module=all-libctf; on=all-bfd; };
dependencies = { module=all-libctf; on=all-zlib; };
// So that checking for ELF support in BFD from libctf configure is possible.
dependencies = { module=configure-libctf; on=all-bfd; };
dependencies = { module=configure-libctf; on=all-intl; };
dependencies = { module=configure-libctf; on=all-zlib; };
dependencies = { module=configure-libctf; on=all-libiconv; };
dependencies = { module=check-libctf; on=all-ld; };

// The Makefiles in gdb and gdbserver pull in a file that configure
// generates in the gnulib directory, so distclean gnulib only after
// gdb and gdbserver.
dependencies = { module=distclean-gnulib; on=distclean-gdb; };
dependencies = { module=distclean-gnulib; on=distclean-gdbserver; };

// Warning, these are not well tested.
dependencies = { module=all-bison; on=all-intl; };
dependencies = { module=all-bison; on=all-build-texinfo; };
dependencies = { module=all-flex; on=all-build-bison; };
dependencies = { module=all-flex; on=all-intl; };
dependencies = { module=all-flex; on=all-m4; };
dependencies = { module=all-flex; on=all-build-texinfo; };
dependencies = { module=all-m4; on=all-intl; };
dependencies = { module=all-m4; on=all-build-texinfo; };

// Target modules.  These can also have dependencies on the language
// environment (e.g. on libstdc++).  By default target modules depend
// on libgcc and newlib/libgloss.
lang_env_dependencies = { module=libitm; cxx=true; };
lang_env_dependencies = { module=libffi; cxx=true; };
lang_env_dependencies = { module=liboffloadmic; cxx=true; };
lang_env_dependencies = { module=newlib; no_c=true; };
lang_env_dependencies = { module=libgloss; no_c=true; };
lang_env_dependencies = { module=libgcc; no_gcc=true; no_c=true; };
// libiberty does not depend on newlib or libgloss because it must be
// built newlib on some targets (e.g. Cygwin).  It still needs
// a dependency on libgcc for native targets to configure.
lang_env_dependencies = { module=libiberty; no_c=true; };

dependencies = { module=configure-target-fastjar; on=configure-target-zlib; };
dependencies = { module=all-target-fastjar; on=all-target-zlib; };
dependencies = { module=configure-target-libgo; on=configure-target-libffi; };
dependencies = { module=configure-target-libgo; on=all-target-libstdc++-v3; };
dependencies = { module=configure-target-libffi; on=all-target-libstdc++-v3; };
dependencies = { module=all-target-libgo; on=all-target-libbacktrace; };
dependencies = { module=all-target-libgo; on=all-target-libffi; };
dependencies = { module=all-target-libgo; on=all-target-libatomic; };
dependencies = { module=configure-target-libphobos; on=configure-target-libbacktrace; };
dependencies = { module=configure-target-libphobos; on=configure-target-zlib; };
dependencies = { module=all-target-libphobos; on=all-target-libbacktrace; };
dependencies = { module=all-target-libphobos; on=all-target-zlib; };
dependencies = { module=all-target-libphobos; on=all-target-libatomic; };
dependencies = { module=configure-target-libstdc++-v3; on=configure-target-libgomp; };
dependencies = { module=configure-target-liboffloadmic; on=configure-target-libgomp; };
dependencies = { module=configure-target-libsanitizer; on=all-target-libstdc++-v3; };
dependencies = { module=configure-target-libvtv; on=all-target-libstdc++-v3; };
// parallel_list.o and parallel_settings.o depend on omp.h, which is
// generated by the libgomp configure.  Unfortunately, due to the use of
//  recursive make, we can't be that specific.
dependencies = { module=all-target-libstdc++-v3; on=configure-target-libgomp; };
dependencies = { module=all-target-liboffloadmic; on=all-target-libgomp; };

dependencies = { module=install-target-libgo; on=install-target-libatomic; };
dependencies = { module=install-target-libgfortran; on=install-target-libquadmath; };
dependencies = { module=install-target-libgfortran; on=install-target-libgcc; };
dependencies = { module=install-target-libphobos; on=install-target-libatomic; };
dependencies = { module=install-target-libsanitizer; on=install-target-libstdc++-v3; };
dependencies = { module=install-target-libsanitizer; on=install-target-libgcc; };
dependencies = { module=install-target-libvtv; on=install-target-libstdc++-v3; };
dependencies = { module=install-target-libvtv; on=install-target-libgcc; };
dependencies = { module=install-target-liboffloadmic; on=install-target-libstdc++-v3; };
dependencies = { module=install-target-liboffloadmic; on=install-target-libgcc; };
dependencies = { module=install-target-libitm; on=install-target-libgcc; };
dependencies = { module=install-target-libobjc; on=install-target-libgcc; };
dependencies = { module=install-target-libstdc++-v3; on=install-target-libgcc; };

// Target modules in the 'src' repository.
lang_env_dependencies = { module=libtermcap; };
lang_env_dependencies = { module=rda; };
lang_env_dependencies = { module=winsup; };

dependencies = { module=all-target-libgloss; on=all-target-newlib; };
dependencies = { module=all-target-winsup; on=all-target-libtermcap; };
dependencies = { module=configure-target-newlib; on=all-binutils; };
dependencies = { module=configure-target-newlib; on=all-ld; };
dependencies = { module=configure-target-libgfortran; on=all-target-libquadmath; };
dependencies = { module=configure-target-libgfortran; on=all-target-libbacktrace; };

languages = { language=c;	gcc-check-target=check-gcc; };
languages = { language=c++;	gcc-check-target=check-c++;
				lib-check-target=check-target-libstdc++-v3;
				lib-check-target=check-target-libitm-c++;
				lib-check-target=check-target-libgomp-c++; };
languages = { language=fortran;	gcc-check-target=check-fortran;
				lib-check-target=check-target-libquadmath;
				lib-check-target=check-target-libgfortran;
				lib-check-target=check-target-libgomp-fortran; };
languages = { language=ada;	gcc-check-target=check-ada;
				lib-check-target=check-target-libada; };
languages = { language=objc;	gcc-check-target=check-objc;
				lib-check-target=check-target-libobjc; };
languages = { language=obj-c++;	gcc-check-target=check-obj-c++; };
languages = { language=go;	gcc-check-target=check-go;
				lib-check-target=check-target-libgo;
				lib-check-target=check-gotools; };
languages = { language=d;	gcc-check-target=check-d;
				lib-check-target=check-target-libphobos; };
languages = { language=jit;	gcc-check-target=check-jit; };

// Toplevel bootstrap
bootstrap_stage = { id=1 ; };
bootstrap_stage = {
	id=2 ; prev=1 ;
	bootstrap_target=bootstrap2 ; };
bootstrap_stage = {
	id=3 ; prev=2 ; lean=1 ;
	compare_target=compare ;
	bootstrap_target=bootstrap ;
	cleanstrap_target=cleanstrap ; };
bootstrap_stage = {
	id=4 ; prev=3 ; lean=2 ;
	compare_target=compare3 ;
	bootstrap_target=bootstrap4 ; };
bootstrap_stage = {
	id=profile ; prev=1 ; };
bootstrap_stage = {
	id=train; prev=profile ; } ;
bootstrap_stage = {
	id=feedback ; prev=train;
	bootstrap_target=profiledbootstrap ; };
bootstrap_stage = {
	id=autoprofile ; prev=1 ;
        autoprofile="$$s/gcc/config/i386/$(AUTO_PROFILE)" ; };
bootstrap_stage = {
	id=autofeedback ; prev=autoprofile ;
	bootstrap_target=autoprofiledbootstrap ;
	profile_data="PERF_DATA=perf.data" ; };