Commit Graph

277 Commits

Author SHA1 Message Date
Peter Wang
c4c840cb7e Delete Erlang backend from configure.
configure.ac:
m4/mercury.m4:
    Delete --enable-erlang-grade configure option.

    Don't search for erlang compiler and interpreter.

    Don't substitute @ERLC@ and @ERL@.

    Don't add erlang to libgrades.

    Don't generate erlang_conf.hrl

library/erlang_conf.hrl.in:
    Delete template file.

.dockerignore:
browser/MDB_FLAGS.in:
compiler/COMP_FLAGS.in:
deep_profiler/DEEP_FLAGS.in:
library/.gitignore:
library/Mmakefile:
library/library.m:
mdbcomp/MDBCOMP_FLAGS.in:
mfilterjavac/MFILTERJAVAC_FLAGS.in:
profiler/PROF_FLAGS.in:
scripts/Mercury.config*.in:
scripts/mercury_config.in:
scripts/prepare_install_dir.in:
ssdb/SSDB_FLAGS.in:
tools/bootcheck:
    Delete references to Erlang .hrl files.

    Delete references to @ERLC@ and @ERL@.
2020-10-27 11:10:11 +11:00
Zoltan Somogyi
409cbcb6a3 Unify getopt.m and getopt_io.m ...
... using an approach proposed by Peter, with an extra twist from Julien.

Instead of having two modules, getopt.m and getopt_io.m, with the former
defining predicates that do not take an I/O state pair, and the latter
defining predicates that do take an I/O state pair, put both kinds of
predicates into a single module. The versions with an I/O state pair
have an "_io" suffix added to their names for disambiguation.
Both versions are a veneer on top of a common infrastructure,
which relies on a simple type class to implement the operation
"give the contents of the file with this name". The predicate versions
with I/O state pairs have a normal implementation of this typeclass,
while the predicate versions that do not have I/O state pairs
have an implementation that always returns an error indication.

The above change just about doubles the number of exported predicates.
We already had two versions of most exported predicates that differed
in whether we returned errors in the form of a string, or in the form
of a structured representation, with names of the latter having
an "_se" suffix. Since we agreed that the structured representation
is the form we want to encourage, this diff deletes the string versions,
and deletes the "_se" suffix from the predicate names that used to have them.
(It still remains at the end of the name of a type.) This "undoubling"
should offset the effect of the doubling in the previous paragraph.

Eventually, we want to have just one module, getopt.m, containing
the updated code described above, but for now, we put the same code
into both getopt_io.m and getopt.m to prevent too big a shock to
people with existing code that uses getopt_io.m.

library/getopt.m:
library/getopt_io.m:
    Make the changes described above.

library/Mmakefile:
    Instead of building both getopt_io.m and getopt.m from getopt_template,
    build getopt.m from getopt_io.m.

tools/bootcheck:
    Delete references to getopt_template.

compiler/typecheck_errors.m:
    When a type error involves one of the getopt/getopt_io predicates
    whose interfaces are changed by this diff, tell the user about
    how these changes could have caused the error, and thus what the
    probable fix is.

compiler/handle_options.m:
browser/parse.m:
deep_profiler/mdprof_cgi.m:
deep_profiler/mdprof_create_feedback.m:
deep_profiler/mdprof_dump.m:
deep_profiler/mdprof_procrep.m:
deep_profiler/mdprof_report_feedback.m:
deep_profiler/mdprof_test.m:
profiler/mercury_profile.m:
slice/mcov.m:
slice/mdice.m:
slice/mslice.m:
slice/mtc_diff.m:
slice/mtc_union.m:
tests/hard_coded/space.m:
    Use the updated getopt interface.

compiler/compile_target_code.m:
compiler/compute_grade.m:
compiler/deforest.m:
compiler/det_report.m:
compiler/format_call.m:
compiler/globals.m:
compiler/goal_expr_to_goal.m:
compiler/make.build.m:
compiler/make.m:
compiler/make.module_dep_file.m:
compiler/make.program_target.m:
compiler/make.util.m:
compiler/mercury_compile_main.m:
compiler/ml_top_gen.m:
compiler/module_cmds.m:
compiler/op_mode.m:
compiler/optimization_options.m:
compiler/options.m:
compiler/write_module_interface_files.m:
tools/make_optimization_options_middle:
tools/make_optimization_options_start:
    Replace references to getopt_io.m with references to getopt.m.

tests/invalid/getopt_io_old.{m,err_exp}:
tests/invalid/getopt_old.{m,err_exp}:
tests/invalid/getopt_old_se.{m, err_exp}:
    New test cases for the extra help

tests/invalid/Mmakefile:
    Enable the new test cases.
2020-10-09 19:30:46 +11:00
Zoltan Somogyi
cf22c0af9a Fix typo. 2020-10-06 23:10:09 +11:00
Zoltan Somogyi
be3f9443b1 Simplify the setup of mdbrc for tests.
We used to set up *two* mdbrc files for use by test cases:
scripts/test_mdbrc, and tests/mdbrc. Tools/bootcheck said
the tests should use the former, while tests/Mmake.common
said they should use the latter. This diff deletes the latter,
and uniformly uses the former.

The setup code was also scattered, with parts being done by
the configure script, and part being done by tools/bootcheck.
Move it all to scripts/Mmakefile, since that is the natural
place to put code to build scripts/test_mdbrc.

Mmakefile:
    Fix the action for cleaning up the tests directory.
    This started out as the reason for this whole change.
    As it happens, a *working* action for cleaning up the tests
    broke things, because it deleted an autoconfigured file
    (tests/mdbrc) that there was no rule for rebuilding.
    This issue is what required the rest of this diff.

    When doing "mmake clean/realclean", clean the extras as well.

