mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-23 05:13:48 +00:00
Estimated hours taken: 0.2 Module qualification of types, insts and modes. Added a new interface file - <module>.int3. This contains the short interface qualified as much as possible given the information in the current module. When producing the .int and .int2 files for a module, the compiler uses the information in the .int3 files of modules imported in the interface to fully module qualify all items. The .int2 file is just a fully qualified version of the .int3 file. The .int3 file cannot be overwritten by the fully qualified version in the .int2 file because then mmake would not be able to tell when the interface files that depend on that .int3 file really need updating. scripts/Mmake.rules scripts/Mmake.vars Removed the rule for .int, since this is now in the .d files. Rules and suffix entry for the .int3 and .date3 files.
148 lines
3.2 KiB
Plaintext
148 lines
3.2 KiB
Plaintext
#-----------------------------------------------------------------------------#
|
|
# Copyright (C) 1995 University of Melbourne.
|
|
# This file may only be copied under the terms of the GNU General
|
|
# Public License - see the file COPYING in the Mercury distribution.
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# Mmake.rules - rules for building Mercury programs
|
|
|
|
main_target: $(MAIN_TARGET)
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# Beware that the order of suffixes is significant.
|
|
.SUFFIXES: .pp .m .nl .no .err .int .int2 .int3 .dep .depend .doit .ugly \
|
|
.date .date3 .mod .c .nu .o .pic_o .i .s .garb .mod_h .ql .pl
|
|
|
|
.PRECIOUS: %.date
|
|
|
|
# All the builtin rules must use $@ as the target, so that they work
|
|
# when $(VPATH) is set.
|
|
|
|
.pp.m:
|
|
@-[ ! -f $@ ] || chmod +w $@
|
|
sed '/^#if *NU_PROLOG/,/^#endif/s/.*//' $< > $@
|
|
@-chmod -w $@
|
|
|
|
.m.no:
|
|
$(MNC) $(MNCFLAGS) -o $@ $<
|
|
|
|
.nl.no:
|
|
$(MNC) $(MNCFLAGS) -o $@ $<
|
|
|
|
.m.ql:
|
|
$(MSC) $(MSCFLAGS) -o $@ $<
|
|
|
|
.nl.ql:
|
|
$(MSC) $(MSCFLAGS) -o $@ $<
|
|
|
|
.m.pl:
|
|
sicstus_conv $<
|
|
|
|
.nl.pl:
|
|
sicstus_conv $<
|
|
|
|
# The `touch' is necessary, since otherwise if
|
|
# the old .err file was of size zero and
|
|
# the new .err file is also of size zero,
|
|
# the time-stamp doesn't get updated!
|
|
# (Is that a bug in unix? In bash?)
|
|
|
|
.m.err:
|
|
$(MC) $(MCFLAGS) --errorcheck-only $< > $@ 2>&1
|
|
@touch $@
|
|
|
|
.m.date:
|
|
$(MCI) $(MCIFLAGS) $<
|
|
|
|
.m.date3:
|
|
$(MCSI) $(MCSIFLAGS) $<
|
|
|
|
|
|
# do not remove the whitespace in the following three rules!
|
|
|
|
.date.int:
|
|
|
|
|
|
.date.int2:
|
|
|
|
|
|
.date3.int3:
|
|
|
|
|
|
.m.garb:
|
|
$(MCG) --garbage-collection accurate $(MCGFLAGS) $<
|
|
|
|
.m.ugly:
|
|
$(MC) --convert-to-mercury $(MCFLAGS) $<
|
|
|
|
.m.dep:
|
|
@-[ ! -f $*.dep ] || chmod +w $*.dep
|
|
$(MCD) $(MCDFLAGS) $<
|
|
@-chmod -w $*.dep
|
|
|
|
.m.depend:
|
|
@-[ ! -f $*.dep ] || chmod +w $*.dep
|
|
$(MCD) $(MCDFLAGS) $<
|
|
@-chmod -w $*.dep
|
|
-rm -f $*_init.c
|
|
|
|
.dep.doit:
|
|
sed -e ':a' -e '/\\/N' -e 's/\\\n //' -e 't a' $< | \
|
|
tee tmp | \
|
|
grep 'srcs *=' | \
|
|
sed -e 's/.*=/:-[ '\''nu_library.doit'\'', /' \
|
|
-e 's/\.nl/,/g' \
|
|
-e 's/$$/ portray ]./' \
|
|
> $@
|
|
|
|
.m.c:
|
|
rm -f $*.c
|
|
$(MCG) -s $(GRADE) $(MCGFLAGS) $< > $*.err2 2>&1
|
|
|
|
# the next rule should be needed only in runtime in a short while
|
|
|
|
.mod.c:
|
|
[ -f $< ] && $(MOD2C) -s$(GRADE) $(MOD2CFLAGS) $< > $@
|
|
|
|
# the next rule will need changing (probably by Tyson)
|
|
|
|
.mod.mod_h:
|
|
[ -f $< ] && $(MOD2H) -s$(GRADE) $(MOD2HFLAGS) $< > $@
|
|
|
|
.c.o:
|
|
$(MGNUC) -s$(GRADE) $(MGNUCFLAGS) -c $< -o $@
|
|
|
|
# .c.pic_o:
|
|
# $(MGNUC) -s$(GRADE) $(MGNUCFLAGS) $(CFLAGS_FOR_PIC) -c $< -o $@
|
|
|
|
.c.s:
|
|
$(MGNUC) -s$(GRADE) $(MGNUCFLAGS) -S $< -o $@
|
|
|
|
.c.i:
|
|
$(MGNUC) -s$(GRADE) $(MGNUCFLAGS) -E $< > $@
|
|
|
|
.m.o:
|
|
$(MMAKE_MAKE_CMD) $(MAKEOVERRIDES) $*.c
|
|
$(MGNUC) -s$(GRADE) $(MGNUCFLAGS) -c $*.c -o $@
|
|
$(RM_C) $*.c
|
|
|
|
.o.pic_o:
|
|
$(MMAKE_MAKE_CMD) $(MAKEOVERRIDES) $*.c
|
|
$(MGNUC) -s$(GRADE) $(MGNUCFLAGS) $(CFLAGS_FOR_PIC) -c $*.c -o $@
|
|
$(RM_C) $*.c
|
|
|
|
%.dir/*.o: %.m
|
|
rm -f $@
|
|
$(MCS) -s$(GRADE) $(MCSFLAGS) $<
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# The actions for `mmake clean' etc. are in the `.d' files.
|
|
|
|
.PHONY: clean realclean clean_nu clean_sicstus
|
|
|
|
realclean: clean
|
|
|
|
#-----------------------------------------------------------------------------#
|