/Users/tom/pipes/pycpl.git/setup.py
/Users/tom/pipes/pycpl.git/pyproject.toml
/Users/tom/pipes/pycpl.git/setup.py
/Users/tom/pipes/pycpl.git/setup.cfg
No files found
1→# This file is part of PyCPL the ESO CPL Python language bindings
2→# Copyright (C) 2020-2024 European Southern Observatory
3→#
4→# This program is free software: you can redistribute it and/or modify
5→# it under the terms of the GNU General Public License as published by
6→# the Free Software Foundation, either version 3 of the License, or
7→# (at your option) any later version.
8→#
9→# This program is distributed in the hope that it will be useful,
10→# but WITHOUT ANY WARRANTY; without even the implied warranty of
... (content hidden) ...
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
1→# This file is part of PyCPL the ESO CPL Python language bindings
2→# Copyright (C) 2020-2024 European Southern Observatory
3→#
4→# This program is free software: you can redistribute it and/or modify
5→# it under the terms of the GNU General Public License as published by
6→# the Free Software Foundation, either version 3 of the License, or
7→# (at your option) any later version.
8→#
9→# This program is distributed in the hope that it will be useful,
10→# but WITHOUT ANY WARRANTY; without even the implied warranty of
11→# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12→# GNU General Public License for more details.
13→#
14→# You should have received a copy of the GNU General Public License
15→# along with this program. If not, see <http://www.gnu.org/licenses/>.
16→
17→import os
18→import sys
19→import subprocess
20→import multiprocessing
21→from concurrent.futures import ThreadPoolExecutor, as_completed
22→from pathlib import Path
23→
24→import pybind11
25→
26→from setuptools import setup, Extension
27→from setuptools.command.build_ext import build_ext
28→
29→
30→class CMakeExtension(Extension):
31→ def __init__(self, name: str, sourcedir: str = "") -> None:
32→ super().__init__(name, sources=[])
33→ self.sourcedir = os.fspath(Path(sourcedir).resolve())
34→
35→
36→class CMakeBuildExt(build_ext):
37→ def __init__(self, *args, **kwargs):
38→ super().__init__(*args, **kwargs)
39→ self.deps_built = False
40→
41→ def run(self) -> None:
42→ try:
43→ _ = subprocess.check_output(["cmake", "--version"])
44→ except OSError as e:
45→ raise RuntimeError(
46→ "CMake must be installed to build the following extensions: "
47→ + ", ".join(e.name for e in self.extensions)
48→ ) from e
49→
50→ # Build vendored dependencies first
51→ if not self.deps_built:
52→ self.build_dependencies()
53→ self.deps_built = True
54→
55→ for ext in self.extensions:
56→ self.build_extension(ext)
57→
58→ def build_dependencies(self) -> None:
59→ """Build vendored C libraries: cfitsio, fftw, wcslib, and cpl"""
60→ print("=" * 60)
61→ print("Building vendored C library dependencies")
62→ print("=" * 60)
63→
64→ # Get the source directory (where setup.py is)
65→ source_dir = Path(__file__).parent.resolve()
66→ vendor_dir = source_dir / "vendor"
67→
68→ # Create build directory for dependencies
69→ deps_build_dir = Path(self.build_temp).resolve() / "deps"
70→ deps_build_dir.mkdir(parents=True, exist_ok=True)
71→
72→ # Installation prefix for dependencies
73→ deps_install_dir = deps_build_dir / "install"
74→ deps_install_dir.mkdir(parents=True, exist_ok=True)
75→
76→ # Number of parallel jobs
77→ njobs = os.environ.get("CMAKE_BUILD_PARALLEL_LEVEL") or str(multiprocessing.cpu_count())
78→
79→ # Build dependencies with parallelization where possible
80→ # Phase 1: Build cfitsio and fftw in parallel (independent)
81→ print("\n>>> Phase 1: Building cfitsio and fftw in parallel...")
82→ with ThreadPoolExecutor(max_workers=2) as executor:
83→ future_cfitsio = executor.submit(
84→ self._build_cfitsio, vendor_dir, deps_build_dir, deps_install_dir, njobs
85→ )
86→ future_fftw = executor.submit(
87→ self._build_fftw, vendor_dir, deps_build_dir, deps_install_dir, njobs
88→ )
89→
90→ # Wait for both to complete and handle any errors
91→ for future in as_completed([future_cfitsio, future_fftw]):
92→ future.result() # Will raise exception if build failed
93→
94→ print(">>> Phase 1 complete: cfitsio and fftw built successfully")
95→
96→ # Phase 2: Build wcslib (depends on cfitsio)
97→ print("\n>>> Phase 2: Building wcslib...")
98→ self._build_wcslib(vendor_dir, deps_build_dir, deps_install_dir, njobs)
99→
100→ # Phase 3: Build cpl (depends on all three)
101→ print("\n>>> Phase 3: Building cpl...")
102→ self._build_cpl(vendor_dir, deps_build_dir, deps_install_dir, njobs)
103→
104→ # Set CPLDIR environment variable so FindCPL.cmake can find it
105→ os.environ["CPLDIR"] = str(deps_install_dir)
106→ print(f"\nCPLDIR set to: {deps_install_dir}")
107→ print("=" * 60)
108→
109→ def _build_cfitsio(self, vendor_dir: Path, build_dir: Path, install_dir: Path, njobs: str) -> None:
110→ """Build cfitsio library"""
111→ print("\n>>> Building cfitsio...")
112→ src_dir = vendor_dir / "cfitsio-4.6.2"
113→ build_subdir = build_dir / "cfitsio-build"
114→ build_subdir.mkdir(parents=True, exist_ok=True)
115→
116→ # Use CMake for cfitsio
117→ subprocess.run([
118→ "cmake",
119→ str(src_dir),
120→ f"-DCMAKE_INSTALL_PREFIX={install_dir}",
121→ "-DCMAKE_BUILD_TYPE=Release",
122→ "-DBUILD_SHARED_LIBS=ON",
123→ "-DUSE_PTHREADS=ON",
124→ ], cwd=build_subdir, check=True)
125→
126→ subprocess.run(["cmake", "--build", ".", "-j", njobs], cwd=build_subdir, check=True)
127→ subprocess.run(["cmake", "--install", "."], cwd=build_subdir, check=True)
128→ print(">>> cfitsio built successfully")
129→
130→ def _build_fftw(self, vendor_dir: Path, build_dir: Path, install_dir: Path, njobs: str) -> None:
131→ """Build fftw library (both double and single precision)"""
132→ print("\n>>> Building fftw...")
133→ src_dir = vendor_dir / "fftw-3.3.10"
134→
135→ # Build double precision (default)
136→ print(">>> Building fftw (double precision)...")
137→ build_double = build_dir / "fftw-build-double"
138→ build_double.mkdir(parents=True, exist_ok=True)
139→
140→ subprocess.run([
141→ "cmake",
142→ str(src_dir),
143→ f"-DCMAKE_INSTALL_PREFIX={install_dir}",
144→ "-DCMAKE_BUILD_TYPE=Release",
145→ "-DBUILD_SHARED_LIBS=ON",
146→ "-DENABLE_THREADS=ON",
147→ ], cwd=build_double, check=True)
148→ subprocess.run(["cmake", "--build", ".", "-j", njobs], cwd=build_double, check=True)
149→ subprocess.run(["cmake", "--install", "."], cwd=build_double, check=True)
150→
151→ # Build single precision
152→ print(">>> Building fftw (single precision)...")
153→ build_single = build_dir / "fftw-build-single"
154→ build_single.mkdir(parents=True, exist_ok=True)
155→
156→ subprocess.run([
157→ "cmake",
158→ str(src_dir),
159→ f"-DCMAKE_INSTALL_PREFIX={install_dir}",
160→ "-DCMAKE_BUILD_TYPE=Release",
161→ "-DBUILD_SHARED_LIBS=ON",
162→ "-DENABLE_THREADS=ON",
163→ "-DENABLE_FLOAT=ON", # Enable single precision
164→ ], cwd=build_single, check=True)
165→ subprocess.run(["cmake", "--build", ".", "-j", njobs], cwd=build_single, check=True)
166→ subprocess.run(["cmake", "--install", "."], cwd=build_single, check=True)
167→
168→ self._fix_darwin_install_names(
169→ install_dir / "lib",
170→ [
171→ "libfftw3.3.dylib",
172→ "libfftw3_threads.3.dylib",
173→ "libfftw3f.3.dylib",
174→ "libfftw3f_threads.3.dylib",
175→ ],
176→ )
177→
178→ print(">>> fftw built successfully (both precisions)")
179→
180→ def _build_wcslib(self, vendor_dir: Path, build_dir: Path, install_dir: Path, njobs: str) -> None:
181→ """Build wcslib library"""
182→ print("\n>>> Building wcslib...")
183→ src_dir = vendor_dir / "wcslib-8.2.2"
184→
185→ # wcslib doesn't support out-of-tree builds well, build in-source
186→ env = os.environ.copy()
187→ # Set proper LDFLAGS and CFLAGS instead of CFITSIOLIB/CFITSIOINC
188→ env["CFLAGS"] = f"-I{install_dir / 'include'}"
189→ lib_path = str(install_dir / "lib")
190→ ldflags = f"-L{lib_path} -Wl,-rpath,{lib_path}"
191→ env["LDFLAGS"] = (
192→ f"{ldflags} {env['LDFLAGS']}"
193→ if env.get("LDFLAGS")
194→ else ldflags
195→ )
196→ env["LD_LIBRARY_PATH"] = (
197→ f"{lib_path}:{env['LD_LIBRARY_PATH']}"
198→ if env.get("LD_LIBRARY_PATH")
199→ else lib_path
200→ )
201→ if sys.platform == "darwin":
202→ env["DYLD_LIBRARY_PATH"] = (
203→ f"{lib_path}:{env['DYLD_LIBRARY_PATH']}"
204→ if env.get("DYLD_LIBRARY_PATH")
205→ else lib_path
206→ )
207→
208→ subprocess.run([
209→ "./configure",
210→ f"--prefix={install_dir}",
211→ "--without-pgplot",
212→ "--disable-fortran",
213→ ], cwd=src_dir, env=env, check=True)
214→
215→ subprocess.run(["make", f"-j{njobs}"], cwd=src_dir, check=True)
216→ # Install library and headers, skip documentation
217→ subprocess.run(["make", "-C", "C", "install"], cwd=src_dir, check=True)
218→ # Install wcsconfig.h and other header files
219→ subprocess.run(["make", "install-nobase_includeHEADERS"], cwd=src_dir, check=False)
220→ # Install pkg-config file
221→ pkgconfig_dir = install_dir / "lib" / "pkgconfig"
222→ pkgconfig_dir.mkdir(parents=True, exist_ok=True)
223→ if (src_dir / "wcsconfig.h").exists():
224→ import shutil
225→ # Copy wcsconfig.h to the wcslib include directory
226→ wcslib_include = install_dir / "include" / "wcslib"
227→ if wcslib_include.exists():
228→ shutil.copy(src_dir / "wcsconfig.h", wcslib_include / "wcsconfig.h")
229→ if (src_dir / "wcslib.pc").exists():
230→ import shutil
231→ shutil.copy(src_dir / "wcslib.pc", pkgconfig_dir / "wcslib.pc")
232→ # Clean up build artifacts
233→ subprocess.run(["make", "distclean"], cwd=src_dir, check=False)
234→ print(">>> wcslib built successfully")
235→
236→ def _build_cpl(self, vendor_dir: Path, build_dir: Path, install_dir: Path, njobs: str) -> None:
237→ """Build CPL library"""
238→ print("\n>>> Building CPL...")
239→ src_dir = vendor_dir / "cpl-7.3.2"
240→
241→ # CPL uses autoconf and needs to find the dependencies
242→ env = os.environ.copy()
243→ env["PKG_CONFIG_PATH"] = str(install_dir / "lib" / "pkgconfig")
244→ env["CFITSIO_CFLAGS"] = f"-I{install_dir / 'include'}"
245→ env["CFITSIO_LIBS"] = f"-L{install_dir / 'lib'} -lcfitsio"
246→ env["FFTW3_CFLAGS"] = f"-I{install_dir / 'include'}"
247→ env["FFTW3_LIBS"] = f"-L{install_dir / 'lib'} -lfftw3"
248→ env["WCSLIB_CFLAGS"] = f"-I{install_dir / 'include' / 'wcslib'}"
249→ env["WCSLIB_LIBS"] = f"-L{install_dir / 'lib'} -lwcs"
250→ env["CPPFLAGS"] = f"-I{install_dir / 'include'} -I{install_dir / 'include' / 'wcslib'}"
251→ lib_path = str(install_dir / "lib")
252→ ldflags = f"-L{lib_path} -Wl,-rpath,{lib_path}"
253→ env["LDFLAGS"] = (
254→ f"{ldflags} {env['LDFLAGS']}"
255→ if env.get("LDFLAGS")
256→ else ldflags
257→ )
258→ env["LD_LIBRARY_PATH"] = (
259→ f"{lib_path}:{env['LD_LIBRARY_PATH']}"
260→ if env.get("LD_LIBRARY_PATH")
261→ else lib_path
262→ )
263→ if sys.platform == "darwin":
264→ env["DYLD_LIBRARY_PATH"] = (
265→ f"{lib_path}:{env['DYLD_LIBRARY_PATH']}"
266→ if env.get("DYLD_LIBRARY_PATH")
267→ else lib_path
268→ )
269→
270→ # Regenerate autotools files if configure is missing
271→ if not (src_dir / "configure").exists():
272→ print(">>> Regenerating autotools files for CPL...")
273→ subprocess.run(["autoreconf", "-i"], cwd=src_dir, env=env, check=True)
274→
275→ subprocess.run([
276→ "./configure",
277→ f"--prefix={install_dir}",
278→ "--disable-static",
279→ "--enable-shared",
280→ ], cwd=src_dir, env=env, check=True)
281→
282→ subprocess.run(["make", f"-j{njobs}"], cwd=src_dir, check=True)
283→ subprocess.run(["make", "install"], cwd=src_dir, check=True)
284→ # Clean up build artifacts
285→ subprocess.run(["make", "distclean"], cwd=src_dir, check=False)
286→ print(">>> CPL built successfully")
287→
288→ def _fix_darwin_install_names(self, lib_dir: Path, libraries: list[str]) -> None:
289→ """Ensure macOS dylibs advertise an absolute install name so dlopen works without rpath."""
290→ if sys.platform != "darwin":
291→ return
292→ for name in libraries:
293→ dylib = lib_dir / name
294→ if not dylib.exists():
295→ continue
296→ subprocess.run(
297→ ["install_name_tool", "-id", str(dylib), str(dylib)],
298→ check=True,
299→ )
300→
301→ def _copy_vendored_libraries(self, extdir: Path) -> None:
302→ """Copy vendored shared libraries alongside the extension module."""
303→ import shutil
304→ import glob
305→
306→ deps_install_dir = Path(self.build_temp).resolve() / "deps" / "install"
307→ lib_dir = deps_install_dir / "lib"
308→
309→ if not lib_dir.exists():
310→ print(f"Warning: Library directory {lib_dir} does not exist")
311→ return
312→
313→ extdir = Path(extdir).resolve()
314→ extdir.mkdir(parents=True, exist_ok=True)
315→
316→ if sys.platform == "darwin":
317→ lib_pattern = "*.dylib"
318→ else:
319→ lib_pattern = "*.so*"
320→
321→ print(f"\nCopying vendored libraries from {lib_dir} to {extdir}")
322→ for lib_file in glob.glob(str(lib_dir / lib_pattern)):
323→ lib_path = Path(lib_file)
324→ if lib_path.is_file() and not lib_path.is_symlink():
325→ dest = extdir / lib_path.name
326→ print(f" Copying {lib_path.name}")
327→ shutil.copy2(lib_path, dest)
328→ elif lib_path.is_symlink():
329→ dest = extdir / lib_path.name
330→ link_target = os.readlink(lib_path)
331→ if dest.exists() or dest.is_symlink():
332→ dest.unlink()
333→ os.symlink(link_target, dest)
334→ print(f" Creating symlink {lib_path.name} -> {link_target}")
335→
336→ def build_extension(self, ext: CMakeExtension) -> None:
337→ # CAUTION: Using extdir requires trailing slash for auto-detection &
338→ # inclusion of auxiliary "native" libs
339→ #
340→ # Must be in this form due to bug in .resolve() only fixed in
341→ # Python 3.10+
342→ ext_fullpath = Path.cwd() / self.get_ext_fullpath(ext.name)
343→ extdir = ext_fullpath.parent.resolve()
344→
345→ debug = (
346→ int(os.environ.get("PYCPL_BUILD_DEBUG", 0))
347→ if self.debug is None
348→ else self.debug
349→ )
350→ sanitize = os.environ.get("PYCPL_BUILD_SANITIZE", "")
351→ # Preferably the namespace protected variable should be used,
352→ # however the environment variable VERBOSE is checked and used
353→ # by cmake and its generated scripts. So we are conservative here
354→ # in order to have a consistent behavior.
355→ verbose = int(os.environ.get("PYCPL_BUILD_VERBOSE", 0)) or int(
356→ os.environ.get("VERBOSE", 0)
357→ )
358→
359→ cmake_args = []
360→ build_args = []
361→
362→ if verbose:
363→ cmake_args += ["-DCMAKE_VERBOSE_MAKEFILE=TRUE"]
364→
365→ if sanitize in ["address", "leak"]:
366→ debug = 1
367→ cmake_args += [f"-DSANITIZE:STRING={sanitize}"]
368→
369→ cfg = "Debug" if debug else "Release"
370→ cmake_args += [
371→ f"-DCMAKE_BUILD_TYPE={cfg}", # not used on MSVC, but no harm
372→ f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={extdir}{os.sep}",
373→ f"-DPython3_EXECUTABLE={sys.executable}",
374→ ]
375→
376→ if "CMAKE_ARGS" in os.environ:
377→ cmake_args += [item for item in os.environ["CMAKE_ARGS"].split(" ") if item]
378→
379→ cmake_args += [f"-DPYCPL_VERSION={self.distribution.get_version()}"]
380→
381→ cmake_args += ["-Dpybind11_DIR:PATH=" + pybind11.get_cmake_dir()]
382→
383→ cpldir = os.environ.get("CPLDIR", None)
384→ if cpldir is not None:
385→ cmake_args += [f"-DCPL_ROOT:PATH={Path(cpldir).resolve()}"]
386→ recipedir = os.environ.get("PYCPL_RECIPE_DIR", None)
387→ if recipedir is not None:
388→ cmake_args += [f"-DPYCPL_RECIPE_DIR:PATH={Path(recipedir).resolve()}"]
389→
390→ # Set CMAKE_BUILD_PARALLEL_LEVEL to control the parallel build level
391→ # across all generators.
392→ if "CMAKE_BUILD_PARALLEL_LEVEL" not in os.environ:
393→ # self.parallel is a Python 3 only way to set parallel jobs by hand
394→ # using -j in the build_ext call, not supported by pip or PyPA-build.
395→ if hasattr(self, "parallel") and self.parallel:
396→ # CMake 3.12+ only.
397→ build_args += [f"-j{self.parallel}"]
398→
399→ build_temp = Path(self.build_temp) / ext.name
400→ if not build_temp.exists():
401→ build_temp.mkdir(parents=True)
402→
403→ subprocess.run(
404→ ["cmake", ext.sourcedir, *cmake_args], cwd=build_temp, check=True
405→ )
406→ subprocess.run(
407→ ["cmake", "--build", ".", *build_args], cwd=build_temp, check=True
408→ )
409→
410→ # Copy vendored libraries alongside the extension
411→ self._copy_vendored_libraries(extdir)
412→
413→
414→setup(
415→ ext_modules=[CMakeExtension("cpl")],
416→ cmdclass={"build_ext": CMakeBuildExt},
417→ package_data={"": ["*.so", "*.so.*", "*.dylib"]},
418→ include_package_data=True,
419→)
420→
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
1→[project]
2→name = "pycpl"
3→version = "0.1.0"
4→description = "PyCPL, with CPL and dependencies included"
5→readme = "README.md"
6→requires-python = ">=3.11"
7→dependencies = [
8→ "numpy>=2.3.5",
9→ "pybind11>=3.0.1",
10→ "setuptools>=80.9.0",
11→]
12→[build-system]
13→requires = ["setuptools>=70", "wheel", "pybind11", "cmake"]
14→build-backend = "setuptools.build_meta"
15→
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
1→[metadata]
2→name = pycpl
3→version = 1.0.3
4→license = GPL-3.0-or-later
5→author = European Southern Observatory, Australian Astronomical Optics Macquarie
6→author_email = cpl-help@eso.org
7→description = Python language bindings for the ESO Common Pipeline Library C libraries
8→long_description = file: README.md
9→long_description_content_type = text/markdown
10→url = http://www.eso.org/sci/software/pycpl
... (content hidden) ...
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
1→[metadata]
2→name = pycpl
3→version = 1.0.3
4→license = GPL-3.0-or-later
5→author = European Southern Observatory, Australian Astronomical Optics Macquarie
6→author_email = cpl-help@eso.org
7→description = Python language bindings for the ESO Common Pipeline Library C libraries
8→long_description = file: README.md
9→long_description_content_type = text/markdown
10→url = http://www.eso.org/sci/software/pycpl
11→project_urls =
12→ Homepage = http://www.eso.org/sci/software/pycpl
13→ Documentation = http://www.eso.org/sci/software/pycpl
14→ Source = https://ftp.eso.org/pub/dfs/pipelines/libraries/pycpl
15→classifiers =
16→ Programming Language :: Python :: 3
17→ Programming Language :: C
18→ Programming Language :: C++
19→ Topic :: Scientific/Engineering :: Astronomy
20→ Topic :: Software Development
21→ Operating System :: POSIX :: Linux
22→ Operating System :: MacOS :: MacOS X
23→ Operating System :: Unix
24→ Development Status :: 5 - Production/Stable
25→
26→[options]
27→python_requires = >=3.9
28→install_requires =
29→ numpy
30→ astropy
31→zip_safe = False
32→
33→[options.extras_require]
34→pandas = pandas
35→doc =
36→ sphinx
37→test =
38→ pytest
39→ pandas
40→ scipy
41→
42→[egg_info]
43→tag_build =
44→tag_date = 0
45→
46→
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
File created successfully at: /Users/tom/pipes/pycpl.git/.github/workflows/build-wheels.yml
pyproject.toml to make it easier to maintain:/Users/tom/pipes/pycpl.git/MANIFEST.in
1→include README.md CHANGELOG.md
2→include pytest.ini
3→global-include CMakeLists.txt *.cmake .clang-format
4→global-include *.so *.so.* *.dylib
5→recursive-include src *
6→recursive-include tests *.py *.sof *.fits
7→recursive-include docs Makefile *.rst *.css *.svg *.ico *.png *.html *.py *.txt
8→recursive-include vendor *
9→prune docs/_build
10→exclude docs/_static/pycpl-logo.png
11→global-exclude .DS_Store desktop.ini *.xcf *.py[cod]
12→
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
.github/workflows/build-wheels.ymlpyproject.toml git tag v1.0.4
git push origin v1.0.4
3. Artifacts: Built wheels are uploaded as GitHub Actions artifactspycplbuild-wheels.ymlv (e.g., v1.0.4)completed failure Build Wheels Build Wheels master workflow_dispatch 19436352197 2m16s 2025-11-17T16:12:59Z
X master Build Wheels · 19436352197
Triggered via workflow_dispatch about 6 minutes ago
X master Build Wheels · 19436352197
Triggered via workflow_dispatch about 6 minutes ago
JOBS
✓ Build source distribution in 16s (ID 55608096337)
X Build wheels on macos-13 in 2m12s (ID 55608096388)
X Build wheels on macos-14 in 1m56s (ID 55608096405)
X Build wheels on ubuntu-22.04 in 1m56s (ID 55608096413)
✓ Set up job
✓ Run actions/checkout@v4
✓ Set up Python
✓ Install cibuildwheel
X Build wheels
- Run actions/upload-artifact@v4
- Post Set up Python
✓ Post Run actions/checkout@v4
✓ Complete job
- upload_pypi (ID 55608340539)
ANNOTATIONS
X The strategy configuration was canceled because "build_wheels.ubuntu-22_04" failed
Build wheels on macos-13: .github#1
X The operation was canceled.
Build wheels on macos-13: .github#1674
! libtool 2.5.4 is already installed and up-to-date.
To reinstall 2.5.4, run:
brew reinstall libtool
Build wheels on macos-13: .github#115
! autoconf 2.72 is already installed and up-to-date.
To reinstall 2.72, run:
brew reinstall autoconf
Build wheels on macos-13: .github#111
- The macOS-13 based runner images are being deprecated, consider switching to macOS-15 (macos-15-intel) or macOS 15 arm64 (macos-latest) instead. For more details see https://github.com/actions/runner-images/issues/13046
Build wheels on macos-13: .github#1
X The strategy configuration was canceled because "build_wheels.ubuntu-22_04" failed
Build wheels on macos-14: .github#1
X Process completed with exit code 1.
Build wheels on macos-14: .github#5716
X Command ['python', '-m', 'pip', 'wheel', '/Users/runner/work/pycpl/pycpl', '--wheel-dir=/private/var/folders/8s/1jkm89h96qjdtjr7q3bll2vh0000gn/T/cibw-run-4ezbhq7e/cp311-macosx_x86_64/built_wheel', '--no-deps', '-v'] failed with code 1.
Build wheels on macos-14: .github#5713
X Process completed with exit code 1.
Build wheels on ubuntu-22.04: .github#2977
X Command ['python', '-m', 'pip', 'wheel', PurePosixPath('/project'), '--wheel-dir=/tmp/cibuildwheel/built_wheel', '--no-deps', '-v'] failed with code 1.
Build wheels on ubuntu-22.04: .github#2973
ARTIFACTS
sdist
To see what failed, try: gh run view 19436352197 --log-failed
View this run on GitHub: https://github.com/ivh/pycpl/actions/runs/19436352197
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.6835725Z ##[group]Run python -m cibuildwheel --output-dir wheelhouse
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.6836182Z [36;1mpython -m cibuildwheel --output-dir wheelhouse[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.6863657Z shell: /usr/bin/bash -e {0}
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.6835725Z ##[group]Run python -m cibuildwheel --output-dir wheelhouse
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.6836182Z [36;1mpython -m cibuildwheel --output-dir wheelhouse[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.6863657Z shell: /usr/bin/bash -e {0}
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.6863892Z env:
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.6864129Z pythonLocation: /opt/hostedtoolcache/Python/3.11.14/x64
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.6864560Z PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.11.14/x64/lib/pkgconfig
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.6864968Z Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.14/x64
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.6865344Z Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.14/x64
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.6865682Z Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.14/x64
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.6866012Z LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.11.14/x64/lib
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.6866291Z ##[endgroup]
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9890929Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9891434Z _ _ _ _ _ _ _
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9892160Z ___|_| |_ _ _|_| |_| |_ _ _| |_ ___ ___| |
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9892944Z | _| | . | | | | | . | | | | | -_| -_| |
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9893383Z |___|_|___|___|_|_|___|_____|_|_|___|___|_|
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9893734Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9893899Z cibuildwheel version 2.21.3
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9894170Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9894296Z Build options:
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9894611Z platform: linux
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9956984Z [38;5;244mallow_empty: False[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9958644Z architectures: x86_64[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9960303Z build_selector:
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9960723Z build_config: cp311-* cp312-* cp313-*
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9961258Z skip_config: *-musllinux_* *-win32 *-manylinux_i686
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9961767Z requires_python: >=3.11
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9962162Z prerelease_pythons: False
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9962971Z free_threaded_support: False[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9963631Z output_dir: /home/runner/work/pycpl/pycpl/wheelhouse[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9964344Z package_dir: /home/runner/work/pycpl/pycpl[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9964956Z [38;5;244mtest_selector:
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9965435Z [38;5;244m skip_config:[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9965906Z [38;5;244mbefore_all: [0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9966511Z before_build: yum install -y autoconf automake libtool[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9967137Z [38;5;244mbefore_test: [0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9967609Z [38;5;244mbuild_frontend: None[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9968145Z build_verbosity: 1[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9968577Z [38;5;244mconfig_settings: [0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9969076Z [38;5;244mcontainer_engine: docker[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9969653Z [38;5;244mdependency_constraints: pinned[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9970090Z environment:
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9970534Z CMAKE_BUILD_PARALLEL_LEVEL="4"[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9971043Z [38;5;244mmanylinux_images:
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9971679Z [38;5;244m x86_64: quay.io/pypa/manylinux2014_x86_64:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9972636Z [38;5;244m i686: quay.io/pypa/manylinux2014_i686:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9973481Z [38;5;244m pypy_x86_64: quay.io/pypa/manylinux2014_x86_64:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9974299Z [38;5;244m aarch64: quay.io/pypa/manylinux2014_aarch64:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9975151Z [38;5;244m ppc64le: quay.io/pypa/manylinux2014_ppc64le:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9975982Z [38;5;244m s390x: quay.io/pypa/manylinux2014_s390x:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9976815Z [38;5;244m pypy_aarch64: quay.io/pypa/manylinux2014_aarch64:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9977670Z [38;5;244m pypy_i686: quay.io/pypa/manylinux2014_i686:2024.10.07-1[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9978314Z [38;5;244mmusllinux_images:
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9978921Z [38;5;244m x86_64: quay.io/pypa/musllinux_1_2_x86_64:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9979642Z [38;5;244m i686: quay.io/pypa/musllinux_1_2_i686:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9980389Z [38;5;244m aarch64: quay.io/pypa/musllinux_1_2_aarch64:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9981202Z [38;5;244m ppc64le: quay.io/pypa/musllinux_1_2_ppc64le:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9982618Z [38;5;244m s390x: quay.io/pypa/musllinux_1_2_s390x:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9983445Z [38;5;244m armv7l: quay.io/pypa/musllinux_1_2_armv7l:2024.10.07-1[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9984278Z [38;5;244mrepair_command: auditwheel repair -w {dest_dir} {wheel}[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9985038Z [38;5;244mtest_command: [0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9985530Z [38;5;244mtest_extras: [0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9985987Z [38;5;244mtest_requires: [0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9986257Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:09.9986477Z Cache folder: /home/runner/.cache/cibuildwheel
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:10.0007024Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:10.0007189Z Here we go!
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:10.0007371Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:10.8766713Z ##[group]Starting container image quay.io/pypa/manylinux2014_x86_64:2024.10.07-1...
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:10.8767478Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:10.8768012Z info: This container will host the build for cp311-manylinux_x86_64, cp312-manylinux_x86_64, cp313-manylinux_x86_64...
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:10.8768847Z + docker version -f '{{json .}}'
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:10.9442755Z + docker image inspect quay.io/pypa/manylinux2014_x86_64:2024.10.07-1 --format '{{.Os}}/{{.Architecture}}'
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:10.9598880Z Error response from daemon: No such image: quay.io/pypa/manylinux2014_x86_64:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9025600Z 2024.10.07-1: Pulling from pypa/manylinux2014_x86_64
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9070620Z 2d473b07cdd5: Pulling fs layer
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9071085Z c4181efa939e: Pulling fs layer
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9071459Z 3e40c311e5e9: Pulling fs layer
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9071801Z e9a89bd7d45e: Pulling fs layer
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9076709Z 12bb4d872fd2: Pulling fs layer
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9077337Z 2bf391134d38: Pulling fs layer
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9077664Z 0b60640663bf: Pulling fs layer
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9078030Z 0d6b53fc184f: Pulling fs layer
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9078385Z 967967e006b9: Pulling fs layer
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9078722Z b3fba8ce35d5: Pulling fs layer
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9079046Z 91f9d5ff2039: Pulling fs layer
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9079271Z a8f86560fbe6: Pulling fs layer
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9079481Z 6ef13d234670: Pulling fs layer
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9079678Z dc63ceb1f2dd: Pulling fs layer
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9079894Z 0143ba96cfd0: Pulling fs layer
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9080090Z e9a89bd7d45e: Waiting
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9080268Z 88832388d170: Pulling fs layer
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9080487Z f80bee7b84db: Pulling fs layer
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9080789Z 1207c7db9335: Pulling fs layer
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9081019Z 12bb4d872fd2: Waiting
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9081191Z 2bf391134d38: Waiting
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9081372Z ca6e9248c4e5: Pulling fs layer
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9081560Z 0b60640663bf: Waiting
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9081738Z fbd02044c22d: Pulling fs layer
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9081925Z b3fba8ce35d5: Waiting
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9082094Z 91f9d5ff2039: Waiting
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9082262Z dc63ceb1f2dd: Waiting
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9082651Z 1207c7db9335: Waiting
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9082825Z a8f86560fbe6: Waiting
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9082997Z 0143ba96cfd0: Waiting
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9083162Z ca6e9248c4e5: Waiting
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9083324Z 6ef13d234670: Waiting
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9083487Z 88832388d170: Waiting
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9083648Z f80bee7b84db: Waiting
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9083820Z fbd02044c22d: Waiting
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:11.9083980Z 967967e006b9: Waiting
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:12.2530387Z c4181efa939e: Verifying Checksum
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:12.2530912Z c4181efa939e: Download complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:12.3986089Z 3e40c311e5e9: Download complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:12.7260284Z e9a89bd7d45e: Verifying Checksum
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:12.7261160Z e9a89bd7d45e: Download complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:12.8673485Z 12bb4d872fd2: Verifying Checksum
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:12.8674150Z 12bb4d872fd2: Download complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:13.0371104Z 2bf391134d38: Verifying Checksum
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:13.0371836Z 2bf391134d38: Download complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:13.5056892Z 0d6b53fc184f: Verifying Checksum
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:13.5057415Z 0d6b53fc184f: Download complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:13.9380269Z 2d473b07cdd5: Verifying Checksum
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:13.9381396Z 2d473b07cdd5: Download complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:13.9665189Z 967967e006b9: Download complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:14.3064942Z 91f9d5ff2039: Download complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:14.4851525Z b3fba8ce35d5: Verifying Checksum
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:14.4852328Z b3fba8ce35d5: Download complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:14.8580843Z a8f86560fbe6: Verifying Checksum
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:14.8581396Z a8f86560fbe6: Download complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:15.0369456Z 6ef13d234670: Verifying Checksum
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:15.0370758Z 6ef13d234670: Download complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:15.2606685Z dc63ceb1f2dd: Verifying Checksum
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:15.2607199Z dc63ceb1f2dd: Download complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:15.4408739Z 0143ba96cfd0: Verifying Checksum
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:15.4410133Z 0143ba96cfd0: Download complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:15.8999195Z 88832388d170: Download complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:16.6244682Z f80bee7b84db: Verifying Checksum
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:16.6247019Z f80bee7b84db: Download complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:16.6443264Z 1207c7db9335: Verifying Checksum
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:16.6443969Z 1207c7db9335: Download complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:16.8011567Z 2d473b07cdd5: Pull complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:16.9891688Z ca6e9248c4e5: Verifying Checksum
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:16.9892192Z ca6e9248c4e5: Download complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:17.6365497Z 0b60640663bf: Verifying Checksum
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:17.6366247Z 0b60640663bf: Download complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:18.3721520Z c4181efa939e: Pull complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:18.3848613Z 3e40c311e5e9: Pull complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:18.3944940Z e9a89bd7d45e: Pull complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:18.4060220Z 12bb4d872fd2: Pull complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:18.4164053Z 2bf391134d38: Pull complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:25.2292298Z fbd02044c22d: Verifying Checksum
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:25.2292853Z fbd02044c22d: Download complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:25.4721972Z 0b60640663bf: Pull complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:25.4808752Z 0d6b53fc184f: Pull complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:25.4914658Z 967967e006b9: Pull complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:25.5401115Z b3fba8ce35d5: Pull complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:25.5485056Z 91f9d5ff2039: Pull complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:25.6006158Z a8f86560fbe6: Pull complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:25.6093911Z 6ef13d234670: Pull complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:25.6500556Z dc63ceb1f2dd: Pull complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:25.6585305Z 0143ba96cfd0: Pull complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:25.6853462Z 88832388d170: Pull complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:25.8714008Z f80bee7b84db: Pull complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:26.2781026Z 1207c7db9335: Pull complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:26.2994518Z ca6e9248c4e5: Pull complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:39.6220705Z fbd02044c22d: Pull complete
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:39.6253980Z Digest: sha256:41269ff9c2edb74de6fe65eb8c9db2b5e03370ce7f3da313aa7e3134c9371892
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:39.6265281Z Status: Downloaded newer image for quay.io/pypa/manylinux2014_x86_64:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:39.6411757Z 0b9c893fa5fc0e2077a5b21ab6e8a98e1003e9fd54e13defaa27937c2e97dae3
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:39.6430441Z + /bin/true
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.1406413Z + mkdir -p /project
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.1436537Z + manylinux-interpreters --help
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.3745997Z + manylinux-interpreters ensure cp311-cp311
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.4161293Z 'cp311-cp311' already installed at '/opt/python/cp311-cp311'
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.4215958Z + test -x /opt/python/cp311-cp311/bin/python
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.4239527Z + manylinux-interpreters ensure cp312-cp312
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.4649630Z 'cp312-cp312' already installed at '/opt/python/cp312-cp312'
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.4704142Z + test -x /opt/python/cp312-cp312/bin/python
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.4727277Z + manylinux-interpreters ensure cp313-cp313
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.5135861Z 'cp313-cp313' already installed at '/opt/python/cp313-cp313'
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.5191494Z + test -x /opt/python/cp313-cp313/bin/python
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.5215005Z ##[endgroup]
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.5216067Z [32m✓ [0m29.65s
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.5216899Z ##[group]Copying project into container...
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.5217533Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.5217699Z + mkdir -p /project
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.9278636Z ##[endgroup]
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.9279204Z [32m✓ [0m0.41s
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.9279416Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.9279598Z [1m[34mBuilding cp311-manylinux_x86_64 wheel[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.9279928Z CPython 3.11 manylinux x86_64
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.9280074Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.9291038Z ##[group]Setting up build environment...
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.9291383Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:40.9859796Z + /opt/python/cp38-cp38/bin/python -c 'import sys, json, os; json.dump(os.environ.copy(), sys.stdout)'
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:41.0751145Z + which python
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:41.0781819Z + which pip
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:41.0809563Z ##[endgroup]
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:41.0810297Z [32m✓ [0m0.15s
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:41.0812557Z ##[group]Running before_build...
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:41.0813117Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:41.0816526Z + sh -c 'yum install -y autoconf automake libtool'
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:41.2139061Z Loaded plugins: ovl
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.4674266Z Package autoconf-2.69-11.el7.noarch already installed and latest version
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.4681300Z Package automake-1.13.4-3.el7.noarch already installed and latest version
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.4689302Z Resolving Dependencies
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.4696104Z --> Running transaction check
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.4696727Z ---> Package libtool.x86_64 0:2.4.2-22.el7_3 will be installed
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.4730076Z --> Processing Dependency: gcc = 4.8.5 for package: libtool-2.4.2-22.el7_3.x86_64
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.6709341Z --> Running transaction check
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.6709810Z ---> Package gcc.x86_64 0:4.8.5-44.el7 will be installed
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.6769052Z --> Processing Dependency: cpp = 4.8.5-44.el7 for package: gcc-4.8.5-44.el7.x86_64
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.6779998Z --> Running transaction check
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.6780544Z ---> Package cpp.x86_64 0:4.8.5-44.el7 will be installed
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.8254244Z --> Finished Dependency Resolution
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.8315811Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.8316205Z Dependencies Resolved
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.8325310Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.8325614Z ================================================================================
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.8326408Z Package Arch Version Repository Size
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.8327760Z ================================================================================
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.8328420Z Installing:
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.8328820Z libtool x86_64 2.4.2-22.el7_3 base 588 k
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.8329331Z Installing for dependencies:
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.8329673Z cpp x86_64 4.8.5-44.el7 base 5.9 M
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.8330004Z gcc x86_64 4.8.5-44.el7 base 16 M
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.8330202Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.8330279Z Transaction Summary
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.8330503Z ================================================================================
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.8330782Z Install 1 Package (+2 Dependent packages)
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.8330958Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.8331038Z Total download size: 23 M
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.8331247Z Installed size: 55 M
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:48.8331437Z Downloading packages:
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:49.3773000Z --------------------------------------------------------------------------------
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:49.3773555Z Total 42 MB/s | 23 MB 00:00
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:49.3813215Z Running transaction check
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:49.3978319Z Running transaction test
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:49.4219443Z Transaction test succeeded
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:49.4222140Z Running transaction
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:50.8457784Z Installing : cpp-4.8.5-44.el7.x86_64 1/3
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:50.9144116Z Installing : gcc-4.8.5-44.el7.x86_64 2/3
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:50.9370719Z Installing : libtool-2.4.2-22.el7_3.x86_64 3/3
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:50.9371280Z install-info: No such file or directory for /usr/share/info/libtool.info.gz
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:50.9527091Z Verifying : gcc-4.8.5-44.el7.x86_64 1/3
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:50.9565455Z Verifying : libtool-2.4.2-22.el7_3.x86_64 2/3
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:50.9862136Z Verifying : cpp-4.8.5-44.el7.x86_64 3/3
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:50.9862889Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:50.9862995Z Installed:
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:50.9863259Z libtool.x86_64 0:2.4.2-22.el7_3
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:50.9863520Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:50.9863602Z Dependency Installed:
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:50.9863867Z cpp.x86_64 0:4.8.5-44.el7 gcc.x86_64 0:4.8.5-44.el7
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:50.9864091Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:50.9864156Z Complete!
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:51.0151545Z ##[endgroup]
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:51.0154056Z [32m✓ [0m9.93s
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:51.0157288Z ##[group]Building wheel...
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:51.0157537Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:51.0157725Z + rm -rf /tmp/cibuildwheel/built_wheel
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:51.0183727Z + mkdir -p /tmp/cibuildwheel/built_wheel
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:51.0216173Z + python -m pip wheel /project --wheel-dir=/tmp/cibuildwheel/built_wheel --no-deps -v
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:52.5420651Z Processing /project
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:52.5446759Z Installing build dependencies: started
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:52.5449745Z Running command pip subprocess to install build dependencies
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:52.8265580Z Using pip 24.2 from /opt/_internal/cpython-3.11.10/lib/python3.11/site-packages/pip (python 3.11)
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:53.1832849Z Collecting setuptools>=70
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:53.1834367Z Obtaining dependency information for setuptools>=70 from https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl.metadata
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:13:53.2680545Z Downloading setuptools-80.9.0-py3-none-any.whl.metadata (6.6 kB)
Build wh
... [2707 lines truncated] ...
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8322958Z configure: error: cfitsio (libraries) was not found on your system.
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8694160Z ============================================================
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8696034Z Building vendored C library dependencies
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8322958Z configure: error: cfitsio (libraries) was not found on your system.
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8694160Z ============================================================
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8696034Z Building vendored C library dependencies
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8697267Z ============================================================
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8698811Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8701100Z >>> Phase 1: Building cfitsio and fftw in parallel...
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8703188Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8705267Z >>> Building cfitsio...
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8707165Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8709425Z >>> Building fftw...
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8711298Z >>> Building fftw (double precision)...
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8714195Z >>> cfitsio built successfully
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8716540Z >>> Building fftw (single precision)...
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8718513Z >>> fftw built successfully (both precisions)
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8720849Z >>> Phase 1 complete: cfitsio and fftw built successfully
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8722850Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8724639Z >>> Phase 2: Building wcslib...
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8726635Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8729151Z >>> Building wcslib...
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8730814Z >>> wcslib built successfully
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8732921Z
--
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.9113578Z error: subprocess-exited-with-error
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.9114049Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.9114553Z × Building wheel for pycpl (pyproject.toml) did not run successfully.
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.9114931Z │ exit code: 1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.9115167Z ╰─> See above for output.
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.9115499Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.9116014Z note: This error originates from a subprocess, and is likely not a problem with pip.
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.9118160Z full command: /opt/python/cp311-cp311/bin/python /opt/python/cp311-cp311/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py build_wheel /tmp/tmpk8a2g9_w
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.9120515Z cwd: /project
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.9124052Z Building wheel for pycpl (pyproject.toml): finished with status 'error'
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.9128870Z ERROR: Failed building wheel for pycpl
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.9133925Z Failed to build pycpl
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.9137039Z ERROR: Failed to build one or more wheels
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:56.6336042Z ##[error]Command ['python', '-m', 'pip', 'wheel', PurePosixPath('/project'), '--wheel-dir=/tmp/cibuildwheel/built_wheel', '--no-deps', '-v'] failed with code 1.
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:56.6346310Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:56.6346849Z ##[endgroup]
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:56.6347457Z [31m✕ [0m65.62s
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:56.6554561Z ##[error]Process completed with exit code 1.
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.1117628Z checking for readdir... yes
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.1628128Z checking for strlcat... no
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.2097234Z checking for strlcpy... no
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.1117628Z checking for readdir... yes
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.1628128Z checking for strlcat... no
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.2097234Z checking for strlcpy... no
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.2221423Z checking for gcc... (cached) gcc
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.2503496Z checking whether the compiler supports GNU C... (cached) yes
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.2506950Z checking whether gcc accepts -g... (cached) yes
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.2508055Z checking for gcc option to enable C11 features... (cached) none needed
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.2510872Z checking whether gcc understands -c and -o together... (cached) yes
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.2517070Z checking dependency style of gcc... (cached) gcc3
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.3353964Z checking whether gcc and cc understand -c and -o together... yes
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.3857760Z checking whether gcc supports -std=c99... yes
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.4360834Z checking whether gcc supports -fno-common... yes
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.4367549Z checking whether debugging code should be created... no
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.4378672Z checking whether strict compiler options should be used... no
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.4384269Z checking whether profiling compiler options should be used... no
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.4394411Z checking for doxygen... no
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.4399985Z checking for latex... no
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.4408086Z checking for Java Development Kit... no
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.4924355Z checking whether gcc supports -pthread... yes
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.5306887Z checking for pthread_create in -lpthread... yes
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.5615139Z checking for pthread.h... yes
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.6187693Z checking for the compiler option to support OpenMP... -fopenmp
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.6188638Z checking whether thread support is available... yes
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.6593935Z checking for library containing omp_get_num_threads... none required
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.6921571Z checking for socket in -lsocket... no
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.7330043Z checking for inet_ntoa in -lnsl... yes
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.7332079Z checking for pkg-config... pkg-config
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.7343940Z checking for special C compiler options needed for large files... no
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.7562124Z checking for _FILE_OFFSET_BITS value needed for large files... no
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8319018Z checking for cfitsio... no
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:14:55.8322958Z configure: error: cfitsio (libraries) was not found on your system.
/Users/tom/pipes/pycpl.git/vendor/cfitsio-4.6.2/cfitsio.pc.cmake
/Users/tom/pipes/pycpl.git/vendor/cfitsio-4.6.2/cfitsio.pc.in
total 6668
drwxr-xr-x 118 tom staff 3776 Nov 17 14:53 .
drwxr-xr-x 6 tom staff 192 Nov 17 14:53 ..
total 6668
drwxr-xr-x 118 tom staff 3776 Nov 17 14:53 .
drwxr-xr-x 6 tom staff 192 Nov 17 14:53 ..
-rw-r--r-- 1 tom staff 50450 Nov 17 14:53 aclocal.m4
-rw-r--r-- 1 tom staff 53229 Nov 17 14:53 buffers.c
-rw-r--r-- 1 tom staff 265826 Nov 17 14:53 cfileio.c
-rw-r--r-- 1 tom staff 390 Nov 17 14:53 cfitsio.pc.cmake
-rw-r--r-- 1 tom staff 298 Nov 17 14:53 cfitsio.pc.in
drwxr-xr-x 3 tom staff 96 Nov 17 14:53 cfitsio.xcodeproj
-rw-r--r-- 1 tom staff 137148 Nov 17 14:53 cfortran.h
-rw-r--r-- 1 tom staff 17601 Nov 17 14:53 checksum.c
drwxr-xr-x 3 tom staff 96 Nov 17 14:53 cmake
-rwxr-xr-x 1 tom staff 12747 Nov 17 15:05 CMakeLists.txt
drwxr-xr-x 9 tom staff 288 Nov 17 14:53 config
-rwxr-xr-x 1 tom staff 736523 Nov 17 14:53 configure
-rw-r--r-- 1 tom staff 18890 Nov 17 14:53 configure.ac
-rw-r--r-- 1 tom staff 31716 Nov 17 14:53 drvrfile.c
-rw-r--r-- 1 tom staff 13960 Nov 17 14:53 drvrgsiftp.c
-rw-r--r-- 1 tom staff 787 Nov 17 14:53 drvrgsiftp.h
-rw-r--r-- 1 tom staff 40411 Nov 17 14:53 drvrmem.c
1→#==============================================================================
2→# CFITSIO CMakeLists.txt
3→#==============================================================================
4→
5→# Ensure that build directory is not the source directory:
6→IF(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
7→ message(FATAL_ERROR
8→ "Please create a separate directory for building CFITSIO."
9→ )
10→ENDIF()
... (content hidden) ...
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
1→#==============================================================================
2→# CFITSIO CMakeLists.txt
3→#==============================================================================
4→
5→# Ensure that build directory is not the source directory:
6→IF(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
7→ message(FATAL_ERROR
8→ "Please create a separate directory for building CFITSIO."
9→ )
10→ENDIF()
11→
12→CMAKE_MINIMUM_REQUIRED(VERSION 3.5)
13→
14→# Suppress warning about WIN32 no longer being defined on Cygwin:
15→SET(CMAKE_LEGACY_CYGWIN_WIN32 0)
16→
17→PROJECT(CFITSIO
18→ DESCRIPTION "Library of C and Fortran subroutines for reading and writing data files in FITS data format."
19→ LANGUAGES C CXX
20→ )
21→
22→set(CMAKE_INCLUDE_CURRENT_DIR ON)
23→set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)
24→
25→# Define project version
26→SET(${PROJECT_NAME}_SONAME 10)
27→SET(${PROJECT_NAME}_MAJOR 4)
28→SET(${PROJECT_NAME}_MINOR 6)
29→SET(${PROJECT_NAME}_MICRO 2)
30→SET(${PROJECT_NAME}_VERSION ${${PROJECT_NAME}_MAJOR}.${${PROJECT_NAME}_MINOR}.${${PROJECT_NAME}_MICRO})
31→SET(LIB_NAME cfitsio)
32→
33→# Allow @rpath token in target install name on Macs.
34→# See "cmake --help-policy CMP0042" for more information.
35→IF(POLICY CMP0042)
36→ CMAKE_POLICY(SET CMP0042 NEW)
37→ENDIF()
38→
39→INCLUDE(CheckLibraryExists)
40→INCLUDE(CheckFunctionExists)
41→INCLUDE(CheckSymbolExists)
42→INCLUDE(CheckCSourceCompiles)
43→INCLUDE(GNUInstallDirs)
44→
45→#==============================================================================
46→# Build options:
47→#==============================================================================
48→
49→# Allow the developer to select if Dynamic or Static libraries are built
50→OPTION(BUILD_SHARED_LIBS "Build Shared Libraries" ON)
51→
52→# Allow curl dependency to be disabled with "-DUSE_CURL=OFF":
53→OPTION(USE_CURL "USE_CURL" ON)
54→
55→OPTION(USE_PTHREADS "Thread-safe build (using pthreads)" OFF)
56→
57→OPTION(TESTS "Build test programs Testprog and cookbook" ON)
58→
59→OPTION(UTILS "Build helper programs [fpack, funpack, fitscopy, fitsverify, imcopy, smem, speed]" ON)
60→
61→OPTION(USE_SSE2 "Enable use of instructions in the SSE2 extended instruction set" OFF)
62→
63→OPTION(USE_SSSE3 "Enable use of instructions in the SSSE3 extended instruction set" OFF)
64→
65→OPTION(USE_BZIP2 "Enable bzip2 support" OFF)
66→
67→#==============================================================================
68→
69→FIND_PACKAGE(ZLIB REQUIRED)
70→
71→IF(BUILD_SHARED_LIBS)
72→ SET (LIB_TYPE SHARED)
73→ELSE()
74→ SET (LIB_TYPE STATIC)
75→ENDIF(BUILD_SHARED_LIBS)
76→
77→# Find curl library, for HTTPS support:
78→IF(USE_CURL)
79→ FIND_PACKAGE(CURL)
80→ IF(CURL_FOUND)
81→ ADD_DEFINITIONS(-DCFITSIO_HAVE_CURL)
82→ ENDIF()
83→ENDIF()
84→
85→IF(USE_PTHREADS)
86→ FIND_PACKAGE(Threads REQUIRED)
87→ ADD_DEFINITIONS(-D_REENTRANT)
88→ENDIF(USE_PTHREADS)
89→
90→IF(USE_BZIP2)
91→ FIND_PACKAGE(BZip2 REQUIRED)
92→ ADD_DEFINITIONS(-DHAVE_BZIP2=1)
93→ENDIF(USE_BZIP2)
94→
95→# Math library (not available in MSVC or MINGW)
96→IF(MSVC OR MINGW)
97→ SET(M_LIB "")
98→ELSE()
99→ FIND_LIBRARY(M_LIB m)
100→ENDIF()
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
263: # For cfitsio.pc.cmake:
270: # For cfitsio.pc.cmake:
339:# cfitsio.pc:
263: # For cfitsio.pc.cmake:
270: # For cfitsio.pc.cmake:
339:# cfitsio.pc:
340:configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cfitsio.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/cfitsio.pc @ONLY)
341:install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cfitsio.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
[Showing results with pagination = limit: 20, offset: 0]
lib64 instead of lib on the many Linux container. Let me fix the setup.py to explicitly set the library directory:lib64 instead of lib, but your setup.py was setting PKG_CONFIG_PATH to lib/pkgconfig. This meant CPL's configure script couldn't find the cfitsio pkg-config file.setup.py to explicitly set -DCMAKE_INSTALL_LIBDIR=lib for all CMake-based builds (cfitsio and both fftw builds). This ensures all libraries and their pkg-config files install to the lib directory consistently across platforms.python-publish.yml and the workflow name updated to "Publish Python Package". This should now match your PyPI trusted publishing configuration.completed failure Build Wheels Build Wheels master workflow_dispatch 19436352197 2m15s 2025-11-17T16:22:14Z
completed failure Build Wheels Build Wheels master workflow_dispatch 19436352197 2m15s 2025-11-17T16:22:14Z
[{"conclusion":"failure","createdAt":"2025-11-17T16:12:59Z","databaseId":19436352197,"event":"workflow_dispatch","headBranch":"master","name":"Build Wheels","status":"completed"}]
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:23:10.4189913Z -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:23:10.8880079Z -- Performing Test HAVE_FLOCK_T - Failed
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:23:10.9215266Z -- Performing Test HAVE_UNION_SEMUN - Failed
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:23:10.4189913Z -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:23:10.8880079Z -- Performing Test HAVE_FLOCK_T - Failed
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:23:10.9215266Z -- Performing Test HAVE_UNION_SEMUN - Failed
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:23:17.5184106Z -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:23:44.9132841Z -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:24:07.8482661Z configure: error: cfitsio (libraries) was not found on your system.
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:24:07.9019334Z subprocess.CalledProcessError: Command '['./configure', '--prefix=/project/build/temp.linux-x86_64-cpython-311/deps/install', '--disable-static', '--enable-shared']' returned non-zero exit status 1.
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:24:07.9273075Z error: subprocess-exited-with-error
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:24:07.9288052Z ERROR: Failed building wheel for pycpl
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:24:07.9293063Z Failed to build pycpl
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:24:07.9295781Z ERROR: Failed to build one or more wheels
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:24:08.6455181Z ##[error]Command ['python', '-m', 'pip', 'wheel', PurePosixPath('/project'), '--wheel-dir=/tmp/cibuildwheel/built_wheel', '--no-deps', '-v'] failed with code 1.
configure: error: cfitsio (libraries) was not found on your system.-DCMAKE_INSTALL_LIBDIR=lib to the cfitsio, fftw-double, and fftw-single CMake builds in setup.py.lib64 on the manylinux containerPKG_CONFIG_PATH to {install_dir}/lib/pkgconfiglib instead of lib64, which should resolve this. The changes you have locally (not yet pushed) should fix this failure.completed failure Publish Python Package Publish Python Package master workflow_dispatch 19436783330 2m47s 2025-11-17T16:27:04Z
completed failure Build Wheels Build Wheels master workflow_dispatch 19436352197 2m15s 2025-11-17T16:22:14Z
Build wheels on macos-14 Build wheels 2025-11-17T16:29:29.6651970Z /Users/runner/work/pycpl/pycpl/src/cplcore/property.hpp:158:17: error: 'visit<cpl::core::Property::value_to_cpl_type_visitor, std::variant<std::complex<double>, double, bool, std::string, long, std::complex<float>, long long, int, char, float> &, void>' is unavailable: introduced in macOS 10.13
Build wheels on macos-14 Build wheels 2025-11-17T16:29:29.7022620Z /Users/runner/work/pycpl/pycpl/src/cplcore/propertylist.hpp:321:36: error: 'path' is unavailable: introduced in macOS 10.15
Build wheels on macos-14 Build wheels 2025-11-17T16:29:29.7072880Z /Users/runner/work/pycpl/pycpl/src/cplcore/propertylist.hpp:417:42: error: 'path' is unavailable: introduced in macOS 10.15
Build wheels on macos-14 Build wheels 2025-11-17T16:29:29.6651970Z /Users/runner/work/pycpl/pycpl/src/cplcore/property.hpp:158:17: error: 'visit<cpl::core::Property::value_to_cpl_type_visitor, std::variant<std::complex<double>, double, bool, std::string, long, std::complex<float>, long long, int, char, float> &, void>' is unavailable: introduced in macOS 10.13
Build wheels on macos-14 Build wheels 2025-11-17T16:29:29.7022620Z /Users/runner/work/pycpl/pycpl/src/cplcore/propertylist.hpp:321:36: error: 'path' is unavailable: introduced in macOS 10.15
Build wheels on macos-14 Build wheels 2025-11-17T16:29:29.7072880Z /Users/runner/work/pycpl/pycpl/src/cplcore/propertylist.hpp:417:42: error: 'path' is unavailable: introduced in macOS 10.15
Build wheels on macos-14 Build wheels 2025-11-17T16:29:29.7076900Z /Users/runner/work/pycpl/pycpl/src/cplcore/propertylist.hpp:451:49: error: 'path' is unavailable: introduced in macOS 10.15
Build wheels on macos-14 Build wheels 2025-11-17T16:29:29.7080990Z /Users/runner/work/pycpl/pycpl/src/cplcore/vector.hpp:116:45: error: 'path' is unavailable: introduced in macOS 10.15
Build wheels on macos-14 Build wheels 2025-11-17T16:29:29.7084900Z /Users/runner/work/pycpl/pycpl/src/cplcore/vector.hpp:145:45: error: 'path' is unavailable: introduced in macOS 10.15
Build wheels on macos-14 Build wheels 2025-11-17T16:29:29.7088600Z /Users/runner/work/pycpl/pycpl/src/cplcore/vector.hpp:183:36: error: 'path' is unavailable: introduced in macOS 10.15
Build wheels on macos-14 Build wheels 2025-11-17T16:29:29.7091590Z /Users/runner/work/pycpl/pycpl/src/cplcore/bivector.hpp:111:47: error: 'path' is unavailable: introduced in macOS 10.15
Build wheels on macos-14 Build wheels 2025-11-17T16:29:29.7103640Z /Users/runner/work/pycpl/pycpl/src/cplcore/bivector.cpp:87:39: error: 'path' is unavailable: introduced in macOS 10.15
Build wheels on macos-14 Build wheels 2025-11-17T16:29:29.7126520Z /Users/runner/work/pycpl/pycpl/src/cplcore/bivector.cpp:90:60: error: 'c_str' is unavailable: introduced in macOS 10.15
Build wheels on macos-14 Build wheels 2025-11-17T16:29:29.7127030Z Error::throw_errors_with(cpl_bivector_read, filename.c_str()));
Build wheels on macos-14 Build wheels 2025-11-17T16:29:32.3051270Z subprocess.CalledProcessError: Command '['cmake', '--build', '.']' returned non-zero exit status 2.
Build wheels on macos-14 Build wheels 2025-11-17T16:29:32.3360390Z error: subprocess-exited-with-error
Build wheels on macos-14 Build wheels 2025-11-17T16:29:32.3375190Z ERROR: Failed building wheel for pycpl
Build wheels on macos-14 Build wheels 2025-11-17T16:29:32.3384200Z ERROR: Failed to build one or more wheels
X master Publish Python Package · 19436783330
Triggered via workflow_dispatch about 6 minutes ago
X master Publish Python Package · 19436783330
Triggered via workflow_dispatch about 6 minutes ago
JOBS
X Build wheels on macos-14 in 2m25s (ID 55609620389)
✓ Set up job
✓ Run actions/checkout@v4
✓ Set up Python
✓ Install cibuildwheel
X Build wheels
- Run actions/upload-artifact@v4
- Post Set up Python
✓ Post Run actions/checkout@v4
✓ Complete job
X Build wheels on macos-13 in 2m42s (ID 55609620394)
✓ Build source distribution in 19s (ID 55609620413)
X Build wheels on ubuntu-22.04 in 2m30s (ID 55609620415)
- upload_pypi in 0s (ID 55609907326)
ANNOTATIONS
X Process completed with exit code 1.
Build wheels on macos-14: .github#5717
X Command ['python', '-m', 'pip', 'wheel', '/Users/runner/work/pycpl/pycpl', '--wheel-dir=/private/var/folders/8s/1jkm89h96qjdtjr7q3bll2vh0000gn/T/cibw-run-adz8nd1y/cp311-macosx_x86_64/built_wheel', '--no-deps', '-v'] failed with code 1.
Build wheels on macos-14: .github#5714
X The strategy configuration was canceled because "build_wheels.macos-14" failed
Build wheels on macos-13: .github#1
X The operation was canceled.
Build wheels on macos-13: .github#2647
! libtool 2.5.4 is already installed and up-to-date.
To reinstall 2.5.4, run:
brew reinstall libtool
Build wheels on macos-13: .github#115
! autoconf 2.72 is already installed and up-to-date.
To reinstall 2.72, run:
brew reinstall autoconf
Build wheels on macos-13: .github#111
- The macOS-13 based runner images are being deprecated, consider switching to macOS-15 (macos-15-intel) or macOS 15 arm64 (macos-latest) instead. For more details see https://github.com/actions/runner-images/issues/13046
Build wheels on macos-13: .github#1
X The strategy configuration was canceled because "build_wheels.macos-14" failed
Build wheels on ubuntu-22.04: .github#1
X The operation was canceled.
Build wheels on ubuntu-22.04: .github#4345
X Command ['python', '-m', 'pip', 'wheel', PurePosixPath('/project'), '--wheel-dir=/tmp/cibuildwheel/built_wheel', '--no-deps', '-v'] failed with code 1.
Build wheels on ubuntu-22.04: .github#4342
ARTIFACTS
sdist
To see what failed, try: gh run view 19436783330 --log-failed
View this run on GitHub: https://github.com/ivh/pycpl/actions/runs/19436783330
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:27:17.5985640Z Error response from daemon: No such image: quay.io/pypa/manylinux2014_x86_64:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:28:06.6286018Z copying src/cplcore/error.cpp -> build/lib.linux-x86_64-cpython-311/cplcore
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:28:06.6289191Z copying src/cplcore/error.hpp -> build/lib.linux-x86_64-cpython-311/cplcore
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:27:17.5985640Z Error response from daemon: No such image: quay.io/pypa/manylinux2014_x86_64:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:28:06.6286018Z copying src/cplcore/error.cpp -> build/lib.linux-x86_64-cpython-311/cplcore
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:28:06.6289191Z copying src/cplcore/error.hpp -> build/lib.linux-x86_64-cpython-311/cplcore
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:28:06.6292921Z copying src/cplcore/error_bindings.cpp -> build/lib.linux-x86_64-cpython-311/cplcore
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:28:06.6297704Z copying src/cplcore/error_bindings.hpp -> build/lib.linux-x86_64-cpython-311/cplcore
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:28:06.6300188Z copying src/cplcore/errorframe.cpp -> build/lib.linux-x86_64-cpython-311/cplcore
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:28:06.6303641Z copying src/cplcore/errorframe.hpp -> build/lib.linux-x86_64-cpython-311/cplcore
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:01.4466180Z checking for dlerror... yes
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:01.6496552Z checking for error_t... yes
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:08.1713647Z checking for dlerror... yes
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:08.3036481Z checking for error_t... yes
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:15.4727129Z /bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I.. -DCX_LOG_DOMAIN=\"CplCore\" -I\../cpldrs -I../libcext/cext -I../libcext/cext -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include/wcslib -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include -DCPL_XMEMORY_MODE=0 -DCPL_XMEMORY_MAXPTRS=1 -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include/wcslib -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=500 -D_REENTRANT -g -O2 -std=c99 -fno-common -fopenmp -MT cpl_error.lo -MD -MP -MF .deps/cpl_error.Tpo -c -o cpl_error.lo cpl_error.c
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:15.4765052Z /bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I.. -DCX_LOG_DOMAIN=\"CplCore\" -I\../cpldrs -I../libcext/cext -I../libcext/cext -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include/wcslib -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include -DCPL_XMEMORY_MODE=0 -DCPL_XMEMORY_MAXPTRS=1 -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include/wcslib -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=500 -D_REENTRANT -g -O2 -std=c99 -fno-common -fopenmp -MT cpl_errorstate.lo -MD -MP -MF .deps/cpl_errorstate.Tpo -c -o cpl_errorstate.lo cpl_errorstate.c
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:15.5424530Z libtool: compile: gcc -DHAVE_CONFIG_H -I. -I.. -DCX_LOG_DOMAIN=\"CplCore\" -I../cpldrs -I../libcext/cext -I../libcext/cext -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include/wcslib -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include -DCPL_XMEMORY_MODE=0 -DCPL_XMEMORY_MAXPTRS=1 -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include/wcslib -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=500 -D_REENTRANT -g -O2 -std=c99 -fno-common -fopenmp -MT cpl_errorstate.lo -MD -MP -MF .deps/cpl_errorstate.Tpo -c cpl_errorstate.c -fPIC -DPIC -o .libs/cpl_errorstate.o
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:15.5440198Z libtool: compile: gcc -DHAVE_CONFIG_H -I. -I.. -DCX_LOG_DOMAIN=\"CplCore\" -I../cpldrs -I../libcext/cext -I../libcext/cext -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include/wcslib -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include -DCPL_XMEMORY_MODE=0 -DCPL_XMEMORY_MAXPTRS=1 -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include -I/project/build/temp.linux-x86_64-cpython-311/deps/install/include/wcslib -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=500 -D_REENTRANT -g -O2 -std=c99 -fno-common -fopenmp -MT cpl_error.lo -MD -MP -MF .deps/cpl_error.Tpo -c cpl_error.c -fPIC -DPIC -o .libs/cpl_error.o
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:15.6861830Z mv -f .deps/cpl_errorstate.Tpo .deps/cpl_errorstate.Plo
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:15.6985160Z mv -f .deps/cpl_error.Tpo .deps/cpl_error.Plo
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:29.2160326Z /bin/sh ../libtool --tag=CC --mode=link gcc -D_REENTRANT -g -O2 -std=c99 -fno-common -fopenmp -L/project/build/temp.linux-x86_64-cpython-311/deps/install/lib -L/project/build/temp.linux-x86_64-cpython-311/deps/install/lib -L/project/build/temp.linux-x86_64-cpython-311/deps/install/lib -version-info 29:2:3 -L/project/build/temp.linux-x86_64-cpython-311/deps/install/lib -Wl,-rpath,/project/build/temp.linux-x86_64-cpython-311/deps/install/lib -o libcplcore.la -rpath /project/build/temp.linux-x86_64-cpython-311/deps/install/lib cpl_array.lo cpl_bivector.lo cpl_error.lo cpl_errorstate.lo cpl_fits.lo cpl_io_fits.lo cpl_cfitsio.lo cpl_image_basic.lo cpl_image_bpm.lo cpl_image_filter.lo cpl_image_io.lo cpl_image_iqe.lo cpl_image_resample.lo cpl_image_stats.lo cpl_image_fft.lo cpl_imagelist_basic.lo cpl_imagelist_io.lo cpl_init.lo cpl_mask.lo cpl_matrix.lo cpl_memory.lo cpl_msg.lo cpl_plot.lo cpl_polynomial.lo cpl_property.lo cpl_propertylist.lo cpl_stats.lo cpl_table.lo cpl_test.lo cpl_tools.lo cpl_type.lo cpl_vector.lo cpl_version.lo cpl_xmemory.lo cpl_image_gen.lo cpl_column.lo cpl_mpfit.lo ../libcext/cext/libcext.la -lcfitsio -lfftw3 -lfftw3f -lm -lnsl
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:29.3157132Z libtool: link: gcc -shared -fPIC -DPIC .libs/cpl_array.o .libs/cpl_bivector.o .libs/cpl_error.o .libs/cpl_errorstate.o .libs/cpl_fits.o .libs/cpl_io_fits.o .libs/cpl_cfitsio.o .libs/cpl_image_basic.o .libs/cpl_image_bpm.o .libs/cpl_image_filter.o .libs/cpl_image_io.o .libs/cpl_image_iqe.o .libs/cpl_image_resample.o .libs/cpl_image_stats.o .libs/cpl_image_fft.o .libs/cpl_imagelist_basic.o .libs/cpl_imagelist_io.o .libs/cpl_init.o .libs/cpl_mask.o .libs/cpl_matrix.o .libs/cpl_memory.o .libs/cpl_msg.o .libs/cpl_plot.o .libs/cpl_polynomial.o .libs/cpl_property.o .libs/cpl_propertylist.o .libs/cpl_stats.o .libs/cpl_table.o .libs/cpl_test.o .libs/cpl_tools.o .libs/cpl_type.o .libs/cpl_vector.o .libs/cpl_version.o .libs/cpl_xmemory.o .libs/cpl_image_gen.o .libs/cpl_column.o .libs/cpl_mpfit.o -Wl,-rpath -Wl,/project/vendor/cpl-7.3.2/libcext/cext/.libs -Wl,-rpath -Wl,/project/build/temp.linux-x86_64-cpython-311/deps/install/lib -L/project/build/temp.linux-x86_64-cpython-311/deps/install/lib ../libcext/cext/.libs/libcext.so -lpthread -lcfitsio -lfftw3 -lfftw3f -lm -lnsl -g -O2 -fopenmp -Wl,-rpath -Wl,/project/build/temp.linux-x86_64-cpython-311/deps/install/lib -fopenmp -Wl,-soname -Wl,libcplcore.so.26 -o .libs/libcplcore.so.26.3.2
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:33.0961087Z libtool: install: (cd /project/vendor/cpl-7.3.2/cplcore; /bin/sh "/project/vendor/cpl-7.3.2/libtool" --tag CC --mode=relink gcc -D_REENTRANT -g -O2 -std=c99 -fno-common -fopenmp -L/project/build/temp.linux-x86_64-cpython-311/deps/install/lib -L/project/build/temp.linux-x86_64-cpython-311/deps/install/lib -L/project/build/temp.linux-x86_64-cpython-311/deps/install/lib -version-info 29:2:3 -L/project/build/temp.linux-x86_64-cpython-311/deps/install/lib -Wl,-rpath,/project/build/temp.linux-x86_64-cpython-311/deps/install/lib -o libcplcore.la -rpath /project/build/temp.linux-x86_64-cpython-311/deps/install/lib cpl_array.lo cpl_bivector.lo cpl_error.lo cpl_errorstate.lo cpl_fits.lo cpl_io_fits.lo cpl_cfitsio.lo cpl_image_basic.lo cpl_image_bpm.lo cpl_image_filter.lo cpl_image_io.lo cpl_image_iqe.lo cpl_image_resample.lo cpl_image_stats.lo cpl_image_fft.lo cpl_imagelist_basic.lo cpl_imagelist_io.lo cpl_init.lo cpl_mask.lo cpl_matrix.lo cpl_memory.lo cpl_msg.lo cpl_plot.lo cpl_polynomial.lo cpl_property.lo cpl_propertylist.lo cpl_stats.lo cpl_table.lo cpl_test.lo cpl_tools.lo cpl_type.lo cpl_vector.lo cpl_version.lo cpl_xmemory.lo cpl_image_gen.lo cpl_column.lo cpl_mpfit.lo ../libcext/cext/libcext.la -lcfitsio -lfftw3 -lfftw3f -lm -lnsl )
std::visit and std::filesystem::path) that require macOS 10.15, but cibuildwheel is targeting an older version for compatibility.'visit<...>' is unavailable: introduced in macOS 10.13 'path' is unavailable: introduced in macOS 10.15Build wheels on macos-14 Build wheels 2025-11-17T16:29:32.3050840Z raise CalledProcessError(retcode, process.args,
Build wheels on macos-14 Build wheels 2025-11-17T16:29:32.3051270Z subprocess.CalledProcessError: Command '['cmake', '--build', '.']' returned non-zero exit status 2.
std::visit (requires macOS 10.13) and std::filesystem::path (requires macOS 10.15), but cibuildwheel was targeting an older macOS version.MACOSX_DEPLOYMENT_TARGET = "10.15" in the macOS-specific cibuildwheel config in pyproject.toml:28.Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3658337Z subprocess.CalledProcessError: Command '['cmake', '/project', '-DCMAKE_BUILD_TYPE=Release', '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/project/build/lib.linux-x86_64-cpython-311/', '-DPython3_EXECUTABLE=/opt/python/cp311-cp311/bin/python', '-DPYCPL_VERSION=0.1.0', '-Dpybind11_DIR:PATH=/tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/pybind11/share/cmake/pybind11', '-DCPL_ROOT:PATH=/project/build/temp.linux-x86_64-cpython-311/deps/install']' returned non-zero exit status 1.
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3876426Z error: subprocess-exited-with-error
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3894133Z ERROR: Failed building wheel for pycpl
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3658337Z subprocess.CalledProcessError: Command '['cmake', '/project', '-DCMAKE_BUILD_TYPE=Release', '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/project/build/lib.linux-x86_64-cpython-311/', '-DPython3_EXECUTABLE=/opt/python/cp311-cp311/bin/python', '-DPYCPL_VERSION=0.1.0', '-Dpybind11_DIR:PATH=/tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/pybind11/share/cmake/pybind11', '-DCPL_ROOT:PATH=/project/build/temp.linux-x86_64-cpython-311/deps/install']' returned non-zero exit status 1.
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3876426Z error: subprocess-exited-with-error
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3894133Z ERROR: Failed building wheel for pycpl
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3903295Z ERROR: Failed to build one or more wheels
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3586313Z return run_commands(dist)
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3587993Z ^^^^^^^^^^^^^^^^^^
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3591519Z File "/tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/setuptools/_distutils/core.py", line 202, in run_commands
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3586313Z return run_commands(dist)
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3587993Z ^^^^^^^^^^^^^^^^^^
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3591519Z File "/tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/setuptools/_distutils/core.py", line 202, in run_commands
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3593200Z dist.run_commands()
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3596024Z File "/tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/setuptools/_distutils/dist.py", line 1002, in run_commands
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3599116Z self.run_command(cmd)
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3600157Z File "/tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/setuptools/dist.py", line 1102, in run_command
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3601687Z super().run_command(command)
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3605005Z File "/tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/setuptools/_distutils/dist.py", line 1021, in run_command
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3609089Z cmd_obj.run()
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3611272Z File "/tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/setuptools/command/bdist_wheel.py", line 370, in run
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3612292Z self.run_command("build")
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3616608Z File "/tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/setuptools/_distutils/cmd.py", line 357, in run_command
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3618377Z self.distribution.run_command(command)
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3619847Z File "/tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/setuptools/dist.py", line 1102, in run_command
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3621032Z super().run_command(command)
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3624000Z File "/tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/setuptools/_distutils/dist.py", line 1021, in run_command
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3626164Z cmd_obj.run()
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3627221Z File "/tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/setuptools/_distutils/command/build.py", line 135, in run
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3628972Z self.run_command(cmd_name)
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3632919Z File "/tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/setuptools/_distutils/cmd.py", line 357, in run_command
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3635961Z self.distribution.run_command(command)
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3636973Z File "/tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/setuptools/dist.py", line 1102, in run_command
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3639879Z super().run_command(command)
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3642327Z File "/tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/setuptools/_distutils/dist.py", line 1021, in run_command
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3645729Z cmd_obj.run()
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3646090Z File "<string>", line 56, in run
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3648320Z File "<string>", line 406, in build_extension
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3651843Z File "/opt/python/cp311-cp311/lib/python3.11/subprocess.py", line 571, in run
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3653382Z raise CalledProcessError(retcode, process.args,
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3658337Z subprocess.CalledProcessError: Command '['cmake', '/project', '-DCMAKE_BUILD_TYPE=Release', '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/project/build/lib.linux-x86_64-cpython-311/', '-DPython3_EXECUTABLE=/opt/python/cp311-cp311/bin/python', '-DPYCPL_VERSION=0.1.0', '-Dpybind11_DIR:PATH=/tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/pybind11/share/cmake/pybind11', '-DCPL_ROOT:PATH=/project/build/temp.linux-x86_64-cpython-311/deps/install']' returned non-zero exit status 1.
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3419917Z CMake Error at /tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/cmake/data/share/cmake-4.1/Modules/FindPackageHandleStandardArgs.cmake:227 (message):
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3419917Z CMake Error at /tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/cmake/data/share/cmake-4.1/Modules/FindPackageHandleStandardArgs.cmake:227 (message):
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3421421Z Could NOT find Python3 (missing: Python3_LIBRARIES Development
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3422068Z Development.Embed) (found version "3.11.10")
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3419917Z CMake Error at /tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/cmake/data/share/cmake-4.1/Modules/FindPackageHandleStandardArgs.cmake:227 (message):
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3421421Z Could NOT find Python3 (missing: Python3_LIBRARIES Development
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3422068Z Development.Embed) (found version "3.11.10")
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3423775Z Call Stack (most recent call first):
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3427274Z /tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/cmake/data/share/cmake-4.1/Modules/FindPackageHandleStandardArgs.cmake:591 (_FPHSA_FAILURE_MESSAGE)
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3429350Z /tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/cmake/data/share/cmake-4.1/Modules/FindPython/Support.cmake:4169 (find_package_handle_standard_args)
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3431362Z /tmp/pip-build-env-hfclr1wi/overlay/lib/python3.11/site-packages/cmake/data/share/cmake-4.1/Modules/FindPython3.cmake:656 (include)
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3432690Z CMakeLists.txt:48 (find_package)
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3434276Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3436266Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:29:35.3438842Z -- Configuring incomplete, errors occurred!
Could NOT find Python3 (missing: Python3_LIBRARIES Development Development.Embed)
python-devel before building:python-devel to the before-build packagesMACOSX_DEPLOYMENT_TARGET = "10.15"pyproject.toml. Ready to push and try again.completed failure Publish Python Package Publish Python Package master workflow_dispatch 19437115415 2m42s 2025-11-17T16:38:14Z
completed failure Publish Python Package Publish Python Package master workflow_dispatch 19436783330 2m47s 2025-11-17T16:27:04Z
completed failure Build Wheels Build Wheels master workflow_dispatch 19436352197 2m15s 2025-11-17T16:22:14Z
X master Publish Python Package · 19437115415
Triggered via workflow_dispatch about 4 minutes ago
X master Publish Python Package · 19437115415
Triggered via workflow_dispatch about 4 minutes ago
JOBS
X Build wheels on macos-13 in 2m39s (ID 55610795547)
* Build wheels on macos-14 in 0s (ID 55610795548)
X Build wheels on ubuntu-22.04 in 2m23s (ID 55610795549)
✓ Set up job
✓ Run actions/checkout@v4
✓ Set up Python
✓ Install cibuildwheel
X Build wheels
- Run actions/upload-artifact@v4
- Post Set up Python
✓ Post Run actions/checkout@v4
✓ Complete job
✓ Build source distribution in 19s (ID 55610795596)
- upload_pypi (ID 55611074418)
ANNOTATIONS
X The strategy configuration was canceled because "build_wheels.ubuntu-22_04" failed
Build wheels on macos-13: .github#1
X The operation was canceled.
Build wheels on macos-13: .github#2764
! libtool 2.5.4 is already installed and up-to-date.
To reinstall 2.5.4, run:
brew reinstall libtool
Build wheels on macos-13: .github#115
! autoconf 2.72 is already installed and up-to-date.
To reinstall 2.72, run:
brew reinstall autoconf
Build wheels on macos-13: .github#111
- The macOS-13 based runner images are being deprecated, consider switching to macOS-15 (macos-15-intel) or macOS 15 arm64 (macos-latest) instead. For more details see https://github.com/actions/runner-images/issues/13046
Build wheels on macos-13: .github#1
X The strategy configuration was canceled because "build_wheels.ubuntu-22_04" failed
Build wheels on macos-14: .github#1
X Process completed with exit code 1.
Build wheels on ubuntu-22.04: .github#4364
X Command ['python', '-m', 'pip', 'wheel', PurePosixPath('/project'), '--wheel-dir=/tmp/cibuildwheel/built_wheel', '--no-deps', '-v'] failed with code 1.
Build wheels on ubuntu-22.04: .github#4362
ARTIFACTS
sdist
To see what failed, try: gh run view 19437115415 --log-failed
View this run on GitHub: https://github.com/ivh/pycpl/actions/runs/19437115415
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:40:37.8391439Z CMake Error at /tmp/pip-build-env-gx89zerk/overlay/lib/python3.11/site-packages/cmake/data/share/cmake-4.1/Modules/FindPackageHandleStandardArgs.cmake:227 (message):
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:40:37.8393549Z Could NOT find Python3 (missing: Python3_LIBRARIES Development
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:40:37.8394174Z Development.Embed) (found version "3.11.10")
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:40:37.8391439Z CMake Error at /tmp/pip-build-env-gx89zerk/overlay/lib/python3.11/site-packages/cmake/data/share/cmake-4.1/Modules/FindPackageHandleStandardArgs.cmake:227 (message):
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:40:37.8393549Z Could NOT find Python3 (missing: Python3_LIBRARIES Development
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:40:37.8394174Z Development.Embed) (found version "3.11.10")
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:40:37.8399013Z Call Stack (most recent call first):
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:40:37.8400380Z /tmp/pip-build-env-gx89zerk/overlay/lib/python3.11/site-packages/cmake/data/share/cmake-4.1/Modules/FindPackageHandleStandardArgs.cmake:591 (_FPHSA_FAILURE_MESSAGE)
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:40:37.8403683Z /tmp/pip-build-env-gx89zerk/overlay/lib/python3.11/site-packages/cmake/data/share/cmake-4.1/Modules/FindPython/Support.cmake:4169 (find_package_handle_standard_args)
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:40:37.8407053Z /tmp/pip-build-env-gx89zerk/overlay/lib/python3.11/site-packages/cmake/data/share/cmake-4.1/Modules/FindPython3.cmake:656 (include)
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:40:37.8409779Z CMakeLists.txt:48 (find_package)
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:40:37.8410083Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:40:37.8410104Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:40:37.8410968Z -- Configuring incomplete, errors occurred!
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8790152Z before_build: yum install -y autoconf automake libtool python-devel[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8790518Z [38;5;244mbefore_test: [0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8790779Z [38;5;244mbuild_frontend: None[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8790152Z before_build: yum install -y autoconf automake libtool python-devel[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8790518Z [38;5;244mbefore_test: [0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8790779Z [38;5;244mbuild_frontend: None[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8791074Z build_verbosity: 1[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8791319Z [38;5;244mconfig_settings: [0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8791583Z [38;5;244mcontainer_engine: docker[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8791887Z [38;5;244mdependency_constraints: pinned[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8792133Z environment:
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8792362Z CMAKE_BUILD_PARALLEL_LEVEL="4"[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8792632Z [38;5;244mmanylinux_images:
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8792970Z [38;5;244m x86_64: quay.io/pypa/manylinux2014_x86_64:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8793368Z [38;5;244m i686: quay.io/pypa/manylinux2014_i686:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8793775Z [38;5;244m pypy_x86_64: quay.io/pypa/manylinux2014_x86_64:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8794211Z [38;5;244m aarch64: quay.io/pypa/manylinux2014_aarch64:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8794678Z [38;5;244m ppc64le: quay.io/pypa/manylinux2014_ppc64le:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8795072Z [38;5;244m s390x: quay.io/pypa/manylinux2014_s390x:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8795498Z [38;5;244m pypy_aarch64: quay.io/pypa/manylinux2014_aarch64:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8795933Z [38;5;244m pypy_i686: quay.io/pypa/manylinux2014_i686:2024.10.07-1[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8796268Z [38;5;244mmusllinux_images:
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8796587Z [38;5;244m x86_64: quay.io/pypa/musllinux_1_2_x86_64:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8796971Z [38;5;244m i686: quay.io/pypa/musllinux_1_2_i686:2024.10.07-1
--
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:51.0559891Z ##[group]Running before_build...
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:51.0560204Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:51.0564543Z + sh -c 'yum install -y autoconf automake libtool python-devel'
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:51.1845584Z Loaded plugins: ovl
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:58.7100117Z Package autoconf-2.69-11.el7.noarch already installed and latest version
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:58.7106926Z Package automake-1.13.4-3.el7.noarch already installed and latest version
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:58.8349616Z Resolving Dependencies
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:58.8354764Z --> Running transaction check
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8790152Z before_build: yum install -y autoconf automake libtool python-devel[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8790518Z [38;5;244mbefore_test: [0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8790779Z [38;5;244mbuild_frontend: None[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8790152Z before_build: yum install -y autoconf automake libtool python-devel[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8790518Z [38;5;244mbefore_test: [0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8790779Z [38;5;244mbuild_frontend: None[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8791074Z build_verbosity: 1[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8791319Z [38;5;244mconfig_settings: [0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8791583Z [38;5;244mcontainer_engine: docker[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8791887Z [38;5;244mdependency_constraints: pinned[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8792133Z environment:
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8792362Z CMAKE_BUILD_PARALLEL_LEVEL="4"[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8792632Z [38;5;244mmanylinux_images:
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8792970Z [38;5;244m x86_64: quay.io/pypa/manylinux2014_x86_64:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8793368Z [38;5;244m i686: quay.io/pypa/manylinux2014_i686:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8793775Z [38;5;244m pypy_x86_64: quay.io/pypa/manylinux2014_x86_64:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8794211Z [38;5;244m aarch64: quay.io/pypa/manylinux2014_aarch64:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8794678Z [38;5;244m ppc64le: quay.io/pypa/manylinux2014_ppc64le:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8795072Z [38;5;244m s390x: quay.io/pypa/manylinux2014_s390x:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8795498Z [38;5;244m pypy_aarch64: quay.io/pypa/manylinux2014_aarch64:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8795933Z [38;5;244m pypy_i686: quay.io/pypa/manylinux2014_i686:2024.10.07-1[0m
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8796268Z [38;5;244mmusllinux_images:
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8796587Z [38;5;244m x86_64: quay.io/pypa/musllinux_1_2_x86_64:2024.10.07-1
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:22.8796971Z [38;5;244m i686: quay.io/pypa/musllinux_1_2_i686:2024.10.07-1
--
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:51.0564543Z + sh -c 'yum install -y autoconf automake libtool python-devel'
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:51.1845584Z Loaded plugins: ovl
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:58.7100117Z Package autoconf-2.69-11.el7.noarch already installed and latest version
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:58.7106926Z Package automake-1.13.4-3.el7.noarch already installed and latest version
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:58.8349616Z Resolving Dependencies
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:58.8354764Z --> Running transaction check
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:58.8355607Z ---> Package libtool.x86_64 0:2.4.2-22.el7_3 will be installed
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:58.8392722Z --> Processing Dependency: gcc = 4.8.5 for package: libtool-2.4.2-22.el7_3.x86_64
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:50.3952982Z 'cp311-cp311' already installed at '/opt/python/cp311-cp311'
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:50.4442085Z 'cp312-cp312' already installed at '/opt/python/cp312-cp312'
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:50.4931867Z 'cp313-cp313' already installed at '/opt/python/cp313-cp313'
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:50.3952982Z 'cp311-cp311' already installed at '/opt/python/cp311-cp311'
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:50.4442085Z 'cp312-cp312' already installed at '/opt/python/cp312-cp312'
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:38:50.4931867Z 'cp313-cp313' already installed at '/opt/python/cp313-cp313'
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:39:00.0707949Z Installing : python-srpm-macros-3-34.el7.noarch 1/7
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:39:00.5355567Z Installing : python-rpm-macros-3-34.el7.noarch 2/7
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:39:01.5266499Z Installing : python2-rpm-macros-3-34.el7.noarch 5/7
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:39:01.5743590Z Installing : python-devel-2.7.5-94.el7_9.x86_64 6/7
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:39:33.4380151Z -- Installing: /project/build/temp.linux-x86_64-cpython-311/deps/install/lib/libcfitsio.so.4.6.2
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:39:33.4426120Z -- Installing: /project/build/temp.linux-x86_64-cpython-311/deps/install/lib/libcfitsio.so.10
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:39:33.4429696Z -- Installing: /project/build/temp.linux-x86_64-cpython-311/deps/install/lib/libcfitsio.so
/Users/tom/pipes/pycpl.git/CMakeLists.txt
1→# This file is part of PyCPL the ESO CPL Python language bindings
2→# Copyright (C) 2020-2024 European Southern Observatory
3→#
4→# This program is free software: you can redistribute it and/or modify
5→# it under the terms of the GNU General Public License as published by
6→# the Free Software Foundation, either version 3 of the License, or
7→# (at your option) any later version.
8→#
9→# This program is distributed in the hope that it will be useful,
10→# but WITHOUT ANY WARRANTY; without even the implied warranty of
... (content hidden) ...
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
1→# This file is part of PyCPL the ESO CPL Python language bindings
2→# Copyright (C) 2020-2024 European Southern Observatory
3→#
4→# This program is free software: you can redistribute it and/or modify
5→# it under the terms of the GNU General Public License as published by
6→# the Free Software Foundation, either version 3 of the License, or
7→# (at your option) any later version.
8→#
9→# This program is distributed in the hope that it will be useful,
10→# but WITHOUT ANY WARRANTY; without even the implied warranty of
11→# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12→# GNU General Public License for more details.
13→#
14→# You should have received a copy of the GNU General Public License
15→# along with this program. If not, see <http://www.gnu.org/licenses/>.
16→
17→cmake_minimum_required(VERSION 3.12)
18→project(cpl)
19→
20→# Set policies
21→cmake_policy(VERSION 3.12)
22→# Safer library linking
23→cmake_policy(SET CMP0003 NEW)
24→# Automatically escape preprocessor definitions
25→cmake_policy(SET CMP0005 NEW)
26→# Make syntax problems errors
27→cmake_policy(SET CMP0010 NEW)
28→# Input directories must have CMakeLists.txt
29→cmake_policy(SET CMP0014 NEW)
30→# Do not interpret quoted or bracketed variables in if statments
31→cmake_policy(SET CMP0054 NEW)
32→# Usage of <PackageName>_ROOT variables
33→cmake_policy(SET CMP0074 NEW)
34→# Escape RPATH entries in intermediate scripts
35→cmake_policy(SET CMP0095 NEW)
36→# Deprecated FindPythonInterp and FindPythonLibs
37→# CMP0148 is only defined in cmake 3.27+
38→if(POLICY CMP0148)
39→ cmake_policy(SET CMP0148 NEW)
40→endif()
41→
42→
43→# Add local cmake module search path
44→list(INSERT CMAKE_MODULE_PATH 0 "${PROJECT_SOURCE_DIR}/cmake")
45→
46→find_package(PkgConfig)
47→find_package(CPL "7.2" REQUIRED COMPONENTS cplcore cplui cpldfs cpldrs)
48→find_package(Python3 REQUIRED COMPONENTS Interpreter Development)
49→find_package(pybind11 REQUIRED)
50→
51→if(NOT DEFINED PYCPL_RECIPE_DIR)
52→ if(DEFINED ENV{PYCPL_RECIPE_DIR})
53→ set(PYCPL_RECIPE_DIR $ENV{PYCPL_RECIPE_DIR})
54→ else()
55→ get_filename_component(PYCPL_RECIPE_DIR "${CPL_CPLCORE_LIBRARY}" DIRECTORY)
56→ string(APPEND PYCPL_RECIPE_DIR "/esopipes-plugins")
57→ endif()
58→endif()
59→message(STATUS "Builtin default recipe directory is ${PYCPL_RECIPE_DIR}")
60→
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
Development component, which requires libpython.so. For building extension modules, we should use Development.Module instead, which doesn't need the full Python library:libpython.so), which aren't needed for building extension modules.Development to Development.Module (for extension modules, doesn't need libpython)python-devel (was installing Python 2.7 headers, not helpful)Development.Module is specifically designed for building Python extension modules in environments like manylinux where you don't have or need the full Python shared library.Build wheels on macos-13 Build wheels 2025-11-17T16:38:45.3464850Z copying src/cplcore/error.cpp -> build/lib.macosx-10.9-x86_64-cpython-311/cplcore
Build wheels on macos-13 Build wheels 2025-11-17T16:38:45.3469110Z copying src/cplcore/error.hpp -> build/lib.macosx-10.9-x86_64-cpython-311/cplcore
Build wheels on macos-13 Build wheels 2025-11-17T16:38:45.3473820Z copying src/cplcore/error_bindings.cpp -> build/lib.macosx-10.9-x86_64-cpython-311/cplcore
Build wheels on macos-13 Build wheels 2025-11-17T16:38:45.3464850Z copying src/cplcore/error.cpp -> build/lib.macosx-10.9-x86_64-cpython-311/cplcore
Build wheels on macos-13 Build wheels 2025-11-17T16:38:45.3469110Z copying src/cplcore/error.hpp -> build/lib.macosx-10.9-x86_64-cpython-311/cplcore
Build wheels on macos-13 Build wheels 2025-11-17T16:38:45.3473820Z copying src/cplcore/error_bindings.cpp -> build/lib.macosx-10.9-x86_64-cpython-311/cplcore
Build wheels on macos-13 Build wheels 2025-11-17T16:38:45.3480100Z copying src/cplcore/error_bindings.hpp -> build/lib.macosx-10.9-x86_64-cpython-311/cplcore
Build wheels on macos-13 Build wheels 2025-11-17T16:38:45.3484640Z copying src/cplcore/errorframe.cpp -> build/lib.macosx-10.9-x86_64-cpython-311/cplcore
Build wheels on macos-13 Build wheels 2025-11-17T16:38:45.3489410Z copying src/cplcore/errorframe.hpp -> build/lib.macosx-10.9-x86_64-cpython-311/cplcore
Build wheels on macos-13 Build wheels 2025-11-17T16:40:42.8851850Z checking for dlerror... yes
Build wheels on macos-13 Build wheels 2025-11-17T16:40:44.0164720Z checking for error_t... no
Build wheels on macos-13 Build wheels 2025-11-17T16:40:53.2245240Z ##[error]The operation was canceled.
Build wheels on macos-14 Build wheels 2025-11-17T16:29:29.6651970Z /Users/runner/work/pycpl/pycpl/src/cplcore/property.hpp:158:17: error: 'visit<cpl::core::Property::value_to_cpl_type_visitor, std::variant<std::complex<double>, double, bool, std::string, long, std::complex<float>, long long, int, char, float> &, void>' is unavailable: introduced in macOS 10.13
1→[project]
2→name = "pycpl"
3→version = "0.1.0"
4→description = "PyCPL, with CPL and dependencies included"
5→readme = "README.md"
6→requires-python = ">=3.11"
7→dependencies = [
8→ "numpy>=2.3.5",
9→ "pybind11>=3.0.1",
10→ "setuptools>=80.9.0",
... (content hidden) ...
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
1→[project]
2→name = "pycpl"
3→version = "0.1.0"
4→description = "PyCPL, with CPL and dependencies included"
5→readme = "README.md"
6→requires-python = ">=3.11"
7→dependencies = [
8→ "numpy>=2.3.5",
9→ "pybind11>=3.0.1",
10→ "setuptools>=80.9.0",
11→]
12→[build-system]
13→requires = ["setuptools>=70", "wheel", "pybind11", "cmake"]
14→build-backend = "setuptools.build_meta"
15→
16→[tool.cibuildwheel]
17→build = ["cp311-*", "cp312-*", "cp313-*"]
18→skip = ["*-musllinux_*", "*-win32", "*-manylinux_i686"]
19→build-verbosity = 1
20→
21→[tool.cibuildwheel.linux]
22→archs = ["x86_64"]
23→before-build = "yum install -y autoconf automake libtool"
24→
25→[tool.cibuildwheel.macos]
26→archs = ["x86_64", "arm64"]
27→before-build = "brew install autoconf automake libtool"
28→environment = { MACOSX_DEPLOYMENT_TARGET = "10.15" }
29→
30→[tool.cibuildwheel.environment]
31→CMAKE_BUILD_PARALLEL_LEVEL = "4"
32→
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
MACOSX_DEPLOYMENT_TARGET = "10.15" in pyproject.toml:28 to fix the C++17 errors (std::visit and std::filesystem::path).Development.Module), the next run should:completed failure Publish Python Package Publish Python Package master workflow_dispatch 19437372489 3m55s 2025-11-17T16:46:47Z
completed failure Publish Python Package Publish Python Package master workflow_dispatch 19437115415 2m42s 2025-11-17T16:38:14Z
X master Publish Python Package · 19437372489
Triggered via workflow_dispatch about 5 minutes ago
X master Publish Python Package · 19437372489
Triggered via workflow_dispatch about 5 minutes ago
JOBS
X Build wheels on macos-13 in 3m45s (ID 55611679837)
X Build wheels on ubuntu-22.04 in 3m33s (ID 55611679852)
✓ Set up job
✓ Run actions/checkout@v4
✓ Set up Python
✓ Install cibuildwheel
X Build wheels
- Run actions/upload-artifact@v4
- Post Set up Python
✓ Post Run actions/checkout@v4
✓ Complete job
✓ Build source distribution in 18s (ID 55611679856)
X Build wheels on macos-14 in 3m51s (ID 55611679895)
- upload_pypi in 0s (ID 55612075929)
ANNOTATIONS
X The strategy configuration was canceled because "build_wheels.ubuntu-22_04" failed
Build wheels on macos-13: .github#1
X The operation was canceled.
Build wheels on macos-13: .github#5102
X Command ['python', '-m', 'pip', 'wheel', '/Users/runner/work/pycpl/pycpl', '--wheel-dir=/private/var/folders/vk/nx37ffx50hv5djclhltc26vw0000gn/T/cibw-run-dublmy5u/cp311-macosx_x86_64/built_wheel', '--no-deps', '-v'] failed with code 1.
Build wheels on macos-13: .github#5099
! libtool 2.5.4 is already installed and up-to-date.
To reinstall 2.5.4, run:
brew reinstall libtool
Build wheels on macos-13: .github#115
! autoconf 2.72 is already installed and up-to-date.
To reinstall 2.72, run:
brew reinstall autoconf
Build wheels on macos-13: .github#111
- The macOS-13 based runner images are being deprecated, consider switching to macOS-15 (macos-15-intel) or macOS 15 arm64 (macos-latest) instead. For more details see https://github.com/actions/runner-images/issues/13046
Build wheels on macos-13: .github#1
X Process completed with exit code 1.
Build wheels on ubuntu-22.04: .github#4904
X Command ['sh', '-c', 'auditwheel repair -w /tmp/cibuildwheel/repaired_wheel /tmp/cibuildwheel/built_wheel/pycpl-0.1.0-cp311-cp311-linux_x86_64.whl'] failed with code 1.
Build wheels on ubuntu-22.04: .github#4900
X The strategy configuration was canceled because "build_wheels.ubuntu-22_04" failed
Build wheels on macos-14: .github#1
X The operation was canceled.
Build wheels on macos-14: .github#5646
ARTIFACTS
sdist
To see what failed, try: gh run view 19437372489 --log-failed
View this run on GitHub: https://github.com/ivh/pycpl/actions/runs/19437372489
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:14.0049940Z + mkdir -p /tmp/cibuildwheel/repaired_wheel
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:14.0070939Z ##[endgroup]
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:14.0071544Z [32m✓ [0m162.93s
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:14.0049940Z + mkdir -p /tmp/cibuildwheel/repaired_wheel
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:14.0070939Z ##[endgroup]
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:14.0071544Z [32m✓ [0m162.93s
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:14.0072276Z ##[group]Repairing wheel...
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:14.0072530Z
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:14.0073210Z + sh -c 'auditwheel repair -w /tmp/cibuildwheel/repaired_wheel /tmp/cibuildwheel/built_wheel/pycpl-0.1.0-cp311-cp311-linux_x86_64.whl'
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:14.4726546Z INFO:auditwheel.main_repair:Repairing pycpl-0.1.0-cp311-cp311-linux_x86_64.whl
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:21.4602620Z Traceback (most recent call last):
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:21.4614645Z File "/usr/local/bin/auditwheel", line 8, in <module>
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:21.4615569Z sys.exit(main())
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:21.4616060Z ^^^^^^
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:21.4617429Z File "/opt/_internal/pipx/venvs/auditwheel/lib/python3.12/site-packages/auditwheel/main.py", line 54, in main
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:21.4618888Z rval = args.func(args, p)
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:21.4619452Z ^^^^^^^^^^^^^^^^^^
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:21.4620691Z File "/opt/_internal/pipx/venvs/auditwheel/lib/python3.12/site-packages/auditwheel/main_repair.py", line 173, in execute
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:21.4621463Z out_wheel = repair_wheel(
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:21.4622077Z ^^^^^^^^^^^^^
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:21.4622836Z File "/opt/_internal/pipx/venvs/auditwheel/lib/python3.12/site-packages/auditwheel/repair.py", line 76, in repair_wheel
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:21.4623568Z raise ValueError(
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:21.4624119Z ValueError: Cannot repair wheel, because required library "libfftw3.so.3.6.9" could not be located
Build wheels on ubuntu-22.04 Build wheels 2025-11-17T16:50:21.8396558Z ##[error]Command ['sh', '-c', 'auditwheel repair -w /tmp/cibuildwheel/repaired_wheel /tmp/cibuildwheel/built_wheel/pycpl-0.1.0-cp311-cp311-linux_x86_64.whl'] failed with code 1.
auditwheel failed:ValueError: Cannot repair wheel, because required library "libfftw3.so.3.6.9" could not be located
_copy_vendored_libraries in setup.py), we can skip auditwheel's repair:Build wheels on macos-13 Build wheels 2025-11-17T16:50:32.3647730Z subprocess.CalledProcessError: Command '['make', '-j4']' returned non-zero exit status 2.
Build wheels on macos-13 Build wheels 2025-11-17T16:50:32.3976640Z error: subprocess-exited-with-error
Build wheels on macos-13 Build wheels 2025-11-17T16:50:32.3643890Z File "<string>", line 52, in run
Build wheels on macos-13 Build wheels 2025-11-17T16:50:32.3644410Z File "<string>", line 102, in build_dependencies
Build wheels on macos-13 Build wheels 2025-11-17T16:50:32.3644950Z File "<string>", line 285, in _build_cpl
Build wheels on macos-13 Build wheels 2025-11-17T16:50:32.3643890Z File "<string>", line 52, in run
Build wheels on macos-13 Build wheels 2025-11-17T16:50:32.3644410Z File "<string>", line 102, in build_dependencies
Build wheels on macos-13 Build wheels 2025-11-17T16:50:32.3644950Z File "<string>", line 285, in _build_cpl
Build wheels on macos-13 Build wheels 2025-11-17T16:50:32.3645860Z File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/subprocess.py", line 571, in run
Build wheels on macos-13 Build wheels 2025-11-17T16:50:32.3646910Z raise CalledProcessError(retcode, process.args,
Build wheels on macos-13 Build wheels 2025-11-17T16:50:32.3647730Z subprocess.CalledProcessError: Command '['make', '-j4']' returned non-zero exit status 2.
Build wheels on macos-13 Build wheels 2025-11-17T16:47:00.4542410Z before_build: brew install autoconf automake libtool[0m
Build wheels on macos-13 Build wheels 2025-11-17T16:49:11.0255680Z ld: warning: -single_module is obsolete
Build wheels on macos-13 Build wheels 2025-11-17T16:49:16.0586170Z checking for -single_module linker flag... ld: warning: -single_module is obsolete
Build wheels on macos-13 Build wheels 2025-11-17T16:47:00.4542410Z before_build: brew install autoconf automake libtool[0m
Build wheels on macos-13 Build wheels 2025-11-17T16:49:11.0255680Z ld: warning: -single_module is obsolete
Build wheels on macos-13 Build wheels 2025-11-17T16:49:16.0586170Z checking for -single_module linker flag... ld: warning: -single_module is obsolete
Build wheels on macos-13 Build wheels 2025-11-17T16:49:16.2447120Z checking for -exported_symbols_list linker flag... yes
Build wheels on macos-13 Build wheels 2025-11-17T16:49:19.2688100Z checking for _ prefix in compiled symbols... yes
Build wheels on macos-13 Build wheels 2025-11-17T16:49:41.8504740Z checking for -single_module linker flag... ld: warning: -single_module is obsolete
Build wheels on macos-13 Build wheels 2025-11-17T16:49:42.1191150Z checking for -exported_symbols_list linker flag... yes
Build wheels on macos-13 Build wheels 2025-11-17T16:49:45.6407820Z checking for _ prefix in compiled symbols... yes
Build wheels on macos-13 Build wheels 2025-11-17T16:49:54.3457970Z checking for -single_module linker flag... ld: warning: -single_module is obsolete
Build wheels on macos-13 Build wheels 2025-11-17T16:49:54.5336710Z checking for -exported_symbols_list linker flag... yes
Build wheels on macos-13 Build wheels 2025-11-17T16:50:13.3410240Z libtool: link: gcc -dynamiclib -Wl,-undefined -Wl,dynamic_lookup -o .libs/libcext.0.dylib .libs/cxfileutils.o .libs/cxlist.o .libs/cxmap.o .libs/cxmemory.o .libs/cxmessages.o .libs/cxmultimap.o .libs/cxslist.o .libs/cxstring.o .libs/cxstrutils.o .libs/cxtree.o .libs/cxutils.o .libs/cxdeque.o -L/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib -lpthread -g -O2 -Wl,-rpath -Wl,/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib -install_name /Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib/libcext.0.dylib -compatibility_version 3 -current_version 3.4
Build wheels on macos-13 Build wheels 2025-11-17T16:50:27.0706190Z libtool: link: gcc -dynamiclib -Wl,-undefined -Wl,dynamic_lookup -o .libs/libcplcore.26.dylib .libs/cpl_array.o .libs/cpl_bivector.o .libs/cpl_error.o .libs/cpl_errorstate.o .libs/cpl_fits.o .libs/cpl_io_fits.o .libs/cpl_cfitsio.o .libs/cpl_image_basic.o .libs/cpl_image_bpm.o .libs/cpl_image_filter.o .libs/cpl_image_io.o .libs/cpl_image_iqe.o .libs/cpl_image_resample.o .libs/cpl_image_stats.o .libs/cpl_image_fft.o .libs/cpl_imagelist_basic.o .libs/cpl_imagelist_io.o .libs/cpl_init.o .libs/cpl_mask.o .libs/cpl_matrix.o .libs/cpl_memory.o .libs/cpl_msg.o .libs/cpl_plot.o .libs/cpl_polynomial.o .libs/cpl_property.o .libs/cpl_propertylist.o .libs/cpl_stats.o .libs/cpl_table.o .libs/cpl_test.o .libs/cpl_tools.o .libs/cpl_type.o .libs/cpl_vector.o .libs/cpl_version.o .libs/cpl_xmemory.o .libs/cpl_image_gen.o .libs/cpl_column.o .libs/cpl_mpfit.o -L/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib ../libcext/cext/.libs/libcext.dylib -lcfitsio -lfftw3 -lfftw3f -lm -lpthread -g -O2 -Wl,-rpath -Wl,/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib -install_name /Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib/libcplcore.26.dylib -compatibility_version 30 -current_version 30.2
Build wheels on macos-13 Build wheels 2025-11-17T16:50:29.3152810Z libtool: link: gcc -dynamiclib -Wl,-undefined -Wl,dynamic_lookup -o .libs/libcplui.26.dylib .libs/cpl_frame.o .libs/cpl_frameset.o .libs/cpl_frameset_io.o .libs/cpl_parameter.o .libs/cpl_parameterlist.o .libs/cpl_plugin.o .libs/cpl_recipedefine.o .libs/cpl_pluginlist.o .libs/cpl_recipeconfig.o .libs/cpl_framedata.o -L/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib ../cplcore/.libs/libcplcore.dylib /Users/runner/work/pycpl/pycpl/vendor/cpl-7.3.2/libcext/cext/.libs/libcext.dylib -lfftw3 -lfftw3f -lcfitsio ../libcext/cext/.libs/libcext.dylib -lm -lpthread -g -O2 -Wl,-rpath -Wl,/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib -Wl,-dylib_file -Wl,/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib/libcext.0.dylib:/Users/runner/work/pycpl/pycpl/vendor/cpl-7.3.2/libcext/cext/.libs/libcext.dylib -install_name /Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib/libcplui.26.dylib -compatibility_version 30 -current_version 30.2
Build wheels on macos-13 Build wheels 2025-11-17T16:50:29.3695690Z ld: warning: -dylib_file is deprecated. Use -F or -L to control where indirect dylibs are found
Build wheels on macos-13 Build wheels 2025-11-17T16:50:30.7880740Z libtool: link: gcc -dynamiclib -Wl,-undefined -Wl,dynamic_lookup -o .libs/libcpldrs.26.dylib .libs/cpl_apertures.o .libs/cpl_detector.o .libs/cpl_geom_img.o .libs/cpl_photom.o .libs/cpl_fit.o .libs/cpl_ppm.o .libs/cpl_wcs.o .libs/cpl_wlcalib.o .libs/cpl_fft.o -L/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib ../cplcore/.libs/libcplcore.dylib /Users/runner/work/pycpl/pycpl/vendor/cpl-7.3.2/libcext/cext/.libs/libcext.dylib -lcfitsio -lwcs ../libcext/cext/.libs/libcext.dylib -lfftw3 -lfftw3f -lm -lpthread -g -O2 -Wl,-rpath -Wl,/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib -Wl,-dylib_file -Wl,/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib/libcext.0.dylib:/Users/runner/work/pycpl/pycpl/vendor/cpl-7.3.2/libcext/cext/.libs/libcext.dylib -install_name /Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib/libcpldrs.26.dylib -compatibility_version 30 -current_version 30.2
Build wheels on macos-13 Build wheels 2025-11-17T16:50:31.9661950Z make[3]: *** No rule to make target `-lltdl', needed by `libcplgasgano.la'. Stop.
Build wheels on macos-13 Build wheels 2025-11-17T16:50:32.3506190Z make[2]: *** [all-recursive] Error 1
Build wheels on macos-13 Build wheels 2025-11-17T16:50:32.3512490Z make[1]: *** [all-recursive] Error 1
make[3]: *** No rule to make target `-lltdl', needed by `libcplgasgano.la'. Stop.
ltdl. We should disable Java support since it's not needed: 274→ if not (src_dir / "configure").exists():
275→ print(">>> Regenerating autotools files for CPL...")
276→ subprocess.run(["autoreconf", "-i"], cwd=src_dir, env=env, check=True)
277→
278→ subprocess.run([
279→ "./configure",
280→ f"--prefix={install_dir}",
281→ "--disable-static",
282→ "--enable-shared",
283→ ], cwd=src_dir, env=env, check=True)
284→
285→ subprocess.run(["make", f"-j{njobs}"], cwd=src_dir, check=True)
286→ subprocess.run(["make", "install"], cwd=src_dir, check=True)
287→ # Clean up build artifacts
288→ subprocess.run(["make", "distclean"], cwd=src_dir, check=False)
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
Development.Module (doesn't need libpython.so)lib not lib64 with -DCMAKE_INSTALL_LIBDIR=librepair-wheel-command)MACOSX_DEPLOYMENT_TARGET = "10.15" for C++17--disable-java to CPL configure (avoids ltdl dependency)completed failure Publish Python Package Publish Python Package master workflow_dispatch 19437607739 5m29s 2025-11-17T16:54:55Z
X master Publish Python Package · 19437607739
Triggered via workflow_dispatch about 7 minutes ago
X master Publish Python Package · 19437607739
Triggered via workflow_dispatch about 7 minutes ago
JOBS
✓ Build source distribution in 20s (ID 55612511482)
X Build wheels on macos-13 in 5m25s (ID 55612511507)
X Build wheels on ubuntu-22.04 in 5m24s (ID 55612511511)
X Build wheels on macos-14 in 5m7s (ID 55612511523)
✓ Set up job
✓ Run actions/checkout@v4
✓ Set up Python
✓ Install cibuildwheel
X Build wheels
- Run actions/upload-artifact@v4
- Post Set up Python
✓ Post Run actions/checkout@v4
✓ Complete job
- upload_pypi in 0s (ID 55613088899)
ANNOTATIONS
X The strategy configuration was canceled because "build_wheels.macos-14" failed
Build wheels on macos-13: .github#1
X The operation was canceled.
Build wheels on macos-13: .github#3139
! libtool 2.5.4 is already installed and up-to-date.
To reinstall 2.5.4, run:
brew reinstall libtool
Build wheels on macos-13: .github#115
! autoconf 2.72 is already installed and up-to-date.
To reinstall 2.72, run:
brew reinstall autoconf
Build wheels on macos-13: .github#111
- The macOS-13 based runner images are being deprecated, consider switching to macOS-15 (macos-15-intel) or macOS 15 arm64 (macos-latest) instead. For more details see https://github.com/actions/runner-images/issues/13046
Build wheels on macos-13: .github#1
X The strategy configuration was canceled because "build_wheels.macos-14" failed
Build wheels on ubuntu-22.04: .github#1
X The operation was canceled.
Build wheels on ubuntu-22.04: .github#9009
X Process completed with exit code 1.
Build wheels on macos-14: .github#6207
X Command delocate-wheel --require-archs x86_64 -w /private/var/folders/8s/1jkm89h96qjdtjr7q3bll2vh0000gn/T/cibw-run-a37eo68b/cp311-macosx_x86_64/repaired_wheel -v /private/var/folders/8s/1jkm89h96qjdtjr7q3bll2vh0000gn/T/cibw-run-a37eo68b/cp311-macosx_x86_64/built_wheel/pycpl-0.1.0-cp311-cp311-macosx_11_0_x86_64.whl failed with code 1.
Build wheels on macos-14: .github#6203
ARTIFACTS
sdist
To see what failed, try: gh run view 19437607739 --log-failed
View this run on GitHub: https://github.com/ivh/pycpl/actions/runs/19437607739
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0278480Z Traceback (most recent call last):
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0280070Z Fixing: /private/var/folders/8s/1jkm89h96qjdtjr7q3bll2vh0000gn/T/cibw-run-a37eo68b/cp311-macosx_x86_64/built_wheel/pycpl-0.1.0-cp311-cp311-macosx_11_0_x86_64.whl
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0293220Z File "/private/var/folders/8s/1jkm89h96qjdtjr7q3bll2vh0000gn/T/cibw-run-a37eo68b/cp311-macosx_x86_64/build/venv/bin/delocate-wheel", line 8, in <module>
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0278480Z Traceback (most recent call last):
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0280070Z Fixing: /private/var/folders/8s/1jkm89h96qjdtjr7q3bll2vh0000gn/T/cibw-run-a37eo68b/cp311-macosx_x86_64/built_wheel/pycpl-0.1.0-cp311-cp311-macosx_11_0_x86_64.whl
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0293220Z File "/private/var/folders/8s/1jkm89h96qjdtjr7q3bll2vh0000gn/T/cibw-run-a37eo68b/cp311-macosx_x86_64/build/venv/bin/delocate-wheel", line 8, in <module>
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0294220Z sys.exit(main())
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0294360Z ^^^^^^
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0294990Z File "/private/var/folders/8s/1jkm89h96qjdtjr7q3bll2vh0000gn/T/cibw-run-a37eo68b/cp311-macosx_x86_64/build/venv/lib/python3.11/site-packages/delocate/cmd/delocate_wheel.py", line 116, in main
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0295640Z copied = delocate_wheel(
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0295810Z ^^^^^^^^^^^^^^^
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0296460Z File "/private/var/folders/8s/1jkm89h96qjdtjr7q3bll2vh0000gn/T/cibw-run-a37eo68b/cp311-macosx_x86_64/build/venv/lib/python3.11/site-packages/delocate/delocating.py", line 1057, in delocate_wheel
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0306800Z copied_libs = delocate_path(
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0307410Z ^^^^^^^^^^^^^^
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0309520Z File "/private/var/folders/8s/1jkm89h96qjdtjr7q3bll2vh0000gn/T/cibw-run-a37eo68b/cp311-macosx_x86_64/build/venv/lib/python3.11/site-packages/delocate/delocating.py", line 511, in delocate_path
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0311360Z lib_dict = tree_libs_from_directory(
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0311930Z ^^^^^^^^^^^^^^^^^^^^^^^^^
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0313970Z File "/private/var/folders/8s/1jkm89h96qjdtjr7q3bll2vh0000gn/T/cibw-run-a37eo68b/cp311-macosx_x86_64/build/venv/lib/python3.11/site-packages/delocate/libsana.py", line 377, in tree_libs_from_directory
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0315930Z return _tree_libs_from_libraries(
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0316500Z ^^^^^^^^^^^^^^^^^^^^^^^^^^
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0318550Z File "/private/var/folders/8s/1jkm89h96qjdtjr7q3bll2vh0000gn/T/cibw-run-a37eo68b/cp311-macosx_x86_64/build/venv/lib/python3.11/site-packages/delocate/libsana.py", line 320, in _tree_libs_from_libraries
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0322720Z raise DelocationError("Could not find all dependencies.")
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0323810Z delocate.libsana.DelocationError: Could not find all dependencies.
Build wheels on macos-14 Build wheels 2025-11-17T17:00:03.0778350Z ##[error]Command delocate-wheel --require-archs x86_64 -w /private/var/folders/8s/1jkm89h96qjdtjr7q3bll2vh0000gn/T/cibw-run-a37eo68b/cp311-macosx_x86_64/repaired_wheel -v /private/var/folders/8s/1jkm89h96qjdtjr7q3bll2vh0000gn/T/cibw-run-a37eo68b/cp311-macosx_x86_64/built_wheel/pycpl-0.1.0-cp311-cp311-macosx_11_0_x86_64.whl failed with code 1.
delocate can't find the vendored libraries. Need to skip it on macOS too: M pyproject.toml
pyproject.toml
51d21b9 wkf fix
1d1acb4 wkf fix
7e26c70 wkf fix
51d21b9 wkf fix
1d1acb4 wkf fix
7e26c70 wkf fix
bef62da rename workflow
6b0dd10 setup fixes
diff --git a/pyproject.toml b/pyproject.toml
index 586f351..d2cd354 100644
--- a/pyproject.toml
diff --git a/pyproject.toml b/pyproject.toml
index 586f351..d2cd354 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -26,6 +26,7 @@ repair-wheel-command = ""
[tool.cibuildwheel.macos]
archs = ["x86_64", "arm64"]
before-build = "brew install autoconf automake libtool"
+repair-wheel-command = ""
environment = { MACOSX_DEPLOYMENT_TARGET = "10.15" }
[tool.cibuildwheel.environment]
[master 878b7f3] skip delocate on macOS
1 file changed, 1 insertion(+)
To github.com:ivh/pycpl.git
51d21b9..878b7f3 master -> master
in_progress Publish Python Package Publish Python Package master workflow_dispatch 19437866332 7s 2025-11-17T17:03:39Z
repair-wheel-command = "" to macOS config (skips delocate)libfftw3.so on Linux or libfftw3.dylib on macOS).so/.dylib dependencies.libs directorysetup.py already does this manually via _copy_vendored_libraries() - it bundles cfitsio, fftw, wcslib, and CPL libraries directly. But auditwheel/delocate couldn't find them in the build directory to process them, so they failed.X master Publish Python Package · 19437866332
Triggered via workflow_dispatch about 16 minutes ago
X master Publish Python Package · 19437866332
Triggered via workflow_dispatch about 16 minutes ago
JOBS
X Build wheels on ubuntu-22.04 in 3m51s (ID 55613438287)
X Build wheels on macos-13 in 3m35s (ID 55613438303)
✓ Set up job
✓ Run actions/checkout@v4
✓ Set up Python
✓ Install cibuildwheel
X Build wheels
- Run actions/upload-artifact@v4
- Post Set up Python
✓ Post Run actions/checkout@v4
✓ Complete job
X Build wheels on macos-14 in 3m53s (ID 55613438334)
✓ Build source distribution in 17s (ID 55613438357)
- upload_pypi in 0s (ID 55613858600)
ANNOTATIONS
X The strategy configuration was canceled because "build_wheels.macos-13" failed
Build wheels on ubuntu-22.04: .github#1
X The operation was canceled.
Build wheels on ubuntu-22.04: .github#5607
X Process completed with exit code 1.
Build wheels on macos-13: .github#5101
X Command ['python', '-m', 'pip', 'wheel', '/Users/runner/work/pycpl/pycpl', '--wheel-dir=/private/var/folders/vk/nx37ffx50hv5djclhltc26vw0000gn/T/cibw-run-ebm7i_cr/cp311-macosx_x86_64/built_wheel', '--no-deps', '-v'] failed with code 1.
Build wheels on macos-13: .github#5098
! libtool 2.5.4 is already installed and up-to-date.
To reinstall 2.5.4, run:
brew reinstall libtool
Build wheels on macos-13: .github#115
! autoconf 2.72 is already installed and up-to-date.
To reinstall 2.72, run:
brew reinstall autoconf
Build wheels on macos-13: .github#111
- The macOS-13 based runner images are being deprecated, consider switching to macOS-15 (macos-15-intel) or macOS 15 arm64 (macos-latest) instead. For more details see https://github.com/actions/runner-images/issues/13046
Build wheels on macos-13: .github#1
X The strategy configuration was canceled because "build_wheels.macos-13" failed
Build wheels on macos-14: .github#1
X The operation was canceled.
Build wheels on macos-14: .github#5684
ARTIFACTS
sdist
To see what failed, try: gh run view 19437866332 --log-failed
View this run on GitHub: https://github.com/ivh/pycpl/actions/runs/19437866332
Build wheels on macos-13 Build wheels 2025-11-17T17:07:13.1370810Z subprocess.CalledProcessError: Command '['make', '-j4']' returned non-zero exit status 2.
Build wheels on macos-13 Build wheels 2025-11-17T17:07:13.1592320Z error: subprocess-exited-with-error
Build wheels on macos-13 Build wheels 2025-11-17T17:07:12.7165690Z make[3]: *** No rule to make target `-lltdl', needed by `libcplgasgano.la'. Stop.
Build wheels on macos-13 Build wheels 2025-11-17T17:07:13.1269400Z make[2]: *** [all-recursive] Error 1
Build wheels on macos-13 Build wheels 2025-11-17T17:07:13.1271340Z make[1]: *** [all-recursive] Error 1
"--disable-java",
], cwd=src_dir, env=env, check=True)
"--disable-java",
], cwd=src_dir, env=env, check=True)
subprocess.run(["make", f"-j{njobs}"], cwd=src_dir, check=True)
subprocess.run(["make", "install"], cwd=src_dir, check=True)
# Clean up build artifacts
Build wheels on macos-13 Build wheels 2025-11-17T17:06:17.0404240Z configure: running /bin/sh ./configure --disable-option-checking '--prefix=/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install' '--disable-static' '--enable-shared' '--disable-java' 'LDFLAGS=-L/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib -Wl,-rpath,/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib' 'CPPFLAGS=-I/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/include -I/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/include/wcslib' 'htmldir=${docdir}' --cache-file=/dev/null --srcdir=.
Build wheels on macos-13 Build wheels 2025-11-17T17:06:17.2856210Z checking for a BSD-compatible install... /usr/bin/install -c
Build wheels on macos-13 Build wheels 2025-11-17T17:06:17.2920810Z checking whether build environment is sane... yes
Build wheels on macos-13 Build wheels 2025-11-17T17:06:17.0404240Z configure: running /bin/sh ./configure --disable-option-checking '--prefix=/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install' '--disable-static' '--enable-shared' '--disable-java' 'LDFLAGS=-L/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib -Wl,-rpath,/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib' 'CPPFLAGS=-I/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/include -I/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/include/wcslib' 'htmldir=${docdir}' --cache-file=/dev/null --srcdir=.
Build wheels on macos-13 Build wheels 2025-11-17T17:06:17.2856210Z checking for a BSD-compatible install... /usr/bin/install -c
Build wheels on macos-13 Build wheels 2025-11-17T17:06:17.2920810Z checking whether build environment is sane... yes
Build wheels on macos-13 Build wheels 2025-11-17T17:06:17.3140620Z checking for a race-free mkdir -p... ./../admin/install-sh -c -d
--
Build wheels on macos-13 Build wheels 2025-11-17T17:06:28.6804580Z configure: running /bin/sh ./configure --disable-option-checking '--prefix=/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install' '--disable-static' '--enable-shared' '--disable-java' 'LDFLAGS=-L/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib -Wl,-rpath,/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib' 'CPPFLAGS=-I/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/include -I/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/include/wcslib' 'htmldir=${docdir}' --cache-file=/dev/null --srcdir=.
Build wheels on macos-13 Build wheels 2025-11-17T17:06:28.9256080Z checking for a BSD-compatible install... /usr/bin/install -c
Build wheels on macos-13 Build wheels 2025-11-17T17:06:28.9324330Z checking whether build environment is sane... yes
Build wheels on macos-13 Build wheels 2025-11-17T17:06:28.9563180Z checking for a race-free mkdir -p... ./admin/install-sh -c -d
Build wheels on macos-13 Build wheels 2025-11-17T17:06:02.3553950Z checking for Java Development Kit... /Users/runner/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.16-8/x64/Contents/Home/, headers /Users/runner/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.16-8/x64/Contents/Home//include, /Users/runner/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.16-8/x64/Contents/Home//include/darwin
Build wheels on macos-13 Build wheels 2025-11-17T17:06:14.4003320Z config.status: creating cpljava/Makefile
Build wheels on macos-13 Build wheels 2025-11-17T17:06:14.4414320Z config.status: creating cpljava/tests/Makefile
Build wheels on macos-13 Build wheels 2025-11-17T17:06:02.3553950Z checking for Java Development Kit... /Users/runner/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.16-8/x64/Contents/Home/, headers /Users/runner/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.16-8/x64/Contents/Home//include, /Users/runner/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.16-8/x64/Contents/Home//include/darwin
Build wheels on macos-13 Build wheels 2025-11-17T17:06:14.4003320Z config.status: creating cpljava/Makefile
Build wheels on macos-13 Build wheels 2025-11-17T17:06:14.4414320Z config.status: creating cpljava/tests/Makefile
Build wheels on macos-13 Build wheels 2025-11-17T17:06:17.0404240Z configure: running /bin/sh ./configure --disable-option-checking '--prefix=/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install' '--disable-static' '--enable-shared' '--disable-java' 'LDFLAGS=-L/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib -Wl,-rpath,/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib' 'CPPFLAGS=-I/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/include -I/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/include/wcslib' 'htmldir=${docdir}' --cache-file=/dev/null --srcdir=.
Build wheels on macos-13 Build wheels 2025-11-17T17:06:28.6804580Z configure: running /bin/sh ./configure --disable-option-checking '--prefix=/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install' '--disable-static' '--enable-shared' '--disable-java' 'LDFLAGS=-L/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib -Wl,-rpath,/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/lib' 'CPPFLAGS=-I/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/include -I/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/include/wcslib' 'htmldir=${docdir}' --cache-file=/dev/null --srcdir=.
Build wheels on macos-13 Build wheels 2025-11-17T17:07:12.6935270Z Making all in cpljava
Build wheels on macos-13 Build wheels 2025-11-17T17:07:12.7160280Z /bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I.. -I../cplcore -I../cplcore -I../cplui -I../cplui -I../cpldfs -I../cpldfs -I../libcext/cext -I../libcext/cext -I/Users/runner/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.16-8/x64/Contents/Home//include -I/Users/runner/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.16-8/x64/Contents/Home//include/darwin -I/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/include -I/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/include/wcslib -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=500 -D_REENTRANT -g -O2 -std=c99 -fno-common -MT cpl_gasgano.lo -MD -MP -MF .deps/cpl_gasgano.Tpo -c -o cpl_gasgano.lo cpl_gasgano.c
Build wheels on macos-13 Build wheels 2025-11-17T17:07:12.7852310Z libtool: compile: gcc -DHAVE_CONFIG_H -I. -I.. -I../cplcore -I../cplcore -I../cplui -I../cplui -I../cpldfs -I../cpldfs -I../libcext/cext -I../libcext/cext -I/Users/runner/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.16-8/x64/Contents/Home//include -I/Users/runner/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.16-8/x64/Contents/Home//include/darwin -I/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/include -I/Users/runner/work/pycpl/pycpl/build/temp.macosx-10.9-x86_64-cpython-311/deps/install/include/wcslib -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=500 -D_REENTRANT -g -O2 -std=c99 -fno-common -MT cpl_gasgano.lo -MD -MP -MF .deps/cpl_gasgano.Tpo -c cpl_gasgano.c -fno-common -DPIC -o .libs/cpl_gasgano.o
--disable-java isn't working because the macOS runner has Java installed, and configure is still enabling it. I can see it's creating cpljava/Makefile and trying to build it.[master 69fbcee] prevent Java detection in CPL build
1 file changed, 2 insertions(+)
To github.com:ivh/pycpl.git
[master 69fbcee] prevent Java detection in CPL build
1 file changed, 2 insertions(+)
To github.com:ivh/pycpl.git
878b7f3..69fbcee master -> master
queued Publish Python Package Publish Python Package master workflow_dispatch 19438374695 2s 2025-11-17T17:21:03Z
--disable-java, CPL's configure found Java (pre-installed on macOS runners) and enabled it anyway. JAVA_HOME before running CPL's configure to prevent Java detection entirely.env.pop("JAVA_HOME", None) 1→name: Publish Python Package
2→
3→on:
4→ push:
5→ tags:
6→ - 'v*'
7→ workflow_dispatch:
8→
9→jobs:
10→ build_wheels:
... (content hidden) ...
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
1→name: Publish Python Package
2→
3→on:
4→ push:
5→ tags:
6→ - 'v*'
7→ workflow_dispatch:
8→
9→jobs:
10→ build_wheels:
11→ name: Build wheels on ${{ matrix.os }}
12→ runs-on: ${{ matrix.os }}
13→ strategy:
14→ matrix:
15→ os: [ubuntu-22.04, macos-13, macos-14]
16→
17→ steps:
18→ - uses: actions/checkout@v4
19→
20→ - name: Set up Python
21→ uses: actions/setup-python@v5
22→ with:
23→ python-version: '3.11'
24→
25→ - name: Install cibuildwheel
26→ run: python -m pip install cibuildwheel==2.21.3
27→
28→ - name: Build wheels
29→ run: python -m cibuildwheel --output-dir wheelhouse
30→
31→ - uses: actions/upload-artifact@v4
32→ with:
33→ name: wheels-${{ matrix.os }}
34→ path: ./wheelhouse/*.whl
35→
36→ build_sdist:
37→ name: Build source distribution
38→ runs-on: ubuntu-latest
39→ steps:
40→ - uses: actions/checkout@v4
41→
42→ - name: Set up Python
43→ uses: actions/setup-python@v5
44→ with:
45→ python-version: '3.11'
46→
47→ - name: Build sdist
48→ run: |
49→ python -m pip install build
50→ python -m build --sdist
51→
52→ - uses: actions/upload-artifact@v4
53→ with:
54→ name: sdist
55→ path: dist/*.tar.gz
56→
57→ upload_pypi:
58→ needs: [build_wheels, build_sdist]
59→ runs-on: ubuntu-latest
60→ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
61→ permissions:
62→ id-token: write
63→ steps:
64→ - uses: actions/download-artifact@v4
65→ with:
66→ pattern: wheels-*
67→ merge-multiple: true
68→ path: dist/
69→
70→ - uses: actions/download-artifact@v4
71→ with:
72→ name: sdist
73→ path: dist/
74→
75→ - name: Publish to PyPI
76→ uses: pypa/gh-action-pypi-publish@release/v1
77→
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
upload_pypi job only runs when:push (not workflow_dispatch)v is pushed git tag v0.1.0 # or whatever version
git push origin v0.1.0
pip install pycplpip install pycpl==0.1.0wheels-ubuntu-22.04, wheels-macos-13, wheels-macos-14, or sdistgh CLI: # List artifacts from latest run
gh run view 19438374695 --log
# Download all artifacts
gh run download 19438374695
# Download specific artifact
gh run download 19438374695 -n wheels-ubuntu-22.04
# After downloading
pip install ./pycpl-0.1.0-cp311-cp311-manylinux_x86_64.whl
.zip files, but pip needs the actual .whl file inside.# Download artifact (comes as .zip)
gh run download 19438374695 -n wheels-ubuntu-22.04
# This creates a directory: wheels-ubuntu-22.04/
# containing the .whl files
# Install directly from the directory
pip install wheels-ubuntu-22.04/*.whl
# Or unzip manually if needed
unzip wheels-ubuntu-22.04.zip
pip install pycpl-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
gh run download command automatically extracts to a folder, so you usually don't need to manually unzip - just pip install from the extracted directory.uv can install .whl files directly:# Install from wheel file
uv pip install wheels-ubuntu-22.04/*.whl
# Or specific file
uv pip install pycpl-0.1.0-cp311-cp311-manylinux_2_17_x86_64.whl
# Or from a directory
uv pip install --find-links wheels-ubuntu-22.04/ pycpl
uv is a drop-in replacement for pip, so it handles .whl files the same way. It's actually faster at installing wheels than pip.libcpldrs.so.26, libcplcore.so, etc.) aren't being found because we skipped auditwheel repair.# Extract and examine
unzip -l pycpl-0.1.0-cp311-cp311-linux_x86_64.whl | grep "\.so"
# Or
python -m zipfile -l pycpl-0.1.0-cp311-cp311-linux_x86_64.whl
auditwheel, we skipped the step that:.so files into the wheel[tool.cibuildwheel.linux]
repair-wheel-command = "auditwheel repair -w {dest_dir} {wheel} --lib-sdir .libs"
environment = { LD_LIBRARY_PATH = "/project/build/temp.linux-x86_64-cpython-311/deps/install/lib" }
[master 4db16b1] add Python 3.14 wheel support
1 file changed, 1 insertion(+), 1 deletion(-)
cp314-* to the build list. Committed but not pushed yet.python -m zipfile -l pycpl-0.1.0-cp311-cp311-linux_x86_64.whl | grep -E "(\.so|cpl/)"
.so files are being included and where they are in the wheel structure. Then we can fix the bundling properly.MACOSX_DEPLOYMENT_TARGET.macos-13 = Intel (x86_64) wheelsmacos-14 = Apple Silicon (arm64) wheels MACOSX_DEPLOYMENT_TARGET = "10.15" = wheels work on macOS 10.15+macos-13 runners (you saw the warnings). You should update to:matrix:
os: [ubuntu-22.04, macos-15-intel, macos-14] # or macos-latest for ARM
macos-15-intel = Intel builds on macOS 15macos-14 or macos-latest = ARM buildscpl.cpython-311-x86_64-linux-gnu.so, but the extension has no RPATH telling it to look there.$ORIGIN (meaning "look in the same directory as the .so file"): 60→
61→if(NOT EXISTS ${PYCPL_RECIPE_DIR})
62→ message(WARNING "Configured default recipe directory '${PYCPL_RECIPE_DIR}' does not yet exist!")
63→ message(VERBOSE "The above path determines the default cpl.ui.Recipe.recipe_dir, and is used at Run-time.")
64→endif()
65→
66→pybind11_add_module(cpl
67→ src/cplcore/array.cpp
68→ src/cplcore/bivector.cpp
69→ src/cplcore/coords.cpp
... (content hidden) ...
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
60→
61→if(NOT EXISTS ${PYCPL_RECIPE_DIR})
62→ message(WARNING "Configured default recipe directory '${PYCPL_RECIPE_DIR}' does not yet exist!")
63→ message(VERBOSE "The above path determines the default cpl.ui.Recipe.recipe_dir, and is used at Run-time.")
64→endif()
65→
66→pybind11_add_module(cpl
67→ src/cplcore/array.cpp
68→ src/cplcore/bivector.cpp
69→ src/cplcore/coords.cpp
70→ src/cplcore/error_bindings.cpp
71→ src/cplcore/error.cpp
72→ src/cplcore/errorframe.cpp
73→ src/cplcore/filter_bindings.cpp
74→ src/cplcore/image_bindings.cpp
75→ src/cplcore/image.cpp
76→ src/cplcore/imagelist.cpp
77→ src/cplcore/io_bindings.cpp
78→ src/cplcore/mask_bindings.cpp
79→ src/cplcore/mask.cpp
80→ src/cplcore/matrix_bindings.cpp
81→ src/cplcore/matrix.cpp
82→ src/cplcore/msg_bindings.cpp
83→ src/cplcore/msg.cpp
84→ src/cplcore/polynomial_bindings.cpp
85→ src/cplcore/polynomial.cpp
86→ src/cplcore/property_bindings.cpp
87→ src/cplcore/property.cpp
88→ src/cplcore/propertylist.cpp
89→ src/cplcore/table_bindings.cpp
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
100→ src/cpldrs/detector.cpp
101→ src/cpldrs/fft_bindings.cpp
102→ src/cpldrs/fft.cpp
103→ src/cpldrs/fit_bindings.cpp
104→ src/cpldrs/fit.cpp
105→ src/cpldrs/geom_img_bindings.cpp
106→ src/cpldrs/geom_img.cpp
107→ src/cpldrs/photom_bindings.cpp
108→ src/cpldrs/photom.cpp
109→ src/cpldrs/ppm_bindings.cpp
... (content hidden) ...
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
100→ src/cpldrs/detector.cpp
101→ src/cpldrs/fft_bindings.cpp
102→ src/cpldrs/fft.cpp
103→ src/cpldrs/fit_bindings.cpp
104→ src/cpldrs/fit.cpp
105→ src/cpldrs/geom_img_bindings.cpp
106→ src/cpldrs/geom_img.cpp
107→ src/cpldrs/photom_bindings.cpp
108→ src/cpldrs/photom.cpp
109→ src/cpldrs/ppm_bindings.cpp
110→ src/cpldrs/ppm.cpp
111→ src/cpldrs/wcs_bindings.cpp
112→ src/cpldrs/wcs.cpp
113→ src/cpldrs/wlcalib_bindings.cpp
114→ src/cpldrs/wlcalib.cpp
115→ src/cplui/frame_bindings.cpp
116→ src/cplui/frame.cpp
117→ src/cplui/frameset.cpp
118→ src/cplui/parameter_bindings.cpp
119→ src/cplui/parameter.cpp
120→ src/cplui/parameterlist.cpp
121→ src/cplui/plugin_bindings.cpp
122→ src/cplui/plugin.cpp
123→ src/dump_handler.cpp
124→ src/pycpl.cpp)
125→
126→target_compile_definitions(cpl PRIVATE
127→ PYCPL_VERSION=\"${PYCPL_VERSION}\"
128→ PYCPL_RECIPE_DIR=\"${PYCPL_RECIPE_DIR}\"
129→ $<$<BOOL:${UNIX}>:_XOPEN_SOURCE=700>
130→ )
131→target_compile_options(cpl PRIVATE
132→ $<$<AND:$<CONFIG:Debug>,$<CXX_COMPILER_ID:GNU>>:-pipe -g3 -ggdb -O0 -rdynamic -fno-inline -fno-builtin -pedantic -Wextra -Wall -W -Wcast-align -Winline -Wmissing-noreturn -Wpointer-arith -Wshadow -Wsign-compare -Wundef -Wunreachable-code -Wwrite-strings -Wmissing-field-initializers -Wmissing-format-attribute>
133→ $<$<AND:$<CONFIG:Debug>,$<CXX_COMPILER_ID:Clang,AppleClang>>:-pipe -g3 -O0 -fno-inline -fno-builtin -pedantic -Wextra -Wall -W -Wcast-align -Winline -Wimplicit-function-declaration -Wmissing-noreturn -Wincompatible-pointer-types -Wpointer-arith -Wshadow -Wsign-compare -Wundef -Wunreachable-code -Wwrite-strings -Wmissing-field-initializers -Wmissing-format-attribute>
134→ $<$<AND:$<BOOL:${SANITIZE}>,$<CXX_COMPILER_ID:GNU,Clang,AppleClang>>:-fsanitize=${SANITIZE} -fno-omit-frame-pointer>)
135→target_include_directories(cpl BEFORE
136→ PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/src"
137→ PUBLIC ${CPL_INCLUDE_DIR})
138→target_link_options(cpl PRIVATE
139→ $<$<AND:$<BOOL:${SANITIZE}>,$<CXX_COMPILER_ID:GNU,Clang,AppleClang>>:-fsanitize=${SANITIZE}>)
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
138→target_link_options(cpl PRIVATE
139→ $<$<AND:$<BOOL:${SANITIZE}>,$<CXX_COMPILER_ID:GNU,Clang,AppleClang>>:-fsanitize=${SANITIZE}>)
140→target_link_libraries(cpl PRIVATE CPL::cpldrs CPL::cpldfs CPL::cplui CPL::cplcore)
141→
142→set_target_properties(cpl PROPERTIES
143→ C_STANDARD 17
144→ C_STANDARD_REQUIRED YES
145→ C_EXTENSIONS OFF
146→ CXX_STANDARD 17
147→ CXX_STANDARD_REQUIRED YES
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
142→set_target_properties(cpl PROPERTIES
143→ C_STANDARD 17
144→ C_STANDARD_REQUIRED YES
145→ C_EXTENSIONS OFF
146→ CXX_STANDARD 17
147→ CXX_STANDARD_REQUIRED YES
148→ INSTALL_RPATH "$ORIGIN"
149→ BUILD_WITH_INSTALL_RPATH TRUE
150→ CXX_EXTENSIONS OFF
151→ BUILD_RPATH_USE_ORIGIN TRUE
152→ INSTALL_RPATH "$ORIGIN")
153→
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
[master b6729a7] set RPATH to find bundled libraries
1 file changed, 2 insertions(+), 1 deletion(-)
To github.com:ivh/pycpl.git
[master b6729a7] set RPATH to find bundled libraries
1 file changed, 2 insertions(+), 1 deletion(-)
To github.com:ivh/pycpl.git
69fbcee..b6729a7 master -> master
queued Publish Python Package Publish Python Package master workflow_dispatch 19439357549 2s 2025-11-17T17:56:00Z
$ORIGIN (same directory as the .so)@loader_path (macOS equivalent)cpl.cpython-311-x86_64-linux-gnu.so extension will now have RPATH set to look in the same directory where it's installed.so files (libcpldrs.so.26, etc.) will be found at import timeImportError: libcpldrs.so.26: cannot open shared object file{"conclusion":"","jobs":[{"conclusion":"success","name":"Build wheels on ubuntu-22.04","status":"completed"},{"conclusion":"","name":"Build wheels on macos-13","status":"in_progress"},{"conclusion":"success","name":"Build source distribution","status":"completed"},{"conclusion":"","name":"Build wheels on macos-14","status":"in_progress"}],"status":"in_progress"}
@loader_path for Darwin. I'll keep an eye on it.@loader_path. The RPATH setting isn't enough - we need to fix the library install names./Users/runner/work/.../lib/libcpldrs.26.dylib instead of just libcpldrs.26.dylib.install_name_tool to fix all the dylib paths after building. I see setup.py already does this for fftw, but we need to do it for CPL libraries too: 285→ "--disable-java",
286→ ], cwd=src_dir, env=env, check=True)
287→
288→ subprocess.run(["make", f"-j{njobs}"], cwd=src_dir, check=True)
289→ subprocess.run(["make", "install"], cwd=src_dir, check=True)
290→ # Clean up build artifacts
291→ subprocess.run(["make", "distclean"], cwd=src_dir, check=False)
292→ print(">>> CPL built successfully")
293→
294→ def _fix_darwin_install_names(self, lib_dir: Path, libraries: list[str]) -> None:
... (content hidden) ...
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
285→ "--disable-java",
286→ ], cwd=src_dir, env=env, check=True)
287→
288→ subprocess.run(["make", f"-j{njobs}"], cwd=src_dir, check=True)
289→ subprocess.run(["make", "install"], cwd=src_dir, check=True)
290→ # Clean up build artifacts
291→ subprocess.run(["make", "distclean"], cwd=src_dir, check=False)
292→ print(">>> CPL built successfully")
293→
294→ def _fix_darwin_install_names(self, lib_dir: Path, libraries: list[str]) -> None:
295→ """Ensure macOS dylibs advertise an absolute install name so dlopen works without rpath."""
296→ if sys.platform != "darwin":
297→ return
298→ for name in libraries:
299→ dylib = lib_dir / name
300→ if not dylib.exists():
301→ continue
302→ subprocess.run(
303→ ["install_name_tool", "-id", str(dylib), str(dylib)],
304→ check=True,
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
[master c3b99a7] fix macOS dylib install names to use @rpath
1 file changed, 30 insertions(+), 2 deletions(-)
To github.com:ivh/pycpl.git
[master c3b99a7] fix macOS dylib install names to use @rpath
1 file changed, 30 insertions(+), 2 deletions(-)
To github.com:ivh/pycpl.git
b6729a7..c3b99a7 master -> master
queued Publish Python Package Publish Python Package master workflow_dispatch 19440440005 2s 2025-11-17T18:34:55Z
_fix_darwin_install_names to use @rpath/libname instead of absolute pathslibcfitsio.10.dyliblibwcs.8.dylib libcext.0.dylib, libcplcore.26.dylib, libcplui.26.dylib, libcpldfs.26.dylib, libcpldrs.26.dylib@rpath/libcpldrs.26.dylib@loader_path@rpath → finds libraries ✓@rpath now, but they still have hardcoded paths to each other. For example, libcplcore.26.dylib references libcext.0.dylib with an absolute path.v and push it:git tag v0.1.0
git push origin v0.1.0
Exit code 1
On branch master
Your branch is up to date with 'origin/master'.
Exit code 1
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
On branch master
Your branch is up to date with 'origin/master'.
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
git tag v0.1.0
git push origin v0.1.0
# Get the run ID
gh run list --limit 1
# Re-run failed jobs only
gh run rerun <run-id> --failed
twine# Download the artifacts
gh run download <run-id>
# Upload to PyPI manually
pip install twine
twine upload wheels-*/*.whl sdist/*.tar.gz
git tag -d v0.1.0
git push origin :refs/tags/v0.1.0
git tag v0.1.0
git push origin v0.1.0
File created successfully at: /Users/tom/pipes/pycpl.git/CLAUDE.md
[master 37935cc] add build system documentation
1 file changed, 239 insertions(+)
create mode 100644 CLAUDE.md
CLAUDE.md with comprehensive documentation covering:37935cc add build system documentation[Build System Documentation](CLAUDE.md)
See [CLAUDE.md](CLAUDE.md) for detailed build system documentation.
--extra-index-url, PyPI takes precedence by default, but the highest version number wins across all indexes.0.1.0 and ESO's is 0.1.0 → PyPI version is chosen ✓0.1.1 → ESO's version is chosen (higher version)# Use a higher version on PyPI
git tag v1.0.0 # Higher than ESO's version
uv tool install \
--index-url https://pypi.org/simple \
--extra-index-url https://ftp.eso.org/pub/dfs/pipelines/libraries/ \
pycpl edps
uv pip install pycpl # Gets PyPI version
uv tool install --extra-index-url https://ftp.eso.org/pub/dfs/pipelines/libraries/ edps
1.0.0 or 1.0.3 to match your setup.cfg), so PyPI always wins.# Check what versions are available on ESO's index
pip index versions pycpl --extra-index-url https://ftp.eso.org/pub/dfs/pipelines/libraries/
# Or with uv
uv pip index versions pycpl --extra-index-url https://ftp.eso.org/pub/dfs/pipelines/libraries/
# See what would be installed
pip install pycpl --extra-index-url https://ftp.eso.org/pub/dfs/pipelines/libraries/ --dry-run
setup.cfg has 1.0.3, so if ESO's is lower than that, you're good. If they have something higher, you might want to bump yours to match or exceed it.v1.0.3):pyproject.toml or setup.cfgpip install pycpl==X.Y.Z uses# pyproject.toml
version = "0.1.0"
# setup.cfg
version = 1.0.3
build-backend = "setuptools.build_meta", so your package will be version 0.1.0 even if you tag v1.0.3!# pyproject.toml - make this match
version = "1.0.3"
git tag v1.0.3
[project] in pyproject.toml with metadata in setup.cfg is deprecated. Let's consolidate everything into pyproject.toml: 1→[metadata]
2→name = pycpl
3→version = 1.0.3
4→license = GPL-3.0-or-later
5→author = European Southern Observatory, Australian Astronomical Optics Macquarie
6→author_email = cpl-help@eso.org
7→description = Python language bindings for the ESO Common Pipeline Library C libraries
8→long_description = file: README.md
9→long_description_content_type = text/markdown
10→url = http://www.eso.org/sci/software/pycpl
... (content hidden) ...
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
1→[metadata]
2→name = pycpl
3→version = 1.0.3
4→license = GPL-3.0-or-later
5→author = European Southern Observatory, Australian Astronomical Optics Macquarie
6→author_email = cpl-help@eso.org
7→description = Python language bindings for the ESO Common Pipeline Library C libraries
8→long_description = file: README.md
9→long_description_content_type = text/markdown
10→url = http://www.eso.org/sci/software/pycpl
11→project_urls =
12→ Homepage = http://www.eso.org/sci/software/pycpl
13→ Documentation = http://www.eso.org/sci/software/pycpl
14→ Source = https://ftp.eso.org/pub/dfs/pipelines/libraries/pycpl
15→classifiers =
16→ Programming Language :: Python :: 3
17→ Programming Language :: C
18→ Programming Language :: C++
19→ Topic :: Scientific/Engineering :: Astronomy
20→ Topic :: Software Development
21→ Operating System :: POSIX :: Linux
22→ Operating System :: MacOS :: MacOS X
23→ Operating System :: Unix
24→ Development Status :: 5 - Production/Stable
25→
26→[options]
27→python_requires = >=3.9
28→install_requires =
29→ numpy
30→ astropy
31→zip_safe = False
32→
33→[options.extras_require]
34→pandas = pandas
35→doc =
36→ sphinx
37→test =
38→ pytest
39→ pandas
40→ scipy
41→
42→[egg_info]
43→tag_build =
44→tag_date = 0
45→
46→
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
1→[project]
2→name = "pycpl"
3→version = "0.1.0"
4→description = "PyCPL, with CPL and dependencies included"
5→readme = "README.md"
6→requires-python = ">=3.11"
7→dependencies = [
8→ "numpy>=2.3.5",
9→ "pybind11>=3.0.1",
10→ "setuptools>=80.9.0",
... (content hidden) ...
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
1→[project]
2→name = "pycpl"
3→version = "0.1.0"
4→description = "PyCPL, with CPL and dependencies included"
5→readme = "README.md"
6→requires-python = ">=3.11"
7→dependencies = [
8→ "numpy>=2.3.5",
9→ "pybind11>=3.0.1",
10→ "setuptools>=80.9.0",
11→]
12→[build-system]
13→requires = ["setuptools>=70", "wheel", "pybind11", "cmake"]
14→build-backend = "setuptools.build_meta"
15→
16→[tool.cibuildwheel]
17→build = ["cp311-*", "cp312-*", "cp313-*", "cp314-*"]
18→skip = ["*-musllinux_*", "*-win32", "*-manylinux_i686"]
19→build-verbosity = 1
20→
21→[tool.cibuildwheel.linux]
22→archs = ["x86_64"]
23→before-build = "yum install -y autoconf automake libtool"
24→repair-wheel-command = ""
25→
26→[tool.cibuildwheel.macos]
27→archs = ["x86_64", "arm64"]
28→before-build = "brew install autoconf automake libtool"
29→repair-wheel-command = ""
30→environment = { MACOSX_DEPLOYMENT_TARGET = "10.15" }
31→
32→[tool.cibuildwheel.environment]
33→CMAKE_BUILD_PARALLEL_LEVEL = "4"
34→
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
The file /Users/tom/pipes/pycpl.git/setup.cfg has been updated. Here's the result of running `cat -n` on a snippet of the edited file:
1→# All configuration has been moved to pyproject.toml
2→# This file is kept for compatibility with older tools
3→
pybind11 and setuptools are in the old dependencies - these are build-time only, not runtime. Let me verify what should actually be runtime dependencies by checking what the extension actually imports:numpy and astropy (as setup.cfg had). The current pyproject.toml dependencies look good![master 7b341d3] consolidate metadata into pyproject.toml
2 files changed, 31 insertions(+), 50 deletions(-)
pyproject.toml:1.0.3 (from setup.cfg)numpy and astropy (runtime only)pandas, doc, testpybind11 and setuptools from runtime deps (they're build-time only, in [build-system])requires-python = ">=3.11" (our actual minimum)pyproject.toml, and the warnings should be gone!v1.0.3 when you want to publish.version = "1.1.0"
- Indicates new feature (bundled libraries)version = "2.0.0"
- Clearly separate from ESO's version lineversion = "1.0.3.post1"
- Valid PEP 440, sorts higher than 1.0.3version = "1.0.10" # or 1.0.100
- Higher than 1.0.3, but stays in same series1.1.0 - it's semantically correct (new feature = bundled deps), clearly higher, and ESO is unlikely to use it next.pip install --extra-index-url https://ftp.eso.org/pub/dfs/pipelines/libraries/ pycpl
# Check build status
gh run list --limit 1
# If not uploaded to PyPI yet, delete tag
git tag -d v1.0.3
git push origin :refs/tags/v1.0.3
# Retag with 1.1.0
git tag v1.1.0
git push origin v1.1.0
1.1.0 to avoid confusion.# Default behavior - gets ESO's 1.0.3 (higher version)
pip install pycpl --extra-index-url https://ftp.eso.org/...
# Users must explicitly request your version
pip install pycpl==1.0.2 # Awkward!
# Or disable ESO index entirely
pip install pycpl # Only searches PyPI
< 1.0.3 (e.g., 1.0.2) | ESO wins | ❌ Users must explicitly request yours |= 1.0.3 (current) | PyPI wins | ⚠️ Your version used, might surprise ESO users |> 1.0.3 (e.g., 1.1.0) | PyPI wins | ✅ Clear differentiation, your version preferred |1.1.0 or 2.0.0) so your bundled version is automatically preferred and clearly distinguished from ESO's version.1.0.3.post1 works well:1.0.3 → your bundled version is defaultpycpl==1.0.3 (exact match).post1 signals "this is a repackaging" not a new release# Gets your bundled version (1.0.3.post1)
pip install pycpl
# ESO users can explicitly get theirs
pip install pycpl==1.0.3
# Or latest from ESO index only
pip install --index-url https://ftp.eso.org/... pycpl
[master a2af078] version 1.0.3.post1 (bundled distribution)
1 file changed, 1 insertion(+), 1 deletion(-)
v1.0.3 tag:gh run view --json conclusion,jobs | jq '.jobs[] | select(.name=="upload_pypi")'
# Delete the tag
git tag -d v1.0.3
git push origin :refs/tags/v1.0.3
# Create new tag
git push origin master
git tag v1.0.3.post1
git push origin v1.0.3.post1
v1.0.3.post1 as new version (sorts higher, becomes default).post1 suffix clearly indicates this is your bundled repackaging!v1.0.3 tag cancelled/deleted before PyPI uploadv1.0.3.post1 tag pushed and building1.0.3.post1 (default on PyPI)1.0.3 (available on their index).post1 suffix makes it obvious this is the repackaged/bundled variant. [tool.cibuildwheel.macos]
archs = ["x86_64", "arm64"] # Applied to ALL macOS runners!
macos-13 (Intel) tries to build x86_64 and arm64macos-14 (ARM) tries to build x86_64 and arm64[master cfe8666] build native arch only on macOS (avoid cross-compilation)
1 file changed, 1 insertion(+), 1 deletion(-)
macos-13 (Intel runner) → builds x86_64 onlymacos-14 (ARM runner) → builds arm64 onlygit push origin master# Push the fix
git push origin master
# Re-tag (delete old tag first if needed)
git tag -d v1.0.3.post1
git push origin :refs/tags/v1.0.3.post1
# Tag again
git tag v1.0.3.post1
git push origin v1.0.3.post1
macos-15-intel - newer Intel Macs (if you need Intel)macos-latest - Apple Silicon (faster)macos-15-intel when macos-13 is fully deprecated.macos-15 (without -intel) = Apple Silicon (ARM64)macos-13 | Intel x86_64 | macOS 13 Ventura |macos-14 | ARM64 | macOS 14 Sonoma |macos-15 | ARM64 | macOS 15 Sequoia |macos-15-intel | Intel x86_64 | macOS 15 Sequoia |macos-latest | ARM64 (alias to latest, currently 15) |-intel suffix = Intel x86_64os: [macos-13, macos-14] # Intel on 13, ARM on 14
macos-latest becomes macOS 16+, will wheels work on Sequoia (15)?MACOSX_DEPLOYMENT_TARGET, not the runner version:environment = { MACOSX_DEPLOYMENT_TARGET = "10.15" }
macos-latest is safe - the deployment target ensures backward compatibility!macos-14 (ARM64) → bumps 10.15 → 11.0 ✓ (correct)
macos-13 (Intel) → uses 10.15 ✓ (correct)
macosx_11_0_arm64.whl (macOS 11+)macosx_10_15_x86_64.whl (macOS 10.15+)environment = { MACOSX_DEPLOYMENT_TARGET = "11.0" }
[master c74e9eb] bump deployment target to 11.0, use macos-15 runners
2 files changed, 2 insertions(+), 2 deletions(-)
MACOSX_DEPLOYMENT_TARGET = "11.0" # No more warnings
os: [ubuntu-22.04, macos-15-intel, macos-latest]
c74e9eb bump deployment target to 11.0, use macos-15 runnersmanylinux2014 | 2.17 | 2012 | CentOS 7+, Ubuntu 14.04+ (current) |manylinux_2_28 | 2.28 | 2018 | AlmaLinux 8+, Ubuntu 20.04+ |manylinux_2_31 | 2.31 | 2020 | AlmaLinux 9+, Ubuntu 22.04+ (matches macOS 11) |manylinux_2_28 is reasonable. Very old systems probably can't run Python 3.11 anyway.[master cb3d71f] bump to manylinux_2_28 and ubuntu-latest
2 files changed, 3 insertions(+), 1 deletion(-)
manylinux-x86_64-image = "manylinux_2_28" # glibc 2.28 (2018)
Workflow:os: [ubuntu-latest, macos-15-intel, macos-latest] # All latest runners
cb3d71f bump to manylinux_2_28 and ubuntu-latestinvalid-publisher: valid token, but no corresponding publisher (Publisher with matching claims was not found)MISSING.{"databaseId":19456394642,"event":"push","headBranch":"v1.0.3.post1","headSha":"cfe866651237f0109c24ddd7b1091f6e24993dbb"}
pycplPyPI Project Name: pycpl
Owner: ivh (your GitHub username)
Repository name: pycpl
Workflow name: python-publish.yml
Environment name: (leave blank)
build-wheels.yml? We renamed it to python-publish.ymltwine instead?PyPI Project Name: pycpl
Owner: ivh
Repository name: pycpl
Workflow name: python-publish.yml
Environment name: (leave blank)
python-publish.ymlbuild-wheels.yml), that won't match. Add a new one with the correct name.python-publish.yml. Let me check if the repository details match:{"owner":"ivh","repo":"pycpl"}
upload_pypi Publish to PyPI The claims rendered below are **for debugging purposes only**. You should **not**
upload_pypi Publish to PyPI use them to configure a trusted publisher unless they already match your expectations.
upload_pypi Publish to PyPI
upload_pypi Publish to PyPI The claims rendered below are **for debugging purposes only**. You should **not**
upload_pypi Publish to PyPI use them to configure a trusted publisher unless they already match your expectations.
upload_pypi Publish to PyPI
upload_pypi Publish to PyPI If a claim is not present in the claim set, then it is rendered as `MISSING`.
upload_pypi Publish to PyPI
upload_pypi Publish to PyPI * `sub`: `repo:ivh/pycpl:ref:refs/tags/v1.0.3.post1`
upload_pypi Publish to PyPI * `repository`: `ivh/pycpl`
upload_pypi Publish to PyPI * `repository_owner`: `ivh`
upload_pypi Publish to PyPI * `repository_owner_id`: `134957`
upload_pypi Publish to PyPI * `workflow_ref`: `ivh/pycpl/.github/workflows/python-publish.yml@refs/tags/v1.0.3.post1`
upload_pypi Publish to PyPI * `job_workflow_ref`: `ivh/pycpl/.github/workflows/python-publish.yml@refs/tags/v1.0.3.post1`
upload_pypi Publish to PyPI * `ref`: `refs/tags/v1.0.3.post1`
upload_pypi Publish to PyPI * `environment`: `MISSING`
upload_pypi Publish to PyPI
upload_pypi Publish to PyPI See https://docs.pypi.org/trusted-publishers/troubleshooting/ for more help.
upload_pypi Publish to PyPI
upload_pypi Publish to PyPI
repository: ivh/pycpl
repository_owner: ivh
workflow: python-publish.yml
environment: MISSING (blank) ✓
pycpl (case-sensitive)ivhpycpl (not ivh/pycpl, just pycpl)python-publish.yml # Download artifacts
gh run download 19456394642
# Upload manually with twine
pip install twine
twine upload wheels-*/*.whl sdist/*.tar.gz
pycpl-upload (or whatever)pypi-...)# Download artifacts
gh run download 19456394642
# Install twine
uv tool install twine
# or: pip install twine
# Upload (will prompt for username and password)
twine upload wheels-*/*.whl sdist/*.tar.gz
username: __token__
password: pypi-AgEIcHlwaS... (paste your token)
export TWINE_USERNAME=__token__
export TWINE_PASSWORD=pypi-AgEIcHlwaS...
twine upload wheels-*/*.whl sdist/*.tar.gz
~/.pypirc. Let's check:-rw-r--r-- 1 tom staff 501 Oct 1 13:19 /Users/tom/.pypirc
--- File exists ---
[distutils]
index-servers =
pypi
[distutils]
index-servers =
pypi
testpypi
[pypi]
username = __token__
password = [REDACTED]
[testpypi]
username = __token__
password = [REDACTED]
# Download artifacts
gh run download 19456394642
# Upload directly (will use saved token)
twine upload wheels-*/*.whl sdist/*.tar.gz
~/.pypirc automatically!pycpl project on PyPI (probably ESO's version). Let me check:(eval):1: command not found: pip
{"message": "Not Found"}
pycpl doesn't exist on PyPI, but PyPI might be blocking it due to name similarity with another project. Let me check for variations:Checking :
EXISTS
Checking :
Checking :
EXISTS
Checking :
EXISTS
Checking :
EXISTS
Checking :
EXISTS
pycpl-bundledpycpl-standalone pycpl-completecpl-python (reverse the name)[-_.] with a single dashpycpl = PyCPL = py-cpl = py_cpl = Py.CPLpycpl-bundled → pycpl-bundled ✓ (different from pycpl)pycpl-standalone → pycpl-standalone ✓pycplbundled → pycplbundled ✓ (no separator!)pycpl2 → pycpl2 ✓cpl → cpl ✓python-cpl → python-cpl ✓pycpl-bundledpycplpyproject.toml:name = "pycpl-bundled"
pycpl-bundled, packages depending on pycpl won't recognize it as satisfying that dependency. # edps requires pycpl
pip install edps
# Won't find pycpl-bundled, will install ESO's pycpl instead
twine upload ... 2>&1 | cat
- If it's abandoned/reserved, request it from PyPI supportpycpluv can't solve this - it's a packaging metadata limitation. Python packaging doesn't have a working "Provides" mechanism like other ecosystems (Debian, RPM, etc.).# Try installing it
uv pip install pycpl
# Check pip/uv's package list
uv pip index versions pycpl --index-url https://pypi.org/simple/
pycpl name, not working around it.pycpl is blocked but doesn't exist on PyPI, your options:Email: admin@pypi.org
Subject: Request for package name "pycpl"
Body:
I'm trying to publish a bundled distribution of pycpl but getting
"name too similar" error. The project doesn't appear to exist on
PyPI. Can you clarify what's blocking this name or release it?
My GitHub repo: https://github.com/ivh/pycpl
name = "pycpl-test-upload" # temporary
Upload, then delete the test project and pursue getting real name.# Download the artifacts
gh run download 19456394642
# Create a release with the wheels
gh release create v1.0.3.post1 \
--title "v1.0.3.post1" \
--notes "Bundled distribution with all C dependencies included" \
wheels-*/*.whl \
sdist/*.tar.gz
# Linux
pip install https://github.com/ivh/pycpl/releases/download/v1.0.3.post1/pycpl-1.0.3.post1-cp311-cp311-manylinux_2_28_x86_64.whl
# Or with uv (shorter)
uv pip install https://github.com/ivh/pycpl/releases/download/v1.0.3.post1/pycpl-1.0.3.post1-cp311-cp311-manylinux_2_28_x86_64.whl
.github/workflows/python-publish.yml: create_release:
needs: [build_wheels, build_sdist]
runs-on: ubuntu-latest
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
permissions:
contents: write
steps:
- uses: actions/download-artifact@v4
with:
pattern: wheels-*
merge-multiple: true
path: dist/
- uses: actions/download-artifact@v4
with:
name: sdist
path: dist/
- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
files: dist/*
55→ path: dist/*.tar.gz
56→
57→ upload_pypi:
58→ needs: [build_wheels, build_sdist]
59→ runs-on: ubuntu-latest
60→ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
61→ permissions:
62→ id-token: write
63→ steps:
64→ - uses: actions/download-artifact@v4
... (content hidden) ...
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
55→ path: dist/*.tar.gz
56→
57→ upload_pypi:
58→ needs: [build_wheels, build_sdist]
59→ runs-on: ubuntu-latest
60→ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
61→ permissions:
62→ id-token: write
63→ steps:
64→ - uses: actions/download-artifact@v4
65→ with:
66→ pattern: wheels-*
67→ merge-multiple: true
68→ path: dist/
69→
70→ - uses: actions/download-artifact@v4
71→ with:
72→ name: sdist
73→ path: dist/
74→
75→ - name: Publish to PyPI
76→ uses: pypa/gh-action-pypi-publish@release/v1
77→
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
[master a8d6665] add GitHub Release with wheel attachments
1 file changed, 24 insertions(+)
create_release job to the workflow.v1.0.3.post1)Exit code 137
[Request interrupted by user for tool use]
# Can't auto-select wheel
uv pip install https://github.com/ivh/pycpl/releases/tag/v1.0.3.post1 # ❌
# Create gh-pages branch with index
mkdir -p simple/pycpl
cd simple/pycpl
# Generate index.html pointing to release wheels
cat > index.html <<EOF
<!DOCTYPE html>
<html>
<body>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post1/pycpl-1.0.3.post1-cp311-cp311-manylinux_2_28_x86_64.whl">pycpl-1.0.3.post1-cp311-cp311-manylinux_2_28_x86_64.whl</a><br/>
<!-- add more wheels -->
</body>
</html>
EOF
uv pip install pycpl --index-url https://ivh.github.io/pycpl/simple/
[tool.uv.index]
url = "https://ivh.github.io/pycpl/simple/"
uv pip install git+https://github.com/ivh/pycpl.git@v1.0.3.post1
Web search results for query: "install python wheels from GitHub releases without PyPI 2024"
Links: [{"title":"How to use GitHub to host Python wheels - Zameer Manji","url":"https://zameermanji.com/blog/2022/8/17/how-to-use-github-to-host-python-wheels/"},{"title":"git - How to install an already distributable Python package (wheel) from a private github repository? - Stack Overflow","url":"https://stackoverflow.com/questions/74748486/how-to-install-an-already-distributable-python-package-wheel-from-a-private-gi"},{"title":"Python 3.10: pip installs wheel for ancient Python versions · Issue #10617 · pypa/pip","url":"https://github.com/pypa/pip/issues/10617"},{"title":"python - pip install wheel version from private github repo - Stack Overflow","url":"https://stackoverflow.com/questions/51181840/pip-install-wheel-version-from-private-github-repo"},{"title":"Installing wheels directly from GitHub - Python Help - Discussions on Python.org","url":"https://discuss.python.org/t/installing-wheels-directly-from-github/72437"},{"title":"piwheels - FAQ","url":"https://www.piwheels.org/faq.html"},{"title":"Best way to install and manage a private Python package that has a continuously updating Wheel","url":"https://community.databricks.com/t5/data-engineering/best-way-to-install-and-manage-a-private-python-package-that-has/td-p/7871"},{"title":"Pip install wheel from private github repo - Stack Overflow","url":"https://stackoverflow.com/questions/59847635/pip-install-wheel-from-private-github-repo"},{"title":"GitHub - cgohlke/win_arm64-wheels: Experimental wheels for Python for Windows on ARM64.","url":"https://github.com/cgohlke/win_arm64-wheels"},{"title":"GitHub - explosion/wheelwright: 🎡 Automated build repo for Python wheels and source packages","url":"https://github.com/explosion/wheelwright"}]
Based on the search results, here are the main methods for installing Python wheels from GitHub releases without PyPI:
## Method 1: Using pip with --find-links
You can use pip's `--find-links` flag to point to a GitHub release page URL, which allows pip to discover and install wheels from that location. However, in current versions of pip, pip no longer prefers wheels found in --find-links over PyPI, so you need to add --no-index to the command.
Example command:
```bash
pip install package-name --find-links https://github.com/user/repo/releases --no-index
```
## Method 2: Direct Download and Local Install
Wheels can be downloaded from the GitHub Releases page, and when you download the wheel manually and install it with its local path, it works.
```bash
pip install /path/to/downloaded-wheel.whl
```
## Method 3: For Private Repositories
You can use the ~/.netrc file on most systems for authenticating HTTP requests - curl, wget and git will respect this file by default for authenticating HTTPS requests.
## Important Limitation
According to current pip documentation, installing wheels (with or without pinned version) from VCS is currently not supported by pip, and maybe it never will.
The search results suggest that as of 2024, the most reliable approach is either using `--find-links` with `--no-index`, or downloading wheels from GitHub releases and installing them locally.
Web search results for query: "pip find-links GitHub releases 2024 uv"
Links: [{"title":"Allow configuring FIND_LINKS with an environment variable · Issue #1839 · astral-sh/uv","url":"https://github.com/astral-sh/uv/issues/1839"},{"title":"Support `pip download` · Issue #3163 · astral-sh/uv","url":"https://github.com/astral-sh/uv/issues/3163"},{"title":"`uv` does not understand URL-encoded link data · Issue #1542 · astral-sh/uv","url":"https://github.com/astral-sh/uv/issues/1542"},{"title":"uv pip compile with --find-links and --generate-hashes does not generate hashes for wheels (.whl) · Issue #3874 · astral-sh/uv","url":"https://github.com/astral-sh/uv/issues/3874"},{"title":"Ultimate guide to uv library in Python","url":"https://deepnote.com/blog/ultimate-guide-to-uv-library-in-python"},{"title":"Package indexes | uv","url":"https://docs.astral.sh/uv/concepts/indexes/"},{"title":"```uv pip install``` with ```--find-links``` and ```--extra-index-url``` · Issue #12425 · astral-sh/uv","url":"https://github.com/astral-sh/uv/issues/12425"},{"title":"Settings | uv","url":"https://docs.astral.sh/uv/reference/settings/"},{"title":"uv · PyPI","url":"https://pypi.org/project/uv/0.2.36/"},{"title":"Compatibility with pip | uv","url":"https://docs.astral.sh/uv/pip/compatibility/"}]
Based on the search results, here's what I found about using pip's `--find-links` with GitHub releases and uv in 2024:
## uv's Support for `--find-links`
uv supports "flat" indexes, which are local directories or HTML pages that contain flat lists of wheels and source distributions, and in pip, such indexes are specified using the --find-links option.
## Configuration Options
You can use `--find-links` with uv in multiple ways:
1. **Command-line**: Just like pip, you can pass `--find-links` directly to uv commands
2. **Configuration file**: To define a flat index in your pyproject.toml, use the format = "flat" option
## Important Behavior Differences
From experiments, it appears that uv prefers the wheel existing in repository passed by the --extra-index-url instead of the one in the path passed in --find-links directory. This is a known issue raised in March 2025 (Issue #12425).
## Additional Context
You can ignore all registry indexes (e.g., PyPI), instead relying on direct URL dependencies and those provided via --find-links using the appropriate configuration option.
The tool is actively developed, with uv first released in early 2024, and continues to evolve its compatibility with pip's features including find-links functionality.
# Hosting Python Wheels on GitHub
## Recommended Approach
The strategy involves two key techniques:
1. **Custom Build Numbers**: When rebuilding wheels with modified compilation flags, use `bdist_wheel` with the `--build-number` flag. This creates a wheel name like `pyzstd-0.15.2-1-cp310-cp310-linux_x86_64.whl`, where the build number acts as a "tie-breaker" that ensures pip prefers this version over the standard PyPI release.
2. **GitHub Releases + pip's `--find-links`**: Upload the compiled wheels to a GitHub release page, then direct pip to discover them using the `--find-links` flag pointing to the release URL.
## Installation Instructions
Users should install the custom wheels with:
```bash
pip install --no-cache --only-binary ':all:' \
--find-links 'https://github.com/[user]/[repo]/releases/tag/[version]' \
'[package-name]==[version]' \
--no-index
```
The `--no-index` flag is necessary in current pip versions to prevent PyPI from taking precedence. Alternatively, users can configure a local index proxy (like simpleindex) that excludes the package from PyPI, forcing pip to use the GitHub-hosted wheels via `--find-links`.
--find-links with your GitHub release URL:# With pip
pip install pycpl==1.0.3.post1 \
--find-links https://github.com/ivh/pycpl/releases/tag/v1.0.3.post1 \
--no-index
# With uv
uv pip install pycpl==1.0.3.post1 \
--find-links https://github.com/ivh/pycpl/releases/tag/v1.0.3.post1 \
--no-index
[tool.uv]
find-links = ["https://github.com/ivh/pycpl/releases/tag/v1.0.3.post1"]
no-index = true # Prevents falling back to PyPI
requirements.txt:--find-links https://github.com/ivh/pycpl/releases/tag/v1.0.3.post1
--no-index
pycpl==1.0.3.post1
--find-links tells pip/uv to look for wheels at that URL--no-index prevents PyPI lookups.github/workflows/build-wheels.yml using cibuildwheelpyproject.tomlbuild-wheels.yml to python-publish.yml (matching PyPI trusted publishing config)-DCMAKE_INSTALL_LIBDIR=lib to all CMake builds in setup.pyMACOSX_DEPLOYMENT_TARGET = "10.15" in pyproject.tomlDevelopment to Development.Module in CMakeLists.txt:48--disable-java to CPL configurerepair-wheel-command = "" for both Linux and macOS in pyproject.toml_copy_vendored_libraries()INSTALL_RPATH "$<IF:$<PLATFORM_ID:Darwin>,@loader_path,$ORIGIN>"_fix_darwin_install_names() in setup.py to use @rpath/libnamemacos-13, macos-14 to macos-15-intel, macos-latestMACOSX_DEPLOYMENT_TARGET from 10.15 to 11.0archs = ["native"])ubuntu-22.04 to ubuntu-latest1.0.3 matching ESO's version1.0.3.post1 to differentiate from ESO's version while still being higherpycpl appears blocked on PyPIpycplCLAUDE.md with comprehensive build system documentation--find-links with GitHub release URLs, allowing auto-selection of correct wheels without manual download.--find-links solution works with both pip and uv, can be configured in pyproject.toml or requirements.txt.$ORIGIN) and macOS (@loader_path).github/workflows/python-publish.ymlbuild-wheels.yml to python-publish.yml for PyPI trusted publishingv* and manual dispatch[ubuntu-latest, macos-15-intel, macos-latest]create_release job to attach wheels to GitHub Releasescreate_release:
needs: [build_wheels, build_sdist]
runs-on: ubuntu-latest
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
permissions:
contents: write
steps:
- uses: actions/download-artifact@v4
with:
pattern: wheels-*
merge-multiple: true
path: dist/
- uses: actions/download-artifact@v4
with:
name: sdist
path: dist/
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
files: dist/*
fail_on_unmatched_files: true
pyproject.toml1.0.3.post1 (post-release to be higher than ESO's 1.0.3)["cp311-", "cp312-", "cp313-", "cp314-"]repair-wheel-command = ""11.0["native"] for native builds onlymanylinux_2_28[tool.cibuildwheel]
build = ["cp311-*", "cp312-*", "cp313-*", "cp314-*"]
skip = ["*-musllinux_*", "*-win32", "*-manylinux_i686"]
build-verbosity = 1
[tool.cibuildwheel.linux]
archs = ["x86_64"]
before-build = "yum install -y autoconf automake libtool"
repair-wheel-command = ""
build = "*manylinux*"
manylinux-x86_64-image = "manylinux_2_28"
[tool.cibuildwheel.macos]
archs = ["native"]
before-build = "brew install autoconf automake libtool"
repair-wheel-command = ""
environment = { MACOSX_DEPLOYMENT_TARGET = "11.0" }
CMakeLists.txtDevelopment to Development.Module at line 48find_package(Python3 REQUIRED COMPONENTS Interpreter Development.Module)
set_target_properties(cpl PROPERTIES
C_STANDARD 17
C_STANDARD_REQUIRED YES
C_EXTENSIONS OFF
CXX_STANDARD 17
CXX_STANDARD_REQUIRED YES
CXX_EXTENSIONS OFF
BUILD_RPATH_USE_ORIGIN TRUE
BUILD_WITH_INSTALL_RPATH TRUE
INSTALL_RPATH "$<IF:$<PLATFORM_ID:Darwin>,@loader_path,$ORIGIN>")
setup.py-DCMAKE_INSTALL_LIBDIR=lib to cfitsio (lines 124) and both fftw builds (lines 148, 166)--disable-java to CPL configure (line 283)env.pop("JAVA_HOME", None) to prevent Java detection (line 247)_fix_darwin_install_names() to use @rpath/libname instead of absolute pathsdef _fix_darwin_install_names(self, lib_dir: Path, libraries: list[str]) -> None:
"""Fix macOS dylib install names and dependencies to use @rpath so they can be relocated."""
if sys.platform != "darwin":
return
lib_dir = Path(lib_dir)
# First pass: fix install names
for name in libraries:
dylib = lib_dir / name
if not dylib.exists():
continue
subprocess.run(
["install_name_tool", "-id", f"@rpath/{name}", str(dylib)],
check=True,
)
# Second pass: fix dependencies between libraries
for name in libraries:
dylib = lib_dir / name
if not dylib.exists():
continue
# Get list of dependencies
result = subprocess.run(
["otool", "-L", str(dylib)],
capture_output=True,
text=True,
check=True,
)
# Parse otool output and fix any absolute paths
for line in result.stdout.splitlines()[1:]:
line = line.strip()
if not line:
continue
dep_path = line.split('(')[0].strip()
# If it's an absolute path in the build directory, fix it
if str(lib_dir) in dep_path or "/Users/runner/" in dep_path:
dep_name = Path(dep_path).name
subprocess.run(
["install_name_tool", "-change", dep_path, f"@rpath/{dep_name}", str(dylib)],
check=True,
)
CLAUDE.mdsetup.cfg-DCMAKE_INSTALL_LIBDIR=lib to force lib directory for cfitsio and fftw builds'visit' is unavailable: introduced in macOS 10.13, 'path' is unavailable: introduced in macOS 10.15MACOSX_DEPLOYMENT_TARGET = "10.15" in pyproject.tomlCould NOT find Python3 (missing: Python3_LIBRARIES Development Development.Embed)Development to Development.Modulemake[3]: * No rule to make target '-lltdl', needed by 'libcplgasgano.la'--disable-java to CPL configure AND env.pop("JAVA_HOME", None)ValueError: Cannot repair wheel, because required library "libfftw3.so.3.6.9" could not be locatedrepair-wheel-command = "" for both Linux and macOS to skip repair toolsImportError: libcpldrs.so.26: cannot open shared object file: No such file or directoryLibrary not loaded: /Users/runner/work/pycpl/.../libcpldrs.26.dylib_fix_darwin_install_names() to use @rpath/libname instead of absolute paths, added second pass to fix inter-library dependenciesarchs = ["x86_64", "arm64"] to archs = ["native"]Token request failed: the server refused the request... invalid-publisherThe name 'pycpl' is too similar to an existing project1.0.3.post1 to be higher than ESO's but indicate it's a repackaging.post1 suffix saying "then folks at eso can select theirs by pycpl==1.0.3 but my 1.0.3post1 becomes default"--find-links--find-links usage for users in README--find-links feature with GitHub release URLs.# With pip
pip install pycpl==1.0.3.post1 \
--find-links https://github.com/ivh/pycpl/releases/tag/v1.0.3.post1 \
--no-index
# With uv
uv pip install pycpl==1.0.3.post1 \
--find-links https://github.com/ivh/pycpl/releases/tag/v1.0.3.post1 \
--no-index
pyproject.toml:[tool.uv]
find-links = ["https://github.com/ivh/pycpl/releases/tag/v1.0.3.post1"]
no-index = true
requirements.txt:--find-links https://github.com/ivh/pycpl/releases/tag/v1.0.3.post1
--no-index
pycpl==1.0.3.post1
--find-links solution which addresses their question, the immediate task is complete. --find-links method, since PyPI publishing is currently blocked. This would make the installation instructions clear for users.--find-links works with both pip and uv, automatically selects correct wheels, and can be configured in pyproject.toml or requirements.txt, which fully addresses the user's request for an easier installation method..--find-links parser. Let me check a few things:v1.0.3.post1 Latest v1.0.3.post1 2025-11-18T07:28:30Z
v1.0.3.post1
pycpl-1.0.3.post1-cp311-cp311-linux_x86_64.whl
pycpl-1.0.3.post1-cp311-cp311-macosx_10_15_x86_64.whl
pycpl-1.0.3.post1-cp311-cp311-macosx_11_0_arm64.whl
pycpl-1.0.3.post1-cp311-cp311-linux_x86_64.whl
pycpl-1.0.3.post1-cp311-cp311-macosx_10_15_x86_64.whl
pycpl-1.0.3.post1-cp311-cp311-macosx_11_0_arm64.whl
pycpl-1.0.3.post1-cp312-cp312-linux_x86_64.whl
pycpl-1.0.3.post1-cp312-cp312-macosx_10_15_x86_64.whl
pycpl-1.0.3.post1-cp312-cp312-macosx_11_0_arm64.whl
pycpl-1.0.3.post1-cp313-cp313-linux_x86_64.whl
pycpl-1.0.3.post1-cp313-cp313-macosx_10_15_x86_64.whl
pycpl-1.0.3.post1-cp313-cp313-macosx_11_0_arm64.whl
pycpl-1.0.3.post1.tar.gz
File created successfully at: /Users/tom/pipes/pycpl.git/docs/index.html
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post1/pycpl-1.0.3.post1-cp311-cp311-linux_x86_64.whl">pycpl-1.0.3.post1-cp311-cp311-linux_x86_64.whl</a><br>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post1/pycpl-1.0.3.post1-cp311-cp311-macosx_10_15_x86_64.whl">pycpl-1.0.3.post1-cp311-cp311-macosx_10_15_x86_64.whl</a><br>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post1/pycpl-1.0.3.post1-cp311-cp311-macosx_11_0_arm64.whl">pycpl-1.0.3.post1-cp311-cp311-macosx_11_0_arm64.whl</a><br>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post1/pycpl-1.0.3.post1-cp311-cp311-linux_x86_64.whl">pycpl-1.0.3.post1-cp311-cp311-linux_x86_64.whl</a><br>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post1/pycpl-1.0.3.post1-cp311-cp311-macosx_10_15_x86_64.whl">pycpl-1.0.3.post1-cp311-cp311-macosx_10_15_x86_64.whl</a><br>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post1/pycpl-1.0.3.post1-cp311-cp311-macosx_11_0_arm64.whl">pycpl-1.0.3.post1-cp311-cp311-macosx_11_0_arm64.whl</a><br>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post1/pycpl-1.0.3.post1-cp312-cp312-linux_x86_64.whl">pycpl-1.0.3.post1-cp312-cp312-linux_x86_64.whl</a><br>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post1/pycpl-1.0.3.post1-cp312-cp312-macosx_10_15_x86_64.whl">pycpl-1.0.3.post1-cp312-cp312-macosx_10_15_x86_64.whl</a><br>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post1/pycpl-1.0.3.post1-cp312-cp312-macosx_11_0_arm64.whl">pycpl-1.0.3.post1-cp312-cp312-macosx_11_0_arm64.whl</a><br>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post1/pycpl-1.0.3.post1-cp313-cp313-linux_x86_64.whl">pycpl-1.0.3.post1-cp313-cp313-linux_x86_64.whl</a><br>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post1/pycpl-1.0.3.post1-cp313-cp313-macosx_10_15_x86_64.whl">pycpl-1.0.3.post1-cp313-cp313-macosx_10_15_x86_64.whl</a><br>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post1/pycpl-1.0.3.post1-cp313-cp313-macosx_11_0_arm64.whl">pycpl-1.0.3.post1-cp313-cp313-macosx_11_0_arm64.whl</a><br>
File created successfully at: /Users/tom/pipes/pycpl.git/docs/pycpl/index.html
On branch master
Your branch is ahead of 'origin/master' by 3 commits.
(use "git push" to publish your local commits)
On branch master
Your branch is ahead of 'origin/master' by 3 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
total 4
drwxr-xr-x 5 tom staff 160 Nov 18 08:49 .
drwxr-xr-x 32 tom staff 1024 Nov 18 08:49 ..
total 4
drwxr-xr-x 5 tom staff 160 Nov 18 08:49 .
drwxr-xr-x 32 tom staff 1024 Nov 18 08:49 ..
-rw-r--r-- 1 tom staff 0 Nov 18 08:49 .nojekyll
-rw------- 1 tom staff 168 Nov 18 08:49 index.html
drwxr-xr-x 3 tom staff 96 Nov 18 08:49 pycpl
# Documentation builds (generated HTML docs)
docs/_build/
**/doc/
# Documentation builds (generated HTML docs)
docs/_build/
**/doc/
**/docs/
docs/ directory is gitignored. Let me use simple/ instead, which is the conventional name for PyPI-compatible package indexes:File created successfully at: /Users/tom/pipes/pycpl.git/simple/index.html
File created successfully at: /Users/tom/pipes/pycpl.git/simple/pycpl/index.html
On branch master
Your branch is ahead of 'origin/master' by 3 commits.
(use "git push" to publish your local commits)
On branch master
Your branch is ahead of 'origin/master' by 3 commits.
(use "git push" to publish your local commits)
Untracked files:
(use "git add <file>..." to include in what will be committed)
simple/
nothing added to commit but untracked files present (use "git add" to track)
git add simple/
git commit -m "add package index for GitHub Pages"
git push
uv pip install pycpl==1.0.3.post1 \
--index-url https://ivh.github.io/pycpl/simple/
pyproject.toml:[tool.uv]
index-url = "https://ivh.github.io/pycpl/simple/"
requirements.txt:--index-url https://ivh.github.io/pycpl/simple/
pycpl==1.0.3.post1
https://ivh.github.io/pycpl/simple/ and pip/uv will automatically find the right wheel for the user's platform and Python version.simple/pycpl/index.html when you release new versions. We could automate this with a GitHub Action if you want.[master 8ed7de1] add package index for GitHub Pages
3 files changed, 28 insertions(+)
create mode 100644 simple/.nojekyll
[master 8ed7de1] add package index for GitHub Pages
3 files changed, 28 insertions(+)
create mode 100644 simple/.nojekyll
create mode 100644 simple/index.html
create mode 100644 simple/pycpl/index.html
To github.com:ivh/pycpl.git
cfe8666..8ed7de1 master -> master
uv pip install pycpl==1.0.3.post1 --index-url https://ivh.github.io/pycpl/simple/
--index-url replaces PyPI, so it can't find dependencies. Use --extra-index-url instead to add your index alongside PyPI:uv pip install pycpl==1.0.3.post1 --extra-index-url https://ivh.github.io/pycpl/simple/
pyproject.toml:[tool.uv]
extra-index-url = ["https://ivh.github.io/pycpl/simple/"]
requirements.txt:--extra-index-url https://ivh.github.io/pycpl/simple/
pycpl==1.0.3.post1
uv pip install pycpl \
--extra-index-url https://ivh.github.io/pycpl/simple/ \
--extra-index-url https://download.pytorch.org/whl/cpu
[tool.uv]
extra-index-url = [
"https://ivh.github.io/pycpl/simple/",
"https://download.pytorch.org/whl/cpu"
]
--extra-index-url https://ivh.github.io/pycpl/simple/
--extra-index-url https://download.pytorch.org/whl/cpu
pycpl==1.0.3.post1
1→# PyCPL with batteries included
2→
3→**This is an unofficial re-packaging of ESO's PyCPL**
4→
5→In contrast to the ESO's own package, which is available from [their own index](https://ftp.eso.org/pub/dfs/pipelines/libraries/) but not from PyPI, this one comes with the necessary C-libraries (CPL, cfitsio, wcsloib, fftw) included, so they won't have to be installed separately and made to be found by the package.
6→
7→A few things to note:
8→* This a quick afternoon-project and there are no guarantees on how well it works. Pull requests welcome. All credit goes to the original library authors and to ClaudeCode for figuring out how to put together this package.
9→* There is a GitHub workflow that builds pre-compiled wheels for Python 3.11 to 3.14 on Linux and MacOS, so installation should be very quick. No Windows support.
10→* For technical details on the build system, see [CLAUDE.md](CLAUDE.md).
... (content hidden) ...
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
1→# PyCPL with batteries included
2→
3→**This is an unofficial re-packaging of ESO's PyCPL**
4→
5→In contrast to the ESO's own package, which is available from [their own index](https://ftp.eso.org/pub/dfs/pipelines/libraries/) but not from PyPI, this one comes with the necessary C-libraries (CPL, cfitsio, wcsloib, fftw) included, so they won't have to be installed separately and made to be found by the package.
6→
7→A few things to note:
8→* This a quick afternoon-project and there are no guarantees on how well it works. Pull requests welcome. All credit goes to the original library authors and to ClaudeCode for figuring out how to put together this package.
9→* There is a GitHub workflow that builds pre-compiled wheels for Python 3.11 to 3.14 on Linux and MacOS, so installation should be very quick. No Windows support.
10→* For technical details on the build system, see [CLAUDE.md](CLAUDE.md).
11→* I chose the package version number the same as ESO's, but appending *.post1* which means it's higher and takes precedence but will not interfere with their future versioning. If you want original pycpl from ESO, use only their index and/or install the fixed version number like *pycpl==1.0.3* .
12→* The installation instructions below do not apply to this package. Instead do `(uv) pip install pycpl --extra-index-url https://ivh.github.io/pycpl/simple/` or add the URL to your *pyproject.toml*. Like this, `uv sync` will install *pycpl* from here and *pyesorex* and *edps* from ESO, having them use the bundled pycpl:
13→
14→```
15→[project]
16→# ...
17→dependencies = ['pycpl','pyesorex','edps']
18→
19→[tool.uv]
20→extra-index-url = [
21→ "https://ivh.github.io/pycpl/simple/",
22→ "https://ftp.eso.org/pub/dfs/pipelines/libraries/"
23→]
24→```
25→
26→Original ESO README from here on:
27→
28→# PyCPL — Python 3 bindings for the ESO Common Pipeline Library
29→
30→PyCPL provides Python 3 bindings for the ESO Common Pipeline Library (CPL) via Pybind11. It allows for using the ESO Common Pipeline Library in Python scripts, or the Python interpreter, and thus allows for implementing instrument individual pipeline recipes or entire instrument pipelines in Python. In addition to providing an interface to implement pipeline recipes in Python, it also provides the necessary Python bindings to execute the recipes of traditional instrument pipelines implemented directly in C/C++ using the ESO Common Pipeline Library (CPL). Together with the command line tool PyEsoRex, a drop-in replacement for the EsoRex command line tool, any combination of instrument pipeline recipes implemented in Python or C/C++ can be executed transparently from the shell prompt with the same user experience as provided by the EsoRex tool.
31→
32→## What PyCPL consists of
33→
34→PyCPL is organized into four Python sub-modules, one for each of the four main CPL component libraries: _libcplcore_, _libcplui_, _libcpldfs_, and _libcpldrs_. The corresponding PyCPL modules are:
35→
36→- **cpl.core** which provides access to the core PyCPL/CPL classes like _Image_, _ImageList_, _Table_, _Property_ and _PropertyList_, _Vector_, _Matrix_, the functions to manipulate them, and provisions for error and exception handling,
37→- **cpl.ui** which provides the means to interface with Python and native recipe implementation. It provides the classes _Parameter_ and its subclasses, _ParameterList_, _Frame_, _FrameSet_, and the interfaces _PyRecipe_ and _CRecipe_,
38→- **cpl.dfs** which provides the functions to write data products complying to the ESO data standards,
39→- **cpl.drs** which provides selected, higher level data reduction functions, including sub-modules for point pattern matching and fast fourier transformation
40→
41→These submodules provide the bindings for all major CPL APIs. For the full list of provided sub-modules, classes, and functions, refer to the [PyCPL API reference](https://www.eso.org/sci/software/pycpl/pycpl-site/reference.html).
42→
43→## PyCPL features
44→
45→Once installed, PyCPL can be imported from python as a module named `cpl`.
46→```python
47→import cpl
48→```
49→
50→### Numpy array compatible objects
51→Some CPL objects can be converted to numpy arrays, for example
52→```python
53→im=cpl.core.Image([[1,2,3],[4,5,6]])
54→as_arr = np.array(im)
55→```
56→### Error handling
57→CPL functions may raiseemit CPL specific error codes. PyCPL will throw any detected error codes as a custom exception. For example:
58→```python
59→mask = cpl.core.Mask(-3,-3) # Raises IllegalInputError
60→```
61→
62→The custom PyCPL exceptions are part of the submodule `cpl.core`. The following is the list of custom PyCPL exceptions and their respective base classes:
63→- AccessOutOfRangeError(Error, builtins.LookupError)
64→- AssigningStreamError(Error, builtins.RuntimeError)
65→- BadFileFormatError(Error, builtins.RuntimeError)
66→- ContinueError(Error, builtins.RuntimeError)
67→- DataNotFoundError(Error, builtins.RuntimeError)
68→- DivisionByZeroError(Error, builtins.RuntimeError)
69→- DuplicatingStreamError(Error, builtins.RuntimeError)
70→- EOLError(Error, builtins.RuntimeError)
71→- ErrorLostError(Error, builtins.RuntimeError)
72→- FileAlreadyOpenError(Error, builtins.RuntimeError)
73→- FileIOError(Error, builtins.RuntimeError)
74→- FileNotCreatedError(Error, builtins.RuntimeError)
75→- FileNotFoundError(Error, builtins.RuntimeError)
76→- IllegalInputError(Error, builtins.ValueError)
77→- IllegalOutputError(Error, builtins.RuntimeError)
78→- IncompatibleInputError(Error, builtins.ValueError)
79→- InvalidTypeError(Error, builtins.RuntimeError)
80→
81→These exceptions can be caught via their PyCPL name or their Python base class name:
82→```python
83→try:
84→ cpl.core.Mask(-3,-3)
85→except cpl.core.IllegalInputError:
86→ print("Mask failed to build due to negative indices")
87→```
88→or
89→```python
90→try:
91→ cpl.core.Mask(-3,-3)
92→except ValueError:
93→ print("Mask failed to build due to negative indices")
94→```
95→
96→### Frames & Sets
97→Frame objects can be created from a filename and metadata:
98→```python
99→frameDefaultsToNones = cpl.ui.Frame("existing_file.fits")
100→
101→ frameWithParameters = cpl.ui.Frame(
102→ "/path/to/fitsfile.fits", tag="BIAS",
103→ group=cpl.ui.Frame.FrameGroup.CALIB
104→)
105→```
106→FrameSets can either be created:
107→```python
108→fromScratch = cpl.ui.FrameSet()
109→fromScratch.append(frameWithParameters)
110→```
111→Or imported from a .sof (Set of Frames) file:
112→```python
113→fromSOF= cpl.ui.FrameSet("/path/to/frameset.sof")
114→firstFrame = frameSOF[0]
115→```
116→
117→### Executing CRecipes
118→
119→To execute a native recipe, first fetch the recipe object (by name). Then, call its `run` method with the input parameters and
120→a frameset.
121→```python
122→giwcal = cpl.ui.CRecipe("giwavecalibration")
123→output_frames = giwcal.run(fromSOF, {"giraffe.wcal.rebin": True})
124→```
125→A list of available recipes can be obtained by querying the read-only property `cpl.ui.CRecipe.recipes`.
126→
127→## User Documentation
128→
129→The documentation for the general user, including download links, installation instructions, tutorial, and the API reference are available on the [PyCPL web site](https://www.eso.org/sci/software/pycpl/). If you are interested in installing and using PyCPL for production use it is recommended that you continue reading there.
130→
131→## Building and Installing PyCPL
132→
133→The following instructions are directed towards developers and experienced users. Please note that they are not a step by step tutorial!
134→
135→### Software prerequisites
136→
137→* cpl >= 7.2.2
138→* python >= 3.9
139→* Python development headers
140→ * package python3-devel (On Fedora, Red Hat, CentOS, etc.)
141→ * package python3-dev (On Ubuntu, Debian, etc.)
142→* gcc >= 9.5
143→* pybind11 >= 2.8.0
144→* cmake >= 3.12
145→
146→#### Installing pybind11
147→
148→You can choose either the packaged pybind from your linux vendor if you are not using any virtual environment, e.g. for RPM based distribution (Fedora, RedHat, CentOS, etc.):
149→```shell
150→sudo dnf install python3-pybind11
151→```
152→**or** you can install pybind11 with `pip`.
153→```shell
154→python3 -m pip install pybind11
155→```
156→In general the preferred method of installing pybind11 is to use using `pip`.
157→
158→#### Installing CPL
159→
160→In order to install PyCPL an installation of CPL, including the development files are needed. A compatible, public version can be obtained from
161→the ESO repositories as RPM or MacPorts package. To setup the ESO repositories follow the instructions for [RPM packages](https://www.eso.org/sci/software/pipelines/installation/rpm.html) and [MacPorts packages](https://www.eso.org/sci/software/pipelines/installation/macports.html) respectively. CPL can also be installed from the public source packages which can be obtained from the [CPL download page](https://www.eso.org/sci/software/cpl/download.html).
162→
163→ For developers development versions of CPL are also available from the ESO [GitLab](https://gitlab.eso.org) repositories (**ESO internal access only**). Building CPL from a checked out working copy requires additional (build-time) dependencies, like the GNU autotools (autoconf, automake and libtool) and the libltdl development package, to be installed.
164→
165→The typical installation process is the following, when installing:
166→
167→* from the ESO Fedora repositories:
168→ ```shell
169→ sudo dnf install cpl-devel
170→ ```
171→* from the ESO MacPorts repositories:
172→ ```shell
173→ sudo port install cpl
174→ ```
175→* from a public release tar archive:
176→ ```shell
177→ tar -zxvf cpl-7.3.2.tar.gz
178→ cd cpl-7.3.2
179→ ./configure --prefix=/usr/local --with-cfitsio=/usr/local --with-wcslib=/usr/local --with-fftw=/usr/local
180→ make
181→ sudo make install
182→ ```
183→* from an ESO GitLab working copy:
184→ ```shell
185→ git clone https://gitlab.eso.org/pipelines/cext.git
186→ cd cext
187→ ./autogen.sh
188→ ./configure --prefix=/usr/local
189→ make
190→ sudo make install
191→ cd ..
192→ git clone https://gitlab.eso.org/pipelines/cpl.git
193→ cd cpl
194→ ./autogen.sh
195→ ./configure --prefix=/usr/local --with-cfitsio=/usr/local --with-wcslib=/usr/local --with-fftw=/usr/local --with-system-cext --with-cext=/usr/local
196→ make
197→ sudo make install
198→ ```
199→
200→### PyCPL
201→
202→For production use, public PyCPL source distribution (sdist) packages are available from the [ESO ftp server](https://ftp.eso.org/pub/dfs/pipelines/libraries/pycpl/). Installing the downloaded PyCPL source distribution can then be done like:
203→
204→* User-space installation, no venv/conda:
205→ ```shell
206→ python3 -m pip install --user -U pycpl-1.0.0.tar.gz
207→ ```
208→* Installation inside a Python 3 venv/conda environment:
209→ ```shell
210→ python3 -m pip install -U pycpl-1.0.0.tar.gz
211→ ```
212→
213→Developers and contributors rather should clone the PyCPL repository from the ESO GitLab (**ESO internal access only!**) to obtain the
214→PyCPL source code.
215→
216→Then, for installing PyCPL from within the source tree (from an unpacked source distribution, or a working copy):
217→
218→* User-space pip install, no venv/conda:
219→ ```shell
220→ cd pycpl
221→ python3 -m pip3 install --user -U .
222→ ```
223→* Installation inside a Python 3 venv/conda environment:
224→ ```shell
225→ cd pycpl
226→ python3 -m pip install -U .
227→ ```
228→pip will automatically install the required Python dependencies (astropy, numpy, pybind11, setuptools).
229→
230→Environment variables may be required if your CPL installation is not in its expected location. The CPL installation will be found automatically, if it is installed in the system using RPM or MacPorts packages. For manual installations it is safe to assume that the installation directory of CPL must be set explicitly. Non-default locations can be set with the environment variables `CPL_ROOT` **or** `CPLDIR`. If both variables are set, `CPL_ROOT` takes precedence.
231→
232→When environment variables like `CPLDIR` need to be used the installation commands become
233→* User-space pip install, no venv/conda:
234→ ```shell
235→ cd pycpl
236→ CPLDIR=/Users/Username/ESO python3 -m pip3 install --user -U .
237→ ```
238→* Installation inside a Python 3 venv/conda environment:
239→ ```shell
240→ cd pycpl
241→ CPLDIR=/Users/Username/ESO python3 -m pip install -U .
242→ ```
243→This also applies to the other environment variables which are recognized by the PyCPL build process:
244→
245→- `PYCPL_BUILD_DEBUG`
246→- `PYCPL_BUILD_SANITIZE`
247→- `PYCPL_BUILD_VERBOSE`
248→- `PYCPL_RECIPE_DIR`
249→
250→The first three are boolean variables which may be set to 0 or 1 to deactivate or activate the respective configuration. The default for all these variables is 0, i.e. inactive. The variables can be used to build PyCPL in debug mode, with support for address sanitizer, and with verbose output.
251→
252→The fourth environment variable can be used to change the default, built-in search path for pipeline recipes of PyCPL. Note that this default can
253→always be overridden by parameters or command line options when using PyCPL or PyEsoRex at run time. The default recipe search path of PyCPL is `$CPLDIR/lib/esopipe-plugins`.
254→
255→### Documentation
256→
257→The PyCPL source tree also contains the source for the PyCPL Reference Manual.
258→
259→#### Prerequisites
260→
261→Building this manual requires the Sphinx Python library and its dependencies. These can be installed using `pip` by specifying the `[doc]` extra rquirements when installing PyCPL, e.g.
262→```shell
263→cd pycpl
264→python3 -m pip install -U '.[doc]'
265→```
266→#### Building the documentation
267→
268→First change to the docs subdirectory of the PyCPL sources, e.g. `cd pycpl/doc`. The documentation can then be built using `make`, with different make targets corresponding to different output formats. For example:
269→
270→* HTML output: `make html`
271→* PDF output (requires LaTeX): `make latexpdf`
272→
273→To list all of the available targets/formats just run `make` without a target in the `docs` directory.
274→
275→After building the documentation it will be in the `pycpl/docs/_build`
276→
277→### Testing
278→
279→The PyCPL source tree includes a comprehensive set of unit, validation and regression tests.
280→
281→#### Prerequisites
282→
283→Running the PyCPL tests requires the pytest Python library and its dependencies. These can be installed using `pip`
284→by specifying the `[test]` extra requirements when installing PyCPL, e.g.
285→```shell
286→cd pycpl
287→python3 -m pip install -U .[test]
288→```
289→
290→#### Unit tests
291→
292→To run the unit tests simply run `pytest` in the top level directory of the PyCPL source tree, e.g.
293→```shell
294→cd pycpl
295→python3 -m pytest -r eFsx --log-file=pycpl_unit_tests.log
296→```
297→
298→There are many options to configure the output of pytest and select which tests are run, see the pytest documentation for details.
299→
300→Three of the unit tests require the _pandas_ Python library. If this is not installed the tests will be skipped.
301→
302→#### Validation tests
303→
304→The validation tests run a series of CPL recipes on sample data files using both EsoRex and PyCPL and compare the results to ensure that they are identical. The recipes used are from the GIRAFFE instrument pipeline and the sample data is from the GIRAFFE pipeline regression tests so both of these must be installed in order to run the PyCPL validation tests.
305→
306→* GIRAFFE pipeline: available from the [ESO Instrument Pipeline web site](https://www.eso.org/sci/software/pipelines/giraffe/)
307→* GIRAFFE regression test data: **not publicly available**
308→
309→The GIRAFFE pipeline recipes must either be installed in the CPL recipe search path (e.g. under `$CPLDIR/lib/esopipes-plugins`) or the `$PYCPL_RECIPE_DIR` environment variable should be set to a path or paths that contain the GIRAFFE recipes.
310→
311→In order to run the validation tests the environment variable `$REGTESTS` must be set to the directory containing the `sof` directory of the regression test data, for instance
312→```shell
313→export REGTESTS=$HOME/CPL/giraffe/pipedata/regression/giraffe/dfs
314→```
315→
316→If `$REGTESTS` is set then pytest will run the validation test in addition to the unit tests when it
317→is run in PyCPL source tree, e.g.
318→```shell
319→cd pycpl
320→python3 -m pytest -r eFsx --log-file=pycpl_all.log
321→```
322→
323→In order to run just the validation tests specify the file containing
324→the validation tests, e.g.
325→```shell
326→cd pycpl
327→python3 -m pytest -r eFsx --log-file=pycpl_validation.log tests/test_validation.py
328→```
329→
330→**WARNING:** The validation tests do take a long time to run.
331→
332→To disable the validation tests either `unset` the `$REGTESTS` environment variable or use the pytest `ignore` option, e.g.
333→```shell
334→cd pycpl
335→python3 -m pytest -r eFsx --ignore tests/test_validation.py --log-file=pycpl_unit_tests.log
336→```
337→
338→#### Regression tests
339→
340→Todo.
341→
342→## Technical Details
343→
344→Technical explainations on some design decisions and how the python bindings function during runtime.
345→
346→### Link between python and C++
347→Before library installation, setup.py will build the code using cmake and in turn create a CPython binary module (e.g. cpl.cpython-39m-x86_64-linux-gnu.so). This module will be the target to import for use in python.
348→
349→### Memory deallocation
350→As C++ structures are converted to bindings some questions have been raised on the ownership of memory. Generally memory allocation/deallocation is in the hands of the C++ objects. During methods all memory allocated/deallocated is controlled via the appropriate alloc/dealloc/new/delete functions. Generally allocation is called on class object constructor methods, while deallocation is called on class destructor methods. Python does however provide some automation to this in regards to the bound classes by maintaining reference counts from the python interpreter to the C++ objects: once a count reaches zero, the destructors of the object is called.
351→
352→This serves as an built-in shared pointer, and in fact for some of the objects that may be contained within other classes (such as frames) are also bound as shared pointers: this ensures that both the python references and references from C++ objects are counted for determining if an object should be destroyed. For example theres a python reference to a frame, and a frameset contains that frame: the total reference count will be 2. Once the python reference is gone, the reference count is still 1 and the frame will not be destroyed as it is contained within the frameset. Only when the frameset is dereferenced, will the frameset be destroyed, and thus dereferencing the frame, and as such the frame will be destroyed.
353→
354→### Using std::variant for parameters
355→In binding `cpl_parameter` a few issues arose regarding the creation of parameters of specific datatypes. The initial plan was to use template classes as they were thought to automatically use the datatype of the template variable during construction. However this is not the case: as templates are meant to be placeholders for type to use at compile time: and as such the compiler needs to know what to replace it with at compile time. Template classes can technically be used but are cumbersome and are ultimately pointless, as each template type for the class needs to not only be declared for binding, but also must be under a different class name. For example:
356→```c++
357→template<typename T>
358→void declare_array(py::module &m, std::string &typestr) {
359→ using Class = Array2D<T>;
360→ std::string pyclass_name = std::string("Array2D") + typestr;
361→ py::class_<Class>(m, pyclass_name.c_str(), py::buffer_protocol(), py::dynamic_attr())
362→ .def(py::init<>())
363→ .def(py::init<Class::xy_t, Class::xy_t, T>())
364→ .def("size", &Class::size)
365→ .def("width", &Class::width)
366→ .def("height", &Class::height);
367→}
368→
369→declare_array<float>(m, "float"); // Would declare class name Array2Dfloat
370→declare_array<int>(m, "int"); // Would declare class name Array2Dint
371→```
372→As we would prefer the underlying data types of the parameters to be opaque, where the user just provides a value and the datatype is automatically selected, this is
373→
374→Further complicating this is the need to use different cpl methods for retrieving and setting different kinds of parameters (for example `cpl_parameter_get_int` and `cpl_parameter_set_int` for integers, `cpl_parameter_get_string` and `cpl_parameter_set_string` for strings).
375→
376→Hence to ensure a single method is used for getting and setting parameters, `std::variant` is used instead. This allows any specified type that is part of the variant to be returned, and the on setting values, the variant can be checked for a specific type to ensure the type passed is compatible.
377→
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
* Package version is 1.0.3.post1 (higher than ESO's 1.0.3, so it takes precedence). To use ESO's original, pin to pycpl==1.0.3
* Installation: `pip install pycpl --extra-index-url https://ivh.github.io/pycpl/simple/`
Or configure in pyproject.toml to also use ESO's other packages:
This package bundles all necessary C libraries (CPL, cfitsio, wcslib, fftw), so you don't need to install them separately or configure library paths. This contrasts with ESO's package available from [their index](https://ftp.eso.org/pub/dfs/pipelines/libraries/).
A few things to note:
* Quick afternoon project - no guarantees, but pull requests welcome. Credit to original authors and ClaudeCode.
* Pre-compiled wheels for Python 3.11-3.14 on Linux/macOS (no Windows support).
* Technical details: see [CLAUDE.md](CLAUDE.md).
* Version 1.0.3.post1 (higher than ESO's 1.0.3). To use ESO's original: `pycpl==1.0.3`
* Installation: `pip install pycpl --extra-index-url https://ivh.github.io/pycpl/simple/`
To use alongside ESO's pyesorex and edps, configure pyproject.toml:
simple/pycpl/index.html:<!-- existing 1.0.3.post1 wheels -->
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post1/pycpl-1.0.3.post1-cp311-cp311-linux_x86_64.whl">...</a><br>
...
<!-- new 1.0.3.post2 wheels -->
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post2/pycpl-1.0.3.post2-cp311-cp311-linux_x86_64.whl">...</a><br>
...
pycpl==1.0.3.post1) while defaulting to the newest.#!/bin/bash
# update-index.sh
gh release list --limit 100 --json tagName,assets | \
jq -r '...' # parse and generate HTML
File created successfully at: /Users/tom/pipes/pycpl.git/update-index.sh
.github/workflows/python-publish.yml: 1→name: Publish Python Package
2→
3→on:
4→ push:
5→ tags:
6→ - 'v*'
7→ workflow_dispatch:
8→
9→jobs:
10→ build_wheels:
... (content hidden) ...
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
1→name: Publish Python Package
2→
3→on:
4→ push:
5→ tags:
6→ - 'v*'
7→ workflow_dispatch:
8→
9→jobs:
10→ build_wheels:
11→ name: Build wheels on ${{ matrix.os }}
12→ runs-on: ${{ matrix.os }}
13→ strategy:
14→ matrix:
15→ os: [ubuntu-latest, macos-15-intel, macos-latest]
16→
17→ steps:
18→ - uses: actions/checkout@v4
19→
20→ - name: Set up Python
21→ uses: actions/setup-python@v5
22→ with:
23→ python-version: '3.11'
24→
25→ - name: Install cibuildwheel
26→ run: python -m pip install cibuildwheel==2.21.3
27→
28→ - name: Build wheels
29→ run: python -m cibuildwheel --output-dir wheelhouse
30→
31→ - uses: actions/upload-artifact@v4
32→ with:
33→ name: wheels-${{ matrix.os }}
34→ path: ./wheelhouse/*.whl
35→
36→ build_sdist:
37→ name: Build source distribution
38→ runs-on: ubuntu-latest
39→ steps:
40→ - uses: actions/checkout@v4
41→
42→ - name: Set up Python
43→ uses: actions/setup-python@v5
44→ with:
45→ python-version: '3.11'
46→
47→ - name: Build sdist
48→ run: |
49→ python -m pip install build
50→ python -m build --sdist
51→
52→ - uses: actions/upload-artifact@v4
53→ with:
54→ name: sdist
55→ path: dist/*.tar.gz
56→
57→ upload_pypi:
58→ needs: [build_wheels, build_sdist]
59→ runs-on: ubuntu-latest
60→ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
61→ permissions:
62→ id-token: write
63→ steps:
64→ - uses: actions/download-artifact@v4
65→ with:
66→ pattern: wheels-*
67→ merge-multiple: true
68→ path: dist/
69→
70→ - uses: actions/download-artifact@v4
71→ with:
72→ name: sdist
73→ path: dist/
74→
75→ - name: Publish to PyPI
76→ uses: pypa/gh-action-pypi-publish@release/v1
77→
78→ create_release:
79→ needs: [build_wheels, build_sdist]
80→ runs-on: ubuntu-latest
81→ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
82→ permissions:
83→ contents: write
84→ steps:
85→ - uses: actions/download-artifact@v4
86→ with:
87→ pattern: wheels-*
88→ merge-multiple: true
89→ path: dist/
90→
91→ - uses: actions/download-artifact@v4
92→ with:
93→ name: sdist
94→ path: dist/
95→
96→ - name: Create GitHub Release
97→ uses: softprops/action-gh-release@v2
98→ with:
99→ files: dist/*
100→ fail_on_unmatched_files: true
101→
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
simple/ index from all releases./update-index.sh manually anytime to update the index. 1→# PyCPL Build System Documentation
2→
3→## Project Overview
4→
5→PyCPL provides Python bindings for the ESO Common Pipeline Library (CPL) using pybind11. The project bundles all C library dependencies to provide a self-contained wheel that works without system dependencies.
6→
7→## Architecture
8→
9→### Vendored Dependencies (vendor/)
10→
... (content hidden) ...
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
1→# PyCPL Build System Documentation
2→
3→## Project Overview
4→
5→PyCPL provides Python bindings for the ESO Common Pipeline Library (CPL) using pybind11. The project bundles all C library dependencies to provide a self-contained wheel that works without system dependencies.
6→
7→## Architecture
8→
9→### Vendored Dependencies (vendor/)
10→
11→The project vendors all C library dependencies to ensure reproducible builds:
12→
13→```
14→vendor/
15→├── cfitsio-4.6.2/ # FITS file I/O
16→├── fftw-3.3.10/ # Fast Fourier Transform (double + single precision)
17→├── wcslib-8.2.2/ # World Coordinate System transformations
18→└── cpl-7.3.2/ # ESO Common Pipeline Library
19→ ├── libcext/ # CPL extension library
20→ ├── cplcore/ # Core CPL functionality
21→ ├── cplui/ # User interface components
22→ ├── cpldfs/ # Data flow system
23→ └── cpldrs/ # Data reduction system
24→```
25→
26→**Why vendored?** CPL and its dependencies are not available via system package managers on all platforms, and version compatibility is critical.
27→
28→## Build Process (setup.py)
29→
30→### Build Phases
31→
32→The build uses a custom `CMakeBuildExt` class that extends setuptools:
33→
34→1. **Phase 1: Build cfitsio and fftw in parallel**
35→ - Built with CMake
36→ - Installed to `build/temp.*/deps/install/`
37→ - `-DCMAKE_INSTALL_LIBDIR=lib` forces use of `lib/` not `lib64/` (important for manylinux)
38→
39→2. **Phase 2: Build wcslib**
40→ - Depends on cfitsio
41→ - Uses autotools (configure/make)
42→ - Requires CFITSIO_CFLAGS and LDFLAGS to find vendored cfitsio
43→
44→3. **Phase 3: Build CPL**
45→ - Depends on all previous libraries
46→ - Uses autotools
47→ - `--disable-java` prevents building Java components (would need libtool-ltdl)
48→ - `JAVA_HOME` unset to prevent Java auto-detection
49→
50→4. **Phase 4: Build Python extension**
51→ - Uses CMake + pybind11
52→ - Links against vendored CPL libraries
53→
54→5. **Phase 5: Copy vendored libraries**
55→ - All `.so`/`.dylib` files copied alongside extension module
56→ - Enables self-contained wheels
57→
58→### Key Build Settings
59→
60→**CMakeLists.txt:**
61→```cmake
62→INSTALL_RPATH "$<IF:$<PLATFORM_ID:Darwin>,@loader_path,$ORIGIN>"
63→BUILD_WITH_INSTALL_RPATH TRUE
64→```
65→- Linux: `$ORIGIN` = look in same directory as .so
66→- macOS: `@loader_path` = macOS equivalent
67→
68→**Python version:**
69→```cmake
70→find_package(Python3 REQUIRED COMPONENTS Interpreter Development.Module)
71→```
72→- `Development.Module` not `Development` - only needs headers, not libpython.so
73→- Critical for manylinux containers where full Python libraries aren't available
74→
75→### macOS-Specific: Dylib Install Names
76→
77→macOS embeds library paths into binaries. We fix these after building:
78→
79→```python
80→def _fix_darwin_install_names(self, lib_dir, libraries):
81→ # 1. Fix library's own install name: -id @rpath/libname
82→ # 2. Fix dependencies: -change /absolute/path @rpath/libname
83→```
84→
85→**Why?** Without this, dylibs reference absolute build paths like `/Users/runner/work/...` which don't exist on user machines.
86→
87→## GitHub Actions Workflow (.github/workflows/python-publish.yml)
88→
89→### Trigger Conditions
90→
91→- **Manual**: `workflow_dispatch` - builds but doesn't publish
92→- **Release**: Push tag `v*` - builds AND publishes to PyPI
93→
94→### Build Matrix
95→
96→```yaml
97→matrix:
98→ os: [ubuntu-22.04, macos-13, macos-14]
99→```
100→
101→- `ubuntu-22.04`: Linux x86_64 (manylinux2014)
102→- `macos-13`: Intel x86_64
103→- `macos-14`: Apple Silicon arm64
104→
105→### Python Versions
106→
107→```toml
108→build = ["cp311-*", "cp312-*", "cp313-*", "cp314-*"]
109→```
110→
111→Minimum: Python 3.11 (uses C++17 features)
112→
113→### Platform-Specific Settings
114→
115→**Linux:**
116→```toml
117→[tool.cibuildwheel.linux]
118→before-build = "yum install -y autoconf automake libtool"
119→repair-wheel-command = "" # Skip auditwheel - we bundle libraries ourselves
120→```
121→
122→**macOS:**
123→```toml
124→[tool.cibuildwheel.macos]
125→before-build = "brew install autoconf automake libtool"
126→repair-wheel-command = "" # Skip delocate - we handle dylibs ourselves
127→environment = { MACOSX_DEPLOYMENT_TARGET = "10.15" }
128→```
129→
130→- Deployment target 10.15 needed for C++17 `<filesystem>` support
131→
132→### Why Skip Repair Tools?
133→
134→- **auditwheel** (Linux) and **delocate** (macOS) normally bundle external libraries
135→- They failed because they couldn't find our vendored libraries during the build
136→- We handle bundling ourselves via `_copy_vendored_libraries()` and RPATH settings
137→- Our approach works because:
138→ 1. Libraries are copied to wheel root alongside extension
139→ 2. Extension has RPATH=$ORIGIN/@loader_path
140→ 3. Library install names use @rpath (macOS)
141→
142→## Publishing to PyPI
143→
144→### Trusted Publishing Setup
145→
146→1. Configure at https://pypi.org/manage/account/publishing/
147→ - Repository: `ivh/pycpl`
148→ - Workflow: `python-publish.yml`
149→ - No environment name needed
150→
151→2. Push a tag:
152→ ```bash
153→ git tag v1.0.0
154→ git push origin v1.0.0
155→ ```
156→
157→3. Workflow automatically uploads wheels + sdist
158→
159→### If Upload Fails
160→
161→Re-run just the upload job:
162→```bash
163→gh run rerun <run-id> --failed
164→```
165→
166→Or manual upload:
167→```bash
168→gh run download <run-id>
169→twine upload wheels-*/*.whl sdist/*.tar.gz
170→```
171→
172→## Common Issues & Solutions
173→
174→### ImportError: cannot open shared object file (Linux)
175→
176→**Symptom:** `libcpldrs.so.26: cannot open shared object file`
177→
178→**Cause:** Extension module doesn't have RPATH set
179→
180→**Solution:** INSTALL_RPATH in CMakeLists.txt
181→
182→### Library not loaded: /Users/runner/... (macOS)
183→
184→**Symptom:** Absolute build paths in error
185→
186→**Cause:** Dylib install names not fixed
187→
188→**Solution:** `_fix_darwin_install_names()` uses `install_name_tool -id` and `-change`
189→
190→### CMake can't find Python3_LIBRARIES (manylinux)
191→
192→**Symptom:** `Could NOT find Python3 (missing: Python3_LIBRARIES Development)`
193→
194→**Cause:** Looking for full Python development package
195→
196→**Solution:** Use `Development.Module` instead of `Development`
197→
198→### CPL tries to build Java components
199→
200→**Symptom:** `No rule to make target -lltdl needed by libcplgasgano.la`
201→
202→**Cause:** Java found in build environment
203→
204→**Solution:** `--disable-java` + unset `JAVA_HOME`
205→
206→## File Manifest in Wheels
207→
208→```
209→pycpl-0.1.0-cp311-cp311-linux_x86_64.whl:
210→ cpl.cpython-311-x86_64-linux-gnu.so # Extension module
211→ libcext.so.0.2.4 # Vendored libraries
212→ libcfitsio.so.10
213→ libcplcore.so.26.3.2
214→ libcpldfs.so.26.3.2
215→ libcpldrs.so.26.3.2
216→ libcplui.so.26.3.2
217→ libfftw3.so.3.6.9
218→ libfftw3_threads.so.3.6.9
219→ libfftw3f.so.3.6.9
220→ libfftw3f_threads.so.3.6.9
221→ libwcs.so.8.2.2
222→ [symlinks to versioned .so files]
223→```
224→
225→All libraries at wheel root, extension has RPATH to find them.
226→
227→## Development Notes
228→
229→- **Never** commit changes that would break the vendored library build
230→- Test both Linux and macOS wheels before tagging a release
231→- Check wheel contents: `python -m zipfile -l <wheel>.whl`
232→- Check RPATH on Linux: `patchelf --print-rpath <module>.so`
233→- Check install names on macOS: `otool -L <module>.so`
234→
235→## References
236→
237→- CPL Documentation: http://www.eso.org/sci/software/cpl
238→- cibuildwheel docs: https://cibuildwheel.readthedocs.io/
239→- PyPI Trusted Publishing: https://docs.pypi.org/trusted-publishers/
240→
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
ubuntu-latest, macos-15-intel, macos-latestmanylinux_2_2811.0--extra-index-url[master 1013d03] add GitHub Release with wheel attachments
3 files changed, 137 insertions(+), 46 deletions(-)
create mode 100755 update-index.sh
[master 1013d03] add GitHub Release with wheel attachments
3 files changed, 137 insertions(+), 46 deletions(-)
create mode 100755 update-index.sh
To github.com:ivh/pycpl.git
d31223a..1013d03 master -> master
version = "1.0.3.post1"
[master 0b1f94f] bump to 1.0.3.post2
1 file changed, 1 insertion(+), 1 deletion(-)
To github.com:ivh/pycpl.git
[master 0b1f94f] bump to 1.0.3.post2
1 file changed, 1 insertion(+), 1 deletion(-)
To github.com:ivh/pycpl.git
7bd0de0..0b1f94f master -> master
To github.com:ivh/pycpl.git
* [new tag] v1.0.3.post2 -> v1.0.3.post2
queued bump to 1.0.3.post2 Publish Python Package v1.0.3.post2 push 19462649881 4s 2025-11-18T10:24:17Z
queued bump to 1.0.3.post2 Publish Python Package v1.0.3.post2
gh run watch or check https://github.com/ivh/pycpl/actionsv1.0.3.post2 → triggers workflowmastergh run list --workflow=pages-build-deployment --limit 5
update_index job commits and pushes to master, that push triggers another Pages deployment automatically (same as any push to master).gh api repos/ivh/pycpl/pages
run or job ID required when not running interactively
Usage: gh run view [<run-id>] [flags]
run or job ID required when not running interactively
Usage: gh run view [<run-id>] [flags]
Flags:
-a, --attempt uint The attempt number of the workflow run
--exit-status Exit with non-zero status if run failed
-j, --job string View a specific job ID from a run
-q, --jq expression Filter JSON output using a jq expression
--json fields Output JSON with the specified fields
--log View full log for either a run or specific job
--log-failed View the log for any failed steps in a run or specific job
-t, --template string Format JSON output using a Go template; see "gh help formatting"
-v, --verbose Show job steps
-w, --web Open run in the browser
19463524820 completed success
Shell cwd was reset to /Users/tom/pipes/pycpl.git
Updating 0b1f94f..3010e84
Fast-forward
simple/pycpl/index.html | 10 ----------
Updating 0b1f94f..3010e84
Fast-forward
simple/pycpl/index.html | 10 ----------
1 file changed, 10 deletions(-)
<!DOCTYPE html>
<html>
<head>
<title>Links for pycpl</title>
</head>
<body>
<h1>Links for pycpl</h1>
</body>
</html>
From github.com:ivh/pycpl
0b1f94f..3010e84 master -> origin/master
v1.0.3.post2
v1.0.3.post1
pycpl-1.0.3.post2-cp311-cp311-linux_x86_64.whl
pycpl-1.0.3.post2-cp311-cp311-macosx_11_0_arm64.whl
pycpl-1.0.3.post2-cp311-cp311-macosx_11_0_x86_64.whl
pycpl-1.0.3.post2-cp311-cp311-linux_x86_64.whl
pycpl-1.0.3.post2-cp311-cp311-macosx_11_0_arm64.whl
pycpl-1.0.3.post2-cp311-cp311-macosx_11_0_x86_64.whl
pycpl-1.0.3.post2-cp312-cp312-linux_x86_64.whl
pycpl-1.0.3.post2-cp312-cp312-macosx_11_0_arm64.whl
while loops with redirects in the script. Let me fix it: 1→#!/bin/bash
2→set -e
3→
4→# Generate PEP 503 simple package index from GitHub releases
5→
6→mkdir -p simple/pycpl
7→
8→# Root index
9→cat > simple/index.html <<EOF
10→<!DOCTYPE html>
... (content hidden) ...
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
1→#!/bin/bash
2→set -e
3→
4→# Generate PEP 503 simple package index from GitHub releases
5→
6→mkdir -p simple/pycpl
7→
8→# Root index
9→cat > simple/index.html <<EOF
10→<!DOCTYPE html>
11→<html>
12→<head>
13→ <title>Simple Index</title>
14→</head>
15→<body>
16→ <a href="pycpl/">pycpl</a><br>
17→</body>
18→</html>
19→EOF
20→
21→# Package index header
22→cat > simple/pycpl/index.html <<EOF
23→<!DOCTYPE html>
24→<html>
25→<head>
26→ <title>Links for pycpl</title>
27→</head>
28→<body>
29→ <h1>Links for pycpl</h1>
30→EOF
31→
32→# Add links for all releases
33→gh release list --limit 100 --json tagName | \
34→ jq -r '.[].tagName' | \
35→ while read tag; do
36→ gh release view "$tag" --json assets --jq '.assets[] | select(.name | endswith(".whl") or endswith(".tar.gz")) | .name' | \
37→ while read filename; do
38→ echo " <a href=\"https://github.com/ivh/pycpl/releases/download/$tag/$filename\">$filename</a><br>" >> simple/pycpl/index.html
39→ done
40→ done
41→
42→# Footer
43→cat >> simple/pycpl/index.html <<EOF
44→</body>
45→</html>
46→EOF
47→
48→echo "Index updated in simple/"
49→
<system-reminder>
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
</system-reminder>
The file /Users/tom/pipes/pycpl.git/update-index.sh has been updated. Here's the result of running `cat -n` on a snippet of the edited file:
1→#!/bin/bash
2→set -e
3→
4→# Generate PEP 503 simple package index from GitHub releases
5→
6→mkdir -p simple/pycpl
7→
8→# Root index
9→cat > simple/index.html <<'EOF'
... (content hidden) ...
44→FOOTER
45→} > simple/pycpl/index.html
46→
47→echo "Index updated in simple/"
48→
The file /Users/tom/pipes/pycpl.git/update-index.sh has been updated. Here's the result of running `cat -n` on a snippet of the edited file:
1→#!/bin/bash
2→set -e
3→
4→# Generate PEP 503 simple package index from GitHub releases
5→
6→mkdir -p simple/pycpl
7→
8→# Root index
9→cat > simple/index.html <<'EOF'
10→<!DOCTYPE html>
11→<html>
12→<head>
13→ <title>Simple Index</title>
14→</head>
15→<body>
16→ <a href="pycpl/">pycpl</a><br>
17→</body>
18→</html>
19→EOF
20→
21→# Package index - generate complete HTML
22→{
23→ cat <<'HEADER'
24→<!DOCTYPE html>
25→<html>
26→<head>
27→ <title>Links for pycpl</title>
28→</head>
29→<body>
30→ <h1>Links for pycpl</h1>
31→HEADER
32→
33→ # Generate links for all releases
34→ for tag in $(gh release list --limit 100 --json tagName --jq '.[].tagName'); do
35→ gh release view "$tag" --json assets --jq '.assets[] | select(.name | endswith(".whl") or endswith(".tar.gz")) | .name' | \
36→ while IFS= read -r filename; do
37→ echo " <a href=\"https://github.com/ivh/pycpl/releases/download/$tag/$filename\">$filename</a><br>"
38→ done
39→ done
40→
41→ cat <<'FOOTER'
42→</body>
43→</html>
44→FOOTER
45→} > simple/pycpl/index.html
46→
47→echo "Index updated in simple/"
48→
Index updated in simple/
29 simple/pycpl/index.html
<!DOCTYPE html>
<html>
<head>
<!DOCTYPE html>
<html>
<head>
<title>Links for pycpl</title>
</head>
<body>
<h1>Links for pycpl</h1>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post2/pycpl-1.0.3.post2-cp311-cp311-linux_x86_64.whl">pycpl-1.0.3.post2-cp311-cp311-linux_x86_64.whl</a><br>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post2/pycpl-1.0.3.post2-cp311-cp311-macosx_11_0_arm64.whl">pycpl-1.0.3.post2-cp311-cp311-macosx_11_0_arm64.whl</a><br>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post2/pycpl-1.0.3.post2-cp311-cp311-macosx_11_0_x86_64.whl">pycpl-1.0.3.post2-cp311-cp311-macosx_11_0_x86_64.whl</a><br>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post2/pycpl-1.0.3.post2-cp312-cp312-linux_x86_64.whl">pycpl-1.0.3.post2-cp312-cp312-linux_x86_64.whl</a><br>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post2/pycpl-1.0.3.post2-cp312-cp312-macosx_11_0_arm64.whl">pycpl-1.0.3.post2-cp312-cp312-macosx_11_0_arm64.whl</a><br>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post2/pycpl-1.0.3.post2-cp312-cp312-macosx_11_0_x86_64.whl">pycpl-1.0.3.post2-cp312-cp312-macosx_11_0_x86_64.whl</a><br>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post2/pycpl-1.0.3.post2-cp313-cp313-linux_x86_64.whl">pycpl-1.0.3.post2-cp313-cp313-linux_x86_64.whl</a><br>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post2/pycpl-1.0.3.post2-cp313-cp313-macosx_11_0_arm64.whl">pycpl-1.0.3.post2-cp313-cp313-macosx_11_0_arm64.whl</a><br>
...
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post1/pycpl-1.0.3.post1-cp313-cp313-macosx_10_15_x86_64.whl">pycpl-1.0.3.post1-cp313-cp313-macosx_10_15_x86_64.whl</a><br>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post1/pycpl-1.0.3.post1-cp313-cp313-macosx_11_0_arm64.whl">pycpl-1.0.3.post1-cp313-cp313-macosx_11_0_arm64.whl</a><br>
<a href="https://github.com/ivh/pycpl/releases/download/v1.0.3.post1/pycpl-1.0.3.post1.tar.gz">pycpl-1.0.3.post1.tar.gz</a><br>
</body>
</html>
[master b1eeba4] fix update-index script
2 files changed, 35 insertions(+), 16 deletions(-)
To github.com:ivh/pycpl.git
[master b1eeba4] fix update-index script
2 files changed, 35 insertions(+), 16 deletions(-)
To github.com:ivh/pycpl.git
3010e84..b1eeba4 master -> master
while loops with pipes don't work well with redirects in CI. Now it uses a for loop and grouped output.