configure.ac:
    Delete the code creating tests/mdbrc.in.

scripts/Mmakefile:
    Add a rule to build test_mdbrc, as mentioned above.

tests/Mmake.common:
    Switch to using scripts/test_mdbrc in test cases
    run under mdb.

    Mark the rules that clean up mdbrc and mdbrc.in
    as obsolete, since we will now stop creating those files.

tools/bootcheck:
    Delete the code that used to build tests/mdbrc. Instead,
    rebuild scripts/test_mdbrc (in case the workspace was moved),
    and use that.

tests/Mmakefile:
    When cleaning the tests directory, clean its subdirectories
    (since the top level directory does not have much clean).
2020-10-04 23:00:29 +11:00
Julien Fischer
b3d4fad5bb Do not symlink getopt*.m into stage 2.
tools/bootcheck:
    As above.
2020-09-20 21:55:36 +10:00
Zoltan Somogyi
dd8424045f Ensure the building of getopt.m and getopt_io.m.
library/Mmakefile:
    Ensure that getopt.m and getopt_io.m are built in freshly checked out
    workspaces before starting making the dependencies.

    Include getopt_template as a source file when building the tags file.

tools/bootcheck:
    Copy getopt_template to the stage 2 and 3 libraries, to allow
    the rule for ensuring the existence of the tags file to work.
2020-09-19 07:30:08 +10:00
Zoltan Somogyi
155fbdd7fd Make programming style consistent. 2020-08-09 20:31:46 +10:00
Zoltan Somogyi
c644e8d19f Consistently ${var} instead of $var. 2020-06-13 22:17:28 +10:00
Zoltan Somogyi
ac50b3cbd1 Do not use exceptions in options_file.m.
And add tests for how the compiler handles both valid and invalid
options files.

compiler/options_file.m:
    This diff rewrites options_file.m in a straightforward, direct style that
    returns indications of errors as error_specs rather than as exceptions.
    A recent diff started on this task; this diff finishes it.

    The new approach has several advantages.

    - The control flow is much simpler, and therefore more understandable.
      Correctness arguments for propositions such as "this code closes
      all the file streams that it opens" are now much simpler to make.

    - We now report errors using error_specs, which contain context
      information, while previously, each error was described only
      by a string, without context info.

    - Once we detect and report one error, we can continue to read the
      rest of the input. This allows a single compiler invocation to find
      and report several errors, not just the first.

    - Since we now return the gathered set of error_specs instead of printing
      them, the predicates of this file don't have to take globals structures
      as arguments, which allows our callers to avoid constructing those
      structures.

    - Deep profiling, which cannot handle exceptions, now works on
      the code of this module.

    Change over to using trace goals for debugging prints, since continuing
    to use debug_make_msg would require a globals structure.

    Add an XXX on a likely bug.

    Add a mechanism for writing out a database of variable names and values.

compiler/mercury_compile_main.m:
    Conform to the changes in options_file.m. Document where exactly
    we could avoid constructing a globals just for options_file.m.

    If the right option is given, get options_file to write out the database
    of variable names and values it has just read in, to enable the
    functionality of this module to be tested.

compiler/options.m:
doc/user_guide.texi:
    Add a new developer option, --dump-options-file, to control the above.

compiler/make.build.m:
compiler/make.m:
compiler/make.program_target.m:
    Conform to the changes in options_file.m.

compiler/file_util.m:
    Fix an error message.

tests/Mmakefile:
tools/bootcheck:
    List options_file and invalid_options_file as two new test directories.

    Fix a command in bootcheck.

tests/options_file/Mmakefile:
    Add a mechanism for testing whether options_file.m builds mapping
    from make variable names to values that we expect.

tests/Mmake.common:
    Provide a mechanism for comparing dumped options_files against
    their expected contents, for use by tests/invalid_options_file/Mmakefile.

    Fix a comment.

tests/options_file/basic_test.m:
tests/options_file/basic_test.optfile_exp:
tests/options_file/basic_test.options_file:
tests/options_file/basic_test.options_file.sub0:
tests/options_file/basic_test.options_file.sub1:
    A simple test case for exercising all the usual options_file constructs.

tests/invalid_options_file/Mmakefile:
    Add a mechanism for testing whether options_file.m generates
    the error messages we expect for various kinds of errors in options files.

tests/invalid_options_file/no_assign.{m,options_file,err_exp}:
tests/invalid_options_file/no_var.{m,options_file,err_exp}:
tests/invalid_options_file/nonexistent_file.{m,options_file,err_exp}:
tests/invalid_options_file/undefined_var.{m,options_file,err_exp}:
tests/invalid_options_file/unterminated_string.{m,options_file,err_exp}:
tests/invalid_options_file/unterminated_var.{m,options_file,err_exp}:
    Six test cases to test six different kinds of errors that can be
    detected by options_file.m.
2020-06-12 04:14:00 +10:00
Zoltan Somogyi
1f45f91886 Make "mmake runtests" work again.
My commit afe2887882 broke the ability
to run the test suite outside of a bootcheck by executing "mmake runtests"
in the tests directory. This diff fixes that.

tests/Mmake.common:
    Don't define "TESTS_DIR = ..". While every single tests/*/Mmakefile
    defined it as such, I overlooked the fact that tests/Mmakefile itself
    defined it ".", referring to the same directory from a different starting
    point. Document this easily-overlooked fact.

    Rename the old runtests target, which after afe2887 runs the tests
    in a single directory, as runtests_dir, to leave the target name
    "runtests" itself free for tests/Mmakefile to use.

