Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .github/workflows/root-ci-config/buildconfig/alma10-asan.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
CMAKE_BUILD_TYPE=RelWithDebInfo
asan=ON
ccache=ON
builtin_civetweb=ON
builtin_vdt=ON
ccache=ON
fail-on-missing=ON
minimal=ON
roottest=ON
testing=ON
LSAN_OPTIONS=verbosity=1:log_threads=1
ROOT_CTEST_CUSTOM_FLAGS="-E \(gtest-core-metacling-TClingTest$\|roottest-cling-specialobj-runf02$\|roottest-root-collection-DeleteWarning$\|roottest-root-io-evolution-fixarr2$\|roottest-root-meta-rlibmap$\|roottest-root-tree-cloning-runtreeCloneTest2$\|roottest-root-treeproxy-vectorint-vectorint$\)"

This file was deleted.

4 changes: 2 additions & 2 deletions .github/workflows/root-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@
INCREMENTAL: ${{ !contains(github.event.pull_request.labels.*.name, 'clean build') && !matrix.platform == 'mac15' && !matrix.platform == 'mac26'}}
GITHUB_PR_ORIGIN: ${{ github.event.pull_request.head.repo.clone_url }}
OVERRIDES: ${{ join( matrix.overrides, ' ') }}
run: |

Check failure on line 161 in .github/workflows/root-ci.yml

View workflow job for this annotation

GitHub Actions / lint-action-files

"github.event.pull_request.head.ref" is potentially untrusted. avoid using it directly in inline scripts. instead, pass it through an environment variable. see https://docs.github.com/en/actions/reference/security/secure-use#good-practices-for-mitigating-script-injection-attacks for more details
[ -d "${VIRTUAL_ENV_DIR}" ] && source ${VIRTUAL_ENV_DIR}/bin/activate
echo "Python is now $(which python3) $(python3 --version)"
src/.github/workflows/root-ci-config/build_root.py \
Expand Down Expand Up @@ -312,7 +312,7 @@
INCREMENTAL: ${{ !contains(github.event.pull_request.labels.*.name, 'clean build') }}
GITHUB_PR_ORIGIN: ${{ github.event.pull_request.head.repo.clone_url }}
shell: cmd
run: "C:\\setenv.bat ${{ matrix.target_arch }} &&

Check failure on line 315 in .github/workflows/root-ci.yml

View workflow job for this annotation

GitHub Actions / lint-action-files

"github.event.pull_request.head.ref" is potentially untrusted. avoid using it directly in inline scripts. instead, pass it through an environment variable. see https://docs.github.com/en/actions/reference/security/secure-use#good-practices-for-mitigating-script-injection-attacks for more details
python .github/workflows/root-ci-config/build_root.py
--buildtype ${{ matrix.config }}
--platform windows10
Expand Down Expand Up @@ -442,10 +442,10 @@
overrides: ["CMAKE_CXX_STANDARD=20"]
# Asan build
- image: alma10
platform_config: alma10-minimal
platform_config: alma10-asan
is_special: true
property: "asan"
overrides: ["ROOT_CTEST_CUSTOM_FLAGS=-E@\\(^tutorial-\\|cppinterop-CppInterOpTest\\|roottest-cling-specialobj-runf02$\\|roottest-root-collection-DeleteWarning$\\|roottest-root-io-evolution-fixarr2$\\|roottest-root-meta-rlibmap$\\|roottest-root-treeproxy-vectorint-vectorint$\\)"]
overrides: ["ROOT_CTEST_CUSTOM_FLAGS=-E@\\(^tutorial-\\|gtest-core-metacling-TClingTest$\\|roottest-cling-specialobj-runf02$\\|roottest-root-collection-DeleteWarning$\\|roottest-root-io-evolution-fixarr2$\\|roottest-root-meta-rlibmap$\\|roottest-root-tree-cloning-runtreeCloneTest2$\\|roottest-root-treeproxy-vectorint-vectorint$\\)"]
# Fedora Rawhide with Python freethreading+debug build
- image: rawhide
python_venv: "/py-venv-3.15td/ROOT-CI"
Expand Down Expand Up @@ -479,7 +479,7 @@
- self-hosted
- linux
- ${{ matrix.architecture == null && 'x64' || matrix.architecture }}
- ${{ matrix.extra-runs-on == null && 'cpu' || matrix.extra-runs-on }}

Check failure on line 482 in .github/workflows/root-ci.yml

