Skip to content

Commit

Permalink
Merge pull request #374 from esheldon/sys-fitsio-again
Browse files Browse the repository at this point in the history
BUG get external builds working again
  • Loading branch information
esheldon authored Jul 15, 2023
2 parents db69aad + 833b14d commit d170c14
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 27 deletions.
30 changes: 26 additions & 4 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ on:
- master
pull_request: null

env:
PY_COLORS: "1"

jobs:
tests:
name: tests
Expand All @@ -31,6 +34,7 @@ jobs:
access_token: ${{ github.token }}

- uses: actions/checkout@v2

- uses: conda-incubator/setup-miniconda@v2
with:
python-version: ${{ matrix.pyver }}
Expand Down Expand Up @@ -59,16 +63,34 @@ jobs:
make install -j 4
cd ..
- name: test bundled build
- name: test non-bundled build
shell: bash -l {0}
run: |
pip install -e .
pip install -vv -e . \
--global-option="build_ext" \
--global-option="--use-system-fitsio" \
--global-option="--system-fitsio-includedir=$HOME/cfitsio-static-install/include" \
--global-option="--system-fitsio-libdir=$HOME/cfitsio-static-install/lib"
SKIP_BZIP_TEST=true pytest -vv fitsio
- name: test non-bundled build
- name: test non-bundled build w/ env vars
shell: bash -l {0}
run: |
rm -rf build*
find . -name "*.so" -type f -delete
export FITSIO_USE_SYSTEM_FITSIO=1
export FITSIO_SYSTEM_FITSIO_INCLUDEDIR=$HOME/cfitsio-static-install/include
export FITSIO_SYSTEM_FITSIO_LIBDIR=$HOME/cfitsio-static-install/lib
pip install -vv -e .
SKIP_BZIP_TEST=true pytest -vv fitsio
- name: test bundled build
shell: bash -l {0}
run: |
pip install -e . --global-option="build_ext" --global-option "--use-system-fitsio"
rm -rf build*
rm -rf $HOME/cfitsio-static-install
find . -name "*.so" -type f -delete
pip install -vv -e .
SKIP_BZIP_TEST=true pytest -vv fitsio
- name: flake8
Expand Down
80 changes: 57 additions & 23 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,34 +8,68 @@
from setuptools import setup, Extension, find_packages
from setuptools.command.build_ext import build_ext

import sys
import os
import subprocess
from subprocess import Popen, PIPE
import glob
import shutil


if "--use-system-fitsio" in sys.argv:
del sys.argv[sys.argv.index("--use-system-fitsio")]
USE_SYSTEM_FITSIO = True
else:
USE_SYSTEM_FITSIO = False or "FITSIO_USE_SYSTEM_FITSIO" in os.environ

if (
"--system-fitsio-includedir" in sys.argv
or any(a.startswith("--system-fitsio-includedir=") for a in sys.argv)
):
if "--system-fitsio-includedir" in sys.argv:
ind = sys.argv.index("--system-fitsio-includedir")
SYSTEM_FITSIO_INCLUDEDIR = sys.argv[ind+1]
del sys.argv[ind+1]
del sys.argv[ind]
else:
for ind in range(len(sys.argv)):
if sys.argv[ind].startswith("--system-fitsio-includedir="):
break
SYSTEM_FITSIO_INCLUDEDIR = sys.argv[ind].split("=", 1)[1]
del sys.argv[ind]
else:
SYSTEM_FITSIO_INCLUDEDIR = os.environ.get(
"FITSIO_SYSTEM_FITSIO_INCLUDEDIR",
None,
)


if (
"--system-fitsio-libdir" in sys.argv
or any(a.startswith("--system-fitsio-libdir=") for a in sys.argv)
):
if "--system-fitsio-libdir" in sys.argv:
ind = sys.argv.index("--system-fitsio-libdir")
SYSTEM_FITSIO_LIBDIR = sys.argv[ind+1]
del sys.argv[ind+1]
del sys.argv[ind]
else:
for ind in range(len(sys.argv)):
if sys.argv[ind].startswith("--system-fitsio-libdir="):
break
SYSTEM_FITSIO_LIBDIR = sys.argv[ind].split("=", 1)[1]
del sys.argv[ind]
else:
SYSTEM_FITSIO_LIBDIR = os.environ.get(
"FITSIO_SYSTEM_FITSIO_LIBDIR",
None,
)


class build_ext_subclass(build_ext):
boolean_options = build_ext.boolean_options + ['use-system-fitsio']

user_options = build_ext.user_options + [
('use-system-fitsio', None, "Use the cfitsio installed in the system"),
('system-fitsio-includedir=', None,
"Path to look for cfitsio header; default is "
"the system search path."),
('system-fitsio-libdir=', None,
"Path to look for cfitsio library; default is "
"the system search path."),
]
cfitsio_version = '3490'
cfitsio_dir = 'cfitsio%s' % cfitsio_version

def initialize_options(self):
self.use_system_fitsio = False
self.system_fitsio_includedir = None
self.system_fitsio_libdir = None
build_ext.initialize_options(self)

def finalize_options(self):

build_ext.finalize_options(self)
Expand All @@ -47,11 +81,11 @@ def finalize_options(self):
self.cfitsio_patch_dir = os.path.join(
self.build_temp, 'patches')

if self.use_system_fitsio:
if self.system_fitsio_includedir:
self.include_dirs.insert(0, self.system_fitsio_includedir)
if self.system_fitsio_libdir:
self.library_dirs.insert(0, self.system_fitsio_libdir)
if USE_SYSTEM_FITSIO:
if SYSTEM_FITSIO_INCLUDEDIR is not None:
self.include_dirs.insert(0, SYSTEM_FITSIO_INCLUDEDIR)
if SYSTEM_FITSIO_LIBDIR is not None:
self.library_dirs.insert(0, SYSTEM_FITSIO_LIBDIR)
else:
# We defer configuration of the bundled cfitsio to build_extensions
# because we will know the compiler there.
Expand All @@ -72,7 +106,7 @@ def run(self):
build_ext.run(self)

def build_extensions(self):
if not self.use_system_fitsio:
if not USE_SYSTEM_FITSIO:

# Use the compiler for building python to build cfitsio
# for maximized compatibility.
Expand Down

0 comments on commit d170c14

Please sign in to comment.