[m-dev.] Using VC++ 6 with hlc.gc

Fergus Henderson fjh at cs.mu.OZ.AU
Tue Jun 6 23:48:29 AEST 2000


On 06-Jun-2000, Peter Ross <peter.ross at miscrit.be> wrote:
> Here it is!

Great -- thanks.

I have some preliminary review comments.
These are mostly just minor style issues.

> +++ boehm_gc/if_not_there.c	2000/06/06 10:10:24
> @@ -16,8 +16,7 @@
>          return(0);
>      }
>      printf("^^^^Starting command^^^^\n");
> -    execvp(argv[2], argv+2);
> -    exit(1);
> +    return execvp(argv[2], argv+2);
> 

I don't quite understand the rationale for that change.
I guess it is a work-around for some brokenness in
the MSVC implementation of execvp().
If so, that change should be inside `#ifdef _MSC_VER'.
     
> +++ compiler/mercury_compile.m	2000/06/06 10:11:41
> @@ -2696,8 +2696,9 @@
>  	    ;
>  		TraceOpt = ""
>  	    },
> -	    join_module_list(Modules, ".c", ["> ", InitCFileName], MkInitCmd0),
> -	    { string__append_list(["c2init ", TraceOpt | MkInitCmd0],
> +	    join_module_list(Modules, ".c", ["> ", InitCFileName, "'"],
> +		MkInitCmd0),
> +	    { string__append_list(["bash -c 'c2init ", TraceOpt | MkInitCmd0],
>  	    	MkInitCmd) },
>  	    invoke_system_command(MkInitCmd, MkInitOK),

It would probably be better to change `invoke_system_command', or to
add a new routine `invoke_shell_command', rather than changing the
code here.  It would also be better to avoid hard-coding this; you
could make it conditional on an option, which would be passed by
scripts/mmc, with the default value passed by scripts/mmc for that
option being determined by some autoconf variable set at configuration
time.

> Index: compiler/mlds_to_c.m
> +:- pred mlds_needs_initialization(mlds__initializer::in, bool::out) is det.
> +
> +mlds_needs_initialization(no_initializer, no).
> +mlds_needs_initialization(init_obj(_), yes).
> +mlds_needs_initialization(init_struct([]), no).
> +mlds_needs_initialization(init_struct([_|_]), yes).
> +mlds_needs_initialization(init_array(_), yes).

I suggest making that a function rather than a predicate.

> +++ scripts/Mmake.vars.in	2000/06/06 10:14:21
> @@ -179,9 +179,11 @@
>  MSPFLAGS	=
>  EXTRA_MSPFLAGS	=
>  
> -AR		= ar
> -ALL_ARFLAGS	= $(ARFLAGS) $(EXTRA_ARFLAGS) $(TARGET_ARFLAGS)
> -ARFLAGS		= cr
> +	# Note ARFLAGS at the end as MS VC++6 expects a command line of the
> +	# form: lib /OUT:libxxx.a *.o
> +AR		= @AR@
> +ALL_ARFLAGS	= $(EXTRA_ARFLAGS) $(TARGET_ARFLAGS) $(ARFLAGS)
> +ARFLAGS		= @ARFLAGS@

I think it would be clearer to introduce a different variable
called say AR_LIBFILE_OPT, similar to the OBJFILE_OPT variable
that you introduced to use instead of `-o' for the C compiler,
and to use that rather than changing the order of $(ARFLAGS)
in $(ALL_ARFLAGS) and requiring that there be no space
between $(ALL_ARFLAGS) and the library name.

> +++ trace/Mmakefile	2000/06/06 10:14:30
> @@ -124,7 +124,7 @@
>  
>  lib$(TRACE_LIB_NAME)$(DLL_DEF_LIB).a: $(OBJS)
>  	rm -f lib$(TRACE_LIB_NAME)$(DLL_DEF_LIB).a
> -	ar cr lib$(TRACE_LIB_NAME)$(DLL_DEF_LIB).a $(OBJS)
> +	$(AR) $(ARFLAGS)lib$(TRACE_LIB_NAME)$(DLL_DEF_LIB).a $(OBJS)

Here (and elsewhere) that should probably be "$(ALL_ARFLAGS)"
or perhaps "$(ALL_ARFLAGS) $(AR_LIBFILE_OPT)" rather
than "$(ARFLAGS)".

> +++ util/mkinit.c	2000/06/06 10:14:39
> @@ -23,8 +23,12 @@
...
> +#ifdef HAVE_UNISTD_H
> +#include	<unistd.h>
> +#endif

It's nicer to use indentation to indicate the nesting:

s/#include/  #include/
           ^^

> +++ runtime/mercury_memory.c	2000/06/06 10:15:35
> +++ runtime/mercury_memory_handlers.c	2000/06/06 10:15:37
> +++ runtime/mercury_memory_zones.c	2000/06/06 10:15:40
> +++ runtime/mercury_prof.c	2000/06/06 10:15:42
> +++ runtime/mercury_reg_workarounds.c	2000/06/06 10:15:42
> +++ runtime/mercury_signal.c	2000/06/06 10:15:42
> +++ runtime/mercury_timing.c	2000/06/06 10:15:43
> +++ runtime/mercury_timing.h	2000/06/06 10:15:43
> +++ runtime/mercury_trace_base.c	2000/06/06 10:15:47

Likewise.

> +++ runtime/mercury_reg_workarounds.h	2000/06/06 10:15:42
> @@ -18,6 +18,8 @@
>    #include <sys/time.h>			/* for FD_ZERO() */
>  #endif
>  
> +#include <stdlib.h>			/* needed for size_t with VC++ 6 */

I think it would be sufficient to say "for size_t".
The fact that it works without that #include on other systems
is just coincidence; it might well break on future releases
of Linux, for example.

-- 
Fergus Henderson <fjh at cs.mu.oz.au>  |  "I have always known that the pursuit
WWW: <http://www.cs.mu.oz.au/~fjh>  |  of excellence is a lethal habit"
PGP: finger fjh at 128.250.37.3        |     -- the last words of T. S. Garp.
--------------------------------------------------------------------------
mercury-developers mailing list
Post messages to:       mercury-developers at cs.mu.oz.au
Administrative Queries: owner-mercury-developers at cs.mu.oz.au
Subscriptions:          mercury-developers-request at cs.mu.oz.au
--------------------------------------------------------------------------



More information about the developers mailing list