Skip to content
Draft
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
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -387,8 +387,8 @@ install(FILES ${CMAKE_BINARY_DIR}/etc/gitinfo.txt DESTINATION ${CMAKE_INSTALL_SY

#---Recurse into the given subdirectories. This does not actually cause another cmake executable
# to run. The same process will walk through the project's entire directory structure.
add_subdirectory (builtins/zip) # hard coded C builtin for core/zip
add_subdirectory (core)
add_subdirectory (builtins/zip) # hard coded builtin for core/zip
add_subdirectory (math)
add_subdirectory (hist)
add_subdirectory (tree)
Expand Down
2 changes: 1 addition & 1 deletion README/ReleaseNotes/v642/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ The `TMVA_SOFIE_GNN` tutorials have been migrated to this workflow and produce i
* The header `snprintf.h` is deprecated (will emit warnings) and will be removed in ROOT 6.44. Use instead `<cstdio>`.
* The header `Strlen.h` is deprecated and will be removed in ROOT 6.44. Use `<cstring>` directly as a replacement. `NEED_STRING` macro should not be defined or an error will be raised.
* The header `Rstrstream.h` is deprecated and will be removed after ROOT 6.44, use instead `<sstream>`.
* The headers `ZipLZMA.h`, `ZipLZ4.h` and `ZipZSTD.h` are deprecated and will be removed in ROOT 6.46, use instead the public methods in the `RZip.h` interface.
* The headers `ZipLZMA.h`, `ZipZSTD.h` and `ZipLZ4.h` are no longer part of ROOT installed headers. Use instead `RZip.h` methods.

## Build System

Expand Down
32 changes: 31 additions & 1 deletion builtins/zip/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,42 @@
# For the licensing terms see $ROOTSYS/LICENSE.
# For the list of contributors see $ROOTSYS/README/CREDITS.

target_sources(Core PRIVATE
add_library(ROOTzip STATIC)
target_sources(ROOTzip PUBLIC
Bits.h # was renamed from Bits.c at https://github.com/root-project/root/commit/3b2f05c8ddf1001cc8eb05ad60b07b10af6ac293#diff-ff111e76990c56e7019ed0d837f1f615e280dc679ed393200c4f75b61094c5b7 and later split back to Bits.c in https://github.com/root-project/root/commit/25d5805abac4d408554e99aec6e49b8a671a2d96
Tailor.h # forked from 1993: zip 2.0 (https://github.com/root-project/root/blob/852600061bcacd9b255d44f6312c96b6b1e00a2d/zip/inc/Tailor.h vs https://github.com/pmqs/Info-ZIP-Family-Tree-for-Zip/blob/d25ed515bc56fae136b635d764ce8b363041aef5/tailor.h)
ZIP.h # forked from 1993: zip 2.0 (https://github.com/root-project/root/blob/852600061bcacd9b255d44f6312c96b6b1e00a2d/zip/inc/ZIP.h vs https://github.com/pmqs/Info-ZIP-Family-Tree-for-Zip/blob/d25ed515bc56fae136b635d764ce8b363041aef5/zip.h)
PRIVATE
Bits.c # forked from 1993: zip 2.0 (https://github.com/root-project/root/blob/852600061bcacd9b255d44f6312c96b6b1e00a2d/zip/src/Bits.c vs https://github.com/pmqs/Info-ZIP-Family-Tree-for-Zip/blob/d25ed515bc56fae136b635d764ce8b363041aef5/bits.c)
ZDeflate.c # forked from 1993: zip 2.0 (https://github.com/root-project/root/blob/852600061bcacd9b255d44f6312c96b6b1e00a2d/zip/src/Deflate.c vs https://github.com/pmqs/Info-ZIP-Family-Tree-for-Zip/blob/d25ed515bc56fae136b635d764ce8b363041aef5/deflate.c)
ZInflate.c # forked from 1994: version c14o / unzip-5.12 (https://github.com/root-project/root/blob/852600061bcacd9b255d44f6312c96b6b1e00a2d/zip/src/Inflate.c vs https://github.com/freebsd/freebsd-src/commit/37c32e9f3a0dc8ba9d0b7cd06742502dcba1b457 or https://stuff.mit.edu/afs/sipb.mit.edu/project/sipbsrc/i386_nbsd1/unzip-5.12/inflate.c)
ZTrees.c # forked from 1993: zip 2.0 (https://github.com/root-project/root/blob/852600061bcacd9b255d44f6312c96b6b1e00a2d/zip/src/Trees.c vs https://github.com/pmqs/Info-ZIP-Family-Tree-for-Zip/blob/d25ed515bc56fae136b635d764ce8b363041aef5/trees.c)
ZipLZMA.c # ROOT
ZipLZMA.h # ROOT, public
ZipLZ4.c # ROOT
ZipLZ4.h # ROOT, public
ZipZSTD.cxx # ROOT
ZipZSTD.h # ROOT, public
)

include(CheckSourceCompiles)
check_source_compiles(CXX "
#if !defined(__linux) && defined(__linux__) && !defined(linux) && !(defined(__CYGWIN__) && defined(__GNUC__))
#error \"This is not Linux\"
#endif
int main() { return 0; }
" IS_LINUX)
add_library(ROOTtls INTERFACE)
target_sources(ROOTtls PUBLIC ${CMAKE_SOURCE_DIR}/core/foundation/inc) # TODO move to builtins directory
target_compile_definitions(ROOTtls INTERFACE
$<$<BOOL:${CMAKE_USE_PTHREADS_INIT}>:R__HAS_PTHREAD>
$<$<BOOL:${IS_LINUX}>:R__LINUX>
$<$<PLATFORM_ID:FreeBSD>:R__FBSD>
$<$<PLATFORM_ID:Windows>:R__WIN32>
$<$<PLATFORM_ID:SunOS>:R__SOLARIS>
)
target_include_directories(ROOTtls INTERFACE ${CMAKE_SOURCE_DIR}/core/foundation/inc) # TODO move to builtins. could be instead a fileSET.

target_include_directories(ROOTzip PUBLIC .)
target_link_libraries(ROOTzip PRIVATE xxHash::xxHash LibLZMA::LibLZMA LZ4::LZ4 ZSTD::ZSTD ZLIB::ZLIB ROOTtls)
set_target_properties(ROOTzip PROPERTIES POSITION_INDEPENDENT_CODE ON)
62 changes: 3 additions & 59 deletions builtins/zip/ZInflate.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#include <stdlib.h>
#include <string.h>

#ifdef WIN32
#ifdef _WIN32
#define __STDC__ 1
#endif
#ifdef __MWERKS__
Expand All @@ -20,64 +20,8 @@ static const int qflag = 0;
#include "zlib.h"
#include "RConfigure.h"

// TEMPORARY DUPLICATION OF ZipLZMA.h until header is removed from public interface and can be made fully private
// @(#)root/lzma:$Id$
// Author: David Dagenhart May 2011

/*************************************************************************
* Copyright (C) 1995-2011, Rene Brun and Fons Rademakers. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/

#ifndef ROOT_ZipLZMA
#define ROOT_ZipLZMA

#ifdef __cplusplus
extern "C" {
#endif

void R__zipLZMA(int cxlevel, int *srcsize, const char *src, int *tgtsize, char *tgt, int *irep);

void R__unzipLZMA(int *srcsize, const unsigned char *src, int *tgtsize, unsigned char *tgt, int *irep);

#ifdef __cplusplus
}
#endif

#endif

// TEMPORARY DUPLICATION OF ZipLZ4.h until header is removed from public interface and can be made fully private
// Author: Brian Bockelman March 2015

/*************************************************************************
* Copyright (C) 1995-2017, Rene Brun and Fons Rademakers. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/

#ifndef ROOT_ZipLZ4
#define ROOT_ZipLZ4

// NOTE: the ROOT compression libraries aren't consistently written in C++; hence the
// #ifdef's to avoid problems with C code.
#ifdef __cplusplus
extern "C" {
#endif
void R__zipLZ4(int cxlevel, int *srcsize, const char *src, int *tgtsize, char *tgt, int *irep);
void R__unzipLZ4(int *srcsize, const unsigned char *src, int *tgtsize, unsigned char *tgt, int *irep);
#ifdef __cplusplus
}
#endif

#endif



#include "ZipLZMA.h"
#include "ZipLZ4.h"

/* inflate.c -- put in the public domain by Mark Adler
version c14o, 23 August 1994 */
Expand Down
44 changes: 8 additions & 36 deletions core/lz4/src/ZipLZ4.cxx → builtins/zip/ZipLZ4.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,40 +8,13 @@
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/

// TEMPORARY DUPLICATION OF ZipLZ4.h until header is removed from public interface and can be made fully private
// Author: Brian Bockelman March 2015
#include "ZipLZ4.h"
#include "unlikely.h"

/*************************************************************************
* Copyright (C) 1995-2017, Rene Brun and Fons Rademakers. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/

#ifndef ROOT_ZipLZ4
#define ROOT_ZipLZ4

// NOTE: the ROOT compression libraries aren't consistently written in C++; hence the
// #ifdef's to avoid problems with C code.
#ifdef __cplusplus
extern "C" {
#endif
void R__zipLZ4(int cxlevel, int *srcsize, const char *src, int *tgtsize, char *tgt, int *irep);
void R__unzipLZ4(int *srcsize, const unsigned char *src, int *tgtsize, unsigned char *tgt, int *irep);
#ifdef __cplusplus
}
#endif

#endif


#include "ROOT/RConfig.hxx"

#include <cinttypes>
#include <cstdint>
#include <cstdio>
#include <cstring>
#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <lz4.h>
#include <lz4hc.h>
#include <xxhash.h>
Expand Down Expand Up @@ -105,7 +78,7 @@ void R__zipLZ4(int cxlevel, int *srcsize, const char *src, int *tgtsize, char *t
tgt[8] = (char)((in_size >> 16) & 0xff);

// Write out checksum.
XXH64_canonicalFromHash(reinterpret_cast<XXH64_canonical_t *>(tgt + kChecksumOffset), checksumResult);
XXH64_canonicalFromHash((XXH64_canonical_t *)(tgt + kChecksumOffset), checksumResult);

*irep = (int)returnStatus + kHeaderSize;
}
Expand Down Expand Up @@ -136,8 +109,7 @@ void R__unzipLZ4(int *srcsize, const unsigned char *src, int *tgtsize, unsigned
// what size of chunks does interleaving (avoiding two fetches from RAM) improve enough for the
// extra function call costs? NOTE that ROOT limits the buffer size to 16MB.
XXH64_hash_t checksumResult = XXH64(src + kHeaderSize, inputBufferSize, 0);
XXH64_hash_t checksumFromFile =
XXH64_hashFromCanonical(reinterpret_cast<const XXH64_canonical_t *>(src + kChecksumOffset));
XXH64_hash_t checksumFromFile = XXH64_hashFromCanonical((const XXH64_canonical_t *)(src + kChecksumOffset));

if (R__unlikely(checksumFromFile != checksumResult)) {
fprintf(
Expand Down
2 changes: 0 additions & 2 deletions core/lz4/inc/ZipLZ4.h → builtins/zip/ZipLZ4.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@
#ifndef ROOT_ZipLZ4
#define ROOT_ZipLZ4

#warning "This header is deprecated and will be removed in 6.46, use instead methods within RZip.h"

// NOTE: the ROOT compression libraries aren't consistently written in C++; hence the
// #ifdef's to avoid problems with C code.
#ifdef __cplusplus
Expand Down
File renamed without changes.
2 changes: 0 additions & 2 deletions core/lzma/inc/ZipLZMA.h → builtins/zip/ZipLZMA.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@
#ifndef ROOT_ZipLZMA
#define ROOT_ZipLZMA

#warning "This header is deprecated and will be removed in 6.46, use instead methods within RZip.h"

#ifdef __cplusplus
extern "C" {
#endif
Expand Down
32 changes: 3 additions & 29 deletions core/zstd/src/ZipZSTD.cxx → builtins/zip/ZipZSTD.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -8,40 +8,14 @@
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/

// TEMPORARY DUPLICATION OF ZipZSTD.h until header is removed from public interface and can be made fully private
// Original Author: Brian Bockelman
/*************************************************************************
* Copyright (C) 1995-2019, Rene Brun and Fons Rademakers. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/

#ifndef ROOT_ZipZSTD
#define ROOT_ZipZSTD

// NOTE: the ROOT compression libraries aren't consistently written in C++; hence the
// #ifdef's to avoid problems with C code.
#ifdef __cplusplus
extern "C" {
#endif
void R__zipZSTD(int cxlevel, int *srcsize, const char *src, int *tgtsize, char *tgt, int *irep);
void R__unzipZSTD(int *srcsize, const unsigned char *src, int *tgtsize, unsigned char *tgt, int *irep);
#ifdef __cplusplus
}
#endif

#endif


#include "ROOT/RConfig.hxx"
#include "ZipZSTD.h"
#include "unlikely.h"

#include "zdict.h"
#include <zstd.h>
#include <memory>

#include <iostream>
#include <memory>

static const int kHeaderSize = 9;

Expand Down
2 changes: 0 additions & 2 deletions core/zstd/inc/ZipZSTD.h → builtins/zip/ZipZSTD.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@
#ifndef ROOT_ZipZSTD
#define ROOT_ZipZSTD

#warning "This header is deprecated and will be removed in 6.46, use instead methods within RZip.h"

// NOTE: the ROOT compression libraries aren't consistently written in C++; hence the
// #ifdef's to avoid problems with C code.
#ifdef __cplusplus
Expand Down
25 changes: 25 additions & 0 deletions builtins/zip/unlikely.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#ifndef R__unlikely_h

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.

This header file/macros does not belong here per se. It is not specific to the zip library and is already in RConfig.hxx (so now this is duplicated ....). Is there a better solution?

@ferdymercury ferdymercury Sep 8, 2026

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

I could not think a much better one, or not if we want to unbundle ziplib from core (thinking from a Debian packager perspective of independence / self-containment.)

#define R__unlikely_h

/*---- unlikely / likely expressions -----------------------------------------*/
// These are meant to use in cases like:
// if (R__unlikely(expression)) { ... }
// in performance-critical sections. R__unlikely / R__likely provide hints to
// the compiler code generation to heavily optimize one side of a conditional,
// causing the other branch to have a heavy performance cost.
//
// It is best to use this for conditionals that test for rare error cases or
// backward compatibility code.

#if (__GNUC__ >= 3) || defined(__INTEL_COMPILER)
#if !defined(R__unlikely)
#define R__unlikely(expr) __builtin_expect(!!(expr), 0)
#endif
#if !defined(R__likely)
#define R__likely(expr) __builtin_expect(!!(expr), 1)
#endif
#else
#define R__unlikely(expr) expr
#define R__likely(expr) expr
#endif
#endif
3 changes: 0 additions & 3 deletions core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,6 @@ add_subdirectory(textinput)
add_subdirectory(thread)
add_subdirectory(utils)
add_subdirectory(zip)
add_subdirectory(lzma)
add_subdirectory(lz4)
add_subdirectory(zstd)

add_subdirectory(macosx)
add_subdirectory(unix)
Expand Down
22 changes: 7 additions & 15 deletions core/foundation/inc/ThreadLocalStorage.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,14 +57,6 @@

#include <stddef.h>

#ifdef __cplusplus
#include "RtypesCore.h"
#endif

#include <ROOT/RConfig.hxx>

#include "RConfigure.h"

#if defined(R__MACOSX)
# if defined(__clang__) && defined(MAC_OS_X_VERSION_10_7) && (defined(__x86_64__) || defined(__i386__))
# define R__HAS___THREAD
Expand All @@ -81,7 +73,7 @@
#if defined(R__WIN32)
# define R__HAS_DECLSPEC_THREAD
#endif
#if defined(R__FBSD)
#if defined(R__FBSD) && !defined(R__HAS_PTHREAD)
# define R__HAS_PTHREAD
#endif

Expand Down Expand Up @@ -130,32 +122,32 @@
template <int marker, typename T>
T &TTHREAD_TLS_INIT() {
TTHREAD_TLS(T*) ptr = NULL;
TTHREAD_TLS(Bool_t) isInit(kFALSE);
TTHREAD_TLS(bool) isInit(false);
if (!isInit) {
ptr = new T;
isInit = kTRUE;
isInit = true;
}
return *ptr;
}

template <int marker, typename Array, typename T>
Array &TTHREAD_TLS_INIT_ARRAY() {
TTHREAD_TLS(Array*) ptr = NULL;
TTHREAD_TLS(Bool_t) isInit(kFALSE);
TTHREAD_TLS(bool) isInit(false);
if (!isInit) {
ptr = new Array[sizeof(Array)/sizeof(T)];
isInit = kTRUE;
isInit = true;
}
return *ptr;
}

template <int marker, typename T, typename ArgType>
T &TTHREAD_TLS_INIT(ArgType arg) {
TTHREAD_TLS(T*) ptr = NULL;
TTHREAD_TLS(Bool_t) isInit(kFALSE);
TTHREAD_TLS(bool) isInit(false);
if (!isInit) {
ptr = new T(arg);
isInit = kTRUE;
isInit = true;
}
return *ptr;
}
Expand Down
13 changes: 0 additions & 13 deletions core/lz4/CMakeLists.txt

This file was deleted.

Loading