Skip to content
Browse files

[EcmaScript] re-run mk_language_shell.pl

Now works with an installed Parrot.
  • Loading branch information...
1 parent 9dbcd66 commit e961bb40b26e6385745b893e901c23b50b5fcf22 @fperrad fperrad committed Mar 11, 2009
Showing with 184 additions and 114 deletions.
  1. +66 −0 Configure.pl
  2. +118 −114 config/makefiles/root.in
View
66 Configure.pl
@@ -0,0 +1,66 @@
+# Copyright (C) 2009, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+use 5.008;
+
+# Get a list of parrot-configs to invoke.
+my @parrot_config_exe = (
+ 'parrot/parrot_config',
+ '../../parrot_config',
+ 'parrot_config',
+);
+
+# Get configuration information from parrot_config
+my %config = read_parrot_config(@parrot_config_exe);
+unless (%config) {
+ die "Unable to locate parrot_config.";
+}
+
+# Create the Makefile using the information we just got
+create_makefiles(%config);
+
+sub read_parrot_config {
+ my @parrot_config_exe = @_;
+ my %config = ();
+ for my $exe (@parrot_config_exe) {
+ no warnings;
+ if (open my $PARROT_CONFIG, '-|', "$exe --dump") {
+ print "Reading configuration information from $exe\n";
+ while (<$PARROT_CONFIG>) {
+ $config{$1} = $2 if (/(\w+) => '(.*)'/);
+ }
+ close $PARROT_CONFIG;
+ last if %config;
+ }
+ }
+ %config;
+}
+
+
+# Generate Makefiles from a configuration
+sub create_makefiles {
+ my %config = @_;
+ my %makefiles = (
+ 'config/makefiles/root.in' => 'Makefile',
+# 'config/makefiles/pmc.in' => 'src/pmc/Makefile',
+# 'config/makefiles/ops.in' => 'src/ops/Makefile',
+ );
+ my $build_tool = $config{libdir} . $config{versiondir}
+ . '/tools/dev/gen_makefile.pl';
+
+ foreach my $template (keys %makefiles) {
+ my $makefile = $makefiles{$template};
+ print "Creating $makefile\n";
+ system($config{perl}, $build_tool, $template, $makefile);
+ }
+}
+
+# Local Variables:
+# mode: cperl
+# cperl-indent-level: 4
+# fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:
+
View
232 config/makefiles/root.in
@@ -2,127 +2,124 @@
# $Id$
## arguments we want to run parrot with
-PARROT_ARGS =
+PARROT_ARGS :=
## configuration settings
-BUILD_DIR = @build_dir@
-LOAD_EXT = @load_ext@
-O = @o@
-
-# Setup some commands
-LN_S = @lns@
-PERL = @perl@
-RM_F = @rm_f@
-RM_RF = @rm_rf@
-CP = @cp@
-PARROT = ../../parrot@exe@
-CAT = @cat@
-BUILD_DYNPMC = $(PERL) $(BUILD_DIR)/tools/build/dynpmc.pl
-RECONFIGURE = $(PERL) $(BUILD_DIR)/tools/dev/reconfigure.pl
-#CONDITIONED_LINE(darwin):
-#CONDITIONED_LINE(darwin):# MACOSX_DEPLOYMENT_TARGET must be defined for OS X compilation/linking
-#CONDITIONED_LINE(darwin):export MACOSX_DEPLOYMENT_TARGET := @osx_version@
-
-## places to look for things
-PARROT_DYNEXT = $(BUILD_DIR)/runtime/parrot/dynext
-PGE_LIBRARY = $(BUILD_DIR)/runtime/parrot/library/PGE
-PERL6GRAMMAR = $(PGE_LIBRARY)/Perl6Grammar.pbc
-NQP = $(BUILD_DIR)/compilers/nqp/nqp.pbc
-PCT = $(BUILD_DIR)/runtime/parrot/library/PCT.pbc
-PBC_TO_EXE = $(BUILD_DIR)/pbc_to_exe@exe@
-
-PMCDIR = src/pmc
-
-
-# the default target
-all: js.pbc #$(PMCDIR)/js_group$(LOAD_EXT)
-
-SOURCES = \
- js.pir \
+VERSION := @versiondir@
+BIN_DIR := @bin_dir@
+LIB_DIR := @lib_dir@$(VERSION)
+DOC_DIR := @doc_dir@$(VERSION)
+MANDIR := @mandir@$(VERSION)
+
+# Set up extensions
+LOAD_EXT := @load_ext@
+O := @o@
+
+# Various paths
+PERL6GRAMMAR := $(LIB_DIR)/library/PGE/Perl6Grammar.pbc
+NQP := $(LIB_DIR)/languages/nqp/nqp.pbc
+PCT := $(LIB_DIR)/library/PCT.pbc
+
+## Setup some commands
+MAKE := @make_c@
+PERL := @perl@
+CAT := @cat@
+CHMOD := @chmod@
+CP := @cp@
+MKPATH := @mkpath@
+RM_F := @rm_f@
+RM_RF := @rm_rf@
+POD2MAN := pod2man
+#IF(parrot_is_shared and not(cygwin or win32)):export LD_RUN_PATH := @blib_dir@:$(LD_RUN_PATH)
+PARROT := $(BIN_DIR)/parrot@exe@
+PBC_TO_EXE := $(BIN_DIR)/pbc_to_exe@exe@
+#IF(darwin):
+#IF(darwin):# MACOSX_DEPLOYMENT_TARGET must be defined for OS X compilation/linking
+#IF(darwin):export MACOSX_DEPLOYMENT_TARGET := @osx_version@
+
+SOURCES := \
src/gen_grammar.pir \
src/gen_actions.pir \
- src/builtin/builtins.pir \
+ src/gen_builtins.pir \
src/classes/Object.pir \
src/classes/Array.pir \
src/classes/Null.pir \
src/classes/Boolean.pir \
src/classes/Number.pir \
src/classes/String.pir \
src/classes/Undefined.pir \
+ js.pir
-#PMCS = \
-# jsobject \
-# jsinteger \
-# jshash \
-# jsbignum \
-# jscomplex \
-# jsfixnum \
-# jsfloat \
-# jsstring
-
-#PMC_SOURCES = \
-# $(PMCDIR)/jsobject.pmc \
-# $(PMCDIR)/jsinteger.pmc \
-# $(PMCDIR)/jshash.pmc \
-# $(PMCDIR)/jsbignum.pmc \
-# $(PMCDIR)/jscomplex.pmc \
-# $(PMCDIR)/jsfixnum.pmc \
-# $(PMCDIR)/jsfloat.pmc \
-# $(PMCDIR)/jsstring.pmc
-
-#BUILTINS_PIR = \
-# src/builtins/assign.pir \
-# src/builtins/cmp.pir \
-# src/builtins/io.pir
-
-#GEN_PIR = \
-# src/js_grammar_gen.pir \
-# src/ASTGrammar.pir \
-# src/OSTGrammar.pir \
-# src/builtins_gen.pir
-
-#GEN_PBC = \
-# src/CardinalGrammar.pbc \
-# src/PGE2AST.pbc \
-# src/AST2OST.pbc \
-# src/PAST.pbc \
-# src/POST.pbc
-
-# target for building a standalone javascript compiler
-js@exe@: js.pbc
- $(PBC_TO_EXE) js.pbc
+BUILTINS_PIR := \
+ src/builtin/builtins.pir
+
+DOCS := README
+
+BUILD_CLEANUPS := \
+ js.pbc \
+ "src/gen_*.pir" \
+ "*.c" \
+ "*$(O)" \
+ js@exe@ \
+#IF(win32): parrot-js.exe \
+#IF(win32): parrot-ecmascript.iss \
+#IF(win32): "setup-parrot-*.exe" \
+ installable_js@exe@
+
+TEST_CLEANUPS := \
+ "t/*.js" \
+ "t/*.out" \
+ "t/sanity_pt/*.js" \
+ "t/sanity_pt/*.out" \
+ "t/js_pt/*.js" \
+ "t/js_pt/*.out" \
# the default target
-js.pbc: $(PARROT) $(SOURCES)
+build: js.pbc
+
+all: build js@exe@ installable
+
+js.pbc: $(SOURCES)
$(PARROT) $(PARROT_ARGS) -o js.pbc js.pir
+js@exe@: js.pbc
+ $(PBC_TO_EXE) js.pbc
+
src/gen_grammar.pir: $(PERL6GRAMMAR) src/parser/grammar.pg
$(PARROT) $(PARROT_ARGS) $(PERL6GRAMMAR) \
--output=src/gen_grammar.pir \
src/parser/grammar.pg
-src/gen_actions.pir: $(NQP) $(PCT) src/parser/actions.pm
+src/gen_actions.pir: $(NQP) src/parser/actions.pm
$(PARROT) $(PARROT_ARGS) $(NQP) --output=src/gen_actions.pir \
--target=pir src/parser/actions.pm
-# no builtins yet
-#src/gen_builtins.pir: $(BUILTINS_PIR)
-# $(CAT) $(BUILTINS_PIR) >src/gen_builtins.pir
+src/gen_builtins.pir: $(BUILTINS_PIR)
+ $(CAT) $(BUILTINS_PIR) > src/gen_builtins.pir
+
+installable: installable_js@exe@
+installable_js@exe@: js.pbc
+ $(PBC_TO_EXE) js.pbc --install
-# regenerate the Makefile
Makefile: config/makefiles/root.in
- cd $(BUILD_DIR) && $(RECONFIGURE) --step=gen::languages --languages=ecmascript
+ $(PERL) Configure.pl
# This is a listing of all targets, that are meant to be called by users
help:
@echo ""
@echo "Following targets are available for the user:"
@echo ""
- @echo " all: js.pbc"
+ @echo " build: js.pbc"
@echo " This is the default."
+ @echo " js@exe@ Self-hosting binary not to be installed."
+ @echo " all: js.pbc js@exe@ installable"
+ @echo " installable: Create libs and self-hosting binaries to be installed."
+ @echo " install: Install the installable targets and docs."
+ @echo ""
@echo "Testing:"
@echo " test: Run the test suite."
+ @echo " test-installable: Test self-hosting targets."
@echo " testclean: Clean up test results."
@echo ""
@echo "Cleaning:"
@@ -134,44 +131,51 @@ help:
@echo " help: Print this help message."
@echo ""
-test: all
- $(PERL) t/harness
+test: build
+ $(PERL) -I$(LIB_DIR)/tools/lib t/harness
+
+# basic run for missing libs
+test-installable: installable
+ echo "1" | ./installable_ecmascript@exe@
+
+install: installable
+ $(CP) installable_js@exe@ $(BIN_DIR)/parrot-js@exe@
+ $(CHMOD) 0755 $(BIN_DIR)/parrot-js@exe@
+ -$(MKPATH) $(LIB_DIR)/languages/ecmascript
+ $(CP) js.pbc $(LIB_DIR)/languages/ecmascript/js.pbc
+ -$(MKPATH) $(MANDIR)/man1
+ $(POD2MAN) js.pir > $(MANDIR)/man1/parrot-js.1
+# -$(MKPATH) $(DOC_DIR)/languages/ecmascript
+# $(CP) $(DOCS) $(DOC_DIR)/languages/ecmascript
+
+uninstall:
+ $(RM_F) $(BIN_DIR)/parrot-js@exe@
+ $(RM_RF) $(LIB_DIR)/languages/ecmascript
+ $(RM_F) $(MANDIR)/man1/parrot-js.1
+# $(RM_RF) $(DOC_DIR)/languages/ecmascript
+
+win32-inno-installer: installable
+ -$(MKPATH) man/man1
+ $(POD2MAN) js.pir > man/man1/parrot-js.1
+ -$(MKPATH) man/html
+ pod2html --infile js.pir --outfile man/html/parrot-js.html
+ $(CP) installable_js@exe@ parrot-js.exe
+ $(PERL) $(LIB_DIR)/tools/dev/mk_inno_language.pl ecmascript
+ iscc parrot-ecmascript.iss
testclean:
- $(RM_F) "t/*.js" "t/*.out"
- $(RM_F) "t/sanity_pt/*.js" "t/sanity_pt/*.out"
- $(RM_F) "t/js_pt/*.js" "t/js_pt/*.out"
-
-
-CLEANUPS = \
- js.pbc \
- js@exe@ \
- js.c \
- src/gen_grammar.pir \
- src/gen_actions.pir \
- src/gen_builtins.pir \
- $(PMCDIR)/*.h \
- $(PMCDIR)/*.c \
- $(PMCDIR)/*.dump \
- $(PMCDIR)/*$(O) \
- $(PMCDIR)/*$(LOAD_EXT) \
- $(PMC_DIR)/*.exp \
- $(PMC_DIR)/*.ilk \
- $(PMC_DIR)/*.manifest \
- $(PMC_DIR)/*.pdb \
- $(PMC_DIR)/*.lib \
- t/*.out \
- t/*.rb
+ $(RM_F) $(TEST_CLEANUPS)
clean:
- $(RM_RF) $(CLEANUPS)
+ $(RM_F) $(TEST_CLEANUPS) $(BUILD_CLEANUPS)
-realclean: clean
- $(RM_RF) Makefile
+realclean:
+ $(RM_F) $(TEST_CLEANUPS) $(BUILD_CLEANUPS) Makefile
distclean: realclean
# Local variables:
# mode: makefile
# End:
# vim: ft=make:
+

0 comments on commit e961bb4

Please sign in to comment.
Something went wrong with that request. Please try again.