Skip to content

Commit

Permalink
B2 5.1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
grafikrobot committed Mar 10, 2024
2 parents b0311a0 + 40f603a commit efbf6ce
Show file tree
Hide file tree
Showing 26 changed files with 246 additions and 21 deletions.
2 changes: 1 addition & 1 deletion .clang-format
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
BasedOnStyle: WebKit
IndentWidth: 4
TabWidth: 4
UseTab: ForContinuationAndIndentation
UseTab: Never
---
Language: Cpp
AccessModifierOffset: 0
Expand Down
29 changes: 29 additions & 0 deletions doc/src/history.adoc
Original file line number Diff line number Diff line change
@@ -1,6 +1,35 @@
[[b2.history]]
= History

== Version 5.1.0

This is mostly a bugfix release to account for issues impacting Boost Libraries.
There is one "big" change though. It can be rather difficult to find build
failures when running larger builds. To facilitate figuring out problems the
brief summary output at the end of a build is now less brief. It now includes
a *sorted* list of the targets that got skipped and failed. The output of those
lists mirrors the general skipped/failed items. Hence it's possible to search
for the same strings in the rest of the output quickly.

* *New*: Add listing of failed and skipped targets to end of build summary to
make it easier to find what fails.
-- _René Ferdinand Rivera Morell_
* *New*: Add `mpi.run-flags` to `mpi` toolset that allows for arbitrary flags
applied to running mpi targets. This allows, for example, adding
`--oversubscribe` flag to make it possible to run tests where the tasks are
more than the nodes available.
-- _René Ferdinand Rivera Morell_
* Fix spurious errors when the header scanning tries to scan empty file names.
-- _René Ferdinand Rivera Morell_
* Make C/C++/ObjC include directive scanning pattern more strict to avoid
trying to scan for empty file names.
-- _Andrey Semashev_
* Fix mingw linker commands to always replace backslashes with forward slashes.
-- _Christian Seiler_
* Fix QCC debug build flag. The QCC toolset was using an old, no longer
supported, debug symbols option.
-- _John McFarlane_

== Version 5.0.1

