Let me try reposting the patch, which gives me the opportunity to bit
twiddle a bit more:

  * Removed the mmap nonsense which was sent by accident

  * Renamed config.c to config_string.c to make it less generic

  * Moved a couple externs from a core parrot library into the main
executable, where they sit better

Thanks for considering this patch,

Nick

On 10/17/05, Joshua Hoblitt via RT <[EMAIL PROTECTED]> wrote:
> I'm guessing that this change in src/embed.c wasn't intended to be included 
> in the patch:
>
> -            mmap(0, program_size, PROT_READ, MAP_SHARED, fd, (off_t)0);
> +            mmap(0, program_size, PROT_READ, MAP_PRIVATE, fd, (off_t)0);
Index: build_tools/parrot_config_c.pl
===================================================================
--- build_tools/parrot_config_c.pl      (revision 9496)
+++ build_tools/parrot_config_c.pl      (working copy)
@@ -7,7 +7,7 @@
 
 =head1 NAME
 
-build_tools/parrot_config_c.pl - Create src/parrot_config.c
+build_tools/parrot_config_c.pl - Create src/parrot_config.c and variants
 
 =head1 SYNOPSIS
 
@@ -41,46 +41,46 @@
  *
  */
 
+EOF
+
+if ($mini_parrot) {
+
+    print << "EOF";
 #include "parrot/parrot.h"
 
+const char* parrot_config_ptr   = NULL;
+unsigned int parrot_config_size = 0;
+EOF
+}
+else
+{
+    print << "EOF";
 static const char parrot_config[] = {
 EOF
 
-if ($mini_parrot) {
-    print "    0\n";
-}
-else {
     my $image_file = $install_parrot ?
-       'install_config.fpmc' : 'runtime/parrot/include/config.fpmc';
+        'install_config.fpmc' : 'runtime/parrot/include/config.fpmc';
     open F, $image_file or die "Can't read '$image_file': $!";
     my $image;
     local $/;
-       binmode F;
+    binmode F;
     $_ = <F>;
     close F;
     my @c = split '';
     printf '    ';
     my $i;
     for (@c) {
-       printf "0x%02x", ord($_);
-       ++$i;
-       print ', ', if ($i < scalar(@c));
-       print "\n    " unless $i % 8;
+        printf "0x%02x", ord($_);
+        ++$i;
+        print ', ', if ($i < scalar(@c));
+        print "\n    " unless $i % 8;
     }
     print "\n";
-}
 
 print << "EOF";
 }; /* parrot_config */
 
-STRING*
-parrot_get_config_string(Interp* interpreter)
-{
-    if (sizeof(parrot_config) <= 1)
-       return NULL;
-    return string_from_const_cstring(interpreter,
-       parrot_config, sizeof(parrot_config));
+const char* parrot_config_ptr   = parrot_config;
+unsigned int parrot_config_size = sizeof(parrot_config);
+EOF
 }
-EOF
-
-
Index: src/config_string.c
===================================================================
--- src/config_string.c (revision 0)
+++ src/config_string.c (revision 0)
@@ -0,0 +1,63 @@
+/*
+  Copyright: 2005 The Perl Foundation.  All Rights Reserved.
+  $Id$
+
+=head1 NAME
+
+src/config_string.c - Register configuration bundle with parrot runtime
+
+=head1 DESCRIPTION
+
+The routines in this file can be used to set and retrieve the embedded
+configuration data for the parrot runtime.
+
+There are currently three runtimes:
+
+=over 4
+
+=item * a dummy stub used in minparrot during and other utilities. No
+explicit set is required for this
+
+=item * the default config used during the build
+
+=item * a config profile suitable once parrot has been installed system-wide
+
+=back
+
+=cut
+
+*/
+
+#include "parrot/parrot.h"
+
+static const char  *parrot_config_private_ptr  = NULL;
+static unsigned int parrot_config_private_size = 0;
+
+void
+Parrot_set_config_string(const char*  new_parrot_config_ptr,
+                         unsigned int new_parrot_config_size)
+{
+    parrot_config_private_ptr  = new_parrot_config_ptr;
+    parrot_config_private_size = new_parrot_config_size;
+}
+
+STRING*
+parrot_get_config_string(Interp* interpreter)
+{
+    if (!parrot_config_private_ptr)
+        return NULL;
+
+    return string_from_const_cstring(interpreter,
+                                     parrot_config_private_ptr,
+                                     parrot_config_private_size);
+}
+
+/*
+ * Local variables:
+ * c-indentation-style: bsd
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * vim: expandtab shiftwidth=4:
+ */
Index: MANIFEST
===================================================================
--- MANIFEST    (revision 9496)
+++ MANIFEST    (working copy)
@@ -1728,6 +1728,7 @@
 src/exec_save.c                                   []
 src/exec_start.c                                  []
 src/exit.c                                        []
+src/config_string.c                               []
 src/extend.c                                      []
 src/gc_gms.c                                      []
 src/gc_ims.c                                      []
Index: imcc/main.c
===================================================================
--- imcc/main.c (revision 9496)
+++ imcc/main.c (working copy)
@@ -26,6 +26,9 @@
 static char optimizer_opt[20];
 extern FILE *yyin;
 
+extern const char*  parrot_config_ptr;
+extern unsigned int parrot_config_size;
+
 static void
 usage(FILE* fp)
 {
@@ -455,6 +458,8 @@
     char *sourcefile;
     char *output;
 
+    Parrot_set_config_string(parrot_config_ptr,parrot_config_size);
+
     Interp *interp = Parrot_new(NULL);
 
     Parrot_init(interp);
Index: include/parrot/library.h
===================================================================
--- include/parrot/library.h    (revision 9496)
+++ include/parrot/library.h    (working copy)
@@ -28,6 +28,9 @@
         enum_runtime_ft);
 
 void Parrot_autoload_class(Interp *, STRING *class);
+
+void Parrot_set_config_string(const char*  new_parrot_config_ptr,
+                              unsigned int new_parrot_config_size);
 STRING * parrot_get_config_string(Interp* );
 const char* Parrot_get_runtime_prefix(Interp *, STRING **prefix);
 
Index: config/gen/makefiles/libparrot_def.in
===================================================================
--- config/gen/makefiles/libparrot_def.in       (revision 9496)
+++ config/gen/makefiles/libparrot_def.in       (working copy)
@@ -10,4 +10,5 @@
        Parrot_destroy
        Parrot_debug
        Parrot_disassemble
+        Parrot_set_config_string
        Parrot_DynOp_core_${MAJOR}_${MINOR}_${PATCH}
Index: config/gen/makefiles/root.in
===================================================================
--- config/gen/makefiles/root.in        (revision 9496)
+++ config/gen/makefiles/root.in        (working copy)
@@ -426,6 +426,7 @@
     $(SRC_DIR)/mmd$(O) \
     $(SRC_DIR)/builtin$(O) \
     $(SRC_DIR)/extend$(O) \
+    $(SRC_DIR)/config_string$(O) \
     $(SRC_DIR)/revision$(O) \
     $(PF_DIR)/pf_items$(O) \
     $(OPS_DIR)/core_ops$(O) \
@@ -764,7 +765,6 @@
 $(PDB) : $(SRC_DIR)/pdb$(O) $(LIBPARROT)
        $(LINK) ${ld_out}$(PDB) \
        $(SRC_DIR)/pdb$(O) \
-       $(SRC_DIR)/null_config$(O) \
        $(LINKFLAGS) $(ALL_PARROT_LIBS)
 
 #
@@ -776,7 +776,6 @@
 $(DIS) : $(SRC_DIR)/disassemble$(O) $(LIBPARROT)
        $(LINK) ${ld_out}$(DIS) \
        $(SRC_DIR)/disassemble$(O) \
-       $(SRC_DIR)/null_config$(O) \
        $(LINKFLAGS) $(ALL_PARROT_LIBS)
 
 #
@@ -786,7 +785,6 @@
 $(PDUMP) : $(SRC_DIR)/pdump$(O) $(SRC_DIR)/packdump$(O) $(LIBPARROT)
        $(LINK) ${ld_out}$(PDUMP) \
        $(SRC_DIR)/pdump$(O) \
-       $(SRC_DIR)/null_config$(O) \
        $(SRC_DIR)/packdump$(O) $(LINKFLAGS) $(ALL_PARROT_LIBS)
 
 
@@ -794,7 +792,6 @@
 $(PINFO) : $(SRC_DIR)/pbc_info$(O) $(LIBPARROT)
        $(LINK) ${ld_out}$(PINFO) \
        $(SRC_DIR)/pbc_info$(O) \
-       $(SRC_DIR)/null_config$(O) \
        $(LINKFLAGS) $(ALL_PARROT_LIBS)
 
 #
@@ -805,7 +802,6 @@
 $(PBCMERGE) : $(SRC_DIR)/pbc_merge$(O) $(LIBPARROT)
        $(LINK) ${ld_out}$(PBCMERGE) \
        $(SRC_DIR)/pbc_merge$(O) \
-       $(SRC_DIR)/null_config$(O) \
        $(LINKFLAGS) $(ALL_PARROT_LIBS)
 
 
@@ -946,6 +942,8 @@
 
 $(SRC_DIR)/thread$(O) : $(GENERAL_H_FILES)
 
+$(SRC_DIR)/config_string$(O) : $(GENERAL_H_FILES)
+
 $(SRC_DIR)/extend$(O) : $(GENERAL_H_FILES) $(INC_DIR)/extend.h
 
 $(SRC_DIR)/interpreter$(O) : $(SRC_DIR)/interpreter.c $(GENERAL_H_FILES) \

Reply via email to