From 4550c820b5ae3636fda597cc69dd2658ae4c8908 Mon Sep 17 00:00:00 2001 From: Vitalii Koshura Date: Fri, 3 Jul 2026 11:31:56 +0200 Subject: [PATCH 1/2] [ci] add fmt library Signed-off-by: Vitalii Koshura --- .github/workflows/linux-release.yml | 8 +- .github/workflows/linux.yml | 8 +- 3rdParty/buildMacDependencies.sh | 5 +- .../configs/apps/android/vcpkg.json | 3 +- .../vcpkg_ports/configs/apps/linux/vcpkg.json | 3 +- .../vcpkg_ports/configs/apps/mingw/vcpkg.json | 3 +- .../vcpkg_ports/configs/client/vcpkg.json | 3 +- 3rdParty/vcpkg_ports/configs/libs/vcpkg.json | 3 +- .../configs/libs/windows/vcpkg.json | 3 +- .../configs/manager/linux/vcpkg.json | 3 +- .../vcpkg_ports/configs/msbuild/vcpkg.json | 3 +- configure.ac | 39 ++- mac_build/buildfmt.sh | 234 ++++++++++++++++++ mac_build/buildlibzip.sh | 2 +- mac_build/dependencyNames.sh | 9 +- tests/vcpkg/ports/boinc/CMakeLists.txt | 4 + tests/vcpkg/ports/boinc/portfile.cmake | 1 + tests/vcpkg/ports/boinc/vcpkg.json | 3 +- win_build/vboxwrapper.vcxproj | 2 +- 19 files changed, 315 insertions(+), 24 deletions(-) create mode 100644 mac_build/buildfmt.sh diff --git a/.github/workflows/linux-release.yml b/.github/workflows/linux-release.yml index 987819dd123..4040f437423 100644 --- a/.github/workflows/linux-release.yml +++ b/.github/workflows/linux-release.yml @@ -56,26 +56,26 @@ jobs: run: | dpkg --add-architecture i386 apt-get update - apt-get install -y gcc-multilib g++-multilib libcurl4-openssl-dev:i386 libssl-dev:i386 libzip-dev:i386 + apt-get install -y gcc-multilib g++-multilib libcurl4-openssl-dev:i386 libssl-dev:i386 libzip-dev:i386 libfmt-dev:i386 - name: Install dependencies for x64 if: success() && matrix.type == 'apps' run: | - apt-get install -y libcurl4-openssl-dev libssl-dev libzip-dev + apt-get install -y libcurl4-openssl-dev libssl-dev libzip-dev libfmt-dev - name: Install dependencies for arm64 if: success() && matrix.type == 'apps-arm64' run: | dpkg --add-architecture arm64 apt-get update - apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu wget ca-certificates libcurl4-openssl-dev:arm64 libssl-dev:arm64 libzip-dev:arm64 + apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu wget ca-certificates libcurl4-openssl-dev:arm64 libssl-dev:arm64 libzip-dev:arm64 libfmt-dev:arm64 - name: Install dependencies for armhf if: success() && matrix.type == 'apps-armhf' run: | dpkg --add-architecture armhf apt-get update - apt-get install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf binutils-arm-linux-gnueabihf wget ca-certificates libcurl4-openssl-dev:armhf libssl-dev:armhf libzip-dev:armhf + apt-get install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf binutils-arm-linux-gnueabihf wget ca-certificates libcurl4-openssl-dev:armhf libssl-dev:armhf libzip-dev:armhf libfmt-dev:armhf - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 with: diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index a887e073f39..a493e0af542 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -90,7 +90,7 @@ jobs: - name: Install dependencies for x64 if: success() && (! endsWith(matrix.type, 'arm64') && ! endsWith(matrix.type, 'armhf') && (matrix.type != 'coverity' || (github.ref == 'refs/heads/master' && github.event_name == 'schedule'))) run: | - sudo apt-get install -y autoconf-archive libftgl-dev freeglut3-dev libcurl4-openssl-dev libxmu-dev libxi-dev libfcgi-dev libxss-dev libnotify-dev libxcb-util0-dev libgtk-3-dev libsecret-1-dev libgcrypt20-dev libsystemd-dev libwebkit2gtk-4.1-dev libxxf86vm-dev ocl-icd-opencl-dev libltdl-dev libzip-dev nlohmann-json3-dev + sudo apt-get install -y autoconf-archive libftgl-dev freeglut3-dev libcurl4-openssl-dev libxmu-dev libxi-dev libfcgi-dev libxss-dev libnotify-dev libxcb-util0-dev libgtk-3-dev libsecret-1-dev libgcrypt20-dev libsystemd-dev libwebkit2gtk-4.1-dev libxxf86vm-dev ocl-icd-opencl-dev libltdl-dev libzip-dev nlohmann-json3-dev libfmt-dev - name: Install dependencies for manager if: success() && (matrix.type == 'manager' || (matrix.type == 'coverity' && github.ref == 'refs/heads/master' && github.event_name == 'schedule')) @@ -147,7 +147,8 @@ jobs: sudo apt install -y \ libcurl4-openssl-dev:arm64 \ libssl-dev:arm64 \ - libzip-dev:arm64 + libzip-dev:arm64 \ + libfmt-dev:arm64 - name: Install dependencies for armhf non-vcpkg if: success() && (matrix.type == 'libs-armhf' || matrix.type == 'apps-armhf') @@ -155,7 +156,8 @@ jobs: sudo apt install -y \ libcurl4-openssl-dev:armhf \ libssl-dev:armhf \ - libzip-dev:armhf + libzip-dev:armhf \ + libfmt-dev:armhf - name: Install dependencies for apps arm64 vcpkg if: success() && matrix.type == 'apps-vcpkg-arm64' diff --git a/3rdParty/buildMacDependencies.sh b/3rdParty/buildMacDependencies.sh index 3b01a89e4d0..2a7eee804f1 100755 --- a/3rdParty/buildMacDependencies.sh +++ b/3rdParty/buildMacDependencies.sh @@ -2,7 +2,7 @@ # This file is part of BOINC. # https://boinc.berkeley.edu -# Copyright (C) 2025 University of California +# Copyright (C) 2026 University of California # # BOINC is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License @@ -130,7 +130,7 @@ download_and_build() { fi if [ ! -d ${DIRNAME} ]; then if [ ! -e ${FILENAME} ]; then - wget ${DLURL} + wget -O ${FILENAME} ${DLURL} fi tar -xf ${FILENAME} fi @@ -162,6 +162,7 @@ download_and_build "${wxWidgetsDirName}" "${wxWidgetsFileName}" "${wxWidgetsURL} download_and_build "${freetypeDirName}" "${freetypeFileName}" "${freetypeURL}" "${ROOTDIR}/mac_build/buildfreetype.sh" "libfreetype.a" "x86_64 arm64" download_and_build "${ftglDirName}" "${ftglFileName}" "${ftglURL}" "${ROOTDIR}/mac_build/buildFTGL.sh" "libftgl.a" "x86_64 arm64" download_and_build "${zipDirName}" "${zipFileName}" "${zipURL}" "${ROOTDIR}/mac_build/buildlibzip.sh" "libzip.a" "x86_64 arm64" +download_and_build "${fmtDirName}" "${fmtFileName}" "${fmtURL}" "${ROOTDIR}/mac_build/buildfmt.sh" "libfmt.a" "x86_64 arm64" # change back to root directory cd ${ROOTDIR} || exit 1 diff --git a/3rdParty/vcpkg_ports/configs/apps/android/vcpkg.json b/3rdParty/vcpkg_ports/configs/apps/android/vcpkg.json index 7b1c563ec5d..0b67e709d0b 100644 --- a/3rdParty/vcpkg_ports/configs/apps/android/vcpkg.json +++ b/3rdParty/vcpkg_ports/configs/apps/android/vcpkg.json @@ -16,6 +16,7 @@ { "name": "libzip", "default-features": false - } + }, + "fmt" ] } diff --git a/3rdParty/vcpkg_ports/configs/apps/linux/vcpkg.json b/3rdParty/vcpkg_ports/configs/apps/linux/vcpkg.json index a9f6168cf5d..8c2b42f9dcd 100644 --- a/3rdParty/vcpkg_ports/configs/apps/linux/vcpkg.json +++ b/3rdParty/vcpkg_ports/configs/apps/linux/vcpkg.json @@ -19,6 +19,7 @@ { "name": "libzip", "default-features": false - } + }, + "fmt" ] } diff --git a/3rdParty/vcpkg_ports/configs/apps/mingw/vcpkg.json b/3rdParty/vcpkg_ports/configs/apps/mingw/vcpkg.json index ac22986d4aa..249cd785fb8 100644 --- a/3rdParty/vcpkg_ports/configs/apps/mingw/vcpkg.json +++ b/3rdParty/vcpkg_ports/configs/apps/mingw/vcpkg.json @@ -19,6 +19,7 @@ { "name": "libzip", "default-features": false - } + }, + "fmt" ] } diff --git a/3rdParty/vcpkg_ports/configs/client/vcpkg.json b/3rdParty/vcpkg_ports/configs/client/vcpkg.json index 0961b9d8bd6..c6d609adb31 100644 --- a/3rdParty/vcpkg_ports/configs/client/vcpkg.json +++ b/3rdParty/vcpkg_ports/configs/client/vcpkg.json @@ -16,6 +16,7 @@ { "name": "libzip", "default-features": false - } + }, + "fmt" ] } diff --git a/3rdParty/vcpkg_ports/configs/libs/vcpkg.json b/3rdParty/vcpkg_ports/configs/libs/vcpkg.json index e76c82978ab..fb035cf55db 100644 --- a/3rdParty/vcpkg_ports/configs/libs/vcpkg.json +++ b/3rdParty/vcpkg_ports/configs/libs/vcpkg.json @@ -16,6 +16,7 @@ { "name": "libzip", "default-features": false - } + }, + "fmt" ] } diff --git a/3rdParty/vcpkg_ports/configs/libs/windows/vcpkg.json b/3rdParty/vcpkg_ports/configs/libs/windows/vcpkg.json index 8af6dbf3ace..834675575aa 100644 --- a/3rdParty/vcpkg_ports/configs/libs/windows/vcpkg.json +++ b/3rdParty/vcpkg_ports/configs/libs/windows/vcpkg.json @@ -11,6 +11,7 @@ { "name": "libzip", "default-features": false - } + }, + "fmt" ] } diff --git a/3rdParty/vcpkg_ports/configs/manager/linux/vcpkg.json b/3rdParty/vcpkg_ports/configs/manager/linux/vcpkg.json index 8722ece9a7c..6dea81d9b96 100644 --- a/3rdParty/vcpkg_ports/configs/manager/linux/vcpkg.json +++ b/3rdParty/vcpkg_ports/configs/manager/linux/vcpkg.json @@ -44,6 +44,7 @@ "name": "wayland-protocols", "features": ["force-build"], "default-features": false - } + }, + "fmt" ] } diff --git a/3rdParty/vcpkg_ports/configs/msbuild/vcpkg.json b/3rdParty/vcpkg_ports/configs/msbuild/vcpkg.json index e4e21247569..6bd05479fe8 100644 --- a/3rdParty/vcpkg_ports/configs/msbuild/vcpkg.json +++ b/3rdParty/vcpkg_ports/configs/msbuild/vcpkg.json @@ -23,6 +23,7 @@ "default-features": false }, "wil", - "tinyxml2" + "tinyxml2", + "fmt" ] } diff --git a/configure.ac b/configure.ac index 34d1c306da0..3f79260be72 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ dnl This file is part of BOINC. dnl https://boinc.berkeley.edu -dnl Copyright (C) 2025 University of California +dnl Copyright (C) 2026 University of California dnl dnl BOINC is free software; you can redistribute it and/or modify it dnl under the terms of the GNU Lesser General Public License @@ -1189,7 +1189,7 @@ AM_CONDITIONAL(BUILD_X11_SCREENSAVER, [ test "$have_Xcb" = yes -a "$have_Xcbatom dnl ----------------------------------------------------------------------- if test "${enable_boinczip}" = yes; then -dnl ---------- libzip (required for libboinc_zip) ---------------------------- +dnl ---------- libzip (required for libboinc_zip) ------------------------- PKG_CHECK_MODULES([LIBZIP], [libzip], [have_libzip=yes], [have_libzip=no]) AS_IF([test "x${have_libzip}" != "xyes"], [ AC_MSG_ERROR([ @@ -1206,6 +1206,41 @@ AC_SUBST([LIBZIP_LIBS]) dnl ----------------------------------------------------------------------- fi +dnl --------- fmt ------------------------------------------------------ +PKG_CHECK_MODULES([FMT], [fmt], [have_fmt=yes], [have_fmt=no]) +AS_IF([test "x${have_fmt}" = "xyes"], [ + AC_SUBST([FMT_CFLAGS]) + AC_SUBST([FMT_LIBS]) +]) +AS_IF([test "x${have_fmt}" != "xyes"], [ + AC_LANG_PUSH([C++]) + AC_CHECK_HEADER([fmt/core.h], [], [ + AC_MSG_ERROR([ +================================================================================ +ERROR: fmt development files not found. They are required for the BOINC library. + + Install fmt (e.g., libfmt-dev on Debian/Ubuntu, libfmt-devel on Fedora, + or via vcpkg/homebrew on Windows/macOS) and re-run configure. +================================================================================ + ]) + ]) + save_LIBS="$LIBS" + LIBS="$LIBS -lfmt" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[fmt::print("test");]])], [], [ + AC_MSG_ERROR([ +================================================================================ +ERROR: fmt development files not found. They are required for the BOINC library. + + Install fmt (e.g., libfmt-dev on Debian/Ubuntu, libfmt-devel on Fedora, + or via vcpkg/homebrew on Windows/macOS) and re-run configure. +================================================================================ + ]) + ]) + LIBS="$save_LIBS" + AC_LANG_POP([C++]) +]) +dnl ----------------------------------------------------------------------- + dnl Heres another way to set up host-specific stuff AM_CONDITIONAL(OS_DARWIN, [echo $host_os | grep '^darwin' > /dev/null]) if echo $host_os | grep '^darwin' >/dev/null ; then diff --git a/mac_build/buildfmt.sh b/mac_build/buildfmt.sh new file mode 100644 index 00000000000..7added724eb --- /dev/null +++ b/mac_build/buildfmt.sh @@ -0,0 +1,234 @@ +#!/bin/bash + +# This file is part of BOINC. +# https://boinc.berkeley.edu +# Copyright (C) 2026 University of California +# +# BOINC is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License +# as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# BOINC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with BOINC. If not, see . +# +# +# Script to build Macintosh 64-bit Intel library of fmt for +# use in building BOINC. +# +# +## This script requires OS 10.8 or later +# +## After first installing Xcode, you must have opened Xcode and +## clicked the Install button on the dialog which appears to +## complete the Xcode installation before running this script. +# +## Where x.xx.x is the fmt version number: +## In Terminal, CD to the fmt-x.xx.x directory. +## cd [path]/fmt-x.xx.x/ +## then run this script: +## source [path]/buildfmt.sh [ -clean ] [--prefix PATH] +## +## the -clean argument will force a full rebuild. +## if --prefix is given as absolute path the library is installed into there +## use -q or --quiet to redirect build output to /dev/null instead of /dev/stdout +## +## NOTE: This script requires CMake. Before running this script you must +## install CMake for command line use: +## Download CMake from https://cmake.org/download/ +## Open the disk image file and drag the CMAKE app into the /Applications +## directory +## Eject the disk image and open the Cmake app +## Enter the following in Terminal: +## sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install +## Enter your password when prompted +## + +doclean="" +stdout_target="/dev/stdout" +lprefix="/tmp/installed-fmt" +libPath="./lib" +while [[ $# -gt 0 ]]; do + key="$1" + case $key in + -clean|--clean) + doclean="yes" + ;; + -prefix|--prefix) + lprefix="$2" + libPath="${lprefix}/lib" + shift + ;; + -q|--quiet) + stdout_target="/dev/null" + ;; + esac + shift # past argument or value +done + +GCCPATH=`xcrun -find gcc` +if [ $? -ne 0 ]; then + echo "ERROR: can't find gcc compiler" + return 1 +fi +GCC_can_build_x86_64="no" +GCC_can_build_arm64="no" +GCC_archs=`lipo -info "${GCCPATH}"` +if [[ "${GCC_archs}" = *"x86_64"* ]]; then GCC_can_build_x86_64="yes"; fi +if [[ "${GCC_archs}" = *"arm64"* ]]; then GCC_can_build_arm64="yes"; fi + +if [ "${doclean}" != "yes" ]; then + if [ -f "${libPath}/libfmt.a" ]; then + alreadyBuilt=1 + + if [ $GCC_can_build_x86_64 = "yes" ]; then + lipo "${libPath}/libfmt.a" -verify_arch x86_64 + if [ $? -ne 0 ]; then alreadyBuilt=0; doclean="yes"; fi + fi + + if [ $alreadyBuilt -eq 1 ] && [ $GCC_can_build_arm64 = "yes" ]; then + lipo "${libPath}/libfmt.a" -verify_arch arm64 + if [ $? -ne 0 ]; then alreadyBuilt=0; doclean="yes"; fi + fi + + if [ $alreadyBuilt -eq 1 ]; then + cwd=$(pwd) + dirname=${cwd##*/} + echo "${dirname} already built" + return 0 + fi + fi +fi + +GPPPATH=`xcrun -find g++` +if [ $? -ne 0 ]; then + echo "ERROR: can't find g++ compiler" + return 1 +fi + +MAKEPATH=`xcrun -find make` +if [ $? -ne 0 ]; then + echo "ERROR: can't find make tool" + return 1 +fi + +TOOLSPATH1=${MAKEPATH%/make} + +ARPATH=`xcrun -find ar` +if [ $? -ne 0 ]; then + echo "ERROR: can't find ar tool" + return 1 +fi + +TOOLSPATH2=${ARPATH%/ar} + +CMAKEPATH=`xcrun -find cmake` +if [ $? -ne 0 ]; then + echo "ERROR: can't find cmake tool" + return 1 +fi + +TOOLSPATH3=${CMAKEPATH%/cmake} + +export PATH="${TOOLSPATH1}":"${TOOLSPATH2}":"${TOOLSPATH3}":/usr/local/bin:$PATH + +SDKPATH=`xcodebuild -version -sdk macosx Path` + +if [ -d "${libPath}" ]; then + rm -f "${libPath}/libfmt.a" + if [ $? -ne 0 ]; then return 1; fi +fi + +# Build for x86_64 architecture + +## The "-Werror=unguarded-availability" compiler flag generates an error if +## there is an unguarded API not available in our Deployment Target. This +## helps ensure fmt won't try to use unavailable APIs on older Mac +## systems supported by BOINC. +## It also causes configure to reject any such APIs for which it tests. +# +export CC="${GCCPATH}";export CXX="${GPPPATH}" +export CPPFLAGS="" +export LDFLAGS="-Wl,-syslibroot,${SDKPATH},-arch,x86_64" +export CXXFLAGS="-isysroot ${SDKPATH} -Werror=unguarded-availability -arch x86_64 -mmacosx-version-min=10.13 -stdlib=libc++" +export CFLAGS="-isysroot ${SDKPATH} -Werror=unguarded-availability -mmacosx-version-min=10.13 -arch x86_64" +export SDKROOT="${SDKPATH}" +export MACOSX_DEPLOYMENT_TARGET=10.13 +export MAC_OS_X_VERSION_MAX_ALLOWED=101300 +export MAC_OS_X_VERSION_MIN_REQUIRED=101300 + +cmake --fresh -B . -S . -DCMAKE_INSTALL_PREFIX=${lprefix} -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DFMT_TEST=OFF -DFMT_DOC=OFF +if [ $? -ne 0 ]; then return 1; fi + +if [ "${doclean}" = "yes" ]; then + make clean +fi + +make 1>$stdout_target +if [ $? -ne 0 ]; then return 1; fi +make install 1>$stdout_target +if [ $? -ne 0 ]; then return 1; fi + +# Now see if we can build for arm64 +# Note: Some versions of Xcode 12 don't support building for arm64 +if [ $GCC_can_build_arm64 = "yes" ]; then + + export CC="${GCCPATH}";export CXX="${GPPPATH}" + export CPPFLAGS="" + export LDFLAGS="-Wl,-syslibroot,${SDKPATH},-arch,arm64" + export CXXFLAGS="-isysroot ${SDKPATH} -Werror=unguarded-availability -target arm64-apple-macos10.13 -mmacosx-version-min=10.13 -stdlib=libc++" + export CFLAGS="-isysroot ${SDKPATH} -Werror=unguarded-availability -mmacosx-version-min=10.13 -target arm64-apple-macos10.13" + export SDKROOT="${SDKPATH}" + export MACOSX_DEPLOYMENT_TARGET=10.13 + export MAC_OS_X_VERSION_MAX_ALLOWED=101300 + export MAC_OS_X_VERSION_MIN_REQUIRED=101300 + + cmake --fresh -B . -S . -DCMAKE_INSTALL_PREFIX=${lprefix} -DCMAKE_OSX_ARCHITECTURES=arm64 -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DFMT_TEST=OFF -DFMT_DOC=OFF + if [ $? -ne 0 ]; then + echo " ******" + echo "fmt: x86_64 build succeeded but could not build for arm64." + echo " ******" + else + + mv -f ./libfmt.a ./libfmt_x86_64.a + + # Build for arm64 architecture + make clean 1>$stdout_target + + make 1>$stdout_target + if [ $? -ne 0 ]; then + rm -f ./lib/fmt_x86_64.a + return 1 + fi + + mv -f ./libfmt.a ./libfmt_arm64.a + + # combine x86_64 and arm libraries + lipo -create ./libfmt_x86_64.a ./libfmt_arm64.a -output "./libfmt.a" + if [ $? -ne 0 ]; then + rm -f ./libfmt_x86_64.a ./libfmt_arm64.a + return 1 + fi + + rm -f ./libfmt_x86_64.a ./libfmt_arm64.a + fi +fi + +if [ "x${lprefix}" != "x" ]; then + make install 1>$stdout_target + if [ $? -ne 0 ]; then return 1; fi +fi + +lprefix="" +export CC="";export CXX="" +export LDFLAGS="" +export CXXFLAGS="" +export CFLAGS="" +export SDKROOT="" + +return 0 diff --git a/mac_build/buildlibzip.sh b/mac_build/buildlibzip.sh index a52a8c94373..b3aeabfa6a0 100644 --- a/mac_build/buildlibzip.sh +++ b/mac_build/buildlibzip.sh @@ -46,7 +46,7 @@ ## Eject the disk image and open the Cmake app ## Enter the following in Terminal: ## sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install -## Emter your password when prompted +## Enter your password when prompted ## doclean="" diff --git a/mac_build/dependencyNames.sh b/mac_build/dependencyNames.sh index 202fe539715..fc57feaa47a 100644 --- a/mac_build/dependencyNames.sh +++ b/mac_build/dependencyNames.sh @@ -71,9 +71,14 @@ zipBaseName="libzip" zipFileName="libzip-1.11.4.tar.gz" zipURL="https://libzip.org/download/libzip-1.11.4.tar.gz" +fmtDirName="fmt-12.2.0" +fmtBaseName="fmt" +fmtFileName="fmt-12.2.0.tar.gz" +fmtURL="https://github.com/fmtlib/fmt/archive/refs/tags/12.2.0.tar.gz" + # The baseNames and dirNames arrays are used by the checkDpendentVesions.sh script -baseNames=(${opensslBaseName} ${caresBaseName} ${curlBaseName} ${wxWidgetsBaseName} ${freetypeBaseName} ${ftglBaseName} ${zipBaseName}) +baseNames=(${opensslBaseName} ${caresBaseName} ${curlBaseName} ${wxWidgetsBaseName} ${freetypeBaseName} ${ftglBaseName} ${zipBaseName} ${fmtBaseName}) -dirNames=(${opensslDirName} ${caresDirName} ${curlDirName} ${wxWidgetsDirName} ${freetypeDirName} ${ftglDirName} ${zipDirName}) +dirNames=(${opensslDirName} ${caresDirName} ${curlDirName} ${wxWidgetsDirName} ${freetypeDirName} ${ftglDirName} ${zipDirName} ${fmtDirName}) return 0 diff --git a/tests/vcpkg/ports/boinc/CMakeLists.txt b/tests/vcpkg/ports/boinc/CMakeLists.txt index 888d22a9161..c71ad90e90b 100644 --- a/tests/vcpkg/ports/boinc/CMakeLists.txt +++ b/tests/vcpkg/ports/boinc/CMakeLists.txt @@ -3,6 +3,7 @@ project(boinc) find_package(OpenSSL REQUIRED) find_package(libzip REQUIRED) +find_package(fmt REQUIRED) set(LIBBOINC_HEADERS_WIN lib/boinc_win.h @@ -265,14 +266,17 @@ target_include_directories(boinc_zip PUBLIC target_link_libraries(boinc PRIVATE OpenSSL::SSL OpenSSL::Crypto + fmt::fmt ) target_link_libraries(boincapi PRIVATE boinc + fmt::fmt ) target_link_libraries(boinc_zip PRIVATE libzip::zip + fmt::fmt ) install(TARGETS boinc boincapi boinc_zip EXPORT boinc-config diff --git a/tests/vcpkg/ports/boinc/portfile.cmake b/tests/vcpkg/ports/boinc/portfile.cmake index e3c2995d27b..6db84944063 100644 --- a/tests/vcpkg/ports/boinc/portfile.cmake +++ b/tests/vcpkg/ports/boinc/portfile.cmake @@ -50,6 +50,7 @@ file(WRITE "${CURRENT_PACKAGES_DIR}/share/boinc/boinc-config.cmake" " include(CMakeFindDependencyMacro) find_dependency(OpenSSL) find_dependency(libzip) +find_dependency(fmt) ${BOINC_CONFIG} ") diff --git a/tests/vcpkg/ports/boinc/vcpkg.json b/tests/vcpkg/ports/boinc/vcpkg.json index 7bc8ae66ff9..ce2b761efae 100644 --- a/tests/vcpkg/ports/boinc/vcpkg.json +++ b/tests/vcpkg/ports/boinc/vcpkg.json @@ -18,6 +18,7 @@ { "name": "vcpkg-cmake-config", "host": true - } + }, + "fmt" ] } diff --git a/win_build/vboxwrapper.vcxproj b/win_build/vboxwrapper.vcxproj index 05ead729e67..ebfe7bdda87 100644 --- a/win_build/vboxwrapper.vcxproj +++ b/win_build/vboxwrapper.vcxproj @@ -27,7 +27,7 @@ atls.lib;ole32.lib;wsock32.lib;psapi.lib;%(AdditionalDependencies) libcmtd.lib;libcpmtd.lib;comsuppwd.lib;%(AdditionalDependencies) libcmt.lib;libcpmt.lib;comsuppw.lib;%(AdditionalDependencies) - $(TargetDir) + $(TargetDir);%(AdditionalLibraryDirectories) Console From bc28b5852aaec33dbf02df4336ec56c333225710 Mon Sep 17 00:00:00 2001 From: Charlie Fenton Date: Wed, 15 Jul 2026 03:08:55 -0700 Subject: [PATCH 2/2] Mac: Fixes for building fmtlib --- mac_build/HowToBuildBOINC_XCode.pdf | Bin 103629 -> 103962 bytes mac_build/HowToBuildBOINC_XCode.rtf | 21 +++++++------ mac_build/buildfmt.sh | 15 +++++---- mac_build/buildlibzip.sh | 8 ++--- mac_build/setupForBOINC.sh | 47 ++++++++++++++++++++++++++-- 5 files changed, 68 insertions(+), 23 deletions(-) diff --git a/mac_build/HowToBuildBOINC_XCode.pdf b/mac_build/HowToBuildBOINC_XCode.pdf index 3ab7c05b4a1674e336bd8a91eb41caa56dbf6ebe..6b753ae49e2fe11b316a571c2b08080c837f328c 100644 GIT binary patch delta 41290 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 z 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. # # -# Script to build Macintosh 64-bit Intel library of fmt for +# Script to build Macintosh 64-bit (x86_64/arm64) library of fmt for # use in building BOINC. # # -## This script requires OS 10.8 or later +## This script requires OS 10.13 or later # ## After first installing Xcode, you must have opened Xcode and ## clicked the Install button on the dialog which appears to @@ -43,7 +43,7 @@ ## Download CMake from https://cmake.org/download/ ## Open the disk image file and drag the CMAKE app into the /Applications ## directory -## Eject the disk image and open the Cmake app +## Eject the disk image and open the CMake app ## Enter the following in Terminal: ## sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install ## Enter your password when prompted @@ -52,7 +52,7 @@ doclean="" stdout_target="/dev/stdout" lprefix="/tmp/installed-fmt" -libPath="./lib" +libPath="." while [[ $# -gt 0 ]]; do key="$1" case $key in @@ -61,7 +61,7 @@ while [[ $# -gt 0 ]]; do ;; -prefix|--prefix) lprefix="$2" - libPath="${lprefix}/lib" + libPath="${lprefix}" shift ;; -q|--quiet) @@ -202,7 +202,7 @@ if [ $GCC_can_build_arm64 = "yes" ]; then make 1>$stdout_target if [ $? -ne 0 ]; then - rm -f ./lib/fmt_x86_64.a + rm -f ./libfmt_x86_64.a return 1 fi @@ -219,6 +219,9 @@ if [ $GCC_can_build_arm64 = "yes" ]; then fi fi +# Installing is perhaps redundant (at least for local [non-CI] +# builds) because the library is available at fmt-x.y.z/libfmt.a +# and the headers are available in fmt-x.y.z/include/fmt/ if [ "x${lprefix}" != "x" ]; then make install 1>$stdout_target if [ $? -ne 0 ]; then return 1; fi diff --git a/mac_build/buildlibzip.sh b/mac_build/buildlibzip.sh index b3aeabfa6a0..2a657a963d6 100644 --- a/mac_build/buildlibzip.sh +++ b/mac_build/buildlibzip.sh @@ -2,7 +2,7 @@ # This file is part of BOINC. # https://boinc.berkeley.edu -# Copyright (C) 2025 University of California +# Copyright (C) 2026 University of California # # BOINC is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License @@ -18,11 +18,11 @@ # along with BOINC. If not, see . # # -# Script to build Macintosh 64-bit Intel library of libzip for +# Script to build Macintosh 64-bit (x86_64/arm64) library of libzip for # use in building BOINC. # # -## This script requires OS 10.8 or later +## This script requires OS 10.13 or later # ## After first installing Xcode, you must have opened Xcode and ## clicked the Install button on the dialog which appears to @@ -43,7 +43,7 @@ ## Download CMake from https://cmake.org/download/ ## Open the disk image file and drag the CMAKE app into the /Applications ## directory -## Eject the disk image and open the Cmake app +## Eject the disk image and open the CMake app ## Enter the following in Terminal: ## sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install ## Enter your password when prompted diff --git a/mac_build/setupForBOINC.sh b/mac_build/setupForBOINC.sh index 2c1d7082ac3..72c1222e2f7 100644 --- a/mac_build/setupForBOINC.sh +++ b/mac_build/setupForBOINC.sh @@ -2,7 +2,7 @@ # This file is part of BOINC. # http://boinc.berkeley.edu -# Copyright (C) 2025 University of California +# Copyright (C) 2026 University of California # # BOINC is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License @@ -41,6 +41,7 @@ # Updated 9/10/16 for c-ares 1.11.0, curl 7.50.2, openssl 1.1.0 # Updated 6/25/23 to download inflate libraries if needed # Updated 9/25/25 for libzip-1.11.4 +# Updated 7/15/26 for libfmt-12.2.0 # # Download these seven packages and place them in a common parent directory # with the BOINC source tree. @@ -69,6 +70,7 @@ wxWidgetsOK="NO" freetypeOK="NO" ftglOK="NO" zipOK="NO" +fmtOK="NO" finalResult=0 SCRIPT_DIR=`pwd` @@ -241,6 +243,33 @@ else echo "" fi +cd "${SCRIPT_DIR}" + +if [ -x /usr/local/bin/ccmake ]; then + echo "" + echo "----------------------------------" + echo "----------- BUILD FMT -----------" + echo "----------------------------------" + echo "" + + cd "../../${fmtDirName}" + if [ $? -eq 0 ]; then + source "${SCRIPT_DIR}/buildfmt.sh" ${cleanit} + if [ $? -eq 0 ]; then + fmtOK="YES" + fi + fi + + cd "${SCRIPT_DIR}" +else + echo "" + echo "----------------------------------" + echo "--- TO BUILD FMT PLEASE INSTALL --" + echo "---- CMAKE COMMAND-LINE TOOLS ----" + echo "----------------------------------" + echo "" +fi + if [ "${caresOK}" = "NO" ]; then echo "" echo "-----------------------------------" @@ -298,7 +327,7 @@ if [ "${freetypeOK}" = "NO" ]; then echo "-----------------------------------" echo "" - finalResult=$[ finalResult | 32 ] + finalResult=$[ finalResult | 16 ] fi if [ "${ftglOK}" = "NO" ]; then @@ -310,7 +339,7 @@ if [ "${ftglOK}" = "NO" ]; then echo "-----------------------------------" echo "" - finalResult=$[ finalResult | 64 ] + finalResult=$[ finalResult | 32 ] fi if [ "${zipOK}" = "NO" ]; then @@ -322,6 +351,18 @@ if [ "${zipOK}" = "NO" ]; then echo "-----------------------------------" echo "" + finalResult=$[ finalResult | 64 ] +fi + +if [ "${fmtOK}" = "NO" ]; then + echo "" + echo "-----------------------------------" + echo "------------ WARNING --------------" + echo "------------ --------------" + echo "- COULD NOT BUILD ${fmtDirName} --" + echo "-----------------------------------" + echo "" + finalResult=$[ finalResult | 128 ] fi