* Fix compile errors for older versions of GCC and Clang toolset for the engine.
Expand Down
10 changes: 10 additions & 0 deletions src/build/project.jam
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,16 @@ rule search ( name )
{
if [ path.is-rooted $(name) ]
{
# Check for a regular B2 project at an exactly matched registered
# search path location.
for local dir in "$(.search-path.$(name))"
{
local jamfile = [ path.glob $(dir) : $(JAMROOT) $(JAMFILE) ] ;
if $(jamfile)
{
return $(dir) ;
}
}
# Check for a regular B2 project relative to the search path and
# project subdir.
for local dir in "$(.search-path./)"
Expand Down
4 changes: 2 additions & 2 deletions src/build/version.jam
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import numbers ;

# Mirror engine JAM_VERSION
.major = 5 ;
.minor = 0 ;
.patch = 1 ;
.minor = 1 ;
.patch = 0 ;


rule build ( )
Expand Down
1 change: 1 addition & 0 deletions src/engine/build.bat
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,7 @@ set B2_SOURCES=%B2_SOURCES% mod_regex.cpp
set B2_SOURCES=%B2_SOURCES% mod_sequence.cpp
set B2_SOURCES=%B2_SOURCES% mod_set.cpp
set B2_SOURCES=%B2_SOURCES% mod_string.cpp
set B2_SOURCES=%B2_SOURCES% mod_summary.cpp
set B2_SOURCES=%B2_SOURCES% mod_sysinfo.cpp
set B2_SOURCES=%B2_SOURCES% mod_version.cpp

Expand Down
1 change: 1 addition & 0 deletions src/engine/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -498,6 +498,7 @@ mod_regex.cpp \
mod_sequence.cpp \
mod_set.cpp \
mod_string.cpp \
mod_summary.cpp \
mod_sysinfo.cpp \
mod_version.cpp \
"
Expand Down
6 changes: 6 additions & 0 deletions src/engine/headers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,12 @@ LIST * headers1( LIST * l, OBJECT * file, int rec, b2::regex::program re[] )
}
#endif

if ( file->as_string().size == 0 )
{
/* If the scanning was fed empty file names we just ignore them. */
return l;
}

if ( !( f = fopen( object_str( file ), "r" ) ) )
{
/* No source files will be generated when -n flag is passed */
Expand Down
44 changes: 37 additions & 7 deletions src/engine/make1.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,11 @@
#include "output.h"
#include "startup.h"

#include "mod_summary.h"

#include <assert.h>
#include <stdlib.h>
#include <memory>

#if !defined( NT ) || defined( __GNUC__ )
#include <unistd.h> /* for unlink */
Expand All @@ -81,6 +84,10 @@ static struct
int32_t made;
} counts[ 1 ];

static std::unique_ptr<b2::summary> make_summary;
static const char * targets_failed = "targets failed";
static const char * targets_skipped = "targets skipped";

/* Target state. */
#define T_STATE_MAKE1A 0 /* make1a() should be called */
#define T_STATE_MAKE1B 1 /* make1b() should be called */
Expand Down Expand Up @@ -207,6 +214,9 @@ int32_t make1( LIST * targets )
int32_t status = 0;

memset( (char *)counts, 0, sizeof( *counts ) );
make_summary.reset(new b2::summary);
make_summary->group(targets_failed);
make_summary->group(targets_skipped);

{
LISTITER iter, end;
Expand Down Expand Up @@ -247,15 +257,25 @@ int32_t make1( LIST * targets )
clear_state_freelist();

/* Talk about it. */
if ( counts->failed )
out_printf( "...failed updating %d target%s...\n", counts->failed,
counts->failed > 1 ? "s" : "" );
if ( DEBUG_MAKE && counts->skipped )
out_printf( "...skipped %d target%s...\n", counts->skipped,
counts->skipped > 1 ? "s" : "" );
if ( DEBUG_MAKE && counts->made )
out_printf( "...updated %d target%s...\n", counts->made,
{
out_printf( "\n...updated %d target%s...\n", counts->made,
counts->made > 1 ? "s" : "" );
}
if ( DEBUG_MAKE && counts->skipped )
{
out_printf( "\n...skipped %d target%s...\n",
make_summary->count(targets_skipped),
make_summary->count(targets_skipped) > 1 ? "s" : "" );
make_summary->print(targets_skipped, " %s\n");
}
if ( counts->failed )
{
out_printf( "\n...failed updating %d target%s...\n",
make_summary->count(targets_failed),
make_summary->count(targets_failed) > 1 ? "s" : "" );
make_summary->print(targets_failed, " %s\n");
}

/* If we were interrupted, exit now that all child processes
have finished. */
Expand Down Expand Up @@ -425,15 +445,18 @@ static void make1b( state * const pState )
if ( ( t->status == EXEC_CMD_FAIL ) && t->actions )
{
++counts->skipped;
make_summary->message(targets_skipped, object_str( t->name ));
if ( ( t->flags & ( T_FLAG_RMOLD | T_FLAG_NOTFILE ) ) == T_FLAG_RMOLD )
{
if ( !unlink( object_str( t->boundname ) ) )
out_printf( "...removing outdated %s\n", object_str( t->boundname )
);
}
else
{
out_printf( "...skipped %s for lack of %s...\n", object_str( t->name ),
failed_name );
}
}

if ( t->status == EXEC_CMD_OK )
Expand Down Expand Up @@ -941,6 +964,13 @@ static void make1c_closure
out_printf( "...failed %s ", object_str( cmd->rule->name ) );
list_print( lol_get( (LOL *)&cmd->args, 0 ) );
out_printf( "...\n" );
std::string m = object_str( cmd->rule->name );
for (auto i: b2::list_cref(lol_get( (LOL *)&cmd->args, 0 )))
{
m += " ";
m += i->str();
}
make_summary->message(targets_failed, m.c_str());
}

/* On interrupt, set quit so _everything_ fails. Do the same for failed
Expand Down
40 changes: 40 additions & 0 deletions src/engine/mod_summary.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/*
Copyright 2024 René Ferdinand Rivera Morell
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE.txt or https://www.bfgroup.xyz/b2/LICENSE.txt)
*/

#include "mod_summary.h"

#include "output.h"

namespace b2 {

void summary::group(value_ref group)
{
group_order.push_back(group);
groups.emplace(group, group_t(new group_t::element_type));
}

void summary::message(value_ref group, value_ref message)
{
groups[group]->push_back(message);
}

int summary::count(value_ref group) { return (int)(groups[group]->size()); }

void summary::print(value_ref group, value_ref format)
{
std::string format_str = format;
auto & g = groups[group];
std::sort(g->begin(), g->end(), [](value_ref a, value_ref b) -> bool {
return std::strcmp(a->str(), b->str()) < 0;
});
for (auto const & m : *g)
{
std::string m_str = m;
out_printf(format->str(), m_str.c_str());
}
}

} // namespace b2
60 changes: 60 additions & 0 deletions src/engine/mod_summary.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
Copyright 2024 René Ferdinand Rivera Morell
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE.txt or https://www.bfgroup.xyz/b2/LICENSE.txt)
*/

#ifndef B2_MOD_SUMMARY_H
#define B2_MOD_SUMMARY_H

#include "config.h"

#include "bind.h"
#include "value.h"

#include <memory>
#include <unordered_map>
#include <vector>

namespace b2 {

class summary : public object
{
public:
void group(value_ref group);
void message(value_ref group, value_ref message);
int count(value_ref group);
void print(value_ref group, value_ref format);

private:
using group_t = std::unique_ptr<std::vector<value_ref>>;
using groups_t = std::unordered_map<value_ref,
group_t,
value_ref::hash_function,
value_ref::equal_function>;

groups_t groups;
std::vector<value_ref> group_order;
};

struct summary_module : b2::bind::module_<summary_module>
{
const char * module_name = "summary";

template <class Binder>
void def(Binder & binder)
{
binder.def_class("summary", type_<summary>())
.def(init_<>())
.def(&summary::group, "group", "group" * _1)
.def(&summary::message, "message", "group" * _1,
"message" * _1n)
.def(&summary::count, "count", "group" * _1)
.def(&summary::print, "print", "group" * _1,
"format" * _1);
}
};

} // namespace b2

#endif
4 changes: 2 additions & 2 deletions src/engine/patchlevel.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ Distributed under the Boost Software License, Version 1.0.
*/

#define VERSION_MAJOR 5
#define VERSION_MINOR 0
#define VERSION_PATCH 1
#define VERSION_MINOR 1
#define VERSION_PATCH 0
4 changes: 2 additions & 2 deletions src/tools/gcc.jam
Original file line number Diff line number Diff line change
Expand Up @@ -1033,12 +1033,12 @@ rule link.dll ( targets * : sources * : properties * )

actions link bind LIBRARIES
{
"$(CONFIG_COMMAND)" @($(<[1]:T).rsp:O=FC:<=@":>=":E=-L"$(LINKPATH)" -Wl,$(RPATH_OPTION)$(SPACE)-Wl,$(RPATH) -Wl,-rpath-link$(SPACE)-Wl,"$(RPATH_LINK)" -o "$(<)" $(START-GROUP) "$(>:T)" "$(LIBRARIES)" $(FINDLIBS-ST-PFX) -l$(FINDLIBS-ST) $(FINDLIBS-SA-PFX) -l$(FINDLIBS-SA) $(END-GROUP) $(OPTIONS) $(USER_OPTIONS))
"$(CONFIG_COMMAND)" @($(<[1]:T).rsp:O=FC:<=@":>=":E=-L"$(LINKPATH)" -Wl,$(RPATH_OPTION)$(SPACE)-Wl,$(RPATH) -Wl,-rpath-link$(SPACE)-Wl,"$(RPATH_LINK)" -o "$(<:T)" $(START-GROUP) "$(>:T)" "$(LIBRARIES)" $(FINDLIBS-ST-PFX) -l$(FINDLIBS-ST) $(FINDLIBS-SA-PFX) -l$(FINDLIBS-SA) $(END-GROUP) $(OPTIONS) $(USER_OPTIONS))
}

actions link.dll bind LIBRARIES
{
"$(CONFIG_COMMAND)" @($(<[1]:T).rsp:O=FC:<=@":>=":E=-L"$(LINKPATH)" -Wl,$(RPATH_OPTION)$(SPACE)-Wl,$(RPATH) -Wl,$(IMPLIB_OPTION:E=--out-implib),"$(<[2])" -o "$(<[1])" $(HAVE_SONAME)-Wl,$(SONAME_OPTION)$(SPACE)-Wl,"$(SONAME_PREFIX:E=)$(<[1]:D=)" $(SHARED_OPTION:E=-shared) $(START-GROUP) "$(>:T)" "$(LIBRARIES)" $(FINDLIBS-ST-PFX) -l$(FINDLIBS-ST) $(FINDLIBS-SA-PFX) -l$(FINDLIBS-SA) $(END-GROUP) $(OPTIONS) $(USER_OPTIONS))
"$(CONFIG_COMMAND)" @($(<[1]:T).rsp:O=FC:<=@":>=":E=-L"$(LINKPATH)" -Wl,$(RPATH_OPTION)$(SPACE)-Wl,$(RPATH) -Wl,$(IMPLIB_OPTION:E=--out-implib),"$(<[2]:T)" -o "$(<[1]:T)" $(HAVE_SONAME)-Wl,$(SONAME_OPTION)$(SPACE)-Wl,"$(SONAME_PREFIX:E=)$(<[1]:D=)" $(SHARED_OPTION:E=-shared) $(START-GROUP) "$(>:T)" "$(LIBRARIES)" $(FINDLIBS-ST-PFX) -l$(FINDLIBS-ST) $(FINDLIBS-SA-PFX) -l$(FINDLIBS-SA) $(END-GROUP) $(OPTIONS) $(USER_OPTIONS))
}

###
Expand Down
6 changes: 5 additions & 1 deletion src/tools/mpi.jam
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ import toolset ;
import type ;
import path ;

feature mpi.run-flags : : free incidental ;

# Make this module a project
project.initialize $(__name__) ;
project mpi ;
Expand Down Expand Up @@ -622,6 +624,8 @@ toolset.uses-features mpi.capture-output :
<testing.launcher> <testing.execute> <dll-path> <xdll-path> <target-os>
<mpi:processes> ;

toolset.flags mpi.capture-output RUN_FLAGS <mpi.run-flags> ;

rule capture-output ( target : sources * : properties * )
{
# Use the standard capture-output rule to run the tests
Expand All @@ -636,7 +640,7 @@ rule capture-output ( target : sources * : properties * )

# We launch MPI processes using the "mpirun" equivalent specified by the user.
LAUNCHER on $(target) =
[ on $(target) return $(.mpirun) $(.mpirun_flags) $(num_processes) ] ;
[ on $(target) return $(.mpirun) $(RUN_FLAGS) $(.mpirun_flags) $(num_processes) ] ;
}

# Creates a set of test cases to be run through the MPI launcher. The name, sources,
Expand Down
4 changes: 2 additions & 2 deletions src/tools/qcc.jam
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ local rule check-target-platform
}

# Declare flags for compilation.
toolset.flags qcc.compile OPTIONS <debug-symbols>on : -gstabs+ ;
toolset.flags qcc.compile OPTIONS <debug-symbols>on : -g ;

# Declare flags and action for compilation.
toolset.flags qcc.compile OPTIONS <optimization>off : -O0 ;
Expand Down Expand Up @@ -215,7 +215,7 @@ generators.register [ new qcc-linking-generator qcc.link.dll : LIB OBJ

# Declare flags for linking.
# First, the common flags.
toolset.flags qcc.link OPTIONS <debug-symbols>on : -gstabs+ ;
toolset.flags qcc.link OPTIONS <debug-symbols>on : -g ;
toolset.flags qcc.link OPTIONS <profiling>on : -p ;
toolset.flags qcc.link OPTIONS <linkflags> ;
toolset.flags qcc.link LINKPATH <library-path> ;
Expand Down
2 changes: 1 addition & 1 deletion src/tools/types/cpp.jam
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class c-scanner : scanner

rule pattern ( )
{
return "#[ \t]*include[ \t]*(<(.*)>|\"(.*)\")" ;
return "^[ \t]*#[ \t]*include[ \t]*(<(.+)>|\"(.+)\")" ;
}

rule process ( target : matches * : binding )
Expand Down
2 changes: 1 addition & 1 deletion src/tools/types/objc.jam
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class objc-scanner : c-scanner

rule pattern ( )
{
return "#[ \t]*include|import[ ]*(<(.*)>|\"(.*)\")" ;
return "^[ \t]*#[ \t]*include|import[ ]*(<(.+)>|\"(.+)\")" ;
}
}

Expand Down
Loading

0 comments on commit efbf6ce

Please sign in to comment.