Commit 41ba34db by Emmanuel Briot Committed by Arnaud Charlet

prj.ads, [...] (Queue.Insert): now also inserts the "roots" for a main.

2011-08-03  Emmanuel Briot  <briot@adacore.com>

	* prj.ads, makeutl.adb, makeutl.ads (Queue.Insert): now also inserts
	the "roots" for a main.
	(Fill_From_Project): add support for aggregate projects. Main units
	in aggregated projects are now automatically added in the list of
	files to build (although this fails later on in gprbuild, because
	these files are not using the root proejct tree, so this needs
	further cleanup)
	* gcc-interface/Make-lang.in: Update dependencies.

From-SVN: r177287
parent fccd42a9
2011-08-03 Emmanuel Briot <briot@adacore.com>
* prj.ads, makeutl.adb, makeutl.ads (Queue.Insert): now also inserts
the "roots" for a main.
(Fill_From_Project): add support for aggregate projects. Main units
in aggregated projects are now automatically added in the list of
files to build (although this fails later on in gprbuild, because
these files are not using the root proejct tree, so this needs
further cleanup)
* gcc-interface/Make-lang.in: Update dependencies.
2011-08-03 Yannick Moy <moy@adacore.com> 2011-08-03 Yannick Moy <moy@adacore.com>
* sem_ch4.adb (Analyze_Conditional_Expression): only allow boolean * sem_ch4.adb (Analyze_Conditional_Expression): only allow boolean
......
...@@ -1297,7 +1297,10 @@ ada/a-ioexce.o : ada/ada.ads ada/a-except.ads ada/a-ioexce.ads \ ...@@ -1297,7 +1297,10 @@ ada/a-ioexce.o : ada/ada.ads ada/a-except.ads ada/a-ioexce.ads \
ada/ada.o : ada/ada.ads ada/system.ads ada/ada.o : ada/ada.ads ada/system.ads
ada/alfa.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \ ada/alfa.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alfa.ads ada/alfa.adb ada/gnat.ads ada/g-table.ads \ ada/a-uncdea.ads ada/alfa.ads ada/alfa.adb ada/alloc.ads ada/atree.ads \
ada/einfo.ads ada/snames.ads ada/interfac.ads ada/namet.ads \
ada/s-conca2.ads ada/sinfo.ads ada/table.ads ada/uintp.ads \
ada/urealp.ads ada/gnat.ads ada/g-table.ads \
ada/g-table.adb ada/hostparm.ads ada/output.ads ada/output.adb \ ada/g-table.adb ada/hostparm.ads ada/output.ads ada/output.adb \
ada/put_alfa.ads ada/put_alfa.adb ada/system.ads ada/s-exctab.ads \ ada/put_alfa.ads ada/put_alfa.adb ada/system.ads ada/s-exctab.ads \
ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-soflin.ads \ ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-soflin.ads \
...@@ -1862,27 +1865,27 @@ ada/exp_ch13.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \ ...@@ -1862,27 +1865,27 @@ ada/exp_ch13.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/eval_fat.ads ada/exp_ch11.ads ada/exp_ch13.ads ada/exp_ch13.adb \ ada/eval_fat.ads ada/exp_ch11.ads ada/exp_ch13.ads ada/exp_ch13.adb \
ada/exp_ch2.ads ada/exp_ch3.ads ada/exp_ch4.ads ada/exp_ch6.ads \ ada/exp_ch2.ads ada/exp_ch3.ads ada/exp_ch4.ads ada/exp_ch6.ads \
ada/exp_imgv.ads ada/exp_pakd.ads ada/exp_tss.ads ada/exp_util.ads \ ada/exp_imgv.ads ada/exp_pakd.ads ada/exp_tss.ads ada/exp_util.ads \
ada/expander.ads ada/fname.ads ada/freeze.ads ada/get_targ.ads \ ada/expander.ads ada/fname.ads ada/fname-uf.ads ada/freeze.ads \
ada/gnat.ads ada/g-htable.ads ada/hlo.ads ada/hostparm.ads \ ada/get_targ.ads ada/gnat.ads ada/g-htable.ads ada/hlo.ads \
ada/inline.ads ada/interfac.ads ada/lib.ads ada/lib-load.ads \ ada/hostparm.ads ada/inline.ads ada/interfac.ads ada/lib.ads \
ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ ada/lib-load.ads ada/namet.ads ada/namet.adb ada/nlists.ads \
ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \
ada/rident.ads ada/rtsfind.ads ada/sem.ads ada/sem.adb ada/sem_attr.ads \ ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \
ada/sem_aux.ads ada/sem_ch10.ads ada/sem_ch11.ads ada/sem_ch12.ads \ ada/sem.ads ada/sem.adb ada/sem_attr.ads ada/sem_aux.ads \
ada/sem_ch13.ads ada/sem_ch2.ads ada/sem_ch3.ads ada/sem_ch4.ads \ ada/sem_ch10.ads ada/sem_ch11.ads ada/sem_ch12.ads ada/sem_ch13.ads \
ada/sem_ch5.ads ada/sem_ch6.ads ada/sem_ch7.ads ada/sem_ch8.ads \ ada/sem_ch2.ads ada/sem_ch3.ads ada/sem_ch4.ads ada/sem_ch5.ads \
ada/sem_ch9.ads ada/sem_eval.ads ada/sem_prag.ads ada/sem_res.ads \ ada/sem_ch6.ads ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_ch9.ads \
ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \ ada/sem_eval.ads ada/sem_prag.ads ada/sem_res.ads ada/sem_util.ads \
ada/sinput.ads ada/snames.ads ada/sprint.ads ada/stand.ads \ ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \ ada/snames.ads ada/sprint.ads ada/stand.ads ada/system.ads \
ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \ ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \
ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \
ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \ ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
ada/targparm.ads ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads \ ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads ada/types.ads \
ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads \ ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
ada/widechar.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/widechar.ads
ada/exp_ch2.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \ ada/exp_ch2.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/aspects.ads ada/atree.ads \ ada/a-uncdea.ads ada/alloc.ads ada/aspects.ads ada/atree.ads \
...@@ -2072,34 +2075,35 @@ ada/exp_ch7.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \ ...@@ -2072,34 +2075,35 @@ ada/exp_ch7.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/aspects.ads ada/atree.ads \ ada/a-uncdea.ads ada/alloc.ads ada/aspects.ads ada/atree.ads \
ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \
ada/debug_a.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \ ada/debug_a.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \
ada/err_vars.ads ada/errout.ads ada/errout.adb ada/erroutc.ads \ ada/elists.adb ada/err_vars.ads ada/errout.ads ada/errout.adb \
ada/erroutc.adb ada/exp_aggr.ads ada/exp_ch11.ads ada/exp_ch6.ads \ ada/erroutc.ads ada/erroutc.adb ada/exp_aggr.ads ada/exp_ch11.ads \
ada/exp_ch7.ads ada/exp_ch7.adb ada/exp_ch9.ads ada/exp_dbug.ads \ ada/exp_ch6.ads ada/exp_ch7.ads ada/exp_ch7.adb ada/exp_ch9.ads \
ada/exp_disp.ads ada/exp_dist.ads ada/exp_tss.ads ada/exp_util.ads \ ada/exp_dbug.ads ada/exp_disp.ads ada/exp_dist.ads ada/exp_tss.ads \
ada/exp_util.adb ada/expander.ads ada/fname.ads ada/fname-uf.ads \ ada/exp_util.ads ada/exp_util.adb ada/expander.ads ada/fname.ads \
ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-hesorg.ads \ ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \
ada/g-htable.ads ada/gnatvsn.ads ada/hlo.ads ada/hostparm.ads \ ada/g-hesorg.ads ada/g-htable.ads ada/gnatvsn.ads ada/hlo.ads \
ada/inline.ads ada/interfac.ads ada/itypes.ads ada/lib.ads ada/lib.adb \ ada/hostparm.ads ada/inline.ads ada/interfac.ads ada/itypes.ads \
ada/lib-list.adb ada/lib-load.ads ada/lib-sort.adb ada/namet.ads \ ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-load.ads \
ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \ ada/lib-sort.adb ada/namet.ads ada/namet.adb ada/nlists.ads \
ada/opt.ads ada/output.ads ada/restrict.ads ada/restrict.adb \ ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \
ada/rident.ads ada/rtsfind.ads ada/rtsfind.adb ada/scans.ads \ ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \
ada/sem.ads ada/sem.adb ada/sem_attr.ads ada/sem_aux.ads \ ada/rtsfind.adb ada/scans.ads ada/sem.ads ada/sem.adb ada/sem_attr.ads \
ada/sem_aux.adb ada/sem_ch10.ads ada/sem_ch11.ads ada/sem_ch12.ads \ ada/sem_aux.ads ada/sem_aux.adb ada/sem_ch10.ads ada/sem_ch11.ads \
ada/sem_ch13.ads ada/sem_ch2.ads ada/sem_ch3.ads ada/sem_ch4.ads \ ada/sem_ch12.ads ada/sem_ch13.ads ada/sem_ch2.ads ada/sem_ch3.ads \
ada/sem_ch5.ads ada/sem_ch6.ads ada/sem_ch7.ads ada/sem_ch8.ads \ ada/sem_ch4.ads ada/sem_ch5.ads ada/sem_ch6.ads ada/sem_ch7.ads \
ada/sem_ch9.ads ada/sem_dist.ads ada/sem_eval.ads ada/sem_prag.ads \ ada/sem_ch8.ads ada/sem_ch9.ads ada/sem_dist.ads ada/sem_eval.ads \
ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads ada/sinfo.ads \ ada/sem_prag.ads ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \
ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
ada/stringt.ads ada/stylesw.ads ada/system.ads ada/s-exctab.ads \ ada/stringt.ads ada/stringt.adb ada/stylesw.ads ada/system.ads \
ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \ ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \
ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \
ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \ ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \
ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \ ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/widechar.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads \
ada/widechar.ads
ada/exp_ch8.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \ ada/exp_ch8.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/aspects.ads ada/atree.ads \ ada/a-uncdea.ads ada/alloc.ads ada/aspects.ads ada/atree.ads \
...@@ -2122,12 +2126,13 @@ ada/exp_ch8.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \ ...@@ -2122,12 +2126,13 @@ ada/exp_ch8.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \ ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \
ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \ ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
ada/s-rident.ads ada/s-secsta.ads ada/s-stalib.ads ada/s-stoele.ads \ ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \ ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \
ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads ada/types.ads \ ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tree_io.ads \
ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \ ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/widechar.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads \
ada/widechar.ads
ada/exp_ch9.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \ ada/exp_ch9.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/aspects.ads ada/atree.ads \ ada/a-uncdea.ads ada/alloc.ads ada/aspects.ads ada/atree.ads \
...@@ -4483,42 +4488,42 @@ ada/sem_res.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \ ...@@ -4483,42 +4488,42 @@ ada/sem_res.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/aspects.ads ada/atree.ads \ ada/a-uncdea.ads ada/alloc.ads ada/aspects.ads ada/atree.ads \
ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \ ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \
ada/csets.ads ada/debug.ads ada/debug_a.ads ada/debug_a.adb \ ada/csets.ads ada/debug.ads ada/debug_a.ads ada/debug_a.adb \
ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \ ada/einfo.ads ada/einfo.adb ada/elists.ads ada/err_vars.ads \
ada/err_vars.ads ada/errout.ads ada/errout.adb ada/erroutc.ads \ ada/errout.ads ada/errout.adb ada/erroutc.ads ada/erroutc.adb \
ada/erroutc.adb ada/eval_fat.ads ada/exp_aggr.ads ada/exp_ch11.ads \ ada/eval_fat.ads ada/exp_aggr.ads ada/exp_ch11.ads ada/exp_ch2.ads \
ada/exp_ch2.ads ada/exp_ch4.ads ada/exp_ch6.ads ada/exp_ch7.ads \ ada/exp_ch4.ads ada/exp_ch6.ads ada/exp_ch7.ads ada/exp_code.ads \
ada/exp_code.ads ada/exp_disp.ads ada/exp_dist.ads ada/exp_pakd.ads \ ada/exp_disp.ads ada/exp_dist.ads ada/exp_pakd.ads ada/exp_tss.ads \
ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb ada/expander.ads \ ada/exp_util.ads ada/exp_util.adb ada/expander.ads ada/fname.ads \
ada/fname.ads ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads \ ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \
ada/gnat.ads ada/g-hesorg.ads ada/g-htable.ads ada/gnatvsn.ads \ ada/g-hesorg.ads ada/g-htable.ads ada/gnatvsn.ads ada/hlo.ads \
ada/hlo.ads ada/hostparm.ads ada/inline.ads ada/interfac.ads \ ada/hostparm.ads ada/inline.ads ada/interfac.ads ada/itypes.ads \
ada/itypes.ads ada/lib.ads ada/lib.adb ada/lib-list.adb \ ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-load.ads \
ada/lib-load.ads ada/lib-sort.adb ada/lib-util.ads ada/lib-xref.ads \ ada/lib-sort.adb ada/lib-util.ads ada/lib-xref.ads ada/namet.ads \
ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \
ada/nmake.adb ada/opt.ads ada/output.ads ada/par_sco.ads \ ada/opt.ads ada/output.ads ada/par_sco.ads ada/put_alfa.ads \
ada/put_alfa.ads ada/restrict.ads ada/restrict.adb ada/rident.ads \ ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \
ada/rtsfind.ads ada/rtsfind.adb ada/scans.ads ada/sem.ads ada/sem.adb \ ada/rtsfind.adb ada/scans.ads ada/sem.ads ada/sem.adb ada/sem_aggr.ads \
ada/sem_aggr.ads ada/sem_attr.ads ada/sem_aux.ads ada/sem_aux.adb \ ada/sem_attr.ads ada/sem_aux.ads ada/sem_aux.adb ada/sem_cat.ads \
ada/sem_cat.ads ada/sem_ch10.ads ada/sem_ch11.ads ada/sem_ch12.ads \ ada/sem_ch10.ads ada/sem_ch11.ads ada/sem_ch12.ads ada/sem_ch13.ads \
ada/sem_ch13.ads ada/sem_ch13.adb ada/sem_ch2.ads ada/sem_ch3.ads \ ada/sem_ch13.adb ada/sem_ch2.ads ada/sem_ch3.ads ada/sem_ch4.ads \
ada/sem_ch4.ads ada/sem_ch5.ads ada/sem_ch6.ads ada/sem_ch7.ads \ ada/sem_ch5.ads ada/sem_ch6.ads ada/sem_ch7.ads ada/sem_ch8.ads \
ada/sem_ch8.ads ada/sem_ch9.ads ada/sem_disp.ads ada/sem_dist.ads \ ada/sem_ch9.ads ada/sem_disp.ads ada/sem_dist.ads ada/sem_elab.ads \
ada/sem_elab.ads ada/sem_elim.ads ada/sem_eval.ads ada/sem_eval.adb \ ada/sem_elim.ads ada/sem_eval.ads ada/sem_eval.adb ada/sem_intr.ads \
ada/sem_intr.ads ada/sem_prag.ads ada/sem_res.ads ada/sem_res.adb \ ada/sem_prag.ads ada/sem_res.ads ada/sem_res.adb ada/sem_type.ads \
ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \ ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads ada/sem_warn.adb \
ada/sem_warn.adb ada/sinfo.ads ada/sinfo.adb ada/sinfo-cn.ads \ ada/sinfo.ads ada/sinfo.adb ada/sinfo-cn.ads ada/sinput.ads \
ada/sinput.ads ada/sinput.adb ada/snames.ads ada/sprint.ads \ ada/sinput.adb ada/snames.ads ada/sprint.ads ada/stand.ads \
ada/stand.ads ada/stringt.ads ada/stringt.adb ada/style.ads \ ada/stringt.ads ada/stringt.adb ada/style.ads ada/styleg.ads \
ada/styleg.ads ada/styleg.adb ada/stylesw.ads ada/system.ads \ ada/styleg.adb ada/stylesw.ads ada/system.ads ada/s-carun8.ads \
ada/s-carun8.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \ ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \
ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \ ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \
ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \ ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \ ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \
ada/ttypes.ads ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb \ ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb ada/uname.ads \
ada/uname.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads \ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \
ada/urealp.adb ada/validsw.ads ada/warnsw.ads ada/widechar.ads ada/validsw.ads ada/warnsw.ads ada/widechar.ads
ada/sem_scil.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \ ada/sem_scil.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/aspects.ads ada/atree.ads \ ada/a-uncdea.ads ada/alloc.ads ada/aspects.ads ada/atree.ads \
......
...@@ -44,6 +44,7 @@ with Ada.Command_Line; use Ada.Command_Line; ...@@ -44,6 +44,7 @@ with Ada.Command_Line; use Ada.Command_Line;
with GNAT.Case_Util; use GNAT.Case_Util; with GNAT.Case_Util; use GNAT.Case_Util;
with GNAT.Directory_Operations; use GNAT.Directory_Operations; with GNAT.Directory_Operations; use GNAT.Directory_Operations;
with GNAT.HTable; with GNAT.HTable;
with GNAT.Regexp; use GNAT.Regexp;
package body Makeutl is package body Makeutl is
...@@ -1230,7 +1231,9 @@ package body Makeutl is ...@@ -1230,7 +1231,9 @@ package body Makeutl is
procedure Add_Main procedure Add_Main
(Name : String; (Name : String;
Index : Int := 0; Index : Int := 0;
Location : Source_Ptr := No_Location) Location : Source_Ptr := No_Location;
Project : Project_Id := No_Project;
Tree : Project_Tree_Ref := null)
is is
begin begin
Name_Len := 0; Name_Len := 0;
...@@ -1238,7 +1241,8 @@ package body Makeutl is ...@@ -1238,7 +1241,8 @@ package body Makeutl is
Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len)); Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
Names.Increment_Last; Names.Increment_Last;
Names.Table (Names.Last) := (Name_Find, Index, Location, No_Source); Names.Table (Names.Last) :=
(Name_Find, Index, Location, No_Source, Project, Tree);
end Add_Main; end Add_Main;
-------------------------- --------------------------
...@@ -1283,29 +1287,52 @@ package body Makeutl is ...@@ -1283,29 +1287,52 @@ package body Makeutl is
procedure Fill_From_Project procedure Fill_From_Project
(Root_Project : Project_Id; (Root_Project : Project_Id;
Project_Tree : Project_Tree_Ref) is Project_Tree : Project_Tree_Ref)
is
procedure Add_Mains_From_Project
(Project : Project_Id; Tree : Project_Tree_Ref);
-- Add the main units from this project into Mains
procedure Add_Mains_From_Project
(Project : Project_Id;
Tree : Project_Tree_Ref)
is
List : String_List_Id;
Element : String_Element;
Agg : Aggregated_Project_List;
begin
Debug_Output ("Add_Mains_From_Project", Project.Name);
case Project.Qualifier is
when Aggregate =>
Agg := Project.Aggregated_Projects;
while Agg /= null loop
Add_Mains_From_Project (Agg.Project, Agg.Tree);
Agg := Agg.Next;
end loop;
when others =>
List := Project.Mains;
if List /= Prj.Nil_String then
-- The attribute Main is not an empty list.
-- Get the mains in the list
while List /= Prj.Nil_String loop
Element := Tree.Shared.String_Elements.Table (List);
Debug_Output ("Add_Main", Element.Value);
Add_Main (Name => Get_Name_String (Element.Value),
Index => Element.Index,
Location => Element.Location,
Project => Project,
Tree => Tree);
List := Element.Next;
end loop;
end if;
end case;
end Add_Mains_From_Project;
begin begin
if Number_Of_Mains = 0 then if Number_Of_Mains = 0 then
declare Add_Mains_From_Project (Root_Project, Project_Tree);
List : String_List_Id := Root_Project.Mains;
Element : String_Element;
begin
if List /= Prj.Nil_String then
-- The attribute Main is not an empty list.
-- Get the mains in the list
while List /= Prj.Nil_String loop
Element :=
Project_Tree.Shared.String_Elements.Table (List);
Add_Main (Name => Get_Name_String (Element.Value),
Index => Element.Index,
Location => Element.Location);
List := Element.Next;
end loop;
end if;
end;
end if; end if;
-- If there are mains, check that they are sources of the main -- If there are mains, check that they are sources of the main
...@@ -1314,7 +1341,7 @@ package body Makeutl is ...@@ -1314,7 +1341,7 @@ package body Makeutl is
if Mains.Number_Of_Mains > 0 then if Mains.Number_Of_Mains > 0 then
for J in Names.First .. Names.Last loop for J in Names.First .. Names.Last loop
declare declare
File : constant Main_Info := Names.Table (J); File : Main_Info := Names.Table (J);
Main_Id : File_Name_Type := File.File; Main_Id : File_Name_Type := File.File;
Main : constant String := Get_Name_String (Main_Id); Main : constant String := Get_Name_String (Main_Id);
Project : Project_Id; Project : Project_Id;
...@@ -1335,11 +1362,25 @@ package body Makeutl is ...@@ -1335,11 +1362,25 @@ package body Makeutl is
end if; end if;
end if; end if;
-- If no project or tree was specified for the main, it came
-- from the command line. In this case, it needs to belong
-- to the root project.
-- Note that the assignments below will not modify inside
-- the table itself.
if File.Project = null then
File.Project := Root_Project;
end if;
if File.Tree = null then
File.Tree := Project_Tree;
end if;
-- First, look for the main as specified. -- First, look for the main as specified.
Source := Find_Source Source := Find_Source
(In_Tree => Project_Tree, (In_Tree => File.Tree,
Project => Project, Project => File.Project,
Base_Name => File.File, Base_Name => File.File,
Index => File.Index); Index => File.Index);
...@@ -1350,11 +1391,11 @@ package body Makeutl is ...@@ -1350,11 +1391,11 @@ package body Makeutl is
-- Main already has a canonical casing -- Main already has a canonical casing
Main : constant String := Get_Name_String (Main_Id); Main : constant String := Get_Name_String (Main_Id);
begin begin
Project := Root_Project; Project := File.Project;
while Source = No_Source while Source = No_Source
and then Project /= No_Project and then Project /= No_Project
loop loop
Iter := For_Each_Source (Project_Tree, Project); Iter := For_Each_Source (File.Tree, Project);
loop loop
Source := Prj.Element (Iter); Source := Prj.Element (Iter);
exit when Source = No_Source; exit when Source = No_Source;
...@@ -1387,8 +1428,10 @@ package body Makeutl is ...@@ -1387,8 +1428,10 @@ package body Makeutl is
end if; end if;
if Source /= No_Source then if Source /= No_Source then
Names.Table (J).File := Source.File; Names.Table (J).File := Source.File;
Names.Table (J).Source := Source; Names.Table (J).Project := File.Project;
Names.Table (J).Tree := File.Tree;
Names.Table (J).Source := Source;
elsif File.Location /= No_Location then elsif File.Location /= No_Location then
-- If the main is declared in package Builder of the -- If the main is declared in package Builder of the
...@@ -1760,6 +1803,9 @@ package body Makeutl is ...@@ -1760,6 +1803,9 @@ package body Makeutl is
-- Whether S has already been processed. This marks the source as -- Whether S has already been processed. This marks the source as
-- processed, if it hasn't already been processed. -- processed, if it hasn't already been processed.
function Insert_No_Roots (Source : Source_Info) return Boolean;
-- Insert Source, but do not look for its roots (see doc for Insert).
------------------- -------------------
-- Was_Processed -- -- Was_Processed --
------------------- -------------------
...@@ -1951,12 +1997,16 @@ package body Makeutl is ...@@ -1951,12 +1997,16 @@ package body Makeutl is
end if; end if;
end Initialize; end Initialize;
------------ ---------------------
-- Insert -- -- Insert_No_Roots --
------------ ---------------------
function Insert (Source : Source_Info) return Boolean is function Insert_No_Roots (Source : Source_Info) return Boolean is
begin begin
pragma Assert
(Source.Format = Format_Gnatmake
or else Source.Id /= No_Source);
-- Only insert in the Q if it is not already done, to avoid -- Only insert in the Q if it is not already done, to avoid
-- simultaneous compilations if -jnnn is used. -- simultaneous compilations if -jnnn is used.
...@@ -1988,17 +2038,216 @@ package body Makeutl is ...@@ -1988,17 +2038,216 @@ package body Makeutl is
end if; end if;
return True; return True;
end Insert_No_Roots;
------------
-- Insert --
------------
function Insert
(Source : Source_Info; With_Roots : Boolean := False) return Boolean
is
Root_Arr : Array_Element_Id;
Roots : Variable_Value;
List : String_List_Id;
Elem : String_Element;
Unit_Name : Name_Id;
Pat_Root : Boolean;
Root_Pattern : Regexp;
Root_Found : Boolean;
Roots_Found : Boolean;
Dummy : Boolean;
Root_Source : Prj.Source_Id;
Iter : Source_Iterator;
pragma Unreferenced (Dummy);
begin
if not Insert_No_Roots (Source) then
-- Was already in the queue
return False;
end if;
if With_Roots and then Source.Format = Format_Gprbuild then
Debug_Output ("Looking for roots of", Name_Id (Source.Id.File));
Root_Arr :=
Prj.Util.Value_Of
(Name => Name_Roots,
In_Arrays => Source.Id.Project.Decl.Arrays,
Shared => Source.Tree.Shared);
Roots :=
Prj.Util.Value_Of
(Index => Name_Id (Source.Id.File),
Src_Index => 0,
In_Array => Root_Arr,
Shared => Source.Tree.Shared);
-- If there is no roots for the specific main, try the language
if Roots = Nil_Variable_Value then
Roots :=
Prj.Util.Value_Of
(Index => Source.Id.Language.Name,
Src_Index => 0,
In_Array => Root_Arr,
Shared => Source.Tree.Shared,
Force_Lower_Case_Index => True);
end if;
-- Then try "*"
if Roots = Nil_Variable_Value then
Name_Len := 1;
Name_Buffer (1) := '*';
Roots :=
Prj.Util.Value_Of
(Index => Name_Find,
Src_Index => 0,
In_Array => Root_Arr,
Shared => Source.Tree.Shared,
Force_Lower_Case_Index => True);
end if;
if Roots = Nil_Variable_Value then
Debug_Output (" -> no roots declared");
else
List := Roots.Values;
Pattern_Loop :
while List /= Nil_String loop
Elem := Source.Tree.Shared.String_Elements.Table (List);
Get_Name_String (Elem.Value);
To_Lower (Name_Buffer (1 .. Name_Len));
Unit_Name := Name_Find;
-- Check if it is a unit name or a pattern
Pat_Root := False;
for J in 1 .. Name_Len loop
if Name_Buffer (J) not in 'a' .. 'z'
and then Name_Buffer (J) not in '0' .. '9'
and then Name_Buffer (J) /= '_'
and then Name_Buffer (J) /= '.'
then
Pat_Root := True;
exit;
end if;
end loop;
if Pat_Root then
begin
Root_Pattern :=
Compile
(Pattern => Name_Buffer (1 .. Name_Len),
Glob => True);
exception
when Error_In_Regexp =>
Err_Vars.Error_Msg_Name_1 := Unit_Name;
Errutil.Error_Msg
("invalid pattern %", Roots.Location);
exit Pattern_Loop;
end;
end if;
Roots_Found := False;
Iter := For_Each_Source (Source.Tree);
Source_Loop :
loop
Root_Source := Prj.Element (Iter);
exit Source_Loop when Root_Source = No_Source;
Root_Found := False;
if Pat_Root then
Root_Found := Root_Source.Unit /= No_Unit_Index
and then Match
(Get_Name_String (Root_Source.Unit.Name),
Root_Pattern);
else
Root_Found :=
Root_Source.Unit /= No_Unit_Index
and then Root_Source.Unit.Name = Unit_Name;
end if;
if Root_Found then
case Root_Source.Kind is
when Impl =>
null;
when Spec =>
Root_Found := Other_Part (Root_Source) = No_Source;
when Sep =>
Root_Found := False;
end case;
end if;
if Root_Found then
Roots_Found := True;
Debug_Output
(" -> ", Name_Id (Root_Source.Display_File));
Dummy := Queue.Insert_No_Roots
(Source => (Format => Format_Gprbuild,
Tree => Source.Tree,
Id => Root_Source));
Initialize_Source_Record (Root_Source);
if Other_Part (Root_Source) /= No_Source then
Initialize_Source_Record (Other_Part (Root_Source));
end if;
-- Save the root for the binder.
Source.Id.Roots := new Source_Roots'
(Root => Root_Source,
Next => Source.Id.Roots);
exit Source_Loop when not Pat_Root;
end if;
Next (Iter);
end loop Source_Loop;
if not Roots_Found then
if Pat_Root then
if not Quiet_Output then
Error_Msg_Name_1 := Unit_Name;
Errutil.Error_Msg
("?no unit matches pattern %", Roots.Location);
end if;
else
Errutil.Error_Msg
("Unit " & Get_Name_String (Unit_Name)
& " does not exist", Roots.Location);
end if;
end if;
List := Elem.Next;
end loop Pattern_Loop;
end if;
end if;
return True;
end Insert; end Insert;
------------ ------------
-- Insert -- -- Insert --
------------ ------------
procedure Insert (Source : Source_Info) is procedure Insert
(Source : Source_Info; With_Roots : Boolean := False)
is
Discard : Boolean; Discard : Boolean;
pragma Unreferenced (Discard); pragma Unreferenced (Discard);
begin begin
Discard := Insert (Source); Discard := Insert (Source, With_Roots);
end Insert; end Insert;
-------------- --------------
...@@ -2136,6 +2385,7 @@ package body Makeutl is ...@@ -2136,6 +2385,7 @@ package body Makeutl is
then then
Queue.Insert Queue.Insert
(Source => (Format => Format_Gprbuild, (Source => (Format => Format_Gprbuild,
Tree => Project_Tree,
Id => Source)); Id => Source));
end if; end if;
end if; end if;
...@@ -2221,6 +2471,7 @@ package body Makeutl is ...@@ -2221,6 +2471,7 @@ package body Makeutl is
then then
Queue.Insert Queue.Insert
(Source => (Format => Format_Gprbuild, (Source => (Format => Format_Gprbuild,
Tree => Project_Tree,
Id => Src_Id)); Id => Src_Id));
end if; end if;
end if; end if;
......
...@@ -245,15 +245,21 @@ package Makeutl is ...@@ -245,15 +245,21 @@ package Makeutl is
File : File_Name_Type; -- Always canonical casing File : File_Name_Type; -- Always canonical casing
Index : Int := 0; Index : Int := 0;
Location : Source_Ptr := No_Location; Location : Source_Ptr := No_Location;
Source : Prj.Source_Id := No_Source; Source : Prj.Source_Id := No_Source;
Project : Project_Id;
Tree : Project_Tree_Ref;
end record; end record;
No_Main_Info : constant Main_Info := (No_File, 0, No_Location, No_Source); No_Main_Info : constant Main_Info :=
(No_File, 0, No_Location, No_Source, No_Project, null);
package Mains is package Mains is
procedure Add_Main procedure Add_Main
(Name : String; (Name : String;
Index : Int := 0; Index : Int := 0;
Location : Source_Ptr := No_Location); Location : Source_Ptr := No_Location;
Project : Project_Id := No_Project;
Tree : Project_Tree_Ref := null);
-- Add one main to the table. -- Add one main to the table.
-- This is in general used to add the main files specified on the -- This is in general used to add the main files specified on the
-- command line. -- command line.
...@@ -261,6 +267,10 @@ package Makeutl is ...@@ -261,6 +267,10 @@ package Makeutl is
-- within the source is concerned. -- within the source is concerned.
-- Location is the location within the project file (if a project file -- Location is the location within the project file (if a project file
-- is used). -- is used).
-- Project and Tree indicate to which project the main should belong.
-- In particular, for aggregate projects, this isn't necessarily the
-- main project tree. These can be set to No_Project and null when not
-- using projects.
procedure Delete; procedure Delete;
-- Empty the table -- Empty the table
...@@ -290,8 +300,7 @@ package Makeutl is ...@@ -290,8 +300,7 @@ package Makeutl is
Project_Tree : Project_Tree_Ref); Project_Tree : Project_Tree_Ref);
-- If no main was already added (presumably from the command line), add -- If no main was already added (presumably from the command line), add
-- the main units from root_project (or in the case of an aggregate -- the main units from root_project (or in the case of an aggregate
-- project from all the -- project from all the aggregated projects).
-- aggregated projects).
-- --
-- If some main units were already added from the command line, check -- If some main units were already added from the command line, check
-- that they all belong to the root project, and that they are full -- that they all belong to the root project, and that they are full
...@@ -314,7 +323,8 @@ package Makeutl is ...@@ -314,7 +323,8 @@ package Makeutl is
record record
case Format is case Format is
when Format_Gprbuild => when Format_Gprbuild =>
Id : Source_Id := null; Tree : Project_Tree_Ref := null;
Id : Source_Id := null;
when Format_Gnatmake => when Format_Gnatmake =>
File : File_Name_Type := No_File; File : File_Name_Type := No_File;
...@@ -352,11 +362,18 @@ package Makeutl is ...@@ -352,11 +362,18 @@ package Makeutl is
-- Returns True if the queue is empty or if all object directories are -- Returns True if the queue is empty or if all object directories are
-- busy. -- busy.
procedure Insert (Source : Source_Info); procedure Insert (Source : Source_Info; With_Roots : Boolean := False);
function Insert (Source : Source_Info) return Boolean; function Insert
(Source : Source_Info; With_Roots : Boolean := False) return Boolean;
-- Insert source in the queue. -- Insert source in the queue.
-- The second version returns False if the Source was already marked in -- The second version returns False if the Source was already marked in
-- the queue. -- the queue.
-- If With_Roots is True and the source is in Format_Gprbuild mode (ie
-- with a project), this procedure also includes the "Roots" for this
-- main, ie all the other files that must be included in the library or
-- binary (in particular to combine Ada and C files connected through
-- pragma Export/Import). When the roots are computed, they are also
-- stored in the corresponding Source_Id for later reuse by the binder.
procedure Insert_Project_Sources procedure Insert_Project_Sources
(Project : Project_Id; (Project : Project_Id;
......
...@@ -660,6 +660,17 @@ package Prj is ...@@ -660,6 +660,17 @@ package Prj is
No_Unit_Index : constant Unit_Index := null; No_Unit_Index : constant Unit_Index := null;
-- Used to indicate a null entry for no unit -- Used to indicate a null entry for no unit
type Source_Roots;
type Roots_Access is access Source_Roots;
type Source_Roots is record
Root : Source_Id;
Next : Roots_Access;
end record;
-- A list to store the roots associated with a main unit. These are the
-- files that need to linked along with the main (for instance a C file
-- corresponding to an Ada file). In general, these are dependencies that
-- cannot be computed automatically by the builder.
-- Structure to define source data -- Structure to define source data
type Source_Data is record type Source_Data is record
...@@ -784,6 +795,9 @@ package Prj is ...@@ -784,6 +795,9 @@ package Prj is
Next_With_File_Name : Source_Id := No_Source; Next_With_File_Name : Source_Id := No_Source;
-- Link to another source with the same base file name -- Link to another source with the same base file name
Roots : Roots_Access := null;
-- The roots for a main unit
end record; end record;
No_Source_Data : constant Source_Data := No_Source_Data : constant Source_Data :=
...@@ -821,7 +835,8 @@ package Prj is ...@@ -821,7 +835,8 @@ package Prj is
Naming_Exception => False, Naming_Exception => False,
Duplicate_Unit => False, Duplicate_Unit => False,
Next_In_Lang => No_Source, Next_In_Lang => No_Source,
Next_With_File_Name => No_Source); Next_With_File_Name => No_Source,
Roots => null);
package Source_Files_Htable is new Simple_HTable package Source_Files_Htable is new Simple_HTable
(Header_Num => Header_Num, (Header_Num => Header_Num,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment