libcpldrs.so.26 shared library. This is a dynamic linking issue where the compiled Python extension depends on an external CPL library that either isn't installed or isn't being found by the dynamic linker./Users/tom/pipes/pycpl.git/CMakeLists.txt
/Users/tom/pipes/pycpl.git/vendor/cfitsio-4.6.2/CMakeLists.txt
/Users/tom/pipes/pycpl.git/vendor/fftw-3.3.10/CMakeLists.txt
/Users/tom/pipes/pycpl.git/pyproject.toml
/Users/tom/pipes/pycpl.git/setup.py
total 192
drwxr-xr-x 25 tom staff 800 Nov 17 16:25 .
drwxr-xr-x 41 tom staff 1312 Nov 17 15:58 ..
total 192
drwxr-xr-x 25 tom staff 800 Nov 17 16:25 .
drwxr-xr-x 41 tom staff 1312 Nov 17 15:58 ..
drwx------ 3 tom staff 96 Nov 17 12:24 .claude
drwxr-xr-x 14 tom staff 448 Nov 17 16:31 .git
-rw-r--r-- 1 tom staff 1008 Nov 17 14:53 .gitignore
-rw-r--r-- 1 tom staff 5 Nov 17 15:02 .python-version
-rw-r--r-- 1 tom staff 20480 Nov 17 16:27 .README.md.swp
drwxr-xr-x 7 tom staff 224 Nov 17 14:59 .uv-cache
drwxr-xr-x 8 tom staff 256 Nov 17 15:00 .venv
drwxr-xr-x 4 tom staff 128 Nov 17 15:30 build
-rw-r--r-- 1 tom staff 17892 May 20 17:03 CHANGELOG.md
drwxr-xr-x 3 tom staff 96 May 20 19:31 cmake
-rw-r--r-- 1 tom staff 5763 Mar 5 2025 CMakeLists.txt
-rw-r--r-- 1 tom staff 35149 Feb 16 2022 LICENSE
-rw-r--r-- 1 tom staff 382 Nov 17 14:53 MANIFEST.in
-rw-r--r-- 1 tom staff 19409 May 20 19:31 PKG-INFO
-rw-r--r-- 1 tom staff 352 Nov 17 16:08 pyproject.toml
-rw-r--r-- 1 tom staff 53 Apr 9 2022 pytest.ini
-rw-r--r-- 1 tom staff 18120 Nov 17 16:05 README.md
-rw-r--r-- 1 tom staff 1122 May 20 19:31 setup.cfg
-rw-r--r-- 1 tom staff 14381 Nov 17 15:18 setup.py
drwxr-xr-x 13 tom staff 416 Nov 17 16:27 src
drwxr-xr-x 11 tom staff 352 May 20 19:31 tests
-rw-r--r-- 1 tom staff 25216 Nov 17 16:23 uv.lock
drwxr-xr-x 6 tom staff 192 Nov 17 14:53 vendor
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→# 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 pathlib import Path
22→
23→import pybind11
24→
25→from setuptools import setup, Extension
26→from setuptools.command.build_ext import build_ext
27→
28→
29→class CMakeExtension(Extension):
30→ def __init__(self, name: str, sourcedir: str = "") -> None:
31→ super().__init__(name, sources=[])
32→ self.sourcedir = os.fspath(Path(sourcedir).resolve())
33→
34→
35→class CMakeBuildExt(build_ext):
36→ def __init__(self, *args, **kwargs):
37→ super().__init__(*args, **kwargs)
38→ self.deps_built = False
39→
40→ def run(self) -> None:
41→ try:
42→ _ = subprocess.check_output(["cmake", "--version"])
43→ except OSError as e:
44→ raise RuntimeError(
45→ "CMake must be installed to build the following extensions: "
46→ + ", ".join(e.name for e in self.extensions)
47→ ) from e
48→
49→ # Build vendored dependencies first
50→ if not self.deps_built:
51→ self.build_dependencies()
52→ self.deps_built = True
53→
54→ for ext in self.extensions:
55→ self.build_extension(ext)
56→
57→ def build_dependencies(self) -> None:
58→ """Build vendored C libraries: cfitsio, fftw, wcslib, and cpl"""
59→ print("=" * 60)
60→ print("Building vendored C library dependencies")
61→ print("=" * 60)
62→
63→ # Get the source directory (where setup.py is)
64→ source_dir = Path(__file__).parent.resolve()
65→ vendor_dir = source_dir / "vendor"
66→
67→ # Create build directory for dependencies
68→ deps_build_dir = Path(self.build_temp).resolve() / "deps"
69→ deps_build_dir.mkdir(parents=True, exist_ok=True)
70→
71→ # Installation prefix for dependencies
72→ deps_install_dir = deps_build_dir / "install"
73→ deps_install_dir.mkdir(parents=True, exist_ok=True)
74→
75→ # Number of parallel jobs
76→ njobs = os.environ.get("CMAKE_BUILD_PARALLEL_LEVEL") or str(multiprocessing.cpu_count())
77→
78→ # Build each dependency in order
79→ self._build_cfitsio(vendor_dir, deps_build_dir, deps_install_dir, njobs)
80→ self._build_fftw(vendor_dir, deps_build_dir, deps_install_dir, njobs)
81→ self._build_wcslib(vendor_dir, deps_build_dir, deps_install_dir, njobs)
82→ self._build_cpl(vendor_dir, deps_build_dir, deps_install_dir, njobs)
83→
84→ # Set CPLDIR environment variable so FindCPL.cmake can find it
85→ os.environ["CPLDIR"] = str(deps_install_dir)
86→ print(f"\nCPLDIR set to: {deps_install_dir}")
87→ print("=" * 60)
88→
89→ def _build_cfitsio(self, vendor_dir: Path, build_dir: Path, install_dir: Path, njobs: str) -> None:
90→ """Build cfitsio library"""
91→ print("\n>>> Building cfitsio...")
92→ src_dir = vendor_dir / "cfitsio-4.6.2"
93→ build_subdir = build_dir / "cfitsio-build"
94→ build_subdir.mkdir(parents=True, exist_ok=True)
95→
96→ # Use CMake for cfitsio
97→ subprocess.run([
98→ "cmake",
99→ str(src_dir),
100→ f"-DCMAKE_INSTALL_PREFIX={install_dir}",
101→ "-DCMAKE_BUILD_TYPE=Release",
102→ "-DBUILD_SHARED_LIBS=ON",
103→ "-DUSE_PTHREADS=ON",
104→ ], cwd=build_subdir, check=True)
105→
106→ subprocess.run(["cmake", "--build", ".", "-j", njobs], cwd=build_subdir, check=True)
107→ subprocess.run(["cmake", "--install", "."], cwd=build_subdir, check=True)
108→ print(">>> cfitsio built successfully")
109→
110→ def _build_fftw(self, vendor_dir: Path, build_dir: Path, install_dir: Path, njobs: str) -> None:
111→ """Build fftw library (both double and single precision)"""
112→ print("\n>>> Building fftw...")
113→ src_dir = vendor_dir / "fftw-3.3.10"
114→
115→ # Build double precision (default)
116→ print(">>> Building fftw (double precision)...")
117→ build_double = build_dir / "fftw-build-double"
118→ build_double.mkdir(parents=True, exist_ok=True)
119→
120→ subprocess.run([
121→ "cmake",
122→ str(src_dir),
123→ f"-DCMAKE_INSTALL_PREFIX={install_dir}",
124→ "-DCMAKE_BUILD_TYPE=Release",
125→ "-DBUILD_SHARED_LIBS=ON",
126→ "-DENABLE_THREADS=ON",
127→ ], cwd=build_double, check=True)
128→ subprocess.run(["cmake", "--build", ".", "-j", njobs], cwd=build_double, check=True)
129→ subprocess.run(["cmake", "--install", "."], cwd=build_double, check=True)
130→
131→ # Build single precision
132→ print(">>> Building fftw (single precision)...")
133→ build_single = build_dir / "fftw-build-single"
134→ build_single.mkdir(parents=True, exist_ok=True)
135→
136→ subprocess.run([
137→ "cmake",
138→ str(src_dir),
139→ f"-DCMAKE_INSTALL_PREFIX={install_dir}",
140→ "-DCMAKE_BUILD_TYPE=Release",
141→ "-DBUILD_SHARED_LIBS=ON",
142→ "-DENABLE_THREADS=ON",
143→ "-DENABLE_FLOAT=ON", # Enable single precision
144→ ], cwd=build_single, check=True)
145→ subprocess.run(["cmake", "--build", ".", "-j", njobs], cwd=build_single, check=True)
146→ subprocess.run(["cmake", "--install", "."], cwd=build_single, check=True)
147→
148→ self._fix_darwin_install_names(
149→ install_dir / "lib",
150→ [
151→ "libfftw3.3.dylib",
152→ "libfftw3_threads.3.dylib",
153→ "libfftw3f.3.dylib",
154→ "libfftw3f_threads.3.dylib",
155→ ],
156→ )
157→
158→ print(">>> fftw built successfully (both precisions)")
159→
160→ def _build_wcslib(self, vendor_dir: Path, build_dir: Path, install_dir: Path, njobs: str) -> None:
161→ """Build wcslib library"""
162→ print("\n>>> Building wcslib...")
163→ src_dir = vendor_dir / "wcslib-8.2.2"
164→
165→ # wcslib doesn't support out-of-tree builds well, build in-source
166→ env = os.environ.copy()
167→ # Set proper LDFLAGS and CFLAGS instead of CFITSIOLIB/CFITSIOINC
168→ env["CFLAGS"] = f"-I{install_dir / 'include'}"
169→ lib_path = str(install_dir / "lib")
170→ ldflags = f"-L{lib_path} -Wl,-rpath,{lib_path}"
171→ env["LDFLAGS"] = (
172→ f"{ldflags} {env['LDFLAGS']}"
173→ if env.get("LDFLAGS")
174→ else ldflags
175→ )
176→ env["LD_LIBRARY_PATH"] = (
177→ f"{lib_path}:{env['LD_LIBRARY_PATH']}"
178→ if env.get("LD_LIBRARY_PATH")
179→ else lib_path
180→ )
181→ if sys.platform == "darwin":
182→ env["DYLD_LIBRARY_PATH"] = (
183→ f"{lib_path}:{env['DYLD_LIBRARY_PATH']}"
184→ if env.get("DYLD_LIBRARY_PATH")
185→ else lib_path
186→ )
187→
188→ subprocess.run([
189→ "./configure",
190→ f"--prefix={install_dir}",
191→ "--without-pgplot",
192→ "--disable-fortran",
193→ ], cwd=src_dir, env=env, check=True)
194→
195→ subprocess.run(["make", f"-j{njobs}"], cwd=src_dir, check=True)
196→ # Install library and headers, skip documentation
197→ subprocess.run(["make", "-C", "C", "install"], cwd=src_dir, check=True)
198→ # Install wcsconfig.h and other header files
199→ subprocess.run(["make", "install-nobase_includeHEADERS"], cwd=src_dir, check=False)
200→ # Install pkg-config file
201→ pkgconfig_dir = install_dir / "lib" / "pkgconfig"
202→ pkgconfig_dir.mkdir(parents=True, exist_ok=True)
203→ if (src_dir / "wcsconfig.h").exists():
204→ import shutil
205→ # Copy wcsconfig.h to the wcslib include directory
206→ wcslib_include = install_dir / "include" / "wcslib"
207→ if wcslib_include.exists():
208→ shutil.copy(src_dir / "wcsconfig.h", wcslib_include / "wcsconfig.h")
209→ if (src_dir / "wcslib.pc").exists():
210→ import shutil
211→ shutil.copy(src_dir / "wcslib.pc", pkgconfig_dir / "wcslib.pc")
212→ # Clean up build artifacts
213→ subprocess.run(["make", "distclean"], cwd=src_dir, check=False)
214→ print(">>> wcslib built successfully")
215→
216→ def _build_cpl(self, vendor_dir: Path, build_dir: Path, install_dir: Path, njobs: str) -> None:
217→ """Build CPL library"""
218→ print("\n>>> Building CPL...")
219→ src_dir = vendor_dir / "cpl-7.3.2"
220→
221→ # CPL uses autoconf and needs to find the dependencies
222→ env = os.environ.copy()
223→ env["PKG_CONFIG_PATH"] = str(install_dir / "lib" / "pkgconfig")
224→ env["CFITSIO_CFLAGS"] = f"-I{install_dir / 'include'}"
225→ env["CFITSIO_LIBS"] = f"-L{install_dir / 'lib'} -lcfitsio"
226→ env["FFTW3_CFLAGS"] = f"-I{install_dir / 'include'}"
227→ env["FFTW3_LIBS"] = f"-L{install_dir / 'lib'} -lfftw3"
228→ env["WCSLIB_CFLAGS"] = f"-I{install_dir / 'include' / 'wcslib'}"
229→ env["WCSLIB_LIBS"] = f"-L{install_dir / 'lib'} -lwcs"
230→ env["CPPFLAGS"] = f"-I{install_dir / 'include'} -I{install_dir / 'include' / 'wcslib'}"
231→ lib_path = str(install_dir / "lib")
232→ ldflags = f"-L{lib_path} -Wl,-rpath,{lib_path}"
233→ env["LDFLAGS"] = (
234→ f"{ldflags} {env['LDFLAGS']}"
235→ if env.get("LDFLAGS")
236→ else ldflags
237→ )
238→ env["LD_LIBRARY_PATH"] = (
239→ f"{lib_path}:{env['LD_LIBRARY_PATH']}"
240→ if env.get("LD_LIBRARY_PATH")
241→ else lib_path
242→ )
243→ if sys.platform == "darwin":
244→ env["DYLD_LIBRARY_PATH"] = (
245→ f"{lib_path}:{env['DYLD_LIBRARY_PATH']}"
246→ if env.get("DYLD_LIBRARY_PATH")
247→ else lib_path
248→ )
249→
250→ # Regenerate autotools files if configure is missing
251→ if not (src_dir / "configure").exists():
252→ print(">>> Regenerating autotools files for CPL...")
253→ subprocess.run(["autoreconf", "-i"], cwd=src_dir, env=env, check=True)
254→
255→ subprocess.run([
256→ "./configure",
257→ f"--prefix={install_dir}",
258→ "--disable-static",
259→ "--enable-shared",
260→ ], cwd=src_dir, env=env, check=True)
261→
262→ subprocess.run(["make", f"-j{njobs}"], cwd=src_dir, check=True)
263→ subprocess.run(["make", "install"], cwd=src_dir, check=True)
264→ # Clean up build artifacts
265→ subprocess.run(["make", "distclean"], cwd=src_dir, check=False)
266→ print(">>> CPL built successfully")
267→
268→ def _fix_darwin_install_names(self, lib_dir: Path, libraries: list[str]) -> None:
269→ """Ensure macOS dylibs advertise an absolute install name so dlopen works without rpath."""
270→ if sys.platform != "darwin":
271→ return
272→ for name in libraries:
273→ dylib = lib_dir / name
274→ if not dylib.exists():
275→ continue
276→ subprocess.run(
277→ ["install_name_tool", "-id", str(dylib), str(dylib)],
278→ check=True,
279→ )
280→
281→ def build_extension(self, ext: CMakeExtension) -> None:
282→ # CAUTION: Using extdir requires trailing slash for auto-detection &
283→ # inclusion of auxiliary "native" libs
284→ #
285→ # Must be in this form due to bug in .resolve() only fixed in
286→ # Python 3.10+
287→ ext_fullpath = Path.cwd() / self.get_ext_fullpath(ext.name)
288→ extdir = ext_fullpath.parent.resolve()
289→
290→ debug = (
291→ int(os.environ.get("PYCPL_BUILD_DEBUG", 0))
292→ if self.debug is None
293→ else self.debug
294→ )
295→ sanitize = os.environ.get("PYCPL_BUILD_SANITIZE", "")
296→ # Preferably the namespace protected variable should be used,
297→ # however the environment variable VERBOSE is checked and used
298→ # by cmake and its generated scripts. So we are conservative here
299→ # in order to have a consistent behavior.
300→ verbose = int(os.environ.get("PYCPL_BUILD_VERBOSE", 0)) or int(
301→ os.environ.get("VERBOSE", 0)
302→ )
303→
304→ cmake_args = []
305→ build_args = []
306→
307→ if verbose:
308→ cmake_args += ["-DCMAKE_VERBOSE_MAKEFILE=TRUE"]
309→
310→ if sanitize in ["address", "leak"]:
311→ debug = 1
312→ cmake_args += [f"-DSANITIZE:STRING={sanitize}"]
313→
314→ cfg = "Debug" if debug else "Release"
315→ cmake_args += [
316→ f"-DCMAKE_BUILD_TYPE={cfg}", # not used on MSVC, but no harm
317→ f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={extdir}{os.sep}",
318→ f"-DPython3_EXECUTABLE={sys.executable}",
319→ ]
320→
321→ if "CMAKE_ARGS" in os.environ:
322→ cmake_args += [item for item in os.environ["CMAKE_ARGS"].split(" ") if item]
323→
324→ cmake_args += [f"-DPYCPL_VERSION={self.distribution.get_version()}"]
325→
326→ cmake_args += ["-Dpybind11_DIR:PATH=" + pybind11.get_cmake_dir()]
327→
328→ cpldir = os.environ.get("CPLDIR", None)
329→ if cpldir is not None:
330→ cmake_args += [f"-DCPL_ROOT:PATH={Path(cpldir).resolve()}"]
331→ recipedir = os.environ.get("PYCPL_RECIPE_DIR", None)
332→ if recipedir is not None:
333→ cmake_args += [f"-DPYCPL_RECIPE_DIR:PATH={Path(recipedir).resolve()}"]
334→
335→ # Set CMAKE_BUILD_PARALLEL_LEVEL to control the parallel build level
336→ # across all generators.
337→ if "CMAKE_BUILD_PARALLEL_LEVEL" not in os.environ:
338→ # self.parallel is a Python 3 only way to set parallel jobs by hand
339→ # using -j in the build_ext call, not supported by pip or PyPA-build.
340→ if hasattr(self, "parallel") and self.parallel:
341→ # CMake 3.12+ only.
342→ build_args += [f"-j{self.parallel}"]
343→
344→ build_temp = Path(self.build_temp) / ext.name
345→ if not build_temp.exists():
346→ build_temp.mkdir(parents=True)
347→
348→ subprocess.run(
349→ ["cmake", ext.sourcedir, *cmake_args], cwd=build_temp, check=True
350→ )
351→ subprocess.run(
352→ ["cmake", "--build", ".", *build_args], cwd=build_temp, check=True
353→ )
354→
355→
356→setup(
357→ ext_modules=[CMakeExtension("cpl")],
358→ cmdclass={"build_ext": CMakeBuildExt},
359→)
360→
<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
... (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→
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
90→ src/cplcore/table.cpp
91→ src/cplcore/type_bindings.cpp
92→ src/cplcore/types.cpp
93→ src/cplcore/vector_bindings.cpp
94→ src/cplcore/vector.cpp
95→ src/cpldfs/dfs_bindings.cpp
96→ src/cpldfs/dfs.cpp
97→ src/cpldrs/apertures_bindings.cpp
98→ src/cpldrs/apertures.cpp
99→ src/cpldrs/detector_bindings.cpp
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}>)
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
148→ CXX_EXTENSIONS OFF
149→ SKIP_BUILD_RPATH TRUE)
150→
<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>
CMakeLists.txt:149, there's this setting:SKIP_BUILD_RPATH TRUE
libcpldrs.so.26, etc.) at runtime. On macOS, this works because you have special handling with install_name_tool (setup.py:268-279), but on Linux, the extension needs proper RPATH settings to locate the vendored shared libraries.build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcpldrs.26.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libfftw3f_threads.3.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libfftw3f.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcpldrs.26.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libfftw3f_threads.3.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libfftw3f.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcpldfs.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcpldrs.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libfftw3_threads.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libfftw3f_threads.3.6.9.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcext.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcpldfs.26.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libfftw3f.3.6.9.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libfftw3.3.6.9.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcfitsio.4.6.2.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libfftw3.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libfftw3f.3.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcplui.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcfitsio.10.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcplcore.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libfftw3_threads.3.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libfftw3f_threads.dylib
build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcext.0.dylib
/Users/tom/pipes/pycpl.git/cmake/FindCPL.cmake
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→#[=======================================================================[.rst:
18→FindCPL
19→-------
20→
21→Find the Common Pipeline Library headers and libraries. The module can be
22→configured using the following variables:
23→
24→ CPL_ROOT: Location where CPL is installed
25→
26→or the corresponding environment variable CPL_ROOT.
27→
28→The module also takes into account the environment variable CPLDIR.
29→If it is set it should point to the location of the CPL installation.
30→Using the environment variable is equivalent to setting the option
31→CPL_ROOT. However, if both, CPL_ROOT and CPLDIR, are set the CPL_ROOT
32→variable setting takes precedence.
33→
34→Imported Targets
35→^^^^^^^^^^^^^^^^
36→
37→This module provides the following imported targets, if found:
38→
39→``CPL::cplcore``
40→ The cplcore library component.
41→
42→``CPL::cplui``
43→ The cplui library component.
44→
45→``CPL::cpldfs``
46→ The cpldfs library component.
47→
48→``CPL::cpldrs``
49→ The cpldrs library component.
50→
51→``CPL::cplgasgano``
52→ The cplgasgano library component.
53→
54→Result Variables
55→^^^^^^^^^^^^^^^^
56→
57→This module defines the following variables:
58→
59→``CPL_FOUND``
60→ "True" if both, CPL header files and the CPL libraries were found.
61→
62→``CPL_INCLUDE_DIR``
63→ Path where the CPL header files are located.
64→
65→``CPL_CPLCORE_LIBRARY``
66→ Path where the cplcore library is located.
67→
68→``CPL_CPLUI_LIBRARY``
69→ Path where the cplui library is located.
70→
71→``CPL_CPLDFS_LIBRARY``
72→ Path where the cpldfs library is located.
73→
74→``CPL_CPLDRS_LIBRARY``
75→ Path where the cpldrs library is located.
76→
77→``CPL_CPLGASGANO_LIBRARY``
78→ Path where the cplgasgano library is located.
79→
80→``CPL_VERSION``
81→ Full version string of the CPL libraries.
82→
83→``CPL_VERSION_MAJOR``
84→ Major version number of the CPL libraries.
85→
86→``CPL_VERSION_MINOR``
87→ Minor version number of the CPL libraries.
88→
89→``CPL_VERSION_PATCH``
90→ Patch version number of the CPL libraries.
91→
92→Cache Variables
93→^^^^^^^^^^^^^^^
94→
95→The following cache variables may also be set:
96→
97→``CPL_INCLUDE_DIR``
98→ Path where the CPL header files are located.
99→
100→``CPL_CPLCORE_LIBRARY``
101→ Path where the cplcore library is located.
102→
103→``CPL_CPLUI_LIBRARY``
104→ Path where the cplui library is located.
105→
106→``CPL_CPLDFS_LIBRARY``
107→ Path where the cpldfs library is located.
108→
109→``CPL_CPLDRS_LIBRARY``
110→ Path where the cpldrs library is located.
111→
112→``CPL_CPLGASGANO_LIBRARY``
113→ Path where the cplgasgano library is located.
114→#]=======================================================================]
115→
116→cmake_policy(VERSION 3.12)
117→
118→include(FindPackageHandleStandardArgs)
119→
120→if(NOT PKG_CONFIG_FOUND)
121→ find_package(PkgConfig QUIET)
122→endif()
123→
124→# For backwards compatibility also honor the CPLDIR environment variable.
125→if(NOT CPL_ROOT AND (NOT "$ENV{CPLDIR}" STREQUAL ""))
126→ set(CPL_ROOT "$ENV{CPLDIR}")
127→endif()
128→
129→if(PKG_CONFIG_FOUND)
130→ pkg_check_modules(PC_CPL QUIET IMPORTED_TARGET GLOBAL
131→ cplcore
132→ cplui
133→ cpldfs
134→ cpldrs
135→ cplgasgano)
136→ if(PC_CPL_FOUND)
137→ set(CPL_VERSION ${PC_CPL_VERSION})
138→ endif()
139→endif()
140→
141→# Search for the header files
142→find_path(CPL_INCLUDE_DIR
143→ NAMES cpl.h
144→ PATH_SUFFIXES cpl
145→ HINTS ${CPL_ROOT}/include ${PC_CPL_INCLUDE_DIRS})
146→mark_as_advanced(CPL_INCLUDE_DIR)
147→
148→# Search for the component libraries. Also look into the 'lib64'
149→# directoy when searching for the libraries.
150→set(FIND_LIBRARY_USE_LIB64_PATHS True)
151→find_library(CPL_CPLCORE_LIBRARY
152→ NAMES cplcore
153→ HINTS ${CPL_ROOT}/lib ${PC_CPL_LIBRARY_DIRS})
154→mark_as_advanced(CPL_CPLCORE_LIBRARY)
155→if(CPL_CPLCORE_LIBRARY)
156→ set(CPL_cplcore_FOUND True)
157→endif()
158→
159→find_library(CPL_CPLUI_LIBRARY
160→ NAMES cplui
161→ HINTS ${CPL_ROOT}/lib ${PC_CPL_LIBRARY_DIRS})
162→mark_as_advanced(CPL_CPLUI_LIBRARY)
163→if(CPL_CPLUI_LIBRARY)
164→ set(CPL_cplui_FOUND True)
165→endif()
166→
167→find_library(CPL_CPLDFS_LIBRARY
168→ NAMES cpldfs
169→ HINTS ${CPL_ROOT}/lib ${PC_CPL_LIBRARY_DIRS})
170→mark_as_advanced(CPL_CPLDFS_LIBRARY)
171→if(CPL_CPLDFS_LIBRARY)
172→ set(CPL_cpldfs_FOUND True)
173→endif()
174→
175→find_library(CPL_CPLDRS_LIBRARY
176→ NAMES cpldrs
177→ HINTS ${CPL_ROOT}/lib ${PC_CPL_LIBRARY_DIRS})
178→mark_as_advanced(CPL_CPLDRS_LIBRARY)
179→if(CPL_CPLDRS_LIBRARY)
180→ set(CPL_cpldrs_FOUND True)
181→endif()
182→
183→find_library(CPL_CPLGASGANO_LIBRARY
184→ NAMES cplgasgano
185→ HINTS ${CPL_ROOT}/lib ${PC_CPL_LIBRARY_DIRS})
186→mark_as_advanced(CPL_CPLGASGANO_LIBRARY)
187→if(CPL_CPLGASGANO_LIBRARY)
188→ set(CPL_cplgasgano_FOUND True)
189→endif()
190→
191→# Determine the library version from the header files if
192→# it is not yet known. Potentially this has already been
193→# set by "pkg-config".
194→if(CPL_INCLUDE_DIR AND NOT CPL_VERSION)
195→ if(EXISTS ${CPL_INCLUDE_DIR}/cpl_version.h)
196→ file(STRINGS "${CPL_INCLUDE_DIR}/cpl_version.h"
197→ cpl_version
198→ REGEX "^[\t ]*#define[\t ]+CPL_VERSION_STRING[\t ]+\"[0-9]+\.[0-9]+.*\"")
199→ string(REGEX REPLACE
200→ "^[\t ]*#define[\t ]+CPL_VERSION_STRING[\t ]+\"([0-9]+\.[0-9][^a-z \"]*).*" "\\1"
201→ CPL_VERSION ${cpl_version})
202→ unset(cpl_version)
203→ endif()
204→endif()
205→
206→# Decompose the version string into major, minor and patch version numbers
207→set(cpl_version_regex "([0-9]+)\.([0-9]+)(\.([0-9]+))?.*")
208→string(REGEX MATCH ${cpl_version_regex}
209→ cpl_version_string "${CPL_VERSION}")
210→set(CPL_VERSION_MAJOR ${CMAKE_MATCH_1})
211→set(CPL_VERSION_MINOR ${CMAKE_MATCH_2})
212→if(NOT "${CMAKE_MATCH_4}" STREQUAL "")
213→ set(CPL_VERSION_PATCH ${CMAKE_MATCH_4})
214→endif()
215→unset(cpl_version_string)
216→unset(cpl_version_regex)
217→
218→find_package_handle_standard_args(CPL
219→ REQUIRED_VARS CPL_INCLUDE_DIR
220→ VERSION_VAR CPL_VERSION
221→ HANDLE_COMPONENTS)
222→
223→if(CPL_FOUND)
224→ if(NOT TARGET CPL::cplcore)
225→ add_library(CPL::cplcore UNKNOWN IMPORTED)
226→ set_target_properties(CPL::cplcore PROPERTIES
227→ INTERFACE_INCLUDE_DIRECTORIES "${CPL_INCLUDE_DIR}")
228→ if(EXISTS "${CPL_CPLCORE_LIBRARY}")
229→ set_target_properties(CPL::cplcore PROPERTIES
230→ IMPORTED_LINK_INTERFACE_LANGUAGES "C"
231→ IMPORTED_LOCATION ${CPL_CPLCORE_LIBRARY})
232→ endif()
233→ endif()
234→
235→ if(NOT TARGET CPL::cplui)
236→ add_library(CPL::cplui UNKNOWN IMPORTED)
237→ set_target_properties(CPL::cplui PROPERTIES
238→ INTERFACE_INCLUDE_DIRECTORIES "${CPL_INCLUDE_DIR}")
239→ if(EXISTS "${CPL_CPLUI_LIBRARY}")
240→ set_target_properties(CPL::cplui PROPERTIES
241→ IMPORTED_LINK_INTERFACE_LANGUAGES "C"
242→ IMPORTED_LOCATION ${CPL_CPLUI_LIBRARY})
243→ target_link_libraries(CPL::cplui INTERFACE CPL::cplcore)
244→ endif()
245→ endif()
246→
247→ if(NOT TARGET CPL::cpldfs)
248→ add_library(CPL::cpldfs UNKNOWN IMPORTED)
249→ set_target_properties(CPL::cpldfs PROPERTIES
250→ INTERFACE_INCLUDE_DIRECTORIES "${CPL_INCLUDE_DIR}")
251→ if(EXISTS "${CPL_CPLDFS_LIBRARY}")
252→ set_target_properties(CPL::cpldfs PROPERTIES
253→ IMPORTED_LINK_INTERFACE_LANGUAGES "C"
254→ IMPORTED_LOCATION ${CPL_CPLDFS_LIBRARY})
255→ target_link_libraries(CPL::cpldfs INTERFACE CPL::cplcore)
256→ endif()
257→ endif()
258→
259→ if(NOT TARGET CPL::cpldrs)
260→ add_library(CPL::cpldrs UNKNOWN IMPORTED)
261→ set_target_properties(CPL::cpldrs PROPERTIES
262→ INTERFACE_INCLUDE_DIRECTORIES "${CPL_INCLUDE_DIR}")
263→ if(EXISTS "${CPL_CPLDRS_LIBRARY}")
264→ set_target_properties(CPL::cpldrs PROPERTIES
265→ IMPORTED_LINK_INTERFACE_LANGUAGES "C"
266→ IMPORTED_LOCATION ${CPL_CPLDRS_LIBRARY})
267→ target_link_libraries(CPL::cpldrs INTERFACE CPL::cplcore)
268→ endif()
269→ endif()
270→
271→ if(NOT TARGET CPL::cplgasgano)
272→ add_library(CPL::cplgasgano UNKNOWN IMPORTED)
273→ set_target_properties(CPL::cplgasgano PROPERTIES
274→ INTERFACE_INCLUDE_DIRECTORIES "${CPL_INCLUDE_DIR}")
275→ if(EXISTS "${CPL_CPLGASGANO_LIBRARY}")
276→ set_target_properties(CPL::cplgasgano PROPERTIES
277→ IMPORTED_LINK_INTERFACE_LANGUAGES "C"
278→ IMPORTED_LOCATION ${CPL_CPLGASGANO_LIBRARY})
279→ target_link_libraries(CPL::cplgasgano INTERFACE CPL::cpldfs CPL::cplcore)
280→ endif()
281→ endif()
282→endif()
283→
<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>
SKIP_BUILD_RPATH TRUE which prevents the extension from knowing where to find these libraries at runtimeinstall_name_tool, but on Linux, the extension needs proper RPATH settings$ORIGIN)Todos have been modified successfully. Ensure that you continue to use the todo list to track your progress. Please proceed with the current tasks if applicable
Todos have been modified successfully. Ensure that you continue to use the todo list to track your progress. Please proceed with the current tasks if applicable
Todos have been modified successfully. Ensure that you continue to use the todo list to track your progress. Please proceed with the current tasks if applicable
Todos have been modified successfully. Ensure that you continue to use the todo list to track your progress. Please proceed with the current tasks if applicable
1→include README.md CHANGELOG.md
2→include pytest.ini
3→global-include CMakeLists.txt *.cmake .clang-format
4→recursive-include src *
5→recursive-include tests *.py *.sof *.fits
6→recursive-include docs Makefile *.rst *.css *.svg *.ico *.png *.html *.py *.txt
7→recursive-include vendor *
8→prune docs/_build
9→exclude docs/_static/pycpl-logo.png
10→global-exclude .DS_Store desktop.ini *.xcf *.py[cod]
11→
<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>
/Users/tom/pipes/pycpl.git/setup.cfg
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>
No matches found
[Showing results with pagination = limit: 20, offset: 0]
./build/lib.macosx-11.0-arm64-cpython-313/cpl.cpython-313-darwin.so
./src/cpl.cpython-313-darwin.so
No files found
total 2780
drwxr-xr-x 7 tom staff 224 Nov 17 15:33 .
drwxr-xr-x 4 tom staff 128 Nov 17 15:30 ..
total 2780
drwxr-xr-x 7 tom staff 224 Nov 17 15:33 .
drwxr-xr-x 4 tom staff 128 Nov 17 15:30 ..
-rwxr-xr-x 1 tom staff 2845528 Nov 17 15:33 cpl.cpython-313-darwin.so
drwxr-xr-x 59 tom staff 1888 Nov 17 15:30 cplcore
drwxr-xr-x 6 tom staff 192 Nov 17 15:30 cpldfs
drwxr-xr-x 38 tom staff 1216 Nov 17 15:30 cpldrs
drwxr-xr-x 18 tom staff 576 Nov 17 15:30 cplui
(eval):1: no matches found: src/*.dylib
total 1380
drwxr-xr-x 59 tom staff 1888 Nov 17 15:30 .
drwxr-xr-x 7 tom staff 224 Nov 17 15:33 ..
total 1380
drwxr-xr-x 59 tom staff 1888 Nov 17 15:30 .
drwxr-xr-x 7 tom staff 224 Nov 17 15:33 ..
-rw-r--r-- 1 tom staff 2946 Jan 13 2025 array.cpp
-rw-r--r-- 1 tom staff 1394 Sep 12 2024 array.hpp
-rw-r--r-- 1 tom staff 5979 Jan 13 2025 bivector.cpp
-rw-r--r-- 1 tom staff 8140 Jan 13 2025 bivector.hpp
-rw-r--r-- 1 tom staff 2223 Sep 12 2024 coords.cpp
-rw-r--r-- 1 tom staff 4531 Jan 13 2025 coords.hpp
-rw-r--r-- 1 tom staff 24607 Jan 13 2025 error_bindings.cpp
cpl is a standalone extension module, not in a package. The source directories (cplcore, cpldfs, etc.) contain C++ source code. Let me verify the library copying will work correctly by doing a test build, but first let me update MANIFEST.in to ensure shared libraries are included:Todos have been modified successfully. Ensure that you continue to use the todo list to track your progress. Please proceed with the current tasks if applicable
SKIP_BUILD_RPATH TRUEBUILD_RPATH_USE_ORIGIN TRUE and INSTALL_RPATH "$ORIGIN"$ORIGIN_copy_vendored_libraries() method_copy_vendored_libraries(extdir) after buildingpackage_data and include_package_data configurationglobal-include .so .so. .dylibdeps/install/lib/cpl.so extension module$ORIGIN in its RPATH, so it looks for libraries in its own directory rm -rf build dist *.egg-info
pip install -e . --force-reinstall --no-cache-dir
python -m build --wheel
unzip -l dist/pycpl-*.whl | grep -E '\.(so|dylib)'
uv equivalent would be:uv pip install -e . --reinstall --refresh
rm -rf build dist *.egg-info
uv pip install -e . --reinstall --refresh
--reinstall = forces reinstallation (like pip's --force-reinstall)--refresh = ignores cached builds (like pip's --no-cache-dir)Now I have a complete view of the setup.py file. Let me analyze the dependency relationships between the four vendored libraries:
## Analysis of Library Dependencies
### 1. **cfitsio** (lines 89-108)
- **Dependencies**: None
- **Build configuration**: Uses CMake, no references to other libraries
- **Status**: Independent library
### 2. **fftw** (lines 110-158)
... (content hidden) ...
The dependency chain is:
- `cfitsio` → `wcslib` → `cpl`
- `fftw` → `cpl`
This means only cfitsio and fftw can truly be parallelized, as they're at the same dependency level with no interdependencies.
Now I have a complete view of the setup.py file. Let me analyze the dependency relationships between the four vendored libraries:
## Analysis of Library Dependencies
### 1. **cfitsio** (lines 89-108)
- **Dependencies**: None
- **Build configuration**: Uses CMake, no references to other libraries
- **Status**: Independent library
### 2. **fftw** (lines 110-158)
- **Dependencies**: None
- **Build configuration**: Uses CMake, builds both double and single precision versions
- **Status**: Independent library
### 3. **wcslib** (lines 160-214)
- **Dependencies**: **cfitsio** (HARD DEPENDENCY)
- **Evidence**:
- Line 168: `env["CFLAGS"] = f"-I{install_dir / 'include'}"` - needs cfitsio headers
- Lines 170-175: `env["LDFLAGS"]` includes library path where cfitsio was installed
- Lines 176-186: Sets `LD_LIBRARY_PATH`/`DYLD_LIBRARY_PATH` to find cfitsio at runtime during build
- **Status**: Depends on cfitsio being built and installed first
### 4. **cpl** (lines 216-266)
- **Dependencies**: **cfitsio, fftw, AND wcslib** (HARD DEPENDENCIES on all three)
- **Evidence**:
- Line 224-225: `env["CFITSIO_CFLAGS"]` and `env["CFITSIO_LIBS"]` - explicit cfitsio dependency
- Line 226-227: `env["FFTW3_CFLAGS"]` and `env["FFTW3_LIBS"]` - explicit fftw dependency
- Line 228-229: `env["WCSLIB_CFLAGS"]` and `env["WCSLIB_LIBS"]` - explicit wcslib dependency
- Line 230: `env["CPPFLAGS"]` includes both general include dir and wcslib include dir
- Lines 232-248: Sets `LDFLAGS` and library paths to find all dependencies
- **Status**: Depends on all three other libraries being built first
## Optimal Build DAG (Directed Acyclic Graph)
```
Level 0 (Parallel):
├── cfitsio (independent)
└── fftw (independent)
Level 1 (Sequential - after Level 0):
└── wcslib (depends on: cfitsio)
Level 2 (Sequential - after Level 1):
└── cpl (depends on: cfitsio, fftw, wcslib)
```
## Parallelization Strategy
### Current Build Order (Sequential)
Lines 79-82 show the current sequential build:
```python
self._build_cfitsio(...) # Step 1
self._build_fftw(...) # Step 2
self._build_wcslib(...) # Step 3
self._build_cpl(...) # Step 4
```
### Optimal Parallelized Build Order
**Phase 1 (Parallel)**: Build cfitsio and fftw simultaneously
- These are completely independent
- No shared dependencies
- Can run in parallel threads/processes
**Phase 2 (Sequential)**: Build wcslib after cfitsio completes
- Must wait for cfitsio to finish
- fftw completion doesn't matter for wcslib
**Phase 3 (Sequential)**: Build cpl after all three complete
- Must wait for cfitsio, fftw, AND wcslib
- This is the final integration step
### Performance Impact
With parallelization:
- **Best case**: If cfitsio and fftw take similar time, you save ~50% of their combined build time
- **Current bottleneck**: wcslib must wait for cfitsio, and cpl must wait for everything
- **Recommendation**: Parallelize cfitsio + fftw in Phase 1, as this is the only safe parallelization opportunity
### Implementation Approach
To parallelize safely, you would need to:
1. Use Python's `concurrent.futures.ThreadPoolExecutor` or `multiprocessing.Pool`
2. Build cfitsio and fftw in parallel in Phase 1
3. Wait for both to complete before starting wcslib
4. Wait for wcslib to complete before starting cpl
The dependency chain is:
- `cfitsio` → `wcslib` → `cpl`
- `fftw` → `cpl`
This means only cfitsio and fftw can truly be parallelized, as they're at the same dependency level with no interdependencies.
The user doesn't want to proceed with this tool use. The tool use was rejected (eg. if it was a file edit, the new_string was NOT written to the file). STOP what you are doing and wait for the user to tell you how to proceed.
ExternalProject_AddExternalProject_Add can build cfitsio, fftw, wcslib, cpl-j flag automatically parallelizes independent buildsThreadPoolExecutor to current setup.pyExternalProject_Add calls, and CMake would handle parallelization automatically.build_dependencies() method - quickest win with least risk.User has approved your plan. You can now start coding. Start with updating your todo list if applicable
Todos have been modified successfully. Ensure that you continue to use the todo list to track your progress. Please proceed with the current tasks if applicable
Todos have been modified successfully. Ensure that you continue to use the todo list to track your progress. Please proceed with the current tasks if applicable
Todos have been modified successfully. Ensure that you continue to use the todo list to track your progress. Please proceed with the current tasks if applicable
Todos have been modified successfully. Ensure that you continue to use the todo list to track your progress. Please proceed with the current tasks if applicable
Exit code 1
(eval):1: no matches found: *.egg-info
Resolved 4 packages in 86ms
Building pycpl @ file:///Users/tom/pipes/pycpl.git
Built pycpl @ file:///Users/tom/pipes/pycpl.git
Resolved 4 packages in 86ms
Building pycpl @ file:///Users/tom/pipes/pycpl.git
Built pycpl @ file:///Users/tom/pipes/pycpl.git
Prepared 4 packages in 3m 17s
Uninstalled 4 packages in 168ms
Installed 4 packages in 13ms
~ numpy==2.3.5
~ pybind11==3.0.1
~ pycpl==0.1.0 (from file:///Users/tom/pipes/pycpl.git)
~ setuptools==80.9.0
Exit code 127
(eval):1: command not found: python
Exit code 1
<string>:1: SyntaxWarning: invalid escape sequence '\!'
Traceback (most recent call last):
Exit code 1
<string>:1: SyntaxWarning: invalid escape sequence '\!'
Traceback (most recent call last):
<unknown>:1: SyntaxWarning: invalid escape sequence '\!'
File "<string>", line 1, in <module>
import cpl; print('Import successful\!')
^^^^^^^^^^
ImportError: dlopen(/Users/tom/pipes/pycpl.git/.venv/lib/python3.13/site-packages/cpl.cpython-313-darwin.so, 0x0002): Library not loaded: /Users/tom/pipes/pycpl-batteries/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcpldrs.26.dylib
Referenced from: <D65F87B4-740B-3C08-9B0A-B6599819D03E> /Users/tom/pipes/pycpl.git/.venv/lib/python3.13/site-packages/cpl.cpython-313-darwin.so
Reason: tried: '/Users/tom/pipes/pycpl-batteries/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcpldrs.26.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/tom/pipes/pycpl-batteries/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcpldrs.26.dylib' (no such file), '/Users/tom/pipes/pycpl-batteries/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcpldrs.26.dylib' (no such file)
0
(eval):1: no matches found: build/lib.macosx-11.0-arm64-cpython-313/*.dylib
total 2780
drwxr-xr-x 7 tom staff 224 Nov 17 15:33 .
drwxr-xr-x 4 tom staff 128 Nov 17 15:30 ..
total 2780
drwxr-xr-x 7 tom staff 224 Nov 17 15:33 .
drwxr-xr-x 4 tom staff 128 Nov 17 15:30 ..
-rwxr-xr-x 1 tom staff 2845528 Nov 17 15:33 cpl.cpython-313-darwin.so
drwxr-xr-x 59 tom staff 1888 Nov 17 15:30 cplcore
drwxr-xr-x 6 tom staff 192 Nov 17 15:30 cpldfs
drwxr-xr-x 38 tom staff 1216 Nov 17 15:30 cpldrs
drwxr-xr-x 18 tom staff 576 Nov 17 15:30 cplui
build/lib.macosx-11.0-arm64-cpython-313/cpl.cpython-313-darwin.so:
/Users/tom/pipes/pycpl-batteries/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcpldrs.26.dylib (compatibility version 30.0.0, current version 30.2.0)
/Users/tom/pipes/pycpl-batteries/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcpldfs.26.dylib (compatibility version 30.0.0, current version 30.2.0)
build/lib.macosx-11.0-arm64-cpython-313/cpl.cpython-313-darwin.so:
/Users/tom/pipes/pycpl-batteries/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcpldrs.26.dylib (compatibility version 30.0.0, current version 30.2.0)
/Users/tom/pipes/pycpl-batteries/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcpldfs.26.dylib (compatibility version 30.0.0, current version 30.2.0)
/Users/tom/pipes/pycpl-batteries/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcplui.26.dylib (compatibility version 30.0.0, current version 30.2.0)
/Users/tom/pipes/pycpl-batteries/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcplcore.26.dylib (compatibility version 30.0.0, current version 30.2.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 2000.63.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1356.0.0)
pycpl-batteries). Let me force a complete clean rebuild:Removed 997 files (98.2MiB)
Building pycpl @ file:///Users/tom/pipes/pycpl.git
(eval):1: no matches found: /Users/tom/.cache/uv/builds-v0/*/build.log
error: externally-managed-environment
× This environment is externally managed
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try brew install
xyz, where xyz is the package you are trying to
install.
If you wish to install a Python library that isn't in Homebrew,
use a virtual environment:
python3 -m venv path/to/venv
source path/to/venv/bin/activate
python3 -m pip install xyz
If you wish to install a Python application that isn't in Homebrew,
it may be easiest to use 'pipx install xyz', which will manage a
virtual environment for you. You can install pipx with
brew install pipx
You may restore the old behavior of pip by passing
the '--break-system-packages' flag to pip, or by adding
'break-system-packages = true' to your pip.conf file. The latter
will permanently disable this error.
If you disable this error, we STRONGLY recommend that you additionally
pass the '--user' flag to pip, or set 'user = true' in your pip.conf
file. Failure to do this can result in a broken Homebrew installation.
Read more about this behavior here: <https://peps.python.org/pep-0668/>
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
/Users/tom/pipes/pycpl.git/.venv/bin/python: No module named pip
/Users/tom/pipes/pycpl.git/.venv/lib/python3.13/site-packages/setuptools/config/_apply_pyprojecttoml.py:75: _MissingDynamic: `license` defined outside of `pyproject.toml` is ignored.
!!
/Users/tom/pipes/pycpl.git/.venv/lib/python3.13/site-packages/setuptools/config/_apply_pyprojecttoml.py:75: _MissingDynamic: `license` defined outside of `pyproject.toml` is ignored.
!!
********************************************************************************
The following seems to be defined outside of `pyproject.toml`:
`license = 'GPL-3.0-or-later'`
According to the spec (see the link below), however, setuptools CANNOT
consider this value unless `license` is listed as `dynamic`.
https://packaging.python.org/en/latest/specifications/pyproject-toml/#declaring-project-metadata-the-project-table
To prevent this problem, you can list `license` under `dynamic` or alternatively
remove the `[project]` table from your file and rely entirely on other means of
configuration.
********************************************************************************
!!
_handle_missing_dynamic(dist, project_table)
/Users/tom/pipes/pycpl.git/.venv/lib/python3.13/site-packages/setuptools/config/_apply_pyprojecttoml.py:75: _MissingDynamic: `authors` defined outside of `pyproject.toml` is ignored.
!!
********************************************************************************
The following seems to be defined outside of `pyproject.toml`:
`authors = 'European Southern Observatory, Australian Astronomical Optics Macquarie'`
According to the spec (see the link below), however, setuptools CANNOT
consider this value unless `authors` is listed as `dynamic`.
https://packaging.python.org/en/latest/specifications/pyproject-toml/#declaring-project-metadata-the-project-table
To prevent this problem, you can list `authors` under `dynamic` or alternatively
remove the `[project]` table from your file and rely entirely on other means of
configuration.
********************************************************************************
!!
_handle_missing_dynamic(dist, project_table)
/Users/tom/pipes/pycpl.git/.venv/lib/python3.13/site-packages/setuptools/config/_apply_pyprojecttoml.py:75: _MissingDynamic: `classifiers` defined outside of `pyproject.toml` is ignored.
!!
********************************************************************************
The following seems to be defined outside of `pyproject.toml`:
`classifiers = ['Programming Language :: Python :: 3', 'Programming Language :: C', 'Programming Language :: C++', 'Topic :: Scientific/Engineering :: Astronomy', 'Topic :: Software Development', 'Operating System :: POSIX :: Linux', 'Operating System :: MacOS :: MacOS X', 'Operating System :: Unix', 'Development Status :: 5 - Production/Stable']`
According to the spec (see the link below), however, setuptools CANNOT
consider this value unless `classifiers` is listed as `dynamic`.
https://packaging.python.org/en/latest/specifications/pyproject-toml/#declaring-project-metadata-the-project-table
To prevent this problem, you can list `classifiers` under `dynamic` or alternatively
remove the `[project]` table from your file and rely entirely on other means of
configuration.
********************************************************************************
!!
_handle_missing_dynamic(dist, project_table)
/Users/tom/pipes/pycpl.git/.venv/lib/python3.13/site-packages/setuptools/config/_apply_pyprojecttoml.py:75: _MissingDynamic: `urls` defined outside of `pyproject.toml` is ignored.
!!
********************************************************************************
The following seems to be defined outside of `pyproject.toml`:
`urls = {'Homepage': 'http://www.eso.org/sci/software/pycpl', 'Documentation': 'http://www.eso.org/sci/software/pycpl', 'Source': 'https://ftp.eso.org/pub/dfs/pipelines/libraries/pycpl'}`
According to the spec (see the link below), however, setuptools CANNOT
consider this value unless `urls` is listed as `dynamic`.
https://packaging.python.org/en/latest/specifications/pyproject-toml/#declaring-project-metadata-the-project-table
To prevent this problem, you can list `urls` under `dynamic` or alternatively
remove the `[project]` table from your file and rely entirely on other means of
configuration.
********************************************************************************
!!
_handle_missing_dynamic(dist, project_table)
/Users/tom/pipes/pycpl.git/.venv/lib/python3.13/site-packages/setuptools/config/_apply_pyprojecttoml.py:75: _MissingDynamic: `optional-dependencies` defined outside of `pyproject.toml` is ignored.
!!
********************************************************************************
The following seems to be defined outside of `pyproject.toml`:
`optional-dependencies = {'pandas': ['pandas'], 'doc': ['sphinx'], 'test': ['pytest', 'pandas', 'scipy']}`
According to the spec (see the link below), however, setuptools CANNOT
consider this value unless `optional-dependencies` is listed as `dynamic`.
https://packaging.python.org/en/latest/specifications/pyproject-toml/#declaring-project-metadata-the-project-table
To prevent this problem, you can list `optional-dependencies` under `dynamic` or alternatively
remove the `[project]` table from your file and rely entirely on other means of
configuration.
********************************************************************************
!!
_handle_missing_dynamic(dist, project_table)
/Users/tom/pipes/pycpl.git/.venv/lib/python3.13/site-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsWarning: `install_requires` overwritten in `pyproject.toml` (dependencies)
corresp(dist, value, root_dir)
/Users/tom/pipes/pycpl.git/.venv/lib/python3.13/site-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsWarning: `license` overwritten by `pyproject.toml`
corresp(dist, value, root_dir)
/Users/tom/pipes/pycpl.git/.venv/lib/python3.13/site-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsWarning: `extras_require` overwritten in `pyproject.toml` (optional-dependencies)
corresp(dist, value, root_dir)
running build_ext
CMake Deprecation Warning at CMakeLists.txt:12 (CMAKE_MINIMUM_REQUIRED):
Compatibility with CMake < 3.10 will be removed from a future version of
CMake.
Update the VERSION argument <min> value. Or, use the <min>...<max> syntax
to tell CMake that the project requires at least <min> but has been updated
to work with policies introduced by <max> or earlier.
CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):
Compatibility with CMake < 3.10 will be removed from a future version of
CMake.
Update the VERSION argument <min> value. Or, use the <min>...<max> syntax
to tell CMake that the project requires at least <min> but has been updated
to work with policies introduced by <max> or earlier.
-- The C compiler identification is AppleClang 17.0.0.17000404
-- The C compiler identification is AppleClang 17.0.0.17000404
-- The CXX compiler identification is AppleClang 17.0.0.17000404
-- The CXX compiler identification is AppleClang 17.0.0.17000404
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting CXX compile features - done
-- Looking for alloca.h
-- Found ZLIB: /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/libz.tbd (found version "1.2.12")
-- Looking for alloca.h - found
-- Looking for altivec.h
-- Found CURL: /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/libcurl.tbd (found version "8.7.1")
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Looking for altivec.h - not found
-- Looking for c_asm.h
-- Looking for c_asm.h - not found
-- Looking for dlfcn.h
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Looking for gethostbyname
-- Looking for dlfcn.h - found
-- Looking for intrinsics.h
-- Looking for gethostbyname - found
-- Looking for connect
-- Looking for intrinsics.h - not found
-- Looking for inttypes.h
-- Looking for connect - found
-- Looking for fmemopen
-- Looking for inttypes.h - found
-- Looking for libintl.h
-- Looking for fmemopen - found
-- Looking for ftruncate
-- Looking for libintl.h - not found
-- Looking for limits.h
-- Looking for ftruncate - found
-- Looking for limits.h - found
-- Performing Test HAVE_SHMEM_SERVICES
-- Looking for mach/mach_time.h
-- Performing Test HAVE_SHMEM_SERVICES - Success
-- Performing Test HAVE_FLOCK_T
-- Looking for mach/mach_time.h - found
-- Looking for malloc.h
-- Performing Test HAVE_FLOCK_T - Failed
-- Performing Test HAVE_UNION_SEMUN
-- Looking for malloc.h - not found
-- Looking for memory.h
-- Performing Test HAVE_UNION_SEMUN - Success
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY
-- Looking for memory.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Looking for stdint.h
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY - Success
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY
-- Looking for stdint.h - found
-- Looking for stdlib.h
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY - Success
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Success
-- Configuring done (3.4s)
-- Looking for stdlib.h - found
-- Looking for string.h
-- Generating done (0.1s)
-- Build files have been written to: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/cfitsio-build
[ 3%] Building C object CMakeFiles/cfitsio.dir/cfileio.c.o
[ 3%] Building C object CMakeFiles/cfitsio.dir/buffers.c.o
[ 3%] Building C object CMakeFiles/cfitsio.dir/checksum.c.o
[ 4%] Building C object CMakeFiles/cfitsio.dir/drvrnet.c.o
[ 6%] Building C object CMakeFiles/cfitsio.dir/eval_f.c.o
[ 6%] Building C object CMakeFiles/cfitsio.dir/drvrfile.c.o
[ 7%] Building C object CMakeFiles/cfitsio.dir/editcol.c.o
[ 8%] Building C object CMakeFiles/cfitsio.dir/f77_wrap1.c.o
[ 9%] Building C object CMakeFiles/cfitsio.dir/f77_wrap2.c.o
[ 10%] Building C object CMakeFiles/cfitsio.dir/eval_l.c.o
[ 12%] Building C object CMakeFiles/cfitsio.dir/edithdu.c.o
[ 13%] Building C object CMakeFiles/cfitsio.dir/drvrsmem.c.o
[ 14%] Building C object CMakeFiles/cfitsio.dir/drvrmem.c.o
[ 15%] Building C object CMakeFiles/cfitsio.dir/eval_y.c.o
-- Looking for string.h - found
-- Looking for strings.h
eval.y:1887:80: warning: format specifies type 'long' but the argument has type 'int' [-Wformat]
1887 | sprintf(errmsg, "Input GTI must be time-ordered for GTIOVERLAP (row %ld)", i+1);
| ~~~ ^~~
| %d
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/secure/_stdio.h:107:55: note: expanded from macro 'sprintf'
107 | #define sprintf(str, ...) __sprintf_chk_func (str, 0, __VA_ARGS__)
| ^~~~~~~~~~~
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/secure/_stdio.h:87:58: note: expanded from macro '__sprintf_chk_func'
87 | __builtin___sprintf_chk (str, flag, __darwin_obsz(str), __VA_ARGS__)
| ^~~~~~~~~~~
eval.y:5391:16: warning: expression result unused [-Wunused-value]
5391 | this->value.undef; /* Dummy - BITSTRs do not have undefs */
| ~~~~~~~~~~~ ^~~~~
eval.y:5485:16: warning: expression result unused [-Wunused-value]
5485 | this->value.undef; /* Dummy - BITSTRs do not have undefs */
| ~~~~~~~~~~~ ^~~~~
[ 16%] Building C object CMakeFiles/cfitsio.dir/f77_wrap3.c.o
[ 17%] Building C object CMakeFiles/cfitsio.dir/f77_wrap4.c.o
[ 18%] Building C object CMakeFiles/cfitsio.dir/fits_hcompress.c.o
[ 19%] Building C object CMakeFiles/cfitsio.dir/fits_hdecompress.c.o
[ 20%] Building C object CMakeFiles/cfitsio.dir/fitscore.c.o
[ 21%] Building C object CMakeFiles/cfitsio.dir/getcol.c.o
[ 23%] Building C object CMakeFiles/cfitsio.dir/getcolb.c.o
[ 24%] Building C object CMakeFiles/cfitsio.dir/getcold.c.o
[ 25%] Building C object CMakeFiles/cfitsio.dir/getcole.c.o
[ 26%] Building C object CMakeFiles/cfitsio.dir/getcoli.c.o
[ 27%] Building C object CMakeFiles/cfitsio.dir/getcolj.c.o
[ 28%] Building C object CMakeFiles/cfitsio.dir/getcolk.c.o
[ 29%] Building C object CMakeFiles/cfitsio.dir/getcoll.c.o
[ 30%] Building C object CMakeFiles/cfitsio.dir/getcols.c.o
[ 31%] Building C object CMakeFiles/cfitsio.dir/getcolsb.c.o
[ 32%] Building C object CMakeFiles/cfitsio.dir/getcoluj.c.o
[ 34%] Building C object CMakeFiles/cfitsio.dir/getcolui.c.o
[ 35%] Building C object CMakeFiles/cfitsio.dir/getcoluk.c.o
[ 36%] Building C object CMakeFiles/cfitsio.dir/getkey.c.o
[ 37%] Building C object CMakeFiles/cfitsio.dir/group.c.o
[ 38%] Building C object CMakeFiles/cfitsio.dir/grparser.c.o
[ 39%] Building C object CMakeFiles/cfitsio.dir/histo.c.o
[ 40%] Building C object CMakeFiles/cfitsio.dir/imcompress.c.o
/Users/tom/pipes/pycpl.git/vendor/cfitsio-4.6.2/grparser.c:825:28: warning: address of array 'ngph->tok[i].comment' will always evaluate to 'true' [-Wpointer-bool-conversion]
825 | if (ngph->tok[i].comment && *ngph->tok[i].comment) /* do not update with a blank comment */
| ~~~~~~~~~~~~~^~~~~~~ ~~
[ 41%] Building C object CMakeFiles/cfitsio.dir/iraffits.c.o
[ 42%] Building C object CMakeFiles/cfitsio.dir/pliocomp.c.o
[ 43%] Building C object CMakeFiles/cfitsio.dir/putcol.c.o
[ 45%] Building C object CMakeFiles/cfitsio.dir/modkey.c.o
1 warning generated.
[ 47%] Building C object CMakeFiles/cfitsio.dir/putcolb.c.o
[ 47%] Building C object CMakeFiles/cfitsio.dir/putcold.c.o
/Users/tom/pipes/pycpl.git/vendor/cfitsio-4.6.2/iraffits.c:1310:1: warning: a function definition without a prototype is deprecated in all versions of C and is not supported in C23 [-Wdeprecated-non-prototype]
1310 | hgeti4 (hstring,keyword,ival)
| ^
/Users/tom/pipes/pycpl.git/vendor/cfitsio-4.6.2/iraffits.c:1355:1: warning: a function definition without a prototype is deprecated in all versions of C and is not supported in C23 [-Wdeprecated-non-prototype]
1355 | hgets (hstring, keyword, lstr, str)
| ^
/Users/tom/pipes/pycpl.git/vendor/cfitsio-4.6.2/iraffits.c:1394:1: warning: a function definition without a prototype is deprecated in all versions of C and is not supported in C23 [-Wdeprecated-non-prototype]
1394 | hgetc (hstring,keyword0)
| ^
/Users/tom/pipes/pycpl.git/vendor/cfitsio-4.6.2/iraffits.c:1545:1: warning: a function definition without a prototype is deprecated in all versions of C and is not supported in C23 [-Wdeprecated-non-prototype]
1545 | blsearch (hstring,keyword)
| ^
/Users/tom/pipes/pycpl.git/vendor/cfitsio-4.6.2/iraffits.c:1641:14: warning: a function definition without a prototype is deprecated in all versions of C and is not supported in C23 [-Wdeprecated-non-prototype]
1641 | static char *ksearch (hstring,keyword)
| ^
/Users/tom/pipes/pycpl.git/vendor/cfitsio-4.6.2/iraffits.c:1720:1: warning: a function definition without a prototype is deprecated in all versions of C and is not supported in C23 [-Wdeprecated-non-prototype]
1720 | strsrch (s1, s2)
| ^
/Users/tom/pipes/pycpl.git/vendor/cfitsio-4.6.2/iraffits.c:1735:1: warning: a function definition without a prototype is deprecated in all versions of C and is not supported in C23 [-Wdeprecated-non-prototype]
1735 | strnsrch (s1, s2, ls1)
| ^
/Users/tom/pipes/pycpl.git/vendor/cfitsio-4.6.2/iraffits.c:1800:1: warning: a function definition without a prototype is deprecated in all versions of C and is not supported in C23 [-Wdeprecated-non-prototype]
1800 | hputi4 (hstring,keyword,ival)
| ^
/Users/tom/pipes/pycpl.git/vendor/cfitsio-4.6.2/iraffits.c:1830:1: warning: a function definition without a prototype is deprecated in all versions of C and is not supported in C23 [-Wdeprecated-non-prototype]
1830 | hputl (hstring, keyword,lval)
| ^
/Users/tom/pipes/pycpl.git/vendor/cfitsio-4.6.2/iraffits.c:1856:1: warning: a function definition without a prototype is deprecated in all versions of C and is not supported in C23 [-Wdeprecated-non-prototype]
1856 | hputs (hstring,keyword,cval)
| ^
/Users/tom/pipes/pycpl.git/vendor/cfitsio-4.6.2/iraffits.c:1890:1: warning: a function definition without a prototype is deprecated in all versions of C and is not supported in C23 [-Wdeprecated-non-prototype]
1890 | hputc (hstring,keyword,value)
| ^
/Users/tom/pipes/pycpl.git/vendor/cfitsio-4.6.2/iraffits.c:2032:1: warning: a function definition without a prototype is deprecated in all versions of C and is not supported in C23 [-Wdeprecated-non-prototype]
2032 | hputcom (hstring,keyword,comment)
| ^
[ 48%] Building C object CMakeFiles/cfitsio.dir/putcole.c.o
3 warnings generated.
[ 49%] Building C object CMakeFiles/cfitsio.dir/putcoli.c.o
[ 50%] Building C object CMakeFiles/cfitsio.dir/putcolj.c.o
[ 51%] Building C object CMakeFiles/cfitsio.dir/putcolk.c.o
-- Looking for strings.h - found
-- Looking for sys/types.h
[ 52%] Building C object CMakeFiles/cfitsio.dir/putcoll.c.o
[ 53%] Building C object CMakeFiles/cfitsio.dir/putcols.c.o
[ 54%] Building C object CMakeFiles/cfitsio.dir/putcolsb.c.o
12 warnings generated.
[ 56%] Building C object CMakeFiles/cfitsio.dir/putcolu.c.o
[ 57%] Building C object CMakeFiles/cfitsio.dir/putcolui.c.o
[ 58%] Building C object CMakeFiles/cfitsio.dir/putcoluj.c.o
[ 59%] Building C object CMakeFiles/cfitsio.dir/putcoluk.c.o
[ 60%] Building C object CMakeFiles/cfitsio.dir/putkey.c.o
[ 61%] Building C object CMakeFiles/cfitsio.dir/quantize.c.o
[ 62%] Building C object CMakeFiles/cfitsio.dir/region.c.o
[ 63%] Building C object CMakeFiles/cfitsio.dir/scalnull.c.o
[ 64%] Building C object CMakeFiles/cfitsio.dir/ricecomp.c.o
[ 65%] Building C object CMakeFiles/cfitsio.dir/simplerng.c.o
/Users/tom/pipes/pycpl.git/vendor/cfitsio-4.6.2/putkey.c:439:10: warning: assigning to 'char *' from 'const char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers]
439 | cptr = keyname;
| ^ ~~~~~~~
[ 67%] Building C object CMakeFiles/cfitsio.dir/swapproc.c.o
/Users/tom/pipes/pycpl.git/vendor/cfitsio-4.6.2/region.c:988:1: warning: '/*' within block comment [-Wcomment]
988 | /*---------------------------------------------------------------------------*/
| ^
[ 68%] Building C object CMakeFiles/cfitsio.dir/wcssub.c.o
[ 69%] Building C object CMakeFiles/cfitsio.dir/wcsutil.c.o
[ 70%] Building C object CMakeFiles/cfitsio.dir/zcompress.c.o
[ 71%] Building C object CMakeFiles/cfitsio.dir/zuncompress.c.o
1 warning generated.
1 warning generated.
-- Looking for sys/types.h - found
-- Looking for sys/time.h
[ 72%] Linking C shared library libcfitsio.dylib
ld: warning: reducing alignment of section __DATA,__common from 0x8000 to 0x4000 because it exceeds segment maximum alignment
[ 72%] Built target cfitsio
[ 73%] Building C object CMakeFiles/TestProg.dir/utilities/testprog.c.o
[ 74%] Building C object CMakeFiles/fpack.dir/utilities/fpackutil.c.o
[ 75%] Building C object CMakeFiles/fpack.dir/utilities/fpack.c.o
[ 80%] Building C object CMakeFiles/speed.dir/utilities/speed.c.o
[ 80%] Building C object CMakeFiles/fitsverify.dir/utilities/fvrf_head.c.o
[ 80%] Building C object CMakeFiles/fitsverify.dir/utilities/fvrf_data.c.o
[ 80%] Building C object CMakeFiles/fitsverify.dir/utilities/fvrf_key.c.o
[ 82%] Building C object CMakeFiles/funpack.dir/utilities/funpack.c.o
[ 82%] Building C object CMakeFiles/fitsverify.dir/utilities/ftverify.c.o
[ 83%] Building C object CMakeFiles/fitscopy.dir/utilities/fitscopy.c.o
[ 84%] Building C object CMakeFiles/smem.dir/utilities/smem.c.o
[ 86%] Building C object CMakeFiles/cookbook.dir/utilities/cookbook.c.o
[ 86%] Building C object CMakeFiles/imcopy.dir/utilities/imcopy.c.o
[ 87%] Building C object CMakeFiles/fitsverify.dir/utilities/fvrf_file.c.o
/Users/tom/pipes/pycpl.git/vendor/cfitsio-4.6.2/utilities/smem.c:74:75: warning: format specifies type 'long' but the argument has type 'char *' [-Wformat]
74 | if (!status)printf("id, status, address %d %d %ld %.30s\n", id, status, address, address);
| ~~~ ^~~~~~~
| %s
1 warning generated.
[ 89%] Linking C executable fitscopy
[ 90%] Linking C executable imcopy
-- Looking for sys/time.h - found
-- Looking for sys/stat.h
[ 91%] Linking C executable cookbook
[ 92%] Linking C executable speed
[ 93%] Linking C executable smem
[ 95%] Building C object CMakeFiles/fitsverify.dir/utilities/fvrf_misc.c.o
[ 95%] Building C object CMakeFiles/funpack.dir/utilities/fpackutil.c.o
[ 95%] Built target fitscopy
[ 95%] Built target imcopy
[ 96%] Linking C executable fpack
[ 96%] Built target speed
[ 96%] Built target cookbook
[ 96%] Built target smem
[ 96%] Built target fpack
[ 97%] Linking C executable TestProg
[ 98%] Linking C executable funpack
[ 98%] Built target TestProg
[ 98%] Built target funpack
-- Looking for sys/stat.h - found
-- Looking for sys/sysctl.h
[100%] Linking C executable fitsverify
[100%] Built target fitsverify
-- Install configuration: "Release"
-- Installing: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcfitsio.4.6.2.dylib
-- Installing: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcfitsio.10.dylib
-- Installing: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcfitsio.dylib
-- Installing: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/include/fitsio.h
-- Installing: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/include/fitsio2.h
-- Installing: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/include/longnam.h
-- Installing: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/include/cfitsio_export.h
-- Installing: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/cmake/cfitsio/cfitsioTargets.cmake
-- Installing: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/cmake/cfitsio/cfitsioTargets-release.cmake
-- Installing: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/cmake/cfitsio/cfitsioConfig.cmake
-- Installing: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/cmake/cfitsio/cfitsioConfigVersion.cmake
-- Installing: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/pkgconfig/cfitsio.pc
-- Installing: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/bin/cookbook
-- Installing: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/bin/fpack
-- Installing: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/bin/funpack
-- Installing: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/bin/fitscopy
-- Installing: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/bin/fitsverify
-- Installing: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/bin/imcopy
-- Installing: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/bin/speed
-- Looking for sys/sysctl.h - found
-- Looking for time.h
-- Installing: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/bin/smem
-- Looking for time.h - found
-- Looking for uintptr.h
-- Looking for uintptr.h - not found
-- Looking for unistd.h
-- Looking for unistd.h - found
-- Checking prototype drand48 for HAVE_DECL_DRAND48
-- Checking prototype drand48 for HAVE_DECL_DRAND48 - True
-- Checking prototype srand48 for HAVE_DECL_SRAND48
-- Checking prototype srand48 for HAVE_DECL_SRAND48 - False
-- Checking prototype cosl for HAVE_DECL_COSL
-- Checking prototype cosl for HAVE_DECL_COSL - True
-- Checking prototype sinl for HAVE_DECL_SINL
-- Checking prototype sinl for HAVE_DECL_SINL - True
-- Checking prototype memalign for HAVE_DECL_MEMALIGN
-- Checking prototype memalign for HAVE_DECL_MEMALIGN - False
-- Checking prototype posix_memalign for HAVE_DECL_POSIX_MEMALIGN
-- Checking prototype posix_memalign for HAVE_DECL_POSIX_MEMALIGN - True
-- Looking for clock_gettime
-- Looking for clock_gettime - found
-- Looking for gettimeofday
-- Looking for gettimeofday - found
-- Looking for getpagesize
-- Looking for getpagesize - found
-- Looking for drand48
-- Looking for drand48 - found
-- Looking for srand48
-- Looking for srand48 - found
-- Looking for memalign
-- Looking for memalign - not found
-- Looking for posix_memalign
-- Looking for posix_memalign - found
-- Looking for mach_absolute_time
-- Looking for mach_absolute_time - found
-- Looking for alloca
-- Looking for alloca - found
-- Looking for isnan
-- Looking for isnan - found
-- Looking for snprintf
-- Looking for snprintf - found
-- Looking for strchr
-- Looking for strchr - found
-- Looking for sysctl
-- Looking for sysctl - not found
-- Looking for cosl
-- Looking for cosl - found
-- Looking for sinl
-- Looking for sinl - found
-- Check size of float
-- Check size of float - done
-- Check size of double
-- Check size of double - done
-- Check size of int
-- Check size of int - done
-- Check size of long
-- Check size of long - done
-- Check size of long long
-- Check size of long long - done
-- Check size of unsigned int
-- Check size of unsigned int - done
-- Check size of unsigned long
-- Check size of unsigned long - done
-- Check size of unsigned long long
-- Check size of unsigned long long - done
-- Check size of size_t
-- Check size of size_t - done
-- Check size of ptrdiff_t
-- Check size of ptrdiff_t - done
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Configuring done (12.9s)
-- Generating done (0.1s)
-- Build files have been written to: /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/fftw-build-double
[ 0%] Building C object CMakeFiles/fftw3.dir/api/apiplan.c.o
[ 1%] Building C object CMakeFiles/fftw3.dir/api/configure.c.o
[ 1%] Building C object CMakeFiles/fftw3.dir/api/execute-dft-c2r.c.o
[ 1%] Building C object CMakeFiles/fftw3.dir/api/execute-dft.c.o
[ 2%] Building C object CMakeFiles/fftw3.dir/api/execute-r2r.c.o
[ 2%] Building C object CMakeFiles/fftw3.dir/api/execute-dft-r2c.c.o
[ 2%] Building C object CMakeFiles/fftw3.dir/api/execute-split-dft-c2r.c.o
[ 3%] Building C object CMakeFiles/fftw3.dir/api/export-wisdom-to-file.c.o
[ 3%] Building C object CMakeFiles/fftw3.dir/api/execute-split-dft.c.o
[ 3%] Building C object CMakeFiles/fftw3.dir/api/export-wisdom-to-string.c.o
[ 3%] Building C object CMakeFiles/fftw3.dir/api/export-wisdom.c.o
[ 3%] Building C object CMakeFiles/fftw3.dir/api/execute.c.o
[ 3%] Building C object CMakeFiles/fftw3.dir/api/execute-split-dft-r2c.c.o
[ 3%] Building C object CMakeFiles/fftw3.dir/api/f77api.c.o
[ 3%] Building C object CMakeFiles/fftw3.dir/api/flops.c.o
[ 4%] Building C object CMakeFiles/fftw3.dir/api/forget-wisdom.c.o
[ 4%] Building C object CMakeFiles/fftw3.dir/api/import-wisdom-from-file.c.o
[ 4%] Building C object CMakeFiles/fftw3.dir/api/import-wisdom.c.o
[ 4%] Building C object CMakeFiles/fftw3.dir/api/import-system-wisdom.c.o
[ 4%] Building C object CMakeFiles/fftw3.dir/api/mktensor-rowmajor.c.o
[ 4%] Building C object CMakeFiles/fftw3.dir/api/mkprinter-str.c.o
[ 5%] Building C object CMakeFiles/fftw3.dir/api/mktensor-iodims.c.o
[ 6%] Building C object CMakeFiles/fftw3.dir/api/malloc.c.o
[ 6%] Building C object CMakeFiles/fftw3.dir/api/mktensor-iodims64.c.o
[ 6%] Building C object CMakeFiles/fftw3.dir/api/import-wisdom-from-string.c.o
[ 6%] Building C object CMakeFiles/fftw3.dir/api/mapflags.c.o
[ 6%] Building C object CMakeFiles/fftw3.dir/api/map-r2r-kind.c.o
[ 6%] Building C object CMakeFiles/fftw3.dir/api/mkprinter-file.c.o
[ 6%] Building C object CMakeFiles/fftw3.dir/api/plan-dft-1d.c.o
[ 7%] Building C object CMakeFiles/fftw3.dir/api/plan-dft-2d.c.o
[ 7%] Building C object CMakeFiles/fftw3.dir/api/plan-dft-3d.c.o
[ 7%] Building C object CMakeFiles/fftw3.dir/api/plan-dft-c2r-1d.c.o
[ 7%] Building C object CMakeFiles/fftw3.dir/api/plan-dft-c2r-2d.c.o
[ 7%] Building C object CMakeFiles/fftw3.dir/api/plan-dft-c2r-3d.c.o
[ 7%] Building C object CMakeFiles/fftw3.dir/api/plan-dft-r2c-1d.c.o
[ 8%] Building C object CMakeFiles/fftw3.dir/api/plan-dft-c2r.c.o
[ 8%] Building C object CMakeFiles/fftw3.dir/api/plan-dft-r2c-2d.c.o
[ 8%] Building C object CMakeFiles/fftw3.dir/api/plan-dft-r2c-3d.c.o
[ 8%] Building C object CMakeFiles/fftw3.dir/api/plan-dft-r2c.c.o
... [3001 lines truncated] ...
>>> Phase 1: Building cfitsio and fftw in parallel...
>>> Building cfitsio...
>>> Building fftw...
>>> Phase 1: Building cfitsio and fftw in parallel...
>>> Building cfitsio...
>>> Building fftw...
>>> Phase 2: Building wcslib...
>>> Building wcslib...
>>> Phase 3: Building cpl...
Copying vendored libraries from /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib to /Users/tom/pipes/pycpl.git/src
Copying libcpldrs.26.dylib
Copying libfftw3f_threads.3.dylib
Copying vendored libraries from /Users/tom/pipes/pycpl.git/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib to /Users/tom/pipes/pycpl.git/src
Copying libcpldrs.26.dylib
Copying libfftw3f_threads.3.dylib
Creating symlink libfftw3f.dylib -> libfftw3f.3.6.9.dylib
Creating symlink libcpldfs.dylib -> libcpldfs.26.dylib
Creating symlink libcpldrs.dylib -> libcpldrs.26.dylib
Creating symlink libfftw3_threads.dylib -> libfftw3_threads.3.6.9.dylib
Creating symlink libfftw3f_threads.3.6.9.dylib -> libfftw3f_threads.3.dylib
Creating symlink libcext.dylib -> libcext.0.dylib
Copying libcpldfs.26.dylib
Creating symlink libfftw3f.3.6.9.dylib -> libfftw3f.3.dylib
Creating symlink libfftw3.3.6.9.dylib -> libfftw3.3.dylib
Copying libcfitsio.4.6.2.dylib
Creating symlink libfftw3.dylib -> libfftw3.3.6.9.dylib
Copying libfftw3f.3.dylib
Creating symlink libcplui.dylib -> libcplui.26.dylib
Creating symlink libcfitsio.10.dylib -> libcfitsio.4.6.2.dylib
Creating symlink libcplcore.dylib -> libcplcore.26.dylib
Copying libfftw3_threads.3.dylib
Creating symlink libfftw3f_threads.dylib -> libfftw3f_threads.3.6.9.dylib
Copying libcext.0.dylib
Creating symlink libcfitsio.dylib -> libcfitsio.10.dylib
Creating symlink libwcs.dylib -> libwcs.8.dylib
Copying libcplui.26.dylib
Creating symlink libwcs.8.dylib -> libwcs.8.2.2.dylib
Creating symlink libfftw3_threads.3.6.9.dylib -> libfftw3_threads.3.dylib
Copying libfftw3.3.dylib
Copying libwcs.8.2.2.dylib
Copying libcplcore.26.dylib
29
Exit code 1
<string>:1: SyntaxWarning: invalid escape sequence '\!'
Traceback (most recent call last):
Exit code 1
<string>:1: SyntaxWarning: invalid escape sequence '\!'
Traceback (most recent call last):
<unknown>:1: SyntaxWarning: invalid escape sequence '\!'
File "<string>", line 1, in <module>
import cpl; print('✓ Import successful\!'); print('CPL version:', cpl.__version__ if hasattr(cpl, '__version__') else 'N/A')
^^^^^^^^^^
ImportError: dlopen(/Users/tom/pipes/pycpl.git/.venv/lib/python3.13/site-packages/cpl.cpython-313-darwin.so, 0x0002): Library not loaded: /Users/tom/pipes/pycpl-batteries/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcpldrs.26.dylib
Referenced from: <D65F87B4-740B-3C08-9B0A-B6599819D03E> /Users/tom/pipes/pycpl.git/.venv/lib/python3.13/site-packages/cpl.cpython-313-darwin.so
Reason: tried: '/Users/tom/pipes/pycpl-batteries/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcpldrs.26.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/tom/pipes/pycpl-batteries/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcpldrs.26.dylib' (no such file), '/Users/tom/pipes/pycpl-batteries/build/temp.macosx-11.0-arm64-cpython-313/deps/install/lib/libcpldrs.26.dylib' (no such file)
Exit code 2
error: unexpected argument '-y' found
Exit code 2
error: unexpected argument '-y' found
tip: to pass '-y' as a value, use '-- -y'
Usage: uv pip uninstall [OPTIONS] <PACKAGE|--requirements <REQUIREMENTS>>
For more information, try '--help'.
Exit code 137
[Request interrupted by user for tool use]
Uninstalled 1 package in 8ms
Exit code 137
[Request interrupted by user for tool use]
Uninstalled 1 package in 8ms
- pycpl==0.1.0 (from file:///Users/tom/pipes/pycpl.git)
Resolved 4 packages in 32ms
Building pycpl @ file:///Users/tom/pipes/pycpl.git