Skip to content

Instantly share code, notes, and snippets.

@uilianries
Created April 8, 2025 09:27
Show Gist options
  • Save uilianries/e0438f6ac92f8444a1cb89c6faa3a4a7 to your computer and use it in GitHub Desktop.
Save uilianries/e0438f6ac92f8444a1cb89c6faa3a4a7 to your computer and use it in GitHub Desktop.
Conan 2.15.0 - Validate parallel cache on Mac
Starting 4 parallel Poco builds to test cache feature
Starting build 0
Starting build 1
Starting build 2
Starting build 3
Build 1: FAILED (took 0.30 seconds)
Error in build 1:
======== Exporting recipe to the cache ========
ERROR: Couldn't remove folder: /Users/uilian/.conan2/p/t/pocoaf91dcc73ba05
[Errno 2] No such file or directory: '/Users/uilian/.conan2/p/t/pocoaf91dcc73ba05'
Folder might be busy or open. Close any app using it and retry.
Build 3: FAILED (took 3.16 seconds)
Error in build 3:
======== Exporting recipe to the cache ========
poco/1.13.3: [HOOK - hook_lint_recipe.py] pre_export(): RUN: conanlint check "/Users/uilian/Development/conan/conan-center-index/recipes/poco/**/*" --exit-zero --format=rich
all/conanfile.py::338:22 - W9050: Attribute `filenames` is deprecated in conan v2 (conan-deprecated-attribute)
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 338 self.cpp_info.filenames["cmake_find_package"] = "Poco" │
│ 339 self.cpp_info.filenames["cmake_find_package_multi"] = "Poco" │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
all/conanfile.py::339:22 - W9050: Attribute `filenames` is deprecated in conan v2 (conan-deprecated-attribute)
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 338 self.cpp_info.filenames["cmake_find_package"] = "Poco" │
│ 339 self.cpp_info.filenames["cmake_find_package_multi"] = "Poco" │
│ 340 self.cpp_info.names["cmake_find_package"] = "Poco" │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
all/conanfile.py::340:22 - W9050: Attribute `names` is deprecated in conan v2 (conan-deprecated-attribute)
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 339 self.cpp_info.filenames["cmake_find_package_multi"] = "Poco" │
│ 340 self.cpp_info.names["cmake_find_package"] = "Poco" │
│ 341 self.cpp_info.names["cmake_find_package_multi"] = "Poco" │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
all/conanfile.py::341:22 - W9050: Attribute `names` is deprecated in conan v2 (conan-deprecated-attribute)
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 340 self.cpp_info.names["cmake_find_package"] = "Poco" │
│ 341 self.cpp_info.names["cmake_find_package_multi"] = "Poco" │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
all/conanfile.py::353:58 - W9050: Attribute `names` is deprecated in conan v2 (conan-deprecated-attribute)
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 352 self.cpp_info.components[conan_component].set_property("cmake_file_name", compname) │
│ 353 self.cpp_info.components[conan_component].names["cmake_find_package"] = compname │
│ 354 self.cpp_info.components[conan_component].names["cmake_find_package_multi"] = compname │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
all/conanfile.py::354:58 - W9050: Attribute `names` is deprecated in conan v2 (conan-deprecated-attribute)
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 353 self.cpp_info.components[conan_component].names["cmake_find_package"] = compname │
│ 354 self.cpp_info.components[conan_component].names["cmake_find_package_multi"] = compname │
│ 355 if comp.is_lib: │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
all/conanfile.py::84:8 - W0631: Using possibly undefined loop variable 'comp' (undefined-loop-variable)
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 83 default_options[comp.option] = comp.default_option │
│ 84 del comp │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
Error: Found 7 warning
poco/1.13.3: Exporting package recipe: /Users/uilian/Development/conan/conan-center-index/recipes/poco/all/conanfile.py
poco/1.13.3: exports: File 'conandata.yml' found. Exporting it...
poco/1.13.3: Calling export_sources()
ERROR: Traceback (most recent call last):
File "/Users/uilian/.pyenv/versions/3.10.4/lib/python3.10/site-packages/conan/cli/cli.py", line 307, in main
cli.run(args)
File "/Users/uilian/.pyenv/versions/3.10.4/lib/python3.10/site-packages/conan/cli/cli.py", line 192, in run
command.run(self._conan_api, args[0][1:])
File "/Users/uilian/.pyenv/versions/3.10.4/lib/python3.10/site-packages/conan/cli/command.py", line 179, in run
info = self._method(conan_api, parser, *args)
File "/Users/uilian/.pyenv/versions/3.10.4/lib/python3.10/site-packages/conan/cli/commands/create.py", line 51, in create
ref, conanfile = conan_api.export.export(path=path,
File "/Users/uilian/.pyenv/versions/3.10.4/lib/python3.10/site-packages/conan/api/subapi/export.py", line 20, in export
return cmd_export(app, hook_manager, self.conan_api.config.global_conf, path, name, version,
File "/Users/uilian/.pyenv/versions/3.10.4/lib/python3.10/site-packages/conan/internal/api/export.py", line 50, in cmd_export
shutil.copy2(conanfile_path, recipe_layout.conanfile())
File "/Users/uilian/.pyenv/versions/3.10.4/lib/python3.10/shutil.py", line 435, in copy2
copystat(src, dst, follow_symlinks=follow_symlinks)
File "/Users/uilian/.pyenv/versions/3.10.4/lib/python3.10/shutil.py", line 374, in copystat
lookup("utime")(dst, ns=(st.st_atime_ns, st.st_mtime_ns),
FileNotFoundError: [Errno 2] No such file or directory
ERROR: [Errno 2] No such file or directory
Build 0: FAILED (took 5.52 seconds)
Error in build 0:
======== Exporting recipe to the cache ========
poco/1.13.3: [HOOK - hook_lint_recipe.py] pre_export(): RUN: conanlint check "/Users/uilian/Development/conan/conan-center-index/recipes/poco/**/*" --exit-zero --format=rich
all/conanfile.py::338:22 - W9050: Attribute `filenames` is deprecated in conan v2 (conan-deprecated-attribute)
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 338 self.cpp_info.filenames["cmake_find_package"] = "Poco" │
│ 339 self.cpp_info.filenames["cmake_find_package_multi"] = "Poco" │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
all/conanfile.py::339:22 - W9050: Attribute `filenames` is deprecated in conan v2 (conan-deprecated-attribute)
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 338 self.cpp_info.filenames["cmake_find_package"] = "Poco" │
│ 339 self.cpp_info.filenames["cmake_find_package_multi"] = "Poco" │
│ 340 self.cpp_info.names["cmake_find_package"] = "Poco" │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
all/conanfile.py::340:22 - W9050: Attribute `names` is deprecated in conan v2 (conan-deprecated-attribute)
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 339 self.cpp_info.filenames["cmake_find_package_multi"] = "Poco" │
│ 340 self.cpp_info.names["cmake_find_package"] = "Poco" │
│ 341 self.cpp_info.names["cmake_find_package_multi"] = "Poco" │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
all/conanfile.py::341:22 - W9050: Attribute `names` is deprecated in conan v2 (conan-deprecated-attribute)
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 340 self.cpp_info.names["cmake_find_package"] = "Poco" │
│ 341 self.cpp_info.names["cmake_find_package_multi"] = "Poco" │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
all/conanfile.py::353:58 - W9050: Attribute `names` is deprecated in conan v2 (conan-deprecated-attribute)
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 352 self.cpp_info.components[conan_component].set_property("cmake_file_name", compname) │
│ 353 self.cpp_info.components[conan_component].names["cmake_find_package"] = compname │
│ 354 self.cpp_info.components[conan_component].names["cmake_find_package_multi"] = compname │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
all/conanfile.py::354:58 - W9050: Attribute `names` is deprecated in conan v2 (conan-deprecated-attribute)
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 353 self.cpp_info.components[conan_component].names["cmake_find_package"] = compname │
│ 354 self.cpp_info.components[conan_component].names["cmake_find_package_multi"] = compname │
│ 355 if comp.is_lib: │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
all/conanfile.py::84:8 - W0631: Using possibly undefined loop variable 'comp' (undefined-loop-variable)
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 83 default_options[comp.option] = comp.default_option │
│ 84 del comp │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
Error: Found 7 warning
poco/1.13.3: Exporting package recipe: /Users/uilian/Development/conan/conan-center-index/recipes/poco/all/conanfile.py
poco/1.13.3: exports: File 'conandata.yml' found. Exporting it...
poco/1.13.3: Calling export_sources()
poco/1.13.3: Copied 1 '.py' file: conanfile.py
poco/1.13.3: Copied 1 '.yml' file: conandata.yml
poco/1.13.3: Copied 3 '.patch' files: 1.13.0-0003-pocomsg-resource.patch, 1.13.0-0002-mysql-include.patch, 1.13.0.patch
poco/1.13.3: Exported to cache folder: /Users/uilian/.conan2/p/poco292623456cb16/e
poco/1.13.3: Exported: poco/1.13.3#c726bd839e406e4d64a7a6b7016e6a16 (2025-04-08 09:24:42 UTC)
======== Input profiles ========
Profile host:
[settings]
arch=armv8
build_type=Release
compiler=apple-clang
compiler.cppstd=17
compiler.libcxx=libc++
compiler.version=15
os=Macos
[options]
"*/*:shared=True" -o "&:log_debug=False"
[conf]
core.sources:download_cache=/Users/uilian/.conan2/backup_source
tools.build:verbosity=verbose
tools.cmake.cmaketoolchain:generator=Ninja
tools.compilation:verbosity=verbose
tools.files.download:verify=False
Profile build:
[settings]
arch=armv8
build_type=Release
compiler=apple-clang
compiler.cppstd=17
compiler.libcxx=libc++
compiler.version=15
os=Macos
[conf]
core.sources:download_cache=/Users/uilian/.conan2/backup_source
tools.build:verbosity=verbose
tools.cmake.cmaketoolchain:generator=Ninja
tools.compilation:verbosity=verbose
tools.files.download:verify=False
======== Computing dependency graph ========
Graph root
cli
Requirements
bzip2/1.0.8#d00dac990f08d991998d624be81a9526 - Cache
expat/2.7.1#b0b67ba910c5147271b444139ca06953 - Cache
libmysqlclient/8.1.0#ecca1993f7ce32371ef5436f3639074a - Cache
libpq/15.4#7c113f89180dee415d80d6b5aa9bab7f - Cache
lz4/1.9.4#4ed63aa8e019d795cd3b8c0d2dd66cda - Cache
openssl/3.4.1#f16a5eb84eb7e83d3de1cf6432afa69e - Cache
pcre2/10.42#9a35f5089feb875ec61a38eca364ce77 - Cache
poco/1.13.3#c726bd839e406e4d64a7a6b7016e6a16 - Cache
sqlite3/3.49.1#8631739a4c9b93bd3d6b753bac548a63 - Cache
zlib/1.3.1#b8bc2603263cf7eccbd6e17e66b0ed76 - Cache
zstd/1.5.5#1f239731dc45147c7fc2f54bfbde73df - Cache
Build requirements
cmake/3.31.6#ed0e6c1d49bd564ce6fed1a19653b86d - Cache
Resolved version ranges
cmake/[>=3.18 <4]: cmake/3.31.6
expat/[>=2.6.2 <3]: expat/2.7.1
openssl/[>=1.1 <4]: openssl/3.4.1
sqlite3/[>=3.45.0 <4]: sqlite3/3.49.1
zlib/[>=1.2.11 <2]: zlib/1.3.1
======== Computing necessary packages ========
Connecting to remote 'conancenter' anonymously
libmysqlclient/8.1.0: Main binary package 'd6cb6192ed554aed803ffc88428d9f8bd5cc6fa7' missing
libmysqlclient/8.1.0: Checking 11 compatible configurations
libmysqlclient/8.1.0: Compatible configurations not found in cache, checking servers
libmysqlclient/8.1.0: '74d08b3c673dde1c91444015a3c56cadb319b8b8': compiler.cppstd=98
libmysqlclient/8.1.0: '42ae0f418ce2140ea93a860a620625fba7cfd57f': compiler.cppstd=gnu98
libmysqlclient/8.1.0: '646df1c2867a7d30d1d809c072d2c50ca1e64854': compiler.cppstd=11
libmysqlclient/8.1.0: '3446aae667885b0a4a225dfc93f2cbf28e2e2a27': compiler.cppstd=gnu11
libmysqlclient/8.1.0: '3c3ef6e9f4541a672c4715bb3c11f417429709e6': compiler.cppstd=14
libmysqlclient/8.1.0: '15e62d5e2c4a00d2de135606e8189e67e19b7160': compiler.cppstd=gnu14
libmysqlclient/8.1.0: '858622f36c76c29723f9de73c331c5db8ee387e8': compiler.cppstd=gnu17
libmysqlclient/8.1.0: 'b7ff2c7a01fa1aafeb9044af02e358f628b2ef5f': compiler.cppstd=20
libmysqlclient/8.1.0: 'ae07a8ef696a0db8f9b85d9917354e6d884fc970': compiler.cppstd=gnu20
libmysqlclient/8.1.0: '09082f17b48b2c7219eb52f109e12946788f3478': compiler.cppstd=23
libmysqlclient/8.1.0: '893f209f1a9d9cf98516bae01681464d766b1f9d': compiler.cppstd=gnu23
poco/1.13.3: Main binary package 'fb6ad630f9a71387e97e9dede51c1d78156460e9' missing
poco/1.13.3: Checking 5 compatible configurations
poco/1.13.3: Compatible configurations not found in cache, checking servers
poco/1.13.3: '3c2a509f9105a9615cf1fb20cc3bef7f10311ed9': compiler.cppstd=gnu17
poco/1.13.3: 'c72476783a9f5ba2b08158c9e740e394c84d5f58': compiler.cppstd=20
poco/1.13.3: '0f6f2b904796f91d78e5eca5d15b01561e435aaa': compiler.cppstd=gnu20
poco/1.13.3: 'ee358913011993f639c12afb1216d65dee609b69': compiler.cppstd=23
poco/1.13.3: '2eb2e0b22d391cf8e33d08b41db2814080049071': compiler.cppstd=gnu23
Requirements
bzip2/1.0.8#d00dac990f08d991998d624be81a9526:bd47875fc25b97398a4030f4060ef8ef3539584a#b74bad8df2fb62bd1237e0cbf06f2474 - Cache
expat/2.7.1#b0b67ba910c5147271b444139ca06953:10fd60dbb19c1c7b079fb35f1ca651920973f9ca#e8b9bed6e5065768379b48ce7543bbe9 - Cache
libmysqlclient/8.1.0#ecca1993f7ce32371ef5436f3639074a:d6cb6192ed554aed803ffc88428d9f8bd5cc6fa7 - Build
libpq/15.4#7c113f89180dee415d80d6b5aa9bab7f:3f3b8ede7e67aa85670ba43bdaad7bb8f9e7313c - Build
lz4/1.9.4#4ed63aa8e019d795cd3b8c0d2dd66cda:2ee39e692ca4177b4b689b15bc1f2cfdf8f83706 - Build
openssl/3.4.1#f16a5eb84eb7e83d3de1cf6432afa69e:7833c7c48ca5681090256e36ed675b071307c45a#7742034f141384a2aada3aaa32b4ae9d - Cache
pcre2/10.42#9a35f5089feb875ec61a38eca364ce77:9ace3c9172570ae624a936ff69fc4adc1c0557f7 - Build
poco/1.13.3#c726bd839e406e4d64a7a6b7016e6a16:fb6ad630f9a71387e97e9dede51c1d78156460e9 - Build
sqlite3/3.49.1#8631739a4c9b93bd3d6b753bac548a63:fa81bfa430606be9f6fbea2e0412b94a4ab764bc - Build
zlib/1.3.1#b8bc2603263cf7eccbd6e17e66b0ed76:2ee39e692ca4177b4b689b15bc1f2cfdf8f83706#a5037fd587ecc8b72242418b6185313a - Cache
zstd/1.5.5#1f239731dc45147c7fc2f54bfbde73df:76dad4e6c83dde347fd81bafee7e53584d62846e#b95815235ba5681c5976b415ae2f21e9 - Cache
Build requirements
cmake/3.31.6#ed0e6c1d49bd564ce6fed1a19653b86d:9e5323c65b94ae38c3c733fe12637776db0119a5#0b2dc3aa1bc49a5866e358092ba4aba0 - Cache
======== Installing packages ========
bzip2/1.0.8: Already installed! (1 of 12)
cmake/3.31.6: Already installed! (2 of 12)
cmake/3.31.6: Appending PATH environment variable: /Users/uilian/.conan2/p/cmake3721984c17248/p/CMake.app/Contents/bin
expat/2.7.1: Already installed! (3 of 12)
libpq/15.4: WARN: Trying to remove corrupted source folder
libpq/15.4: WARN: This can take a while for big packages
ERROR: Couldn't remove folder: /Users/uilian/.conan2/p/libpq05bc3716309e4/s
[Errno 2] No such file or directory: '/Users/uilian/.conan2/p/libpq05bc3716309e4/s/src/contrib/pg_freespacemap/expected/pg_freespacemap.out'
Folder might be busy or open. Close any app using it and retry.
import subprocess
import concurrent.futures
import os
import time
POCO_OPTIONS = [
'-o "*/*:shared=True" -o "&:log_debug=False"',
'-o "*/*:shared=False" -o "&:log_debug=False"',
'-o "*/*:shared=True" -o "&:log_debug=True"',
'-o "*/*:shared=False" -o "&:log_debug=True"',
]
def build_poco(build_id):
"""Build Poco Conan recipe with a unique ID for tracking"""
print(f"Starting build {build_id}")
poco_version = "1.13.3"
start_time = time.time()
# Run conan create command for Poco
result = subprocess.run(
["conan", "create", "all", f"--version={poco_version}", "--build=missing", POCO_OPTIONS[build_id]],
cwd="/Users/uilian/Development/conan/conan-center-index/recipes/poco",
capture_output=True,
text=True
)
end_time = time.time()
duration = end_time - start_time
return {
"build_id": build_id,
"success": result.returncode == 0,
"duration": duration,
"stdout": result.stdout,
"stderr": result.stderr
}
def main():
num_builds = len(POCO_OPTIONS)
print(f"Starting {num_builds} parallel Poco builds to test cache feature")
# Use ThreadPoolExecutor to run builds in parallel
with concurrent.futures.ThreadPoolExecutor(max_workers=num_builds) as executor:
# Submit all build jobs
future_to_build = {executor.submit(build_poco, i): i for i in range(num_builds)}
# Process results as they complete
for future in concurrent.futures.as_completed(future_to_build):
build_id = future_to_build[future]
try:
result = future.result()
status = "SUCCESS" if result["success"] else "FAILED"
print(f"Build {build_id}: {status} (took {result['duration']:.2f} seconds)")
if not result["success"]:
print(f"Error in build {build_id}:")
print(result["stderr"])
except Exception as e:
print(f"Build {build_id} generated an exception: {e}")
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment