Skip to content

Commit 16355cc

Browse files
authored
Install all dependencies with APT, reduce verbosity in Makefile build (#91)
* Install all dependencies with APT Obsoletes conda for the Python dependencies. Matplotlib (python3-matplotlib in Ubuntu) does not appear to be needed at the moment. Capitalize the GitHub Action step names for consistency. * Reduce verbose output from non-critical commands Remove -v (--verbose) option from rsync and tar. Do not store intermediate downloads and elide seemingly redundant touch:es. Note that http://downloads.sf.net/cbflib/PyCifRW-4.3_rev_19Jun21.tar.gz ($(PY3CIFRWURL)) appears to be an uncompressed tarfile, despite its .gz extension. * Use all Docker CPU:s by default for CMake Use e.g. --cpuset-cpus or --cpu-quota to externally limit CPU usage with docker. The analogous make -j may not work for the Makefile build, because make is run recursively. * Use UTF-8 locale inside container Affects the regeneration of e.g. the SWIG interface files. This is arguably a buildsystem bug.
1 parent ebe0957 commit 16355cc

File tree

10 files changed

+140
-493
lines changed

10 files changed

+140
-493
lines changed

.dev/docker/cmake_ctest.dockerfile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
FROM ubuntu:24.04
22
SHELL ["/bin/bash", "-c"]
3+
ENV LANG=C.UTF-8
34

45
RUN mkdir /app
56
COPY ./cbflib /app/cbflib
@@ -9,7 +10,7 @@ RUN apt-get update && \
910

1011
RUN cd /app/cbflib && \
1112
cmake . && \
12-
cmake --build . --parallel 4
13+
cmake --build . --parallel `nproc`
1314

1415
RUN cd /app/cbflib && \
15-
ctest --parallel 4
16+
ctest --parallel `nproc`

.dev/docker/make_tests.dockerfile

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,17 @@
11
FROM ubuntu:24.04
22
SHELL ["/bin/bash", "-c"]
3+
ENV LANG=C.UTF-8
34

45
RUN mkdir /app
56
COPY ./cbflib /app/cbflib
67

78
RUN apt-get update && \
8-
apt-get install -y bison build-essential git wget libjpeg-dev m4 automake libpcre2-dev liblzma-dev rsync gfortran libz-dev
9-
10-
RUN mkdir -p ~/miniconda3 && \
11-
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh && \
12-
bash ~/miniconda3/miniconda.sh -b -u -p /usr/share/miniconda && \
13-
rm ~/miniconda3/miniconda.sh
14-
15-
RUN source /usr/share/miniconda/etc/profile.d/conda.sh && \
16-
conda create -y -n build -c conda-forge python=3.11 python-build && \
17-
conda create -y -n test -c conda-forge python=3.11 numpy matplotlib
9+
apt-get install -y bison build-essential git wget libjpeg-dev m4 automake libpcre2-dev liblzma-dev python3-build python3-dev python3-numpy-dev python3-setuptools python3-venv rsync gfortran libz-dev
1810

1911
RUN cd /app/cbflib && \
20-
source /usr/share/miniconda/etc/profile.d/conda.sh && \
21-
conda activate build && \
2212
make all
2313

2414
RUN cd /app/cbflib && \
25-
source /usr/share/miniconda/etc/profile.d/conda.sh && \
26-
conda activate test && \
2715
make tests 2>&1 | tee test.out
2816

2917
RUN ! grep -a ignored /app/cbflib/test.out

.github/workflows/cmake_ctest.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Cmake build and tests
1+
name: CMake build and tests
22

33
on:
44
push:
@@ -18,14 +18,14 @@ jobs:
1818

1919
steps:
2020
- uses: actions/checkout@v4
21-
- name: install extra dependencies
21+
- name: Install extra dependencies
2222
run: |
2323
sudo apt-get update
2424
sudo apt-get install -y python3-numpy-dev
25-
- name: build
25+
- name: Build
2626
run: |
2727
cmake .
2828
cmake --build . --parallel `nproc`
29-
- name: test
29+
- name: Test
3030
run: |
3131
ctest --parallel `nproc`

.github/workflows/make_tests.yml

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,32 +12,22 @@ on:
1212
schedule:
1313
- cron: '0 20 * * 1' # Monday 20:00 UTC
1414

15-
1615
jobs:
1716
build_test:
18-
1917
runs-on: ubuntu-latest
2018

2119
steps:
2220
- uses: actions/checkout@v4
23-
- name: create conda environments
24-
run: |
25-
conda create -y -n build -c conda-forge python=3.11 python-build
26-
conda create -y -n test -c conda-forge python=3.11 numpy matplotlib
27-
- name: install extra dependencies
21+
- name: Install extra dependencies
2822
run: |
2923
sudo apt-get update
30-
sudo apt-get install -y libjpeg-dev liblzma-dev
31-
- name: build
24+
sudo apt-get install -y libjpeg-dev liblzma-dev python3-build python3-dev python3-numpy-dev
25+
- name: Build
3226
run: |
33-
source /usr/share/miniconda/etc/profile.d/conda.sh
34-
conda activate build
3527
make all
36-
- name: test
28+
- name: Test
3729
run: |
38-
source /usr/share/miniconda/etc/profile.d/conda.sh
39-
conda activate test
4030
make tests 2>&1 | tee test.out
41-
- name : check test output
31+
- name : Check test output
4232
run: |
4333
! grep -a ignored test.out

Makefile

Lines changed: 21 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -538,11 +538,6 @@ REGEX_INCLUDES ?=
538538
endif
539539

540540

541-
# Program to use to retrieve a URL
542-
543-
DOWNLOAD ?= wget -N
544-
#DOWNLOAD ?= curl -O -L
545-
546541
# Flag to control symlinks versus copying
547542

548543
SLFLAGS = --use_ln
@@ -1482,7 +1477,6 @@ $(SWIG_FORTRAN_KIT): build_swig_fortran
14821477
git clone $(SWIG_FORTRAN_URL) $(SWIG_FORTRAN_KIT)
14831478
(export SWIG_FORTRAN_PREFIX=$(PWD);cd $(SWIG_FORTRAN_KIT); ./autogen.sh; \
14841479
./configure --prefix=$(F90CBF); make; make install)
1485-
touch $(SWIG_FORTRAN_KIT)
14861480
endif
14871481

14881482
ifneq ($(CBFLIB_DONT_USE_LOCAL_SWIG),yes)
@@ -1496,7 +1490,6 @@ $(SWIG_KIT): build_swig
14961490
git clone $(SWIG_URL) $(SWIG_KIT)
14971491
(export SWIG_PREFIX=$(PWD);cd $(SWIG_KIT); ./autogen.sh; \
14981492
./configure --prefix=$(SWIG_PREFIX); make; make install)
1499-
touch $(SWIG_KIT)
15001493
endif
15011494

15021495

@@ -1508,10 +1501,7 @@ build_py2cifrw: $(M4)/Makefile.m4
15081501
touch build_py2cifrw
15091502
$(PY2CIFRW): build_py2cifrw
15101503
-rm -rf $(PY2CIFRW)
1511-
-rm -rf $(PY2CIFRW).tar.gz
1512-
$(DOWNLOAD) $(PY2CIFRWURL)
1513-
tar -xvf $(PY2CIFRW).tar.gz
1514-
-rm $(PY2CIFRW).tar.gz
1504+
wget -O - -nv $(PY2CIFRWURL) | tar -xzf -
15151505
(cd $(PY2CIFRW); \
15161506
PYTHONPATH=$(PY2CIFRW_PREFIX)/lib/python:$(PY2CIFRW_PREFIX)/lib64/python; export PYTHONPATH; \
15171507
mkdir -p $(PY2CIFRW_PREFIX)/lib/python/site-packages; \
@@ -1525,10 +1515,7 @@ build_py2ply: $(M4)/Makefile.m4
15251515
touch build_py2ply
15261516
$(PY2PLY): build_py2ply
15271517
-rm -rf $(PY2PLY)
1528-
-rm -rf $(PY2PLY).tar.gz
1529-
$(DOWNLOAD) $(PY2PLYURL)
1530-
tar -xvf $(PY2PLY).tar.gz
1531-
-rm $(PY2PLY).tar.gz
1518+
wget -O - -nv $(PY2PLYURL) | tar -xzf -
15321519
(cd $(PY2PLY); \
15331520
PYTHONPATH=$(PY2CIFRW_PREFIX)/lib/python:$(PY2CIFRW_PREFIX)/lib64/python; export PYTHONPATH; \
15341521
mkdir -p $(PY2CIFRW_PREFIX)/lib/python/site-packages; \
@@ -1544,10 +1531,7 @@ build_py3cifrw: $(M4)/Makefile.m4
15441531
touch build_py3cifrw
15451532
$(PY3CIFRW): build_py3cifrw
15461533
-rm -rf $(PY3CIFRW)
1547-
-rm -rf $(PY3CIFRW).tar.gz
1548-
$(DOWNLOAD) $(PY3CIFRWURL)
1549-
tar -xvf $(PY3CIFRW).tar.gz
1550-
-rm $(PY3CIFRW).tar.gz
1534+
wget -O - -nv $(PY3CIFRWURL) | tar -xf -
15511535
(cd $(PY3CIFRW); \
15521536
PYTHONPATH=$(PY3CIFRW_PREFIX)/lib/python:$(PY3CIFRW_PREFIX)/lib64/python; export PYTHONPATH; \
15531537
mkdir -p $(PY3CIFRW_PREFIX)/lib/python/site-packages; \
@@ -1561,10 +1545,7 @@ build_py3ply: $(M4)/Makefile.m4
15611545
touch build_py3ply
15621546
$(PY3PLY): build_py3ply
15631547
-rm -rf $(PY3PLY)
1564-
-rm -rf $(PY3PLY).tar.gz
1565-
$(DOWNLOAD) $(PY3PLYURL)
1566-
tar -xvf $(PY3PLY).tar.gz
1567-
-rm $(PY3PLY).tar.gz
1548+
wget -O - -nv $(PY3PLYURL) | tar -xzf -
15681549
(cd $(PY3PLY); \
15691550
PYTHONPATH=$(PY3CIFRW_PREFIX)/lib/python:$(PY3CIFRW_PREFIX)/lib64/python; export PYTHONPATH; \
15701551
mkdir -p $(PY3CIFRW_PREFIX)/lib/python/site-packages; \
@@ -1579,11 +1560,7 @@ endif
15791560
ifneq ($(NUWEB_DEP),'')
15801561
$(NUWEB_DEP):
15811562
-rm -rf $(NUWEB_DEP)
1582-
-rm -rf $(NUWEB_DEP).tar.gz
1583-
$(DOWNLOAD) $(NUWEB_URL)
1584-
tar -xvf $(NUWEB_DEP).tar.gz
1585-
touch $(NUWEB_DEP)
1586-
rm $(NUWEB_DEP).tar.gz
1563+
wget -O - -nv $(NUWEB_URL) | tar -xzf -
15871564

15881565
$(NUWEB_DEP2): $(NUWEB_DEP)
15891566
(cd $(NUWEB_DEP); make nuweb; cp nuweb $(NUWEB_DEP2))
@@ -1598,19 +1575,15 @@ build_regex: $(M4)/Makefile.m4
15981575
touch build_regex
15991576
$(REGEX): build_regex
16001577
-rm -rf $(REGEX)
1601-
-rm -rf $(REGEX).tar.gz
1602-
$(DOWNLOAD) $(REGEX_URL)
1603-
tar -xvf $(REGEX).tar.gz
1604-
touch $(REGEX)
1605-
-rm $(REGEX).tar.gz
1578+
wget -O - -nv $(REGEX_URL) | tar -xzf -
16061579
cp config.guess config.sub $(REGEX)
16071580
(cd $(REGEX); \
16081581
prefix=$(REGEX_PREFIX); export prefix; \
16091582
./configure --prefix=$(REGEX_PREFIX); make install)
16101583
@-cp $(REGEX_PREFIX)/include/pcre2posix.h $(REGEX_PREFIX)/include/regex.h
16111584
$(REGEX)_INSTALL: $(REGEX)
16121585
-rm -rf $(REGEX)_install
1613-
rsync -avz $(REGEX)/ $(REGEX)_install
1586+
rsync -az $(REGEX)/ $(REGEX)_install
16141587
(cd $(REGEX)_install; prefix=$(CBF_PREFIX); export prefix; \
16151588
make distclean; ./configure --prefix=$(CBF_PREFIX); make install )
16161589
@-cp $(CBF_PREFIX)/include/pcre2posix.h $(CBF_PREFIX)/include/regex.h
@@ -1622,17 +1595,13 @@ build_tiff: $(M4)/Makefile.m4
16221595
touch build_tiff
16231596
$(TIFF): build_tiff config.guess config.sub
16241597
-rm -rf $(TIFF)
1625-
-rm -rf $(TIFF).tar.gz
1626-
$(DOWNLOAD) $(TIFF_URL)
1627-
tar -xvf $(TIFF).tar.gz
1628-
touch $(TIFF)
1629-
-rm $(TIFF).tar.gz
1598+
wget -O - -nv $(TIFF_URL) | tar -xzf -
16301599
cp config.guess config.sub $(TIFF)/config/
16311600
(cd $(TIFF); prefix=$(TIFF_PREFIX); export prefix; \
16321601
./configure --prefix=$(TIFF_PREFIX); make install)
16331602
$(TIFF)_INSTALL: $(TIFF)
16341603
-rm -rf $(TIFF)_install
1635-
rsync -avz $(TIFF)/ $(TIFF)_install
1604+
rsync -az $(TIFF)/ $(TIFF)_install
16361605
(cd $(TIFF)_install; make distclean; prefix=$(CBF_PREFIX); export prefix; \
16371606
./configure --prefix=$(CBF_PREFIX); make install)
16381607

@@ -1646,30 +1615,26 @@ build_hdf5: $(M4)/Makefile.m4
16461615
touch build_hdf5
16471616
$(HDF5): build_hdf5 $(LIBAECdep)
16481617
-rm -rf $(HDF5)
1649-
-rm -rf $(HDF5).tar.gz
1650-
$(DOWNLOAD) $(HDF5_URL)
1651-
tar -xvf $(HDF5).tar.gz
1618+
wget -O - -nv $(HDF5_URL) | tar -xzf -
16521619
cp config.guess $(HDF5)/bin/config.guess
16531620
cp config.sub $(HDF5)/bin/config.sub
1654-
touch $(HDF5)
1655-
-rm $(HDF5).tar.gz
16561621
echo "first level HDF5 install in "$(HDF5_PREFIX)
16571622
(cd $(ROOT)/$(HDF5); \
16581623
CFLAGS="$(CFLAGS)"; export CFLAGS; \
16591624
mkdir -p hdf5; prefix=$(ROOT)/$(HDF5)/hdf5; export prefix; \
16601625
./configure --prefix=$(ROOT)/$(HDF5)/hdf5 --enable-build-mode=production \
16611626
--enable-trace --enable-fortran --enable-using-memchecker --with-szlib=$(ROOT) ;\
16621627
make install; \
1663-
rsync -avz $(ROOT)/$(HDF5)/hdf5/bin/ $(HDF5_PREFIX)/bin; \
1664-
rsync -avz $(ROOT)/$(HDF5)/hdf5/lib/ $(HDF5_PREFIX)/lib; \
1665-
rsync -avz $(ROOT)/$(HDF5)/hdf5/include/ $(HDF5_PREFIX)/include; \
1628+
rsync -az $(ROOT)/$(HDF5)/hdf5/bin/ $(HDF5_PREFIX)/bin; \
1629+
rsync -az $(ROOT)/$(HDF5)/hdf5/lib/ $(HDF5_PREFIX)/lib; \
1630+
rsync -az $(ROOT)/$(HDF5)/hdf5/include/ $(HDF5_PREFIX)/include; \
16661631
cd $(HDF5_PREFIX)/bin; $(ROOT)/$(HDF5)/hdf5/bin/h5redeploy -force )
16671632
$(HDF5)_INSTALL: $(HDF5)
16681633
-rm -rf $(HDF5)_install
16691634
echo "final HDF5 install in "$(CBF_PREFIX)
1670-
rsync -avz $(ROOT)/$(HDF5)/hdf5/bin/ $(CBF_PREFIX)/bin; \
1671-
rsync -avz $(ROOT)/$(HDF5)/hdf5/lib/ $(CBF_PREFIX)/lib; \
1672-
rsync -avz $(ROOT)/$(HDF5)/hdf5/include/ $(CBF_PREFIX)/include; \
1635+
rsync -az $(ROOT)/$(HDF5)/hdf5/bin/ $(CBF_PREFIX)/bin; \
1636+
rsync -az $(ROOT)/$(HDF5)/hdf5/lib/ $(CBF_PREFIX)/lib; \
1637+
rsync -az $(ROOT)/$(HDF5)/hdf5/include/ $(CBF_PREFIX)/include; \
16731638
cd $(CBF_PREFIX)/bin; $(ROOT)/$(HDF5)/hdf5/bin/h5redeploy -force
16741639
endif
16751640

@@ -1682,13 +1647,9 @@ build_libaec: $(M4)/Makefile.m4
16821647
$(LIBAEC): build_libaec
16831648
mkdir -p $(SOLIB)
16841649
-rm -rf $(LIBAEC)
1685-
-rm -rf $(LIBAEC).tar.gz
1686-
$(DOWNLOAD) $(LIBAEC_URL)
1687-
tar -xvf $(LIBAEC).tar.gz
1688-
-rm $(LIBAEC).tar.gz
1650+
wget -O - -nv $(LIBAEC_URL) | tar -xzf -
16891651
(cd $(LIBAEC); mkdir -p build; cd build; ../configure --prefix=$(ROOT); make install; \
16901652
cp $(LIB)/libsz.so* $(LIB)/libaec.so* $(SOLIB))
1691-
touch $(LIBAEC)
16921653
endif
16931654

16941655
ifneq ($(CBFLIB_DONT_USE_LZ4),yes)
@@ -1701,10 +1662,7 @@ $(LZ4): $(HDF5) build_lz4
17011662
mkdir -p $(SOLIB)
17021663
-rm -rf $(LZ4)
17031664
ifneq ($(MSYS2),yes)
1704-
-rm -rf $(LZ4).tar.gz
1705-
$(DOWNLOAD) $(LZ4_URL)
1706-
tar -xvf $(LZ4).tar.gz
1707-
-rm $(LZ4).tar.gz
1665+
wget -O - -nv $(LZ4_URL) | tar -xzf -
17081666
(cp $(LZ4include)/lz4.h $(INCLUDE); \
17091667
$(CC) $(CFLAGS) $(SOWCFLAGS) $(INCLUDES) $(WARNINGS) -c $(LZ4src)/lz4.c -o lz4.o; \
17101668
$(CC) $(CFLAGS) $(SOCFLAGS) $(INCLUDES) $(WARNINGS) -c $(LZ4src)/h5zlz4.c -o h5zlz4.o; \
@@ -1714,7 +1672,6 @@ else
17141672
git clone $(LZ4_URL)
17151673
(cd $(LZ4); mkdir build; cd build; cmake .. -G 'MSYS Makefiles' -DENABLE_LZ4_PLUGIN="yes"; make all; cp plugins/* $(SOLIB))
17161674
endif
1717-
touch $(LZ4)
17181675
endif
17191676

17201677

@@ -1730,7 +1687,6 @@ $(BSHUF): $(HDF5) build_BSHUF $(LZ4dep)
17301687
git clone $(BSHUF_URL)
17311688
(cd $(BSHUF); git submodule update --init; $(PYTHON3) -m build --config-setting=install \
17321689
-C--h5plugin -C--h5plugin-dir=../solib -C--zstd -C--user)
1733-
touch $(BSHUF)
17341690
endif
17351691

17361692
ifneq ($(CBFLIB_DONT_USE_ZSTD),yes)
@@ -1750,7 +1706,6 @@ $(ZSTD): $(HDF5) build_ZSTD
17501706
$(CC) -shared zstd_h5plugin.o $(HDF5SOLIBS_LOCAL) $(HDF5SOLIBS_SYSTEM) -lzstd \
17511707
-o $(SOLIB)/$(ZSTDFILTER).so; \
17521708
rm zstd_h5plugin.o)
1753-
touch $(ZSTD)
17541709
endif
17551710

17561711
ifneq ($(CBFLIB_DONT_USE_CQRLIB),yes)
@@ -1772,7 +1727,6 @@ cqrlib $(SOLIB)/libcqr.so $(LIB)lbcqr.a: build_CQRLIB
17721727
ifneq ($(RANLIB),)
17731728
$(RANLIB) $(LIB)/libcqr.a
17741729
endif
1775-
touch cqrlib
17761730
endif
17771731

17781732

@@ -1952,7 +1906,6 @@ $(PY2CBF)/xmas/readmarheader.py \
19521906
$(PY2CBF)/xmas/xmasheaders.py \
19531907
$(PY2CBF)/xmas/xmas_cif_template.cif : $(NUWEB_DEP) $(NUWEB_DEP2) $(PY2CBF)/pycbf.w
19541908
(cd $(PY2CBF); $(NUWEB) pycbf.w )
1955-
touch $(PY2CBF)/py2setup_py.m4
19561909

19571910
$(PY2CBF)/_py2cbf.$(PY2CBFEXT): $(PY2CBF) shared \
19581911
$(PY2CBF)/py2setup.py \
@@ -2024,7 +1977,6 @@ $(PY3CBF)/xmas/readmarheader.py \
20241977
$(PY3CBF)/xmas/xmasheaders.py \
20251978
$(PY3CBF)/xmas/xmas_cif_template.cif: $(NUWEB_DEP) $(NUWEB_DEP2) $(PY3CBF)/pycbf.w
20261979
(cd $(PY3CBF); $(NUWEB) pycbf.w )
2027-
touch $(PY3CBF)/py3setup_py.m4
20281980

20291981

20301982
$(PY3CBF)/_pycbf.$(PY3CBFEXT): $(PY3CBF) shared \
@@ -2484,16 +2436,10 @@ $(BIN)/cbf_testxfelread: $(LIB)/libcbf.a $(EXAMPLES)/cbf_testxfelread.c $(EXAMPL
24842436
#
24852437

24862438
$(DATADIRI): $(M4)/Makefile.m4
2487-
(cd ..; $(DOWNLOAD) $(DATAURLI))
2488-
(cd ..; tar -zxvf CBFlib_$(VERSION)_Data_Files_Input.tar.gz)
2489-
touch $(DATADIRI)
2490-
-(cd ..; rm CBFlib_$(VERSION)_Data_Files_Input.tar.gz)
2439+
wget -O - -nv $(DATAURLI) | tar -C .. -xzf -
24912440

24922441
$(DATADIRO): $(M4)/Makefile.m4
2493-
(cd ..; $(DOWNLOAD) $(DATAURLO))
2494-
(cd ..; tar -zxvf CBFlib_$(VERSION)_Data_Files_Output.tar.gz)
2495-
touch $(DATADIRO)
2496-
-(cd ..; rm CBFlib_$(VERSION)_Data_Files_Output.tar.gz)
2442+
wget -O - -nv $(DATAURLO) | tar -C .. -xzf -
24972443

24982444
# Input Data Files
24992445

@@ -3174,7 +3120,7 @@ tar: $(DOCUMENTS) $(SOURCE) $(SRC)/cbf.stx $(HEADERS) $(M4FILES)\
31743120
README.html README Makefile \
31753121
$(JPEGS)
31763122
-/bin/rm -f CBFlib.tar*
3177-
tar cvBf CBFlib.tar \
3123+
tar -cf CBFlib.tar \
31783124
$(DOCUMENTS) $(SOURCE) $(SRC)/cbf.stx $(HEADERS) $(M4FILES)\
31793125
$(EXAMPLES) \
31803126
README.html README Makefile \

0 commit comments

Comments
 (0)