Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package primesieve for openSUSE:Factory checked in at 2025-11-06 18:13:15 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/primesieve (Old) and /work/SRC/openSUSE:Factory/.primesieve.new.1980 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "primesieve" Thu Nov 6 18:13:15 2025 rev:20 rq:1315763 version:12.10 Changes: -------- --- /work/SRC/openSUSE:Factory/primesieve/primesieve.changes 2025-05-20 09:39:04.547964216 +0200 +++ /work/SRC/openSUSE:Factory/.primesieve.new.1980/primesieve.changes 2025-11-06 18:14:48.999506092 +0100 @@ -1,0 +2,9 @@ +Tue Nov 03 16:40:00 UTC 2025 - Kim Walisch <[email protected]> + +- Update to primesieve-12.10 +- Fix undefined behavior in Bucket allocation +- Enable ARM SVE for Mingw-w64 on ARM64 +- Improve Windows libprimesieve.dll support +- BUILD.md: Add WebAssembly/Emscripten build instructions + +------------------------------------------------------------------- Old: ---- primesieve-12.9.tar.gz New: ---- primesieve-12.10.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ primesieve.spec ++++++ --- /var/tmp/diff_new_pack.ZMMakw/_old 2025-11-06 18:14:50.347562964 +0100 +++ /var/tmp/diff_new_pack.ZMMakw/_new 2025-11-06 18:14:50.375564146 +0100 @@ -17,7 +17,7 @@ Name: primesieve -Version: 12.9 +Version: 12.10 Release: 0 Summary: A prime number generator License: BSD-2-Clause ++++++ primesieve-12.9.tar.gz -> primesieve-12.10.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/primesieve-12.9/.github/workflows/ci.yml new/primesieve-12.10/.github/workflows/ci.yml --- old/primesieve-12.9/.github/workflows/ci.yml 2025-05-14 19:36:21.000000000 +0200 +++ new/primesieve-12.10/.github/workflows/ci.yml 2025-11-03 16:57:58.000000000 +0100 @@ -125,6 +125,61 @@ - name: primesieve 1e10 -d1e8 -p6 | md5sum run: if [ "$(./primesieve 1e10 -d1e8 -p6 | md5sum | cut -f1 -d' ')" != "5a0bc83fdef0bb116d60f356adfde52f" ]; then exit 1; fi + linux_emscripten: + strategy: + matrix: + platform: ['ubuntu-latest'] + config: ['Release'] + runs-on: ${{ matrix.platform }} + steps: + - uses: actions/checkout@v4 + - name: Install Emscripten SDK + run: | + git clone https://github.com/emscripten-core/emsdk.git + cd emsdk + ./emsdk install latest + ./emsdk activate latest + - name: Configure (CMake) + run: | + source $GITHUB_WORKSPACE/emsdk/emsdk_env.sh + mkdir build + cd build + emcmake cmake .. -DCMAKE_BUILD_TYPE=${{matrix.config}} -DCMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -Werror" + - name: Build (emmake make) + run: | + source $GITHUB_WORKSPACE/emsdk/emsdk_env.sh + cd build + emmake make -j2 + - name: primesieve 1e10 + run: source $GITHUB_WORKSPACE/emsdk/emsdk_env.sh; node build/primesieve.js 1e10 + - name: primesieve 1e8 --nth-prime + run: source $GITHUB_WORKSPACE/emsdk/emsdk_env.sh; node build/primesieve.js 1e8 --nth-prime + # Test printing primes and prime k-tuplets + - name: primesieve 1e8 -p | md5sum + run: source $GITHUB_WORKSPACE/emsdk/emsdk_env.sh; if [ "$(node build/primesieve.js 1e8 -p | md5sum | cut -f1 -d' ')" != "4e2b0027288a27e9c99699364877c9db" ]; then exit 1; fi + - name: primesieve 1e8 -p2 | md5sum + run: source $GITHUB_WORKSPACE/emsdk/emsdk_env.sh; if [ "$(node build/primesieve.js 1e8 -p2 | md5sum | cut -f1 -d' ')" != "5076d235d5b03389034ec107227eab98" ]; then exit 1; fi + - name: primesieve 1e8 -p3 | md5sum + run: source $GITHUB_WORKSPACE/emsdk/emsdk_env.sh; if [ "$(node build/primesieve.js 1e8 -p3 | md5sum | cut -f1 -d' ')" != "1b40d7e67868ccc857df11c3e0f7e0f5" ]; then exit 1; fi + - name: primesieve 1e8 -p4 | md5sum + run: source $GITHUB_WORKSPACE/emsdk/emsdk_env.sh; if [ "$(node build/primesieve.js 1e8 -p4 | md5sum | cut -f1 -d' ')" != "b998d7cdbeae6623cdecba1b921cb2e1" ]; then exit 1; fi + - name: primesieve 1e8 -p5 | md5sum + run: source $GITHUB_WORKSPACE/emsdk/emsdk_env.sh; if [ "$(node build/primesieve.js 1e8 -p5 | md5sum | cut -f1 -d' ')" != "1ec7d5704d7399caf43667090b5bf836" ]; then exit 1; fi + - name: primesieve 1e8 -p6 | md5sum + run: source $GITHUB_WORKSPACE/emsdk/emsdk_env.sh; if [ "$(node build/primesieve.js 1e8 -p6 | md5sum | cut -f1 -d' ')" != "0fb813d345c94cf2012588d1f71328b5" ]; then exit 1; fi + - name: primesieve 1e10 -d1e8 -p | md5sum + run: source $GITHUB_WORKSPACE/emsdk/emsdk_env.sh; if [ "$(node build/primesieve.js 1e10 -d1e8 -p | md5sum | cut -f1 -d' ')" != "5fbe254a97ad3bbc07c224908c9d59b2" ]; then exit 1; fi + - name: primesieve 1e10 -d1e8 -p2 | md5sum + run: source $GITHUB_WORKSPACE/emsdk/emsdk_env.sh; if [ "$(node build/primesieve.js 1e10 -d1e8 -p2 | md5sum | cut -f1 -d' ')" != "7a7a770c1841a17a9a63b92b7b6532b9" ]; then exit 1; fi + - name: primesieve 1e10 -d1e8 -p3 | md5sum + run: source $GITHUB_WORKSPACE/emsdk/emsdk_env.sh; if [ "$(node build/primesieve.js 1e10 -d1e8 -p3 | md5sum | cut -f1 -d' ')" != "72323b08c62ad8342f7331e3d6d45a64" ]; then exit 1; fi + - name: primesieve 1e10 -d1e8 -p4 | md5sum + run: source $GITHUB_WORKSPACE/emsdk/emsdk_env.sh; if [ "$(node build/primesieve.js 1e10 -d1e8 -p4 | md5sum | cut -f1 -d' ')" != "c2b0818499f77aa35681db3826caf3f6" ]; then exit 1; fi + - name: primesieve 1e10 -d1e8 -p5 | md5sum + run: source $GITHUB_WORKSPACE/emsdk/emsdk_env.sh; if [ "$(node build/primesieve.js 1e10 -d1e8 -p5 | md5sum | cut -f1 -d' ')" != "11b50e4f75899891a62465f6d68fb76e" ]; then exit 1; fi + - name: primesieve 1e10 -d1e8 -p6 | md5sum + run: source $GITHUB_WORKSPACE/emsdk/emsdk_env.sh; if [ "$(node build/primesieve.js 1e10 -d1e8 -p6 | md5sum | cut -f1 -d' ')" != "5a0bc83fdef0bb116d60f356adfde52f" ]; then exit 1; fi + macos_clang: strategy: matrix: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/primesieve-12.9/.gitignore new/primesieve-12.10/.gitignore --- old/primesieve-12.9/.gitignore 2025-05-14 19:36:21.000000000 +0200 +++ new/primesieve-12.10/.gitignore 2025-11-03 16:57:58.000000000 +0100 @@ -18,6 +18,7 @@ install_manifest.txt CTestTestfile.cmake /primesieve* +!/primesieve.pc.in /libprimesieve* doc/primesieve.xml doc/Doxyfile diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/primesieve-12.9/CMakeLists.txt new/primesieve-12.10/CMakeLists.txt --- old/primesieve-12.9/CMakeLists.txt 2025-05-14 19:36:21.000000000 +0200 +++ new/primesieve-12.10/CMakeLists.txt 2025-11-03 16:57:58.000000000 +0100 @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.4...3.27) project(primesieve CXX) -set(PRIMESIEVE_VERSION "12.9") -set(PRIMESIEVE_SOVERSION "12.9.0") +set(PRIMESIEVE_VERSION "12.10") +set(PRIMESIEVE_SOVERSION "12.10.0") # Build options ###################################################### diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/primesieve-12.9/ChangeLog new/primesieve-12.10/ChangeLog --- old/primesieve-12.9/ChangeLog 2025-05-14 19:36:21.000000000 +0200 +++ new/primesieve-12.10/ChangeLog 2025-11-03 16:57:58.000000000 +0100 @@ -1,3 +1,14 @@ +Changes in version 12.10, 03/11/2025 +==================================== + +* src/MemoryPool.cpp: Fix undefined behavior in Bucket allocation. +* build_mingw64_arm64.sh: Enable ARM SVE for Mingw-w64 on ARM64. +* test/CMakeLists.txt: Improve Windows libprimesieve.dll support. +* examples/c/CMakeLists.txt: Improve Windows libprimesieve.dll support. +* examples/cpp/CMakeLists.txt: Improve Windows libprimesieve.dll support. +* ci.yml: Add WebAssembly/Emscripten test. +* BUILD.md: Add WebAssembly/Emscripten build instructions. + Changes in version 12.9, 14/05/2025 =================================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/primesieve-12.9/README.md new/primesieve-12.10/README.md --- old/primesieve-12.9/README.md 2025-05-14 19:36:21.000000000 +0200 +++ new/primesieve-12.10/README.md 2025-11-03 16:57:58.000000000 +0100 @@ -17,8 +17,8 @@ [wheel factorization](https://en.wikipedia.org/wiki/Wheel_factorization). This algorithm has a run time complexity of $O(n\ \log\ \log\ n)$ operations and uses $O(\sqrt{n})$ memory. Furthermore primesieve uses the -[bucket sieve](http://sweet.ua.pt/tos/software/prime_sieve.html) -algorithm which improves the cache efficiency when generating primes > 2<sup>32</sup>. +[bucket sieve algorithm](http://sweet.ua.pt/tos/software/prime_sieve.html) +which improves the cache efficiency when generating primes > 2<sup>32</sup>. primesieve uses 8 bytes per sieving prime, in practice its memory usage is about $\pi(\sqrt{n})\times 8$ bytes per thread. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/primesieve-12.9/doc/BUILD.md new/primesieve-12.10/doc/BUILD.md --- old/primesieve-12.9/doc/BUILD.md 2025-05-14 19:36:21.000000000 +0200 +++ new/primesieve-12.10/doc/BUILD.md 2025-11-03 16:57:58.000000000 +0100 @@ -1,6 +1,18 @@ # primesieve build instructions -## Prerequisites +# Contents + +* [Prerequisites](#prerequisites) +* [Unix-like OSes](#unix-like-oses) +* [MinGW/MSYS2 (Windows)](#mingwmsys2-windows) +* [Microsoft Visual C++](#microsoft-visual-c) +* [Emscripten/WebAssembly](#emscriptenwebassembly) +* [CMake configure options](#cmake-configure-options) +* [Run the tests](#run-the-tests) +* [API documentation](#api-documentation) +* [Man page regeneration](#man-page-regeneration) + +# Prerequisites You need to have installed a C++ compiler which supports C++11 (or later) and CMake ≥ 3.4. @@ -27,7 +39,7 @@ </tr> </table> -## Unix-like OSes +# Unix-like OSes Open a terminal, cd into the primesieve directory and run: @@ -38,7 +50,7 @@ sudo ldconfig ``` -## MinGW/MSYS2 (Windows) +# MinGW/MSYS2 (Windows) Open a terminal, cd into the primesieve directory and run: @@ -47,7 +59,7 @@ cmake --build . --parallel ``` -## Microsoft Visual C++ +# Microsoft Visual C++ First install [Visual Studio](https://visualstudio.microsoft.com/downloads/) (includes CMake) on your Windows PC. Then go to the start menu, select Visual @@ -63,7 +75,29 @@ cmake --install . --config Release ``` -## CMake configure options +# Emscripten/WebAssembly + +Using the Emscripten compiler you can compile the primesieve C/C++ library to WebAssembly: + +```bash +# Install the Emscripten compiler +git clone https://github.com/emscripten-core/emsdk.git +cd emsdk +./emsdk install latest +./emsdk activate latest +source emsdk_env.sh + +# Compile primesieve to WebAssembly +git clone https://github.com/kimwalisch/primesieve.git +cd primesieve +emcmake cmake . +emmake make -j4 + +# Run the primesieve WebAssembly binary +node ./primesieve.js 1e10 +``` + +# CMake configure options By default the primesieve binary and the static/shared libprimesieve will be built. The build options can be modified at the configure step using e.g. @@ -82,7 +116,7 @@ option(WITH_MSVC_CRT_STATIC "Link primesieve.lib with /MT instead of the default /MD" OFF) ``` -## Run the tests +# Run the tests Open a terminal, cd into the primesieve directory and run: @@ -97,16 +131,7 @@ about primesieve testing such as testing in debug mode and testing using GCC/Clang sanitizers. -## C/C++ examples - -Open a terminal, cd into the primesieve directory and run: - -```bash -cmake -DBUILD_EXAMPLES=ON . -cmake --build . --parallel -``` - -## API documentation +# API documentation To build the primesieve C/C++ API documentation in html/PDF format you need to have installed the ```doxygen```, ```doxygen-latex``` and @@ -117,7 +142,7 @@ cmake --build . --target doc ``` -## Man page regeneration +# Man page regeneration primesieve includes an up to date man page at ```doc/primesieve.1```. That man page has been generated from ```doc/primesieve.txt``` using diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/primesieve-12.9/doc/CPP_API.md new/primesieve-12.10/doc/CPP_API.md --- old/primesieve-12.9/doc/CPP_API.md 2025-05-14 19:36:21.000000000 +0200 +++ new/primesieve-12.10/doc/CPP_API.md 2025-11-03 16:57:58.000000000 +0100 @@ -179,7 +179,7 @@ Before using ```primesieve::iterator::prev_prime()``` you must change the start number either in the constructor or using the ```jump_to()``` method (because the start number is -initialized to 0 be default). +initialized to 0 by default). * Please note that the first ```prev_prime()``` invocation returns the first prime ≤ start number. If want to generate primes < start number you need to use e.g. ```jump_to(start-1)```. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/primesieve-12.9/doc/C_API.md new/primesieve-12.10/doc/C_API.md --- old/primesieve-12.9/doc/C_API.md 2025-05-14 19:36:21.000000000 +0200 +++ new/primesieve-12.10/doc/C_API.md 2025-11-03 16:57:58.000000000 +0100 @@ -162,7 +162,7 @@ ## ```primesieve_prev_prime()``` Before using ```primesieve_prev_prime()``` you must first change the start number using the -```primesieve_jump_to()``` function (because the start number is initialized to 0 be default). +```primesieve_jump_to()``` function (because the start number is initialized to 0 by default). * Please note that the first ```primesieve_prev_prime()``` call returns the first prime ≤ start number. If want to generate primes < start number you need to use e.g. ```primesieve_jump_to(iter, start-1, stop)```. @@ -330,7 +330,7 @@ ## ```primesieve_iterator.is_error``` For the ```primesieve_iterator```, you can check if the return value of ```primesieve_next_prime()``` -is ```PRIMESIEVE_ERROR``` to know if an error occured. However, ```primesieve_iterator``` also supports +is ```PRIMESIEVE_ERROR``` to know if an error occurred. However, ```primesieve_iterator``` also supports a 2nd option for error handling: by default ```primesieve_iterator.is_error``` is initialized to 0 in ```primesieve_init()```, if any error occurs ```primesieve_iterator.is_error``` is set to 1. This is useful to check after a computation that no error has occurred, this way you don't have to diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/primesieve-12.9/doc/Doxyfile.in new/primesieve-12.10/doc/Doxyfile.in --- old/primesieve-12.9/doc/Doxyfile.in 2025-05-14 19:36:21.000000000 +0200 +++ new/primesieve-12.10/doc/Doxyfile.in 2025-11-03 16:57:58.000000000 +0100 @@ -32,3 +32,4 @@ GENERATE_LATEX = @HAVE_LATEX@ FULL_PATH_NAMES = NO HAVE_DOT = @HAVE_DOT@ +LATEX_EXTRA_STYLESHEET = @PROJECT_SOURCE_DIR@/doc/override_tables.sty diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/primesieve-12.9/doc/override_tables.sty new/primesieve-12.10/doc/override_tables.sty --- old/primesieve-12.9/doc/override_tables.sty 1970-01-01 01:00:00.000000000 +0100 +++ new/primesieve-12.10/doc/override_tables.sty 2025-11-03 16:57:58.000000000 +0100 @@ -0,0 +1,101 @@ +\NeedsTeXFormat{LaTeX2e} + +% Packages used by this style file +\RequirePackage{doxygen} + +% Used by parameter lists +\renewenvironment{DoxyParams}[2][]{% + \tabulinesep=1mm% + \par% + \ifthenelse{\equal{#1}{}}% + {\begin{longtable}[l]{|l|l|}}% name + description + {\ifthenelse{\equal{#1}{1}}% + {\begin{longtable}[l]{|l|l|l|}}% in/out + name + desc + {\begin{longtable}[l]{|l|l|l|l|}}% in/out + type + name + desc + } + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \endhead% + \hline% +}{% + \end{longtable}% + \vspace{6pt}% +} + +% Used for fields of simple structs +\renewenvironment{DoxyFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtable}[l]{|l|l|l|}% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \endfirsthead% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \endhead% + \hline% +}{% + \end{longtable}% + \vspace{6pt}% +} + +% Used for fields simple class style enums +\renewenvironment{DoxyEnumFields}[2][]{% + \tabulinesep=1mm% + \par% + \ifthenelse{\equal{#1}{2}}% + {\begin{longtable}[l]{|l|l|}}% + {\begin{longtable}[l]{|l|l|l|}}% with init value + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \endhead% + \hline% +}{% + \end{longtable}% + \vspace{6pt}% +} + +% Used by return value lists +\renewenvironment{DoxyRetVals}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtable}[l]{|l|l|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \endhead% + \hline% +}{% + \end{longtable}% + \vspace{6pt}% +} + +% Used by exception lists +\renewenvironment{DoxyExceptions}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtable}[l]{|l|l|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \endhead% + \hline% +}{% + \end{longtable}% + \vspace{6pt}% +} + +% Used by template parameter lists +\renewenvironment{DoxyTemplParams}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtable}[l]{|l|l|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \endhead% + \hline% +}{% + \end{longtable}% + \vspace{6pt}% +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/primesieve-12.9/examples/c/CMakeLists.txt new/primesieve-12.10/examples/c/CMakeLists.txt --- old/primesieve-12.9/examples/c/CMakeLists.txt 2025-05-14 19:36:21.000000000 +0200 +++ new/primesieve-12.10/examples/c/CMakeLists.txt 2025-11-03 16:57:58.000000000 +0100 @@ -5,4 +5,14 @@ get_filename_component(binary_name ${file} NAME_WE) add_executable(${binary_name}_c ${file}) target_link_libraries(${binary_name}_c primesieve::primesieve) + + # Copy primesieve.dll to test directory. + # On Windows the DLLs must be in the same directory + # as the binaries that depend on them. + if (WIN32 AND NOT STATICALLY_LINK_LIBPRIMESIEVE) + add_custom_command(TARGET ${binary_name}_c POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + $<TARGET_FILE:libprimesieve> + $<TARGET_FILE_DIR:${binary_name}_c>) + endif() endforeach() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/primesieve-12.9/examples/cpp/CMakeLists.txt new/primesieve-12.10/examples/cpp/CMakeLists.txt --- old/primesieve-12.9/examples/cpp/CMakeLists.txt 2025-05-14 19:36:21.000000000 +0200 +++ new/primesieve-12.10/examples/cpp/CMakeLists.txt 2025-11-03 16:57:58.000000000 +0100 @@ -3,4 +3,14 @@ get_filename_component(binary_name ${file} NAME_WE) add_executable(${binary_name} ${file}) target_link_libraries(${binary_name} primesieve::primesieve) + + # Copy primesieve.dll to test directory. + # On Windows the DLLs must be in the same directory + # as the binaries that depend on them. + if (WIN32 AND NOT STATICALLY_LINK_LIBPRIMESIEVE) + add_custom_command(TARGET ${binary_name} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + $<TARGET_FILE:libprimesieve> + $<TARGET_FILE_DIR:${binary_name}>) + endif() endforeach() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/primesieve-12.9/include/primesieve.h new/primesieve-12.10/include/primesieve.h --- old/primesieve-12.9/include/primesieve.h 2025-05-14 19:36:21.000000000 +0200 +++ new/primesieve-12.10/include/primesieve.h 2025-11-03 16:57:58.000000000 +0100 @@ -15,9 +15,9 @@ #ifndef PRIMESIEVE_H #define PRIMESIEVE_H -#define PRIMESIEVE_VERSION "12.9" +#define PRIMESIEVE_VERSION "12.10" #define PRIMESIEVE_VERSION_MAJOR 12 -#define PRIMESIEVE_VERSION_MINOR 9 +#define PRIMESIEVE_VERSION_MINOR 10 #include <primesieve/iterator.h> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/primesieve-12.9/include/primesieve.hpp new/primesieve-12.10/include/primesieve.hpp --- old/primesieve-12.9/include/primesieve.hpp 2025-05-14 19:36:21.000000000 +0200 +++ new/primesieve-12.10/include/primesieve.hpp 2025-11-03 16:57:58.000000000 +0100 @@ -13,9 +13,9 @@ #ifndef PRIMESIEVE_HPP #define PRIMESIEVE_HPP -#define PRIMESIEVE_VERSION "12.9" +#define PRIMESIEVE_VERSION "12.10" #define PRIMESIEVE_VERSION_MAJOR 12 -#define PRIMESIEVE_VERSION_MINOR 9 +#define PRIMESIEVE_VERSION_MINOR 10 #include <primesieve/iterator.hpp> #include <primesieve/primesieve_error.hpp> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/primesieve-12.9/scripts/build_mingw64_arm64.sh new/primesieve-12.10/scripts/build_mingw64_arm64.sh --- old/primesieve-12.9/scripts/build_mingw64_arm64.sh 2025-05-14 19:36:21.000000000 +0200 +++ new/primesieve-12.10/scripts/build_mingw64_arm64.sh 2025-11-03 16:57:58.000000000 +0100 @@ -48,7 +48,7 @@ mkdir build-release cd build-release -clang++ -static -O3 -flto -DNDEBUG -D_WIN32_WINNT=0x0A00 -Wall -Wextra -pedantic -I../include -I../src ../src/*.cpp ../src/app/*.cpp -o primesieve.exe +clang++ -static -O3 -flto -DENABLE_MULTIARCH_ARM_SVE -DNDEBUG -D_WIN32_WINNT=0x0A00 -Wall -Wextra -pedantic -I../include -I../src ../src/*.cpp ../src/arch/arm/sve.cpp ../src/app/*.cpp -o primesieve.exe strip primesieve.exe # Create a release zip archive diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/primesieve-12.9/src/MemoryPool.cpp new/primesieve-12.10/src/MemoryPool.cpp --- old/primesieve-12.9/src/MemoryPool.cpp 2025-05-14 19:36:21.000000000 +0200 +++ new/primesieve-12.10/src/MemoryPool.cpp 2025-11-03 16:57:58.000000000 +0100 @@ -94,6 +94,21 @@ if_unlikely(count_ < 10) throw primesieve_error("MemoryPool: insufficient buckets allocated!"); +#if __cplusplus >= 201703L + // Start lifetime of each Bucket object using placement new. + // * new (ptr) Bucket[count]{}; -> starts lifetime, zero-initializes members. + // * new (ptr) Bucket[count]; -> starts lifetime, members are left uninitialized. + // Hence, the compiler will optimize away this code. + buckets = new (buckets) Bucket[count_]; +#else + // Start lifetime of each Bucket object using placement new. + // * new (ptr) Bucket(); -> starts lifetime, zero-initializes members. + // * new (ptr) Bucket; -> starts lifetime, members are left uninitialized. + // Hence, the compiler will optimize away this loop. + for (std::size_t i = 0; i < count_; i++) + new (&buckets[i]) Bucket; +#endif + for (std::size_t i = 0; i < count_ - 1; i++) { buckets[i].reset(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/primesieve-12.9/test/CMakeLists.txt new/primesieve-12.10/test/CMakeLists.txt --- old/primesieve-12.9/test/CMakeLists.txt 2025-05-14 19:36:21.000000000 +0200 +++ new/primesieve-12.10/test/CMakeLists.txt 2025-11-03 16:57:58.000000000 +0100 @@ -8,4 +8,14 @@ target_include_directories(${binary_name} PRIVATE ${CMAKE_SOURCE_DIR}/src) target_compile_definitions(${binary_name} PRIVATE ${PRIMESIEVE_COMPILE_DEFINITIONS}) add_test(NAME ${binary_name} COMMAND ${binary_name}) + + # Copy primesieve.dll to test directory. + # On Windows the DLLs must be in the same directory + # as the binaries that depend on them. + if (WIN32 AND NOT STATICALLY_LINK_LIBPRIMESIEVE) + add_custom_command(TARGET ${binary_name} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + $<TARGET_FILE:libprimesieve> + $<TARGET_FILE_DIR:${binary_name}>) + endif() endforeach()
