]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/guile-init.cc
Update version headers to avoid followup conversions to issue 4371
[lilypond.git] / lily / guile-init.cc
index 98b779efaa3d2a1afe2a95a76963aa127ca5e64d..b812402e0e3d85f0ee4c975a246882d6294c7906 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2006--2014 Han-Wen Nienhuys <hanwen@lilypond.org>
+  Copyright (C) 2006--2015 Han-Wen Nienhuys <hanwen@lilypond.org>
 
 
   LilyPond is free software: you can redistribute it and/or modify
 #include "lily-guile.hh"
 #include "main.hh"
 #include "warn.hh"
+#include "smobs.hh"
+#include "lily-imports.hh"
 
 /*
   INIT
 */
 
+// Why a pointer here?  Because it has zero initialization at load
+// time which is guaranteed to come before the static initializations
+// of all constructors for static expressions of the classes created
+// by ADD_SCM_INIT_FUNC.  The vector data type does not have load-time
+// initialization and might clear out already set callbacks at the
+// time it is initialized since there is no implied order among
+// non-trivial constructors for static data in separate compilation
+// units.  So we need a trivial type like a pointer instead.
+
 typedef void (*Void_fptr) ();
 vector<Void_fptr> *scm_init_funcs_;
 
@@ -37,9 +48,11 @@ void add_scm_init_func (void (*f) ())
   scm_init_funcs_->push_back (f);
 }
 
-void
+SCM
 ly_init_ly_module (void *)
 {
+  // Start up type system first.
+  Scm_init::init ();
   for (vsize i = scm_init_funcs_->size (); i--;)
     (scm_init_funcs_->at (i)) ();
 
@@ -51,14 +64,17 @@ ly_init_ly_module (void *)
       debug_output ("]\n", false);
     }
 
-  scm_primitive_load_path (scm_from_locale_string ("lily.scm"));
+  scm_primitive_load_path (scm_from_ascii_string ("lily.scm"));
+  return SCM_UNDEFINED;
 }
 
-SCM global_lily_module;
-
 void
 ly_c_init_guile ()
 {
-  global_lily_module = scm_c_define_module ("lily", ly_init_ly_module, 0);
+  Guile_user::module.import ();
+  Lily::module.boot ();
+  scm_c_call_with_current_module (Lily::module, ly_init_ly_module, 0);
+  Syntax::module.import ();
+  Display::module.import ();
   scm_c_use_module ("lily");
 }