tests/Mmakefile:
    Define "TESTS_DIR = .", and add a target "runtests" which invokes
    "mmake runtests_dir" in each test directory.

tools/bootcheck:
    Invoke "mmake runtests_dir" instead of "mmake runtests" in each
    test directory.

    Initialize a variable just before it is used.

tests/*/Mmakefile:
    Add back the definition "TESTS_DIR = .."
2020-06-10 01:05:15 +10:00
Zoltan Somogyi
fe44a831bd Remove a workaround for NFS. 2020-05-30 23:35:53 +10:00
Zoltan Somogyi
79d81d09d8 Fix bugs and nits pointed out by shellcheck.
scripts/mgnuc.in:
    Delete the unused variables AS, AS_OPTS, HLD_OPTS and ARG_OPTS.
    The first two are hstorical relics, HLD_OPTS lost its raison d'etre
    when we deleted the hl grades; I don't know what we used ARG_OPTS for.

    Make the unused variable CFLAGS_FOR_ANSI used.

    Fix a spelling inconsistency: DEBUG_OPT vs DEBUG_OPTS.

scripts/ml.in:
    Delete the unused variables NONSHARED_LIB_DIR and DL_LIBRARY.

scripts/parse_grade_options.sh-subr:
    Fix typos that prevented an almost-never-used option from working.

scripts/parse_ml_options.sh-subr.in:
    Fix a quoting error.

tools/bootcheck:
    Comment out the definition of an unused variable. (Its parallel
    exists and is used in c2init.in, which is why it is not deleted.)

    Fix typos in spelling SSDB_LIB_NAME.

    Quote a variable value that may contain spaces.

    Replace "cat file | cmd" with "cmd < file".
2020-05-29 21:18:08 +10:00
Zoltan Somogyi
a67a33d639 Specify ft=sh in the vim modeline. 2020-04-28 11:50:33 +10:00
Zoltan Somogyi
58ff05ebaf Allow bootcheck in C# grade after grade_lib changes.
tools/bootcheck:
    Build grade_lib/GRADE_LIB_FLAGS before building stage 2.

    Make dependencies in grade_lib/ before building stage 3.

grade_lib/Mmakefile:
    Get the "make dependencies" step in stage 3 build GRADE_LIB_FLAGS.
2020-04-16 12:01:29 +10:00
Zoltan Somogyi
0c40f3b5f0 Build the grade_lib directory by default.
This should prevent bit rot in its code, such as that caused by the
move of the one_or_more type from list.m to one_or_more.m.

Mmakefile:
    Add grade_lib to the list of directories to build, to the list of
    directories in which dependencies are made, the list of directories
    in which tags files are made, and the list of directories to clean.

    Do not include the grade library in source distributions. In the
    intended use case, the grade library modules that the compiler needs
    will be present in the source distribution in the *compiler* directory.

    Add mfilterjavac to the list of directories for tags files; its former
    absence was an oversight.

    Fix inconsistent indentation.

tools/bootcheck:
    Build the grade library during stages 2 and 3. Compare its stage 2 and 3
    versions as we do for other directories.

    Put the commands that create stages 2 and 3 into recognizable blocks.

grade_lib/Mmakefile:
    Add the targets needed by either by bootcheck or by the top level
    Mmakefile.

    Document the intended usage of the grade library.

grade_lib/.mgnuc_copts:
grade_lib/.mgnuc_opts:
    Use the same .mgnu_*opts files as e.g. the profiler directory.
    The common command sequence used by bootcheck to build the
    stage 2 and 3 directories assumes their presence.

library/Mmakefile:
    Make it clear that some rules previously separated by dividing lines
    are actually related.
2020-04-14 09:35:55 +10:00
Zoltan Somogyi
aea3b98033 Test the process of making .int files.
tests/Mmakefile:
tools/bootcheck:
    Add invalid_make_int and valid_make_int as new test directories.

tests/invalid_make_int/missing_interface_import.m:
tests/invalid_make_int/missing_interface_import.int_err_exp:
tests/invalid_make_int/missing_interface_import.int_err_exp2:
    Move this test case from invalid to invalid_make_int, since it was
    *already* testing the error message we get from "mmc --make-interface".

tests/invalid_make_int/Mercury.options:
tests/invalid_make_int/Mmakefile:
    Set up testing of whether we get the right error messages during
    the process of making .int files.

tests/Mmake.common:
    Provide a way for tests in invalid_make_int to compare a .int_err file
    against several .int_err_exp* files.

tests/invalid/Mercury.options:
tests/invalid/Mmakefile:
    Delete references to the test case moved to invalid_make_int.

tests/valid_make_int/bug499.m:
    Add the test case that motivated this change.

tests/valid_make_int/Mercury.options:
tests/valid_make_int/Mmakefile:
    Set up testing of whether we can generate .int files for modules.
2020-04-13 04:14:51 +10:00
Zoltan Somogyi
66aa649378 Keep the .log files of successful tests if requested.
Sometimes, when a test case fails in a workspace even though it has passed
before, it is not clear whether the cause of the failure is that the
updated code in the workspace is generating a different sequence of
mmc invocations, or whether the same invocations do something different.
The new option allows developers to answer that question by keeping the logs
from a bootcheck in an unchanged workspace, and comparing the logs
between the workspaces.

tools/bootcheck:
    If given the --keep-success-log-files option, set an environment variable
    that records this fact.

tests/run_one_test:
    If this environment variable is set, then rename the .log files of
    successful test cases as .kept_log files instead of deleting them.

    Note that we cannot keep the .log files around under their original name,
    because we currently interpret the presence of *any* .log file
    in a test directory as meaning "some tests failed in this test directory".
2020-03-08 13:41:57 +11:00
Zoltan Somogyi
078e1dbfbc Enable the tests in the feedback directory. 2019-08-15 09:15:37 +10:00
Zoltan Somogyi
bd7d7db57d Move nested-module programs from invalid to invalid_submodules.
This is to compile them with "mmake -j1", and thus avoid the intermittent
failures caused by interface files of nested submodules not being ready
when another job, executed in parallel by mmake, wants to read them.

tests/invalid_submodules/children.m:
tests/invalid_submodules/children2.m:
tests/invalid_submodules/duplicate_module.m:
tests/invalid_submodules/duplicate_module_test.err_exp:
tests/invalid_submodules/duplicate_module_test.m:
tests/invalid_submodules/exported_unify3.err_exp:
tests/invalid_submodules/exported_unify3.err_exp2:
tests/invalid_submodules/exported_unify3.m:
tests/invalid_submodules/func_class.err_exp:
tests/invalid_submodules/func_class.m:
tests/invalid_submodules/import_in_parent.err_exp:
tests/invalid_submodules/import_in_parent.m:
tests/invalid_submodules/missing_parent_import.err_exp:
tests/invalid_submodules/missing_parent_import.m:
tests/invalid_submodules/nested_impl_in_int.err_exp:
tests/invalid_submodules/nested_impl_in_int.m:
tests/invalid_submodules/sub_a.m:
tests/invalid_submodules/sub_c.err_exp:
tests/invalid_submodules/sub_c.m:
tests/invalid_submodules/undef_mod_qual.err_exp:
tests/invalid_submodules/undef_mod_qual.m:
tests/invalid_submodules/unresolved_overloading.err_exp:
tests/invalid_submodules/unresolved_overloading.m:
    Move these files, which contain the source code and expected outputs
    of the affected test cases, from the invalid directory to the new
    invalid_submodules directory.

tests/invalid/Mercury.options:
tests/invalid/Mmakefile:
    Delete any mentions of the moved test cases.

    Improve sh programming style in actions.

tests/invalid_submodules/Mercury.options:
tests/invalid_submodules/Mmakefile:
    List *only* the moved test cases. Specify the -j1 flag for mmake.

tests/Mmakefile:
tools/bootcheck:
    Mention the new test directory.

    Request that the list of test directories in these two places be kept
    in sync.

    Note that the feedback test directory is not yet ready.
2019-08-14 23:28:00 +10:00
Julien Fischer
8e4fc73fc6 Support parallel bootchecks using --use-mmc-make.
Parallel bootchecks using --use-mmc-make do not currently work because mmake
creates multiple instances of mmc --make per directory and these conflict with
each other.  Modify the bootcheck script so that when --use-mmc-make is
enabled, we do not build affected directories with mmake's -j option but
instead pass the -j option directly to Mercury compiler.

tools/bootcheck:
   As above.
2019-07-09 12:25:23 +10:00
Julien Fischer
d79a07f13a Handle macOS shared libraries in a spot.
tools/bootcheck:
    As above.
2019-07-08 20:54:27 +10:00
Zoltan Somogyi
4bf9dd6ca3 Build more directories in stages 2 and 3.
tools/bootcheck:
    Build the deep_profiler and mfilterjavac directories in stage 2.

    Build the slice, profiler, deep_profiler and mfilterjavac directories
    in stage 3. (We already used to build slice and profiler in stage 2.)

    Compare target language files in the stage 2 and stage 3 versions
    of the slice, profiler, deep_profiler and mfilterjavac directories,
    to make bootcheck a tougher test. This requires copying these directories
    to stage 3, instead of just linking them.

    Don't make dependencies in a directory if we had already done them
    earlier.

mfilterjavac/Mmakefile:
    Add targets for building C# and Java files.

slice/Mmakefile:
    Include the modules of the mcov and mtc_diff programs in the
    existing targets for building C, C# and Java files.

deep_profiler/Mmakefile:
profiler/Mmakefile:
    These makefiles already had targets for building C# and Java files.
    Fix grammar and/or indentation.

compiler/Mmakefile:
    Fix grammar and/or indentation.
2019-06-25 14:22:53 +02:00
Zoltan Somogyi
4ffaa6f573 Don't apply stage 2 settings to stage 1.
tools/bootcheck:
    We compute the values of $use_subdirs and $use_mmc_make based on
    the grade specified for the stage 2 compiler. So use them to set
    the values of MMAKE_USE_SUBDIRS and MMAKE_USE_MMC_MAKE respectively
    only *after* we finished the last mmake invocation on stage 1.
    Setting them *before* then could screw up the stage 1 if it was built
    with different settings of those variables.

    This fixes Mantis #459.
2018-05-06 23:04:24 +02:00
Zoltan Somogyi
310048037c Try to guard against future bitrot.
tools/bootcheck:
    Build the dependencies for auxiliary programs, and the programs themselves,
    in the browser and profiler directories.

Mmakefile:
    Provide targets for bootcheck to use to make dependencies for the
    auxiliary programs in the browser and profiler directories.

browser/Mmakefile:
    Take the two aux programs in this directory out of the "all" target.
    Due to past bitrot, one gets errors during compilation, the other
    during linking. (The "all" target is not used by default, which is why
    this has not been a problem.)

    Add depend_aux and aux targets that should build these programs
    if they are ever fixed. The aux target is empty for now; the depend_aux
    target does make dependencies for both aux programs (since that still
    works, and we want to keep it that way).

profiler/Mmakefile:
    Add depend_aux and aux targets that build the one auxiliary program
    in this directory that works now. Add a comment about the other program
    that doesn't.
2018-01-09 01:05:42 +11:00
Julien Fischer
17465395d0 Fix problems running tests during a C# grade bootcheck.
tests/WS_FLAGS.ws:
    Tell the C# compiler where to find the standard library DLL.

tools/bootcheck:
    Set MONO_PATH to point to the stage 2 library directory when
    running the tests in the C# grade.

    Add a note about what would be required to support MS .NET.
2017-11-09 18:48:05 -05:00
Julien Fischer
ff6ccbbb3b Fix running the tests in a java grade bootcheck.
When bootchecking the test suite is run using the stage 2 compiler, but the
launcher scripts we generate for executables set the CLASSPATH based on the
install path of the compiler.  Add a new environment variable,
MERCURY_STAGE2_LAUNCHER_BASE, that causes the launcher script to be set the
CLASSPATH based on the stage 2 location and directory structure.

Set the new environment variable when bootchecking in the java grade.

compiler/module_cmds.m:
    Handle the new environment variable.

    Add a note about the environment variable not yet being handled on MSYS.
    (I'll fix this separately.)

tools/bootcheck.m:
    Set the new environment variable to the stage 2 directory if bootchecking
    in the java grade.
2017-11-07 04:46:36 -05:00
Julien Fischer
a765986697 Fix execution of stage 2 compiler in the csharp grade.
tools/bootcheck:
     For csharp, generate a wrapper script that correctly references
     the stdlib and mdbcomp assemblies.
2017-10-22 04:38:04 -04:00
Julien Fischer
2063cae1a6 Make stage 2 work in the csharp grade.
tools/bootcheck:
    Ensure that we do not try to reference a separate
    Mercury runtime assembly in the csharp grade.
2017-10-22 02:06:22 -04:00
Julien Fischer
419faa9e37 Fix stage 2 and stage 3 source comparison for Java grade.
tools/bootcheck:
     Generated Java sources files live in the jmercury subdirectory.

     In the above check don't always look in the directory in which
     we generate C source files.
2017-10-21 21:54:03 -04:00
Julien Fischer
8810c40d58 Add initial support for the C# backend to the bootcheck script.
tools/bootcheck:
    As above.
2017-10-21 01:40:19 -04:00
Julien Fischer
ca6680a2b1 Increase the stack size for the stage 2 compiler in the Java grade.
tools/bootcheck:
     As above.
2017-10-20 11:13:00 -04:00
Julien Fischer
8827cc43ca Fix bootchecking problems in the Java grade.
tools/bootcheck:
     Generate a new wrapper script for the stage 2 compiler that sets
     the CLASSPATH correctly.

     Don't pass any of the Mercury runtime options to the stage 2 compiler
     since the Java verison of the Mercury runtime doesn't currently understand
     them.
2017-10-20 10:25:13 -04:00
Zoltan Somogyi
dcf593f7cc Fix some comments. 2017-08-04 21:45:35 +02:00
Zoltan Somogyi
e432fd8247 Add $mmake_opts to mmake invocations where it was missing. 2016-10-07 21:18:17 +11:00
Julien Fischer
9b09d1ee72 Update bootcheck script.
tools/bootcheck:
    Don't try to copy Boehm GC scripts that no longer exist.
2016-09-29 00:14:34 +10:00
Julien Fischer
112d1f1320 Copy all NT_MAKEFILE variants into stage 2 dir etc.
scripts/prepare_install_dir.in:
tools/bootcheck:
    Copy all of the MSVC makefiles variants for the Boehm GC into the
    grade build directory / stage 2 directory.
2016-03-20 00:12:17 +11:00
Julien Fischer
8e732885ff Rename the top-level of the compiler.
Currently, the compiler's top-level module is the module 'top_level'.  This
means that the executable (or Java archive, or assembly) we generate is named
after that.  However, the rest of the system requires that the compiler
executable be named 'mercury_compile', so we currently rename it after it is
generated.  (At least, we do in C grades, in non-C grades the compiler
"executable" currently has the "wrong" name.)  Making this scheme work across
multiple backends and platforms leads to quite a bit of complication in the
build system.  This change simplifies matters by repurposing the
'mercury_compile' module to be the new top-level module; this means that the
executable is generated with the correct name to begin with.

compiler/mercury_compile.m:
     Shift the existing contents of this module to  new module,
     mercury_compile_main.

     Shift this module out of the top_level package and export main/2 from it.

compiler/mercury_compile_main.m:
     New module that contains the old contents of mercury_compile.m.

compiler/top_level.m:
     Conform to the above changes.

     Delete the definition of main/2 from this module.

compiler/make.m:
compiler/make.module_target.m:
     Conform to the above changes.

compiler/Mmakefile:
     Conform to the change in the name of the top-level module.

    Delete the rule for renaming the compiler executable.

Mmakefile:
    Update the dep_compiler target.

compiler/notes/compiler_design.html:
    Update this document.

scripts/mercury_compile.sh-csharp:
scripts/mercury_compile.sh-java:
    Update these scripts.

compiler/.gitignore:
    Conform to the above changes and generally update
    this file.

configure.ac:
tools/binary_step:
tools/bootcheck:
    Update the top-level module.
2016-02-17 20:13:33 +11:00
Julien Fischer
0fe7e79e20 Work towards bootchecking in the Java grade.
Cleanups for the bootcheck script.

tools/bootcheck:
     When bootchecking in the Java grade, force the use of --use-mmc-make,
     and disable the namespace cleanliness check.

     Only clean up after the namespace cleanliness check if it is actually run.

     Delete left-over stuff for GCC backend.

     Delete left-over stuff for handling NFS mounts at Uni.
2016-01-01 22:34:21 +11:00
Paul Bone
bca1db24d1 Use nested submodules to include boehm_gc/libatomic_ops
Feedback of the upgrade of Boehm GC indicated that including the
libatomic_ops submodule in the top-level was inconvenient, and I agree.
This change, along with a corresponding change to the boehm_gc repository,
will instead included it as a nested submodule of boehm_gc.

.gitmodules:
libatomic_ops:
    Remove libatomic_ops submodule.

boehm_gc
    Update to the most recent revision that adds a libatomic_ops submodule.

prepare.sh:
    Update submodules recursively.

Mmakefile:
scripts/prepare_install_dir.in:
tools/bootcheck:
    Remove code in build tools that links or copies the libatomic_ops
    directory from Mercury's top-level,
2015-10-19 16:31:10 +11:00
Julien Fischer
5f23162271 Minor fixes for bootcheck script.
tools/bootcheck:
    Avoid copying or linking things that don't exist any more.
2015-10-02 11:18:44 +10:00
Paul Bone
eed9cc75bd Make changes required to upgrade to Boehm GC 7.4.2
GC_stackbottom, GC_gc_no and GC_dont_gc are now deprecated.  These changes
use new options in the API where possible.

Update scripts to copy the boehm_gc and libatomic_ops directories correctly.

Pass Boehm GC the correct flags for thread support

Update documentation regarding the version of Boehm GC.

runtime/mercury_wrapper.c:
    Don't use the deprecated GC_dont_gc variable.

library/benchmarking.m:
    Use GC_get_stackbottom() to get the bottom of stack and GC_get_gc_no()
    to get the number of collections so far.

util/mkinit.c:
    Do not explicitly set GC_stackbottom anymore, except on AIX where it
    cannot be found automatically.

scripts/prepare_install_dir.in:
tools/bootcheck:
tools/build_srcdist:
    Add some missing files present in Boehm GC 7.4.2 that wern't present
    earlier and remove some old ones.

    Coby and link the libatomic_ops directory correctly.

.README.in:
bindist/bindist.README:
    Update documentation regarding the version of Boehm GC.

configure.ac:
    Something in Boehm GC's build system has changed and we must now pass
    -DGC_THREADS whenever building threadsafe versions of BOehm GC.  This is now
    done using the BOEHM_MISC_CFLAGS_FOR_THREADS autoconf variable, which has
    been renamed to BOEHM_CFLAGS_FOR_THREADS now that it is more generally used.

    Boehm GC no longer (or perhaps never did) require developers to specify the
    type of threading to use, eg -DGC_LINUX_THREADS rather than -DGC_THREADS.
    With the exception of win32-pthreads.  We now pass -DGC_THREADS whereever
    possible.

Mmake.common.in:
    Rename BOEHM_MISC_CFLAGS_FOR_THREADS.
2015-10-01 10:26:46 +10:00
Peter Wang
9bb1c8caa9 Delete variables for the deleted IL and gcc backends.
scripts/Mmake.vars.in:
tests/par_conj/Mmakefile:
tests/stm/Mmakefile:
tools/bootcheck:
	As above.
2015-09-30 15:06:29 +10:00
Julien Fischer
3dd02876a5 Delete the MLDS->IL backend.
compiler/mlds_to_il.m:
compiler/mlds_to_ilasm.m:
compiler/mlds_to_managed.m:
compiler/il_peephole.m:
compiler/ilasm.m:
compiler/ilds.m:
    Delete the modules making up the MLDS->IL code generator.

compiler/globals.m:
compiler/prog_data.m:
    Delete IL as a target and foreign language.

compiler/prog_io_pragma.m:
    Delete the max_stack_size/1 foreign proc attribute.  This was only
    ever required by the IL backend.

compiler/options.m
    Delete options used for the IL backend.

compiler/write_deps_file.m:
    Don't generate mmake targets for .il files etc.

compiler/*.m:
    Conform to the above changes.

compiler/notes/compiler_design.html
compiler/notes/work_in_progress.html
    Conform to the above changes.

library/*.m:
    Delete IL foreign_proc and foreign_export pragmas.

README.DotNet:
    Delete this file.

browser/Mmakefile:
compiler/Mmakefile:
deep_profiler/Mmakefile:
mdbcomp/Mmakefile:
mfilterjavac/Mmakefile:
profiler/Mmakefile:
runtime/Mmakefile:
slice/Mmakefile:
    Conform the above changes.

configure.ac:
    Don't check that IL is a supported foreign language when performing the
    up-to-date check.

    Delete the '--enable-dotnet-grades' option.

scripts/Mmake.vars.in:
    Delete variables used for the IL backend (and in on case by the Aditi
    backend).

scripts/Mercury.config.bootstrap.in:
scripts/Mercury.config.in:
scripts/Mmake.rules:
scripts/canonical_grade.sh-subr:
tools/bootcheck:
    Delete stuff related to the 'il' and 'ilc' grades.

doc/reference_manual.texi:
     Delete the documentation of the 'max_stack_size' option.

doc/user_guide.texi:
     Delete stuff related to the IL backend.

tests/hard_coded/csharp_test.{m,exp}:
tests/invalid/foreign_type_missing.{m,err_exp}:
tests/valid/csharp_hello.m:
	Delete these tests: they are no longer relevant.

tests/hard_coded/equality_pred_which_requires_boxing.m:
tests/hard_coded/foreign_import_module.m:
tests/hard_coded/foreign_import_module_2.m:
tests/hard_coded/foreign_type.m:
tests/hard_coded/foreign_type2.m:
tests/hard_coded/foreign_type3.m:
tests/hard_coded/intermod_foreign_type2.m:
tests/hard_coded/lp.m:
tests/hard_coded/user_compare.m:
tests/invalid/foreign_type_2.m:
tests/invalid/foreign_type_missing.{m,err_exp}:
tests/invalid/foreign_type_visibility.m:
tests/invalid/illtyped_compare.{m,err_exp}:
tests/submodules/external_unification_pred.m
tests/valid/big_foreign_type.m
tests/valid/solver_type_bug.m
tests/valid_seq/foreign_type_spec.m
tests/valid_seq/intermod_impure2.m
    Delete IL foreign_procs where necessary.

tests/hard_coded/Mmakefile
tests/invalid/Mercury.options
tests/invalid/Mmakefile
tests/submodules/Mmakefile
tests/valid/Mercury.options
tests/valid/Mmake.valid.common
tests/valid/Mmakefile
tests/valid_seq/Mmakefile
tests/valid_seq/Mercury.options
    Conform to the above changes.
2015-09-21 11:34:46 +10:00
Zoltan Somogyi
984683b267 Fix the invalid/func_class test case.
The failure was caused by an error message generated by prog_io.m about a
problem (a file containing the wrong module) being ignored by deps_map.m.

A different problem was that we detected and generated error messages for this
problem in several places, which had different expectations and had access
to different information, and (partially but not wholly as a result of that)
generated different text. This diff makes all the pieces of code that detect
this problem use the same code to generate an error message. (Having only
one place to *detect* the problem would be more trouble that it is worth;
it would replace a few simple pieces of code with one larger, more complex
piece of code that would still have to cover all the relevant use cases,
but now removed from the rest of the code handling those use cases as well.)

It would probably be a good idea to unify those use cases as much as possible,
but that would be a much more complex change.

compiler/prog_io.m.m:
    Generalize the predicate that generates error messages for wrong module
    names, check_module_has_expected_name, to make it usable from both
    prog_io.m and read_modules.m.

    Replace a piece of code that had the same job with a call to this
    predicate.

compiler/read_modules.m.m:
    When reading in source files, ignore the errors that arise from
    trying to read nonexistent files if our caller asks us to do so
    (since some callers are not sure about what file a module is stored in),
    but if the file *is* found and opened, then do *not* ignore the
    errors we generate in parsing its contents.

    Call the generalized version of check_module_has_expected_name,
    and pass it the info it needs (the context of the module declaration).

compiler/deps_map.m:
    If the read-in module contains a different module name than expected,
    we already generated an error message for it, which read_modules.m
    now doesn't throw away, so we now just keep that message,
    and don't generate a redundant one.

compiler/error_util.m:
    When sorting error messages, we have, for a long time now, deleted
    duplicates. However, two error messages can differ in one having
    conditional inclusion of format components and the other always
    including the same components. We don't want to get two copies
    of the error message if the condition is true, so we now evaluate
    the conditions before sorting the messages. This is needed because
    the code in prog_io.m that generates error messages for wrong module names
    has to work in different conditions that have different ideas of how
    bad an error a wrong module name is.

    Provide a mechanism (a new phase in error messages) to separate
    error messages about wrong module names from other errors.
    This was part of an earlier attempt at solving the same problem
    using a different approach (generating a new error message about
    the problem only if we haven't already generated a message about it),
    but that approach had the problem that the text of the generated message
    could differ if it was generated in more than place, making it hard
    to write a good test case. (Hence the generalization of
    check_module_has_expected_name: although in some situations it generates
    unconditional and in other condition error messages, the text in those
    messages is always the same.) However, the new phase doesn't hurt
    anything, and may be useful later, e.g. to handle modules like
    tests/invalid_purity/purity_nonsense2.m differently, so keep it.

tests/invalid/Mmakefile:
    Execute the purity_nonsense2 test case without first generating its
    dependencies. If we did generate its dependencies, then due to the
    fact that we no longer ignore errors during that step, we would
    get *only* those errors, and not also the ones discovered by parts
    of the compiler invoked later, and which are also expected by
    purity_nonsense2.err_exp.

tests/invalid/bad_module_name.err_exp:
    Expect the updated text of the "wrong module name" error message.

tests/invalid/missing_interface_import2.{m,err_exp}:
    Due to a missing :- interface declaration, this test case wasn't testing
    what it was testing. Add the missing section marker, and expect the updated
    line numbers.

tools/bootcheck:
    Print an explicit message at the end of a successful bootchecks.
2015-09-11 01:21:23 +10:00
Zoltan Somogyi
6d02d91ace Make the final part of bootcheck's out easier to read.
Do this by making the important information stand out from the surrounding
less important information.
2015-09-04 07:49:24 +10:00
Zoltan Somogyi
e0cdfc2fe2 Make the tests really work in parallel.
There was a bug that prevented the tests in each directory from being run
in parallel, even when the mmake was invoked with e.g. -j4. The bug
was the absence of a '+' on an action that invoked tests/run_one_test.
Without that +, the make process inside the "mmake -j4 runtests_local"
command issued by bootcheck screwed up its connection with the recursive
make invoked by run_one_test, and apparently decided to stop using
parallelism. It was telling us this all this time but its messages,
which looked like this:

    make[2]: warning: -jN forced in submake: disabling jobserver mode.

were lost in the sea of other bootcheck output until my recent change
to run_one_test.

A single-character change fixes the bug; the rest of this big change is
dealing with the consequences of fixing the bug. Many test cases in
the hard_coded and valid directories contain nested modules, which
need to be compiled sequentially.

tests/Mmake.common:
    Fix the bug.

    Delete the duplicate "ALL TESTS SUCCEEDED" message from the runtests
    target, since the runtests_local target already prints a message
    to that effect. Make this message more emphatic.

tests/run_one_test:
    Make the output a bit easier to understand.

tests/hard_coded/*.{m,exp}:
tests/submodules/*.{m,exp}:
    Move the source files and expected output files of the test cases that
    use nested modules from hard_coded to submodules, since most of the tests
    in the hard_coded can be done in parallel, while the ones in submodules
    are already done in sequence.

tests/hard_coded/Mmakefile:
tests/hard_coded/Mercury.options:
tests/submodules/Mmakefile:
tests/submodules/Mercury.options:
    Move the Mmakefile and Mercury.options entries of the moved test cases
    from hard_coded to submodules.

tests/valid_seq:
    A new test directory, to hold the test cases originally in tests/valid
    that contain nested modules. Moving these to a new directory, which
    forces -j1, allows us to execute the remaining ones in parallel.

tests/valid/*.m:
tests/valid_seq/*.m:
    Move the source files of the test cases that use nested modules
    from valid to valid_seq.

    In a few cases, clean up the test cases a bit.

tests/valid/Mmakefile:
tests/valid/Mercury.options:
tests/valid_seq/Mmakefile:
tests/valid_seq/Mercury.options:
tests/valid/Mmake.valid.common:
    Add valid_seq/Mmakefile to list the test cases now in valid_seq,
    and add valid_seq/Mercury.options to hold their option values.
    Delete the entries of those tests from valid/Mmakefile, and their option
    values from valid/Mercury.options. Unlike valid/Mmakefile,
    valid_seq/Mmakefile forces -j1.

    To avoid unnecessary duplication between the two Makefiles, put
    all the rules that both need into valid/Mmake.valid.common, and
    include this in both Mmakefiles.

tests/string_format/Mmakefile:
    Force -j1, since these tests share a library module.

tests/Mmakefile:
    List the new valid_seq directory among the others.

tests/bootcheck:
    Execute the tests in the new valid_seq directory as well as the others.

    Record when the execution of the test suite is started.

    Comment out invocations of set -x, since they add no useful information
    in the vast majority of cases. The comment sign can be removed if and
    when the information *would* be useful.

    Don't try to copy a nonexistent file. (The error message about this
    was also lost in the noise.)
2015-08-26 01:01:54 +10:00
Zoltan Somogyi
df4f8236fc Allow workspaces to be moved.
tools/bootcheck:
    The contents of tests/mdbrc refer to the pathname of the workspace
    as it was when the configure script was executed. If the workspace
    was moved since then, it will refer to an out-of-date, and likely
    no-longer-existent, set of directories. Override the possibly-obsolete
    path names with current ones.
2015-08-10 20:19:47 +10:00
Zoltan Somogyi
b1c515fda9 Count the number of failing test cases. 2015-07-10 12:05:17 +02:00
Zoltan Somogyi
c1e51a51a5 Bootcheck different test dirs one by one.
tools/bootcheck:
    The current code in bootcheck does mmake $jfactor at the top level,
    which mixes up messages from tests in different directories. After this
    diff, we explicitly iterate through all the test directories, doing
    mmake $jfactor in each directory, which avoids this mixing, thus making
    it easier to judge from the last output of a partially-done bootcheck
    how far along the bootcheck script is.
2015-02-10 02:53:56 +11:00
Zoltan Somogyi
de2f7b2a0c Flatten the test directories, step 2.
Specifically, rename the following subdirectories of the test directory:

    old dir name                new dir name

    analysis/ext                analysis_external
    analysis/ctgc               analysis_ctgc
    analysis/excp               analysis_excp
    analysis/table              analysis_table
    analysis/trail              analysis_trail
    invalid/purity              invalid_purity
    analysis/sharing            analysis_sharing
    hard_coded/purity           purity
    general/accumulator         accumulator
    analysis/unused_args        analysis_unused_args
    debugger/declarative        declarative_debugger
    hard_coded/exceptions       exceptions
    general/string_format       string_format
    hard_coded/sub-modules      submodules
    hard_coded/typeclasses      typeclasses
    general/structure_reuse     structure_reuse

Some subdirectories are still there, to wit, the subdirs of the inactive
test directory stm, each of which (if I remember correctly) holds only one
test case.

The general/structure_reuse directory previously wasn't enabled; I think
this was a bug.

tests/Mmakefile:
tools/bootcheck:
    List the new test directories.

tests/Mmake.common:
    The analysis_* directories each need to know whether the workspace
    uses subdirs. This used to be controlled from one place,
    analysis/Mmakefile, but since analysis_* are not subdirs of analysis,
    we need a new central place to find this out.

tests/analysis/common.sh:
    Update documentation for the move.

tests/OLDDIRS/Mmakefile:
    Set the subdir list to empty.

tests/NEWDIRS/Mmakefile:
    Update the "this" directory's name, as well as TESTS_DIR.

    In analysis_*/Mmakefile, use the new mechanism for detecting the presence
    of subdirs.
2015-02-10 00:44:14 +11:00