View workflow job for this annotation

GitHub Actions / lint-action-files

property "extra-runs-on" is not defined in object type {architecture: string; image: string; is_special: bool; overrides: array<string>; platform_config: string; property: string; python_venv: string}

Check failure on line 482 in .github/workflows/root-ci.yml

View workflow job for this annotation

GitHub Actions / lint-action-files

property "extra-runs-on" is not defined in object type {architecture: string; image: string; is_special: bool; overrides: array<string>; platform_config: string; property: string; python_venv: string}

name: |
${{ matrix.image }} ${{ matrix.property }}
Expand Down
1 change: 1 addition & 0 deletions cmake/modules/RootMacros.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -1768,6 +1768,7 @@ function(ROOT_ADD_TEST test)
list(FILTER theCommand INCLUDE REGEX "^-DCMD=.*python[0-9.]*[\\^]")
if((theCommand AND
NOT (_command MATCHES XMLParsing/parseXMLs.py OR
_command MATCHES roottest/root/rint/driveRedirect.py OR
_command MATCHES roottest/root/rint/driveTabCom.py))
OR (_command MATCHES roottest/python/cmdLineUtils AND
NOT _command MATCHES MakeNameCyclesRootmvInput))
Expand Down
92 changes: 55 additions & 37 deletions core/base/src/TSystem.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -2593,14 +2593,12 @@ static void R__WriteDependencyFile(const TString & build_loc, const TString &dep
// standard include directories,

bool needToUnlinkTempFile = false;
#ifndef WIN32
const char * stderrfile = "/dev/null";
#else
TString stderrfile = "/dev/null";
#ifdef WIN32
// Determine the null device based on the shell in use.
// COMSPEC unset or pointing to cmd.exe -> NUL
// COMSPEC pointing to powershell -> $null
// Anything else (e.g. bash/sh on Windows) -> `depfilename`.stderr.tmp
TString stderrfile;
const char *comspec = gSystem->Getenv("COMSPEC");
if (!comspec || !comspec[0]) {
stderrfile = "NUL";
Expand All @@ -2620,11 +2618,19 @@ static void R__WriteDependencyFile(const TString & build_loc, const TString &dep
#endif
TString bakdepfilename = depfilename + ".bak";

#ifdef WIN32
TString touch = "echo # > "; touch += "\"" + depfilename + "\"";
#else
TString touch = "echo > "; touch += "\"" + depfilename + "\"";
#endif
struct Defer {
bool fNeedToUnlinkTempFile;
const TString &fStderrfile, &fBakdepfilename;
~Defer()
{
if (fNeedToUnlinkTempFile) {
// Remove the temporary stderr file if it was created.
gSystem->Unlink(fStderrfile);
}
gSystem->Unlink(fBakdepfilename);
}
} deferGuard{needToUnlinkTempFile, stderrfile, bakdepfilename};

TString builddep = "rmkdepend";
gSystem->PrependPathName(TROOT::GetBinDir(), builddep);
builddep += " \"-f";
Expand Down Expand Up @@ -2678,7 +2684,7 @@ static void R__WriteDependencyFile(const TString & build_loc, const TString &dep
builddep += stderrfile;
builddep += " 2>&1 ";

TString adddictdep = "echo ";
TString adddictdep;
R__AddPath(adddictdep,targetname);
adddictdep += ": ";
#if defined(R__HAS_CLING_DICTVERSION)
Expand All @@ -2694,19 +2700,27 @@ static void R__WriteDependencyFile(const TString & build_loc, const TString &dep
}
#endif
{
const char *dictHeaders[] = { "RVersion.h", "ROOT/RConfig.hxx", "TClass.h",
"TDictAttributeMap.h","TInterpreter.h","TROOT.h","TBuffer.h",
"TMemberInspector.h","TError.h","RtypesImp.h","TIsAProxy.h",
"TFileMergeInfo.h","TCollectionProxyInfo.h"};

for (unsigned int h=0; h < sizeof(dictHeaders)/sizeof(dictHeaders[0]); ++h)
{
char *rootVersion = gSystem->Which(incPath,dictHeaders[h]);
constexpr const char *dictHeaders[] = {"RVersion.h",
"ROOT/RConfig.hxx",
"TClass.h",
"TDictAttributeMap.h",
"TInterpreter.h",
"TROOT.h",
"TBuffer.h",
"TMemberInspector.h",
"TError.h",
"RtypesImp.h",
"TIsAProxy.h",
"TFileMergeInfo.h",
"TCollectionProxyInfo.h"};

for (const char *header : dictHeaders) {
char *rootVersion = gSystem->Which(incPath, header);
if (rootVersion) {
R__AddPath(adddictdep,rootVersion);
delete [] rootVersion;
} else {
R__AddPath(adddictdep,rootsysInclude + "/" + dictHeaders[h]);
R__AddPath(adddictdep, rootsysInclude + "/" + header);
}
adddictdep += " ";
}
Expand All @@ -2720,32 +2734,36 @@ static void R__WriteDependencyFile(const TString & build_loc, const TString &dep
delete [] rootCling;
}
}
adddictdep += " >> \""+depfilename+"\"";

TString addversiondep( "echo ");
addversiondep += libname + version_var_prefix + " \"" + ROOT_RELEASE + "\" >> \""+depfilename+"\"";
{
std::ofstream depFile(depfilename, std::ios::out | std::ios::trunc);
if (!depFile) {
::Warning("ACLiC", "Failed to open dependency file %s for %s", depfilename.Data(), library.Data());
return;
}
#ifdef WIN32
depFile << "#\n";
#endif
}

if (gDebug > 4) {
::Info("ACLiC", "%s", touch.Data());
if (gDebug > 4) {
::Info("ACLiC", "%s", builddep.Data());
::Info("ACLiC", "%s", adddictdep.Data());
}
bool depbuiltOk = !gSystem->Exec(builddep);
if (!depbuiltOk) {
::Warning("ACLiC", "Failed to run rmkdepend for %s", library.Data());
return;
}

Int_t depbuilt = !gSystem->Exec(touch);
if (depbuilt) depbuilt = !gSystem->Exec(builddep);
if (depbuilt) depbuilt = !gSystem->Exec(adddictdep);
if (depbuilt) depbuilt = !gSystem->Exec(addversiondep);

if (!depbuilt) {
::Warning("ACLiC","Failed to generate the dependency file for %s",
std::ofstream depFile(depfilename, std::ios::out | std::ios::app);
if (!depFile) {
::Warning("ACLiC", "Failed to open dependency file %s for %s after running rmkdepend", depfilename.Data(),
library.Data());
} else {
if (needToUnlinkTempFile) {
// Remove the temporary stderr file if it was created.
gSystem->Unlink(stderrfile);
}
gSystem->Unlink(bakdepfilename);
Comment on lines -2742 to -2747

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is not clear from the succinct commit message whether the change of behavior here is intended or not. Previously (if I remember/read correctly) the err log file was kept in case of error behavior (thus allowing it to be reviewed if need be) while in the new behavior it seems to always be removed. Was that the intent? If it is, did we check there is no useful information being lost?

@silverweed silverweed Aug 11, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Based on the fact that stderrfile is set to /dev/null except on Windows, I interpreted the code's intention as a "we must get rid of this temp file if we created it" rather than a conditionally-kept error log (if it was generally an err log to be kept, why only on Windows?), but I might have been wrong.

But in that case, why do we only keep it in that very specific case?

return;
}
depFile << adddictdep << "\n";
depFile << libname << version_var_prefix << " \"" << ROOT_RELEASE << "\"\n";
}

////////////////////////////////////////////////////////////////////////////////
Expand Down
2 changes: 1 addition & 1 deletion core/sanitizer/SanitizerSetup.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ const char* __asan_default_options() {
":alloc_dealloc_mismatch=0"
DETECT_LEAKS
":verify_asan_link_order=0"
":halt_on_error=0";
":detect_odr_violation=0";
}

/// Default options when leak sanitizer starts up in ROOT executables.
Expand Down
6 changes: 3 additions & 3 deletions roottest/root/io/heritstl/SEIdAltLItem.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@ class SEIdAltLItem {
fSigLin(siglin), fSigCorr(sigcorr),
fTime(time) { };

SEIdAltLItem(const SEIdAltLItem& that) // copy ctor
{ *this = that; }
SEIdAltLItem(const SEIdAltLItem &) = default;
SEIdAltLItem &operator=(const SEIdAltLItem &) = default;

virtual ~SEIdAltLItem() { ; } // dtor
virtual ~SEIdAltLItem() = default;

Int_t GetSEId() const { return fStripEndId; }
Float_t GetWeight() const { return fWeight; }
Expand Down
Loading