Dmitry Arkhipov 1 год назад
Родитель
Сommit
da4fb7264c
1 измененных файлов с 19 добавлено и 3 удалено
  1. 19 3
      Jamroot

+ 19 - 3
Jamroot

@@ -433,17 +433,18 @@ rule boost-library ( id ? : options * : * )
 #
 # NOTE: This has to be after the boost-* rule definitions to ensure that those
 # are available for import into the new projects.
+local location = [ project.attribute $(__name__) location ] ;
 for local lib in $(all-libraries-to-declare)
 {
     local lib-path
-        = [ path.join [ project.attribute $(__name__) location ] libs $(lib) ] ;
+        = [ path.join $(location) libs $(lib) ] ;
     if $(lib) = numeric_conversion
     {
-        lib-path = [ path.join [ project.attribute $(__name__) location ] libs/numeric/conversion ] ;
+        lib-path = [ path.join $(location) libs/numeric/conversion ] ;
     }
     else if $(lib) in interval odeint ublas
     {
-        lib-path = [ path.join [ project.attribute $(__name__) location ] libs/numeric/$(lib) ] ;
+        lib-path = [ path.join $(location) libs/numeric/$(lib) ] ;
     }
     local lib-module
         = [ project.load $(lib-path) : synthesize ] ;
@@ -467,3 +468,18 @@ if ! [ project.search /boost/tools/boost\_install ]
 {
     use-project /boost/tools/boost\_install : tools/boost\_install ;
 }
+
+# Ensure "modular" libraries' projects are loaded before build request is
+# calculated. This is necessary for subprojects that define custom features
+# to be set by users on command line.
+# This part should stay at the bottom of the file, because subprojects may rely
+# on rules or constants from it.
+for local l in $(all-libraries-modular-build)
+{
+    # project.find returns the module for the project, which ensures that the
+    # project is loaded. The convoluted way the rule is invoked is due to the
+    # fact that project.find can only be called from a project target instance.
+    modules.call-in [ project.target $(__name__) ]
+        : project.find /boost/$(l)
+        : $(location) ;
+}

粤ICP备19079148号