Skip to content

Commit

Permalink
Change Configure.pl to use build/Makefile.in.
Browse files Browse the repository at this point in the history
  • Loading branch information
Patrick R. Michaud committed Feb 8, 2009
1 parent 1861489 commit 7ab01c5
Show file tree
Hide file tree
Showing 2 changed files with 308 additions and 4 deletions.
7 changes: 3 additions & 4 deletions Configure.pl
Expand Up @@ -88,16 +88,15 @@ sub read_parrot_config {
# Generate a Makefile from a configuration
sub create_makefile {
my %config = @_;
open my $ROOTIN, "<config/makefiles/root.in" or
die "Unable to read config/makefiles/root.in \n";
open my $ROOTIN, "<build/Makefile.in" or
die "Unable to read build/Makefile.in \n";
my $maketext = join('', <$ROOTIN>);
close $ROOTIN;
$maketext =~ s{//}{/}g;
$maketext =~ s/@(\w+)@/$config{$1}/g;

print "Creating Makefile\n";
open(MAKEFILE, ">Makefile") ||
die "Unable to read config/makefiles/root.in \n";
die "Unable to write Makefile\n";
print MAKEFILE $maketext;
close(MAKEFILE);
}
Expand Down
305 changes: 305 additions & 0 deletions build/Makefile.in
@@ -0,0 +1,305 @@
# Copyright (C) 2006-2009, The Perl Foundation.
# $Id$

# arguments we want to run parrot with
PARROT_ARGS =

# values from parrot_config
BUILD_DIR = @build_dir@
LOAD_EXT = @load_ext@
O = @o@
EXE = @exe@
MAKE = @make_c@
PERL = @perl@
RM_F = @rm_f@

# Various paths
PARROT_DYNEXT = $(BUILD_DIR)/runtime/parrot/dynext
PERL6GRAMMAR = $(BUILD_DIR)/runtime/parrot/library/PGE/Perl6Grammar.pbc
NQP = $(BUILD_DIR)/compilers/nqp/nqp.pbc
PCT = $(BUILD_DIR)/runtime/parrot/library/PCT.pbc
PMC_DIR = src/pmc
OPSDIR = src/ops
OPSLIB = perl6
OPS_FILE = src/ops/perl6.ops

# Set up extensions

# Setup some commands
PARROT = $(BUILD_DIR)/parrot$(EXE)
CAT = $(PERL) -MExtUtils::Command -e cat
BUILD_DYNPMC = $(PERL) $(BUILD_DIR)/tools/build/dynpmc.pl
BUILD_DYNOPS = $(PERL) $(BUILD_DIR)/tools/build/dynoplibs.pl
RECONFIGURE = $(PERL) $(BUILD_DIR)/tools/dev/reconfigure.pl
PBC_TO_EXE = $(BUILD_DIR)/pbc_to_exe$(EXE)

SOURCES = perl6.pir \
src/gen_grammar.pir \
src/gen_actions.pir \
src/gen_builtins.pir \
src/gen_metaop.pir \
src/gen_junction.pir \
src/parser/expression.pir \
src/parser/methods.pir \
src/parser/quote_expression.pir \
$(PERL6_GROUP) \
src/ops/perl6_ops$(LOAD_EXT)

BUILTINS_PIR = \
src/classes/ClassHOW.pir \
src/classes/Object.pir \
src/classes/Any.pir \
src/classes/Signature.pir \
src/classes/Role.pir \
src/classes/Abstraction.pir \
src/classes/Protoobject.pir \
src/classes/Positional.pir \
src/classes/Associative.pir \
src/classes/Callable.pir \
src/classes/Bool.pir \
src/classes/Str.pir \
src/classes/Num.pir \
src/classes/Int.pir \
src/classes/Order.pir \
src/classes/Complex.pir \
src/classes/IO.pir \
src/classes/List.pir \
src/classes/Array.pir \
src/classes/Mapping.pir \
src/classes/Hash.pir \
src/classes/Range.pir \
src/classes/Code.pir \
src/classes/Block.pir \
src/classes/Routine.pir \
src/classes/Sub.pir \
src/classes/Regex.pir \
src/classes/Method.pir \
src/classes/Submethod.pir \
src/classes/Junction.pir \
src/classes/Failure.pir \
src/classes/Exception.pir \
src/classes/Nil.pir \
src/classes/Pair.pir \
src/classes/Whatever.pir \
src/classes/Capture.pir \
src/classes/Match.pir \
src/classes/Grammar.pir \
src/classes/Module.pir \
src/builtins/globals.pir \
src/builtins/any-list.pir \
src/builtins/any-num.pir \
src/builtins/any-str.pir \
src/builtins/assign.pir \
src/builtins/cmp.pir \
src/builtins/control.pir \
src/builtins/eval.pir \
src/builtins/enums.pir \
src/builtins/guts.pir \
src/builtins/io.pir \
src/builtins/match.pir \
src/builtins/math.pir \
src/builtins/misc.pir \
src/builtins/named-unary.pir \
src/builtins/op.pir \
src/builtins/parrot.pir \
src/builtins/system.pir \
src/builtins/traits.pir \

PMCS = perl6str objectref perl6scalar mutablevar perl6multisub

PMC_SOURCES = $(PMC_DIR)/perl6str.pmc $(PMC_DIR)/objectref.pmc $(PMC_DIR)/perl6scalar.pmc \
$(PMC_DIR)/mutablevar.pmc $(PMC_DIR)/perl6multisub.pmc

PERL6_GROUP = $(PMC_DIR)/perl6_group$(LOAD_EXT)

CLEANUPS = \
perl6.pbc \
perl6.c \
*.manifest \
*.pdb \
perl6$(O) \
perl6$(EXE) \
installable_perl6$(EXE) \
Test.pir \
src/gen_*.pir \
$(PMC_DIR)/*.h \
$(PMC_DIR)/*.c \
$(PMC_DIR)/*.dump \
$(PMC_DIR)/*$(O) \
$(PMC_DIR)/*$(LOAD_EXT) \
$(PMC_DIR)/*.exp \
$(PMC_DIR)/*.ilk \
$(PMC_DIR)/*.manifest \
$(PMC_DIR)/*.pdb \
$(PMC_DIR)/*.lib \
$(PMC_DIR)/objectref.pmc \
$(OPSDIR)/*.h \
$(OPSDIR)/*.c \
$(OPSDIR)/*$(O) \
$(OPSDIR)/*$(LOAD_EXT) \

# NOTE: eventually, we should remove --keep-exit-code and --fudge
# as the goal is that all tests must pass without fudge
HARNESS_WITH_FUDGE = $(PERL) t/harness --fudge --keep-exit-code
HARNESS_WITH_FUDGE_JOBS = $(HARNESS_WITH_FUDGE) --jobs


# the default target
all: perl6.pbc

## targets for building a standalone perl6.
# (We're not quite ready to make this a default target.)
perl6$(EXE): perl6.pbc
$(PBC_TO_EXE) perl6.pbc

spectest_checkout : t/spec

t/spec :
svn co http:////svn.pugscode.org/pugs/t/spec t/spec

spectest_update :
-cd t/spec && svn up

testable : all Test.pir spectest_checkout spectest_update

xmas: perl6$(EXE)


## supporting targets for perl6
# the Perl 6 compiler
perl6.pbc: $(PARROT) $(SOURCES) $(BUILTINS_PIR)
$(PARROT) $(PARROT_ARGS) -o perl6.pbc perl6.pir

installable_perl6$(EXE): perl6.pbc
$(PBC_TO_EXE) perl6.pbc --install

Test.pir: Test.pm perl6.pbc
$(PARROT) $(PARROT_ARGS) perl6.pbc --target=pir --output=Test.pir Test.pm

$(PMC_DIR)/objectref.pmc : $(PMC_DIR)/objectref_pmc.template build/gen_objectref_pmc.pl
$(PERL) -I$(BUILD_DIR)/lib build/gen_objectref_pmc.pl $(PMC_DIR)/objectref_pmc.template \
$(PMC_DIR)/objectref.pmc

src/gen_grammar.pir: $(PERL6GRAMMAR) src/parser/grammar.pg src/parser/grammar-oper.pg
$(PARROT) $(PARROT_ARGS) $(PERL6GRAMMAR) \
--output=src/gen_grammar.pir \
src/parser/grammar.pg src/parser/grammar-oper.pg

src/gen_actions.pir: $(NQP) $(PCT) src/parser/actions.pm
$(PARROT) $(PARROT_ARGS) $(NQP) --output=src/gen_actions.pir \
--encoding=fixed_8 --target=pir src/parser/actions.pm

src/gen_builtins.pir: build/gen_builtins_pir.pl Makefile
$(PERL) build/gen_builtins_pir.pl $(BUILTINS_PIR) > src/gen_builtins.pir

src/gen_metaop.pir: build/gen_metaop_pir.pl
$(PERL) build/gen_metaop_pir.pl > src/gen_metaop.pir

src/gen_junction.pir: build/gen_junction_pir.pl
$(PERL) build/gen_junction_pir.pl src/gen_junction.pir

$(PERL6_GROUP): $(PARROT) $(PMC_SOURCES)
cd $(PMC_DIR) && $(BUILD_DYNPMC) generate $(PMCS)
cd $(PMC_DIR) && $(BUILD_DYNPMC) compile $(PMCS)
cd $(PMC_DIR) && $(BUILD_DYNPMC) linklibs $(PMCS)
cd $(PMC_DIR) && $(BUILD_DYNPMC) copy --destination=$(PARROT_DYNEXT) $(PMCS)

src/ops/perl6_ops$(LOAD_EXT) : $(OPS_FILE)
@cd $(OPSDIR) && $(BUILD_DYNOPS) generate $(OPSLIB)
@cd $(OPSDIR) && $(BUILD_DYNOPS) compile $(OPSLIB)
@cd $(OPSDIR) && $(BUILD_DYNOPS) linklibs $(OPSLIB)
@cd $(OPSDIR) && $(BUILD_DYNOPS) copy "--destination=$(PARROT_DYNEXT)" $(OPSLIB)

t/localtest.data:
$(PERL) -MExtUtils::Command -e test_f $@


## testing targets
test : coretest

codetest:
$(MAKE) $(BUILD_DIR) codetest

coretest: all
prove t/pmc
$(PERL) t/harness t/00-parrot t/01-sanity

fulltest: coretest spectest codetest

# Run the tests in t/localtest.data
localtest: all Test.pir spectest_checkout t/localtest.data
@$(HARNESS_WITH_FUDGE_JOBS) --tests-from-file=t/localtest.data

# Run the tests in t/localtest.data with a higher verbosity
localtest_loud: all Test.pir spectest_checkout t/localtest.data
@$(HARNESS_WITH_FUDGE) --tests-from-file=t/localtest.data --verbosity=1

# Run the spectests that we know work.
spectest_regression: spectest
spectest: testable t/spectest.data
$(HARNESS_WITH_FUDGE_JOBS) --tests-from-file=t/spectest.data

spectest_full: testable
$(HARNESS_WITH_FUDGE_JOBS) t/spec

# Run many tests of your choise.
# make sometests TESTFILES=t/foo/bar
sometests: all
@$(HARNESS_WITH_FUDGE_JOBS) $(TESTFILES)

# Run a single test
t/*.t t/*/*.t t/*/*/*.t: all Test.pir
@$(HARNESS_WITH_FUDGE) --verbosity=1 $@


## cleaning
clean:
$(RM_F) $(CLEANUPS)

distclean: realclean

realclean: clean
$(RM_F) src/utils/Makefile Makefile

testclean:


## miscellaneous targets
# a listing of all targets meant to be called by users
help:
@echo ""
@echo "Following targets are available for the user:"
@echo ""
@echo " all: perl6.pbc"
@echo " This is the default."
@echo " perl6$(EXE): Some want a pony, others are satisfied with an executable."
@echo " spectest_checkout Performs svn checkout of official test suite."
@echo " spectest_update Performs svn update of official test suite."
@echo " testable: Create the perl6 executable, compile the Test library,"
@echo " and update official test suite."
@echo " xmas: Christmas is when Perl 6 is released. Alias of perl6$(EXE)."
@echo ""
@echo "Testing:"
@echo " test: Run coretest and codetest."
@echo " codetest: Run Parrot's code tests."
@echo " coretest: Run rakudo's core tests."
@echo " fulltest: Run coretest, spectest, and codetest."
@echo " localtest: Run the official tests given in t/localtest.data."
@echo " spectest: Run the tests of the official test suite that are known to pass."
@echo " spectest_full: Run all tests of the official test suite"
@echo ""
@echo "Cleaning:"
@echo " clean: Basic cleaning up."
@echo " distclean: Removes also anything built, in theory."
@echo " realclean: Removes also files generated by 'Configure.pl'."
@echo " testclean: Clean up test results."
@echo ""
@echo "Misc:"
@echo " help: Print this help message."
@echo " Makefile: Regenerate the Makefile."
@echo ""

# regenerate the Makefile
Makefile: config/makefiles/root.in config/makefiles/utils.in
cd $(BUILD_DIR) && $(RECONFIGURE) --step=gen::languages --languages=perl6

0 comments on commit 7ab01c5

Please sign in to comment.