aboutsummaryrefslogtreecommitdiff
path: root/reproduce/software/make/python.mk
diff options
context:
space:
mode:
authorMohammad Akhlaghi <mohammad@akhlaghi.org>2020-06-10 23:44:13 +0100
committerMohammad Akhlaghi <mohammad@akhlaghi.org>2020-06-27 16:32:59 +0100
commitc151eddbcc5f4208b40dc3037a8ae8adb0ff9173 (patch)
tree5a5eadb85053a0cf5852d9daa6992d5bdffba531 /reproduce/software/make/python.mk
parent5c3f2c4e38bec20616e4cf6ac568298a614df040 (diff)
IMPORTANT: many improvements to low-level software building phase
POSSIBLE EFFECT ON YOUR PROJECT: The changes in this commit may only cause conflicts to your project if you have changed the software building Makefiles in your project's branch (e.g., 'basic.mk', 'high-level.mk' and 'python.mk'). If your project has only added analysis, it shouldn't be affected. This is a large commit, involving a long series of corrections in a differnt branch which is now finally being merged into the core Maneage branch. All changes were related and came up naturally as the low-level infrastructure was improved. So separating them in the end for the final merge would have been very time consuming and we are merging them as one commit. In general, the software building Makefiles are now much more easier to read, modify and use, along with several new features that have been added. See below for the full list. - Until now, Maneage needed the host to have a 'make' implementation because Make was necessary to build Lzip. Lzip is then used to uncompress the source of our own GNU Make. However, in the minimalist/slim versions of operating systems (for example used to build Docker images) Make isn't included by default. Since Lzip was the only program before our own GNU Make was installed, we consulting Antonio Diaz Diaz (creator of Lzip) and he kindly added the necessary functionality to a new version of Lzip, which we are using now. Hence we don't need to assume a Make implementation on the host any more. With this commit, Lzip and GNU Make are built without Make, allowing everything else to be safely built with our own custom version of GNU Make and not using the host's 'make' at all. - Until recently (Commit 3d8aa5953c4) GNU Make was built in 'basic.mk'. Therefore 'basic.mk' was written in a way that it can be used with other 'make' implementations also (i.e., important shell commands starting with '&&' and ending in '\' without any comments between them!). Furthermore, to help in style uniformity, the rules in 'high-level.mk' and 'python.mk' also followed a similar structure. But due to the point above, we can now guarantee that GNU Make is used from the very first Makefile, so this hard-to-read structure has been removed in the software build recipes and they are much more readable and edit-friendly now. - Until now, the default backup servers where at some fixed URLs, on our own pages or on Gitlab. But recently we uploaded all the necessary software to Zenodo (https://doi.org/10.5281/zenodo.3883409) which is more suitable for this task (it promises longevity, has a fixed DOI, while allowing us to add new content, or new software tarball versions). With this commit, a small script has been written to extract the most recent Zenodo upload link from the Zenodo DOI and use it for downloading the software source codes. - Until now, we primarily used the webpage of each software for downloading its tarball. But this caused many problems: 1) Some of them needed Javascript before the download, 2) Some URLs had a complex dependency on the version number, 3) some servers would be randomly down for maintenance and etc. So thanks to the point above, we now use the Zenodo server as the primary download location. However, if a user wants to use a custom software that is not (yet!) in Zenodo, the download script gives priority to a custom URL that the users can give as Make variables. If that variable is defined, then the script will use that URL before going onto Zenodo. We now have a special place for such URLs: 'reproduce/software/config/urls.conf'. The old URLs (which are a good documentation themselves) are preserved here, but are commented by default. - The software source code downloading and checksum verification step has been moved into a Make function called 'import-source' (defined in the 'build-rules.mk' and loaded in all software Makefiles). Having taken all the low-level steps there, I noticed that there is no more need for having the tarball as a separate target! So with this commit, a single rule is the only place that needs to be edited/added (greatly simplifying the software building Makefiles). - Following task #15272, A new option has been added to the './project' script called '--all-highlevel'. When this option is given, the contents of 'TARGETS.conf' are ignored and all the software in Maneage are built (selected by parsing the 'versions.conf' file). This new option was added to confirm the extensive changes made in all the software building recipes and is great for development/testing purposes. - Many of the software hadn't been tested for a long time! So after using the newly added '--all-highlevel', we noticed that some need to be updated. In general, with this commit, 'libpaper' and 'pcre' were added as new software, and the versions of the following software was updated: 'boost', 'flex', 'libtirpc', 'openblas' and 'lzip'. A 'run-parts.in' shell script was added in 'reproduce/software/shell/' which is installed with 'libpaper'. - Even though we intentionally add the necessary flags to add RPATH inside the built executable at compilation time, some software don't do it (different software on different operating systems!). Until now, for historical reasons this check was done in different ways for different software on GNU/Linux sytems. But now it is unified: if 'patchelf' is present we apply it. Because of this, 'patchelf' has been put as a top-level prerequisite, right after Tar and is installed before anything else. - In 'versions.conf', GNU Libtool is recognized as 'libtool', but in 'basic.mk', it was 'glibtool'! This caused many confusions and is corrected with this commit (in 'basic.mk', it is also 'libtool'). - A new argument is added to the './project' script to allow easy loading of the project's shell and environment for fast/temporary testing of things in the same environment as the project. Before activating the project's shell, we completely remove all host environment variables to simulate the project's environment. It can be called with this command: './project shell'. A simple prompt has also been added to highlight that the user is using the Maneage shell!
Diffstat (limited to 'reproduce/software/make/python.mk')
-rw-r--r--reproduce/software/make/python.mk929
1 files changed, 399 insertions, 530 deletions
diff --git a/reproduce/software/make/python.mk b/reproduce/software/make/python.mk
index eef8279..ccfbc72 100644
--- a/reproduce/software/make/python.mk
+++ b/reproduce/software/make/python.mk
@@ -3,8 +3,12 @@
# ------------------------------------------------------------------------
# !!!!! IMPORTANT NOTES !!!!!
#
-# This Makefile will be run by the initial `./project configure' script. It
-# is not included into the reproduction pipe after that.
+# This Makefile will be loaded into 'high-level.mk', which is called by the
+# `./project configure' script. It is not included into the project
+# afterwards.
+#
+# This Makefile contains instructions to build all the Python-related
+# software within the project.
#
# ------------------------------------------------------------------------
#
@@ -52,274 +56,52 @@ python-major-version = $(shell echo $(python-version) | awk 'BEGIN{FS="."} \
-# Tarballs
-# --------
-#
-# All the necessary tarballs are defined and prepared with this rule.
-#
-# Note that we want the tarballs to follow the convention of NAME-VERSION
-# before the `tar.XX' prefix. For those programs that don't follow this
-# convention, but include the name/version in their tarball names with
-# another format, we'll do the modification before the download so the
-# downloaded file has our desired format.
-pytarballs = $(foreach t, asn1crypto-$(asn1crypto-version).tar.gz \
- asteval-$(asteval-version).tar.gz \
- astroquery-$(astroquery-version).tar.gz \
- astropy-$(astropy-version).tar.gz \
- beautifulsoup4-$(beautifulsoup4-version).tar.gz \
- certifi-$(certifi-version).tar.gz \
- cffi-$(cffi-version).tar.gz \
- chardet-$(chardet-version).tar.gz \
- corner-$(corner-version).tar.gz \
- cryptography-$(cryptography-version).tar.gz \
- cycler-$(cycler-version).tar.gz \
- cython-$(cython-version).tar.gz \
- eigency-$(eigency-version).tar.gz \
- emcee-$(emcee-version).tar.gz \
- esutil-$(esutil-version).tar.gz \
- entrypoints-$(entrypoints-version).tar.gz \
- flake8-$(flake8-version).tar.gz \
- future-$(future-version).tar.gz \
- galsim-$(galsim-version).tar.gz \
- h5py-$(h5py-version).tar.gz \
- html5lib-$(html5lib-version).tar.gz \
- idna-$(idna-version).tar.gz \
- jeepney-$(jeepney-version).tar.gz \
- kiwisolver-$(kiwisolver-version).tar.gz \
- keyring-$(keyring-version).tar.gz \
- libffi-$(libffi-version).tar.gz \
- lmfit-$(lmfit-version).tar.gz \
- lsstdesccoord-$(lsstdesccoord-version).tar.gz \
- matplotlib-$(matplotlib-version).tar.gz \
- mpi4py-$(mpi4py-version).tar.gz \
- mpmath-$(mpmath-version).tar.gz \
- numpy-$(numpy-version).zip \
- pkgconfig-$(pypkgconfig-version).tar.gz \
- pip-$(pip-version).tar.gz \
- pexpect-$(pexpect-version).tar.gz \
- pybind11-$(pybind11-version).tar.gz \
- pycodestyle-$(pycodestyle-version).tar.gz \
- pycparser-$(pycparser-version).tar.gz \
- pyflakes-$(pyflakes-version).tar.gz \
- python-$(python-version).tar.gz \
- python-dateutil-$(python-dateutil-version).tar.gz \
- pyparsing-$(pyparsing-version).tar.gz \
- pyyaml-$(pyyaml-version).tar.gz \
- requests-$(requests-version).tar.gz \
- scipy-$(scipy-version).tar.gz \
- secretstorage-$(secretstorage-version).tar.gz \
- setuptools-$(setuptools-version).zip \
- setuptools_scm-$(setuptools_scm-version).tar.gz \
- sip_tpv-$(sip_tpv-version).tar.gz \
- six-$(six-version).tar.gz \
- soupsieve-$(soupsieve-version).tar.gz \
- sympy-$(sympy-version).tar.gz \
- uncertainties-$(uncertainties-version).tar.gz \
- urllib3-$(urllib3-version).tar.gz \
- webencodings-$(webencodings-version).tar.gz \
- virtualenv-$(virtualenv-version).tar.gz \
- , $(tdir)/$(t) )
-pytopurl=https://files.pythonhosted.org/packages
-$(pytarballs): $(tdir)/%:
-
- # Convenience variable
- # --------------------
- #
- # `n' is just for convenience and to avoid having to repeat the
- # package tarball name in the conditional to find its URL.
- #
- # For some packages (for example `python-dateutil', or those with
- # a number or dash in their name), we need special consideration
- # because the tokenization above will produce `python' as the
- # first string.
- @if [ $* = python-dateutil-$(python-dateutil-version).tar.gz ]; then
- n=dateutil
-
- # elif [ $* = strange-tarball5name-version.tar.gz ]; then
- # n=strange5-name
- else
- # Remove the version numbers and suffix from the tarball name so
- # we can search more easily only with the program name. This
- # requires the first character of the version to be a digit:
- # packages such as `foo' and `foo-3' will not be distinguished,
- # but `foo' and `foo2' will be distinguished.
- n=$$(echo $* | sed -e's/-[0-9]/ /' -e's/\./ /g' \
- | awk '{print $$1}' )
-
- fi
-
- # Set the top download link of the requested tarball. The ones
- # that have non-standard filenames (differing from our archived
- # tarball names) are treated first, then the standard ones.
- mergenames=1
- if [ $$n = cython ]; then
- mergenames=0
- c=$(cython-checksum)
- hash=36/da/fcb979fc8cb486a67a013d6aefefbb95a3e19e67e49dff8a35e014046c5e
- h=$(pytopurl)/$$hash/Cython-$(cython-version).tar.gz
- elif [ $$n = galsim ]; then
- mergenames=0
- c=$(galsim-checksum)
- hash=8f/3b/bbc7cff7590d3624d528564f08745f071e316c67fce154ad38210833c103
- h=$(pytopurl)/$$hash/GalSim-$(galsim-version).tar.gz
- elif [ $$n = lsstdesccoord ]; then
- mergenames=0
- c=$(lsstdesccoord-checksum)
- hash=9d/39/ad17697571c9aed36d20ed9ae0a135e3a734fb7f15a8605f92bf27c3b02c
- h=$(pytopurl)/$$hash/LSSTDESC.Coord-$(lsstdesccoord-version).tar.gz
- elif [ $$n = python ]; then
- mergenames=0
- c=$(python-checksum)
- h=https://www.python.org/ftp/python/$(python-version)/Python-$(python-version).tgz
- elif [ $$n = pyyaml ]; then
- mergenames=0
- c=$(pyyaml-checksum)
- hash=9f/2c/9417b5c774792634834e730932745bc09a7d36754ca00acf1ccd1ac2594d
- h=$(pytopurl)/$$hash/PyYAML-$(pyyaml-version).tar.gz
- elif [ $$n = libffi ]; then
- mergenames=0
- c=$(libffi-checksum)
- h=ftp://sourceware.org/pub/libffi/libffi-$(libffi-version).tar.gz
- elif [ $$n = secretstorage ]; then
- mergenames=0
- c=$(secretstorage-checksum)
- hash=a6/89/df343dbc2957a317127e7ff2983230dc5336273be34f2e1911519d85aeb5
- h=$(pytopurl)/$$hash/SecretStorage-$(secretstorage-version).tar.gz
- elif [ $$n = asn1crypto ]; then h=fc/f1/8db7daa71f414ddabfa056c4ef792e1461ff655c2ae2928a2b675bfed6b4; c=$(asn1crypto-checksum)
- elif [ $$n = asteval ]; then h=50/3f/29b7935c6dc09ee96dc347edc66c57e8ef68d595dd35b763a36a117acc8c; c=$(asteval-checksum)
- elif [ $$n = astroquery ]; then h=e2/af/a3cd3b30745832a0e81f5f13327234099aaf5d03b7979ac947a888e68e91; c=$(astroquery-checksum)
- elif [ $$n = astropy ]; then h=de/96/7feaca4b9be134128838395a9d924ea0b389ed4381702dcd9d11ae31789f; c=$(astropy-checksum)
- elif [ $$n = beautifulsoup4 ]; then h=80/f2/f6aca7f1b209bb9a7ef069d68813b091c8c3620642b568dac4eb0e507748; c=$(beautifulsoup4-checksum)
- elif [ $$n = certifi ]; then h=55/54/3ce77783acba5979ce16674fc98b1920d00b01d337cfaaf5db22543505ed; c=$(certifi-checksum)
- elif [ $$n = cffi ]; then h=64/7c/27367b38e6cc3e1f49f193deb761fe75cda9f95da37b67b422e62281fcac; c=$(cffi-checksum)
- elif [ $$n = chardet ]; then h=fc/bb/a5768c230f9ddb03acc9ef3f0d4a3cf93462473795d18e9535498c8f929d; c=$(chardet-checksum)
- elif [ $$n = corner ]; then h=65/af/a7ba022f2d5787f51db91b5550cbe8e8c40a6eebd8f15119e743a09a9c19; c=$(corner-checksum)
- elif [ $$n = cryptography ]; then h=07/ca/bc827c5e55918ad223d59d299fff92f3563476c3b00d0a9157d9c0217449; c=$(cryptography-checksum)
- elif [ $$n = cycler ]; then h=c2/4b/137dea450d6e1e3d474e1d873cd1d4f7d3beed7e0dc973b06e8e10d32488; c=$(cycler-checksum)
- elif [ $$n = eigency ]; then h=fb/6e/bc4359fbfb0bb0b588ec328251b0d0836bdd7c0a4c568959ea06df023e18; c=$(eigency-checksum)
- elif [ $$n = emcee ]; then h=f0/c0/cd433f2aedeef9b1e5ed7d236c82564f7518fe7fe2238fa141ea9ce08e73; c=$(emcee-checksum)
- elif [ $$n = entrypoints ]; then h=b4/ef/063484f1f9ba3081e920ec9972c96664e2edb9fdc3d8669b0e3b8fc0ad7c; c=$(entrypoints-checksum)
- elif [ $$n = esutil ]; then h=5b/91/77e38282fd3d47b55e351544ab179eb209b309a8d2d40f8cdb6241beda00; c=$(esutil-checksum)
- elif [ $$n = flake8 ]; then h=8d/a7/99222c9200af533c1ecb1120d99adbd1c033b57296ac5cb39d121db007a8; c=$(flake8-checksum)
- elif [ $$n = future ]; then h=3f/bf/57733d44afd0cf67580658507bd11d3ec629612d5e0e432beb4b8f6fbb04; c=$(future-checksum)
- elif [ $$n = h5py ]; then h=43/27/a6e7dcb8ae20a4dbf3725321058923fec262b6f7835179d78ccc8d98deec; c=$(h5py-checksum)
- elif [ $$n = html5lib ]; then h=85/3e/cf449cf1b5004e87510b9368e7a5f1acd8831c2d6691edd3c62a0823f98f; c=$(html5lib-checksum)
- elif [ $$n = idna ]; then h=ad/13/eb56951b6f7950cadb579ca166e448ba77f9d24efc03edd7e55fa57d04b7; c=$(idna-checksum)
- elif [ $$n = jeepney ]; then h=16/1d/74adf3b164a8d19a60d0fcf706a751ffa2a1eaa8e5bbb1b6705c92a05263; c=$(jeepney-checksum)
- elif [ $$n = keyring ]; then h=15/88/c6ce9509438bc02d54cf214923cfba814412f90c31c95028af852b19f9b2; c=$(keyring-checksum)
- elif [ $$n = kiwisolver ]; then h=31/60/494fcce70d60a598c32ee00e71542e52e27c978e5f8219fae0d4ac6e2864; c=$(kiwisolver-checksum)
- elif [ $$n = lmfit ]; then h=59/6e/117794cf85b7345361877e49245870490ae438f1981dea3c6af1316b30e7; c=$(lmfit-checksum)
- elif [ $$n = matplotlib ]; then h=12/d1/7b12cd79c791348cb0c78ce6e7d16bd72992f13c9f1e8e43d2725a6d8adf; c=$(matplotlib-checksum)
- elif [ $$n = mpi4py ]; then h=04/f5/a615603ce4ab7f40b65dba63759455e3da610d9a155d4d4cece1d8fd6706; c=$(mpi4py-checksum)
- elif [ $$n = mpmath ]; then h=ca/63/3384ebb3b51af9610086b23ea976e6d27d6d97bf140a76a365bd77a3eb32; c=$(mpmath-checksum)
- elif [ $$n = numpy ]; then h=ac/36/325b27ef698684c38b1fe2e546e2e7ef9cecd7037bcdb35c87efec4356af; c=$(numpy-checksum)
- elif [ $$n = pexpect ]; then h=1c/b1/362a0d4235496cb42c33d1d8732b5e2c607b0129ad5fdd76f5a583b9fcb3; c=$(pexpect-checksum)
- elif [ $$n = pip ]; then h=4c/4d/88bc9413da11702cbbace3ccc51350ae099bb351febae8acc85fec34f9af; c=$(pip-checksum)
- elif [ $$n = pkgconfig ]; then h=6e/a9/ff67ef67217dfdf2aca847685fe789f82b931a6957a3deac861297585db6; c=$(pypkgconfig-checksum)
- elif [ $$n = pybind11 ]; then h=aa/91/deb6743e79e22ab01502296570b39b8404f10cc507a6692d612a7fee8d51; c=$(pybind11-checksum)
- elif [ $$n = pycodestyle ]; then h=1c/d1/41294da5915f4cae7f4b388cea6c2cd0d6cd53039788635f6875dfe8c72f; c=$(pycodestyle-checksum)
- elif [ $$n = pycparser ]; then h=68/9e/49196946aee219aead1290e00d1e7fdeab8567783e83e1b9ab5585e6206a; c=$(pycparser-checksum)
- elif [ $$n = pyflakes ]; then h=52/64/87303747635c2988fcaef18af54bfdec925b6ea3b80bcd28aaca5ba41c9e; c=$(pyflakes-checksum)
- elif [ $$n = pyparsing ]; then h=b9/b8/6b32b3e84014148dcd60dd05795e35c2e7f4b72f918616c61fdce83d27fc; c=$(pyparsing-checksum)
- elif [ $$n = dateutil ]; then h=ad/99/5b2e99737edeb28c71bcbec5b5dda19d0d9ef3ca3e92e3e925e7c0bb364c; c=$(python-dateutil-checksum)
- elif [ $$n = requests ]; then h=52/2c/514e4ac25da2b08ca5a464c50463682126385c4272c18193876e91f4bc38; c=$(requests-checksum)
- elif [ $$n = scipy ]; then h=ee/5b/5afcd1c46f97b3c2ac3489dbc95d6ca28eacf8e3634e51f495da68d97f0f; c=$(scipy-checksum)
- elif [ $$n = secretstorage ]; then h=a6/89/df343dbc2957a317127e7ff2983230dc5336273be34f2e1911519d85aeb5; c=$(secretstorage-checksum)
- elif [ $$n = setuptools ]; then h=11/0a/7f13ef5cd932a107cd4c0f3ebc9d831d9b78e1a0e8c98a098ca17b1d7d97; c=$(setuptools-checksum)
- elif [ $$n = setuptools_scm ]; then h=83/44/53cad68ce686585d12222e6769682c4bdb9686808d2739671f9175e2938b; c=$(setuptools_scm-checksum)
- elif [ $$n = six ]; then h=dd/bf/4138e7bfb757de47d1f4b6994648ec67a51efe58fa907c1e11e350cddfca; c=$(six-checksum)
- elif [ $$n = sip_tpv ]; then h=27/93/a973aab2a3bf0c12cb385611819710921e13b090304c6bd015026cf9c502; c=$(sip_tpv-checksum)
- elif [ $$n = soupsieve ]; then h=0c/52/e9088bb9b96e2d39fc3b33fcda5b4fde9d71473536ac660a1ca9a0958a2f; c=$(soupsieve-checksum)
- elif [ $$n = sympy ]; then h=54/2e/6adb11fe599d4cfb7e8833753350ac51aa2c0603c226b36f9051cc9d2425; c=$(sympy-checksum)
- elif [ $$n = uncertainties ]; then h=2a/c2/babbe5b16141859dd799ed31c03987100a7b6d0ca7c0ed4429c96ce60fdf; c=$(uncertainties-checksum)
- elif [ $$n = urllib3 ]; then h=b1/53/37d82ab391393565f2f831b8eedbffd57db5a718216f82f1a8b4d381a1c1; c=$(urllib3-checksum)
- elif [ $$n = virtualenv ]; then h=51/aa/c395a6e6eaaedfa5a04723b6446a1df783b16cca6fec66e671cede514688; c=$(virtualenv-checksum)
- elif [ $$n = webencodings ]; then h=0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47; c=$(webencodings-checksum)
-# elif [ $$n = strange5-name ]; then h=XXXXX; c=$(XXXXX-checksum)
- else
- echo; echo; echo;
- echo "'$$n' not recognized as a dependency name to download."
- echo; echo; echo;
- exit 1
- fi
-
- # Download the requested tarball. Note that some packages may not
- # follow our naming convention (where the package name is merged
- # with its version number). In such cases, `w' will be the full
- # address, not just the top directory address. But since we are
- # storing all the tarballs in one directory, we want it to have
- # the same naming convention, so we'll download it to a temporary
- # name, then rename that.
- rm -f "$@.unchecked"
- if [ -f $(DEPENDENCIES-DIR)/$* ]; then
- cp $(DEPENDENCIES-DIR)/$* "$@.unchecked"
- else
- if [ $$mergenames = 1 ]; then tarballurl=$(pytopurl)/$$h/"$*"
- else tarballurl=$$h
- fi
-
- # Download using the script specially defined for this job.
- touch $(lockdir)/download
- downloader="wget --no-use-server-timestamps -O"
- $(downloadwrapper) "$$downloader" $(lockdir)/download \
- $$tarballurl "$@.unchecked" "$(backupservers)"
- fi
-
- # Make sure this is the expected tarball. Note that we now have a
- # controlled `sha512sum' build (as part of GNU Coreutils). So we
- # don't need to check its existance like `basic.mk'.
- checksum=$$(sha512sum "$@.unchecked" | awk '{print $$1}')
- if [ x"$$checksum" = x"$$c" ]; then
- mv "$@.unchecked" "$@"
- else
- echo "ERROR: Non-matching checksum for '$*'."
- echo "Checksum should be: $$c"
- echo "Checksum is: $$checksum"
- exit 1
- fi
-
-
-
-
-
# Necessary programs and libraries
# --------------------------------
#
# While this Makefile is for Python programs, in some cases, we need
# certain programs (like Python itself), or libraries for the modules.
-$(ibidir)/libffi: $(tdir)/libffi-$(libffi-version).tar.gz
+$(ibidir)/libffi-$(libffi-version):
+ # Prepare the source.
+ tarball=libffi-$(libffi-version).tar.gz
+ $(call import-source, $(libffi-url), $(libffi-checksum))
+
+ # Build libffi.
+ $(call gbuild, libffi-$(libffi-version), , \
+ CFLAGS="-DNO_JAVA_RAW_API=1")
# On some Fedora systems, libffi installs in `lib64', not
# `lib'. This will cause problems when building setuptools
# later. To fix this problem, we'll first check if this has indeed
# happened (it exists under `lib64', but not under `lib'). If so,
# we'll put a copy of the installed libffi libraries in `lib'.
- $(call gbuild, libffi-$(libffi-version), , \
- CFLAGS="-DNO_JAVA_RAW_API=1") \
- && if [ -f $(idir)/lib64/libffi.a ] \
- && ! [ -f $(idir)/lib/libffi.a ]; then \
- cp $(idir)/lib64/libffi* $(ildir)/; \
- fi \
- && echo "Libffi $(libffi-version)" > $@
-
-$(ibidir)/python: $(ibidir)/libffi \
- $(tdir)/python-$(python-version).tar.gz
+ if [ -f $(idir)/lib64/libffi.a ] && ! [ -f $(idir)/lib/libffi.a ]; then
+ cp $(idir)/lib64/libffi* $(ildir)/
+ fi
+ echo "Libffi $(libffi-version)" > $@
+
+$(ibidir)/python-$(python-version): $(ibidir)/libffi-$(libffi-version)
+
+ # Download the source.
+ tarball=python-$(python-version).tar.gz
+ $(call import-source, $(python-url), $(python-checksum))
+
# On Mac systems, the build complains about `clang' specific
# features, so we can't use our own GCC build here.
- if [ x$(on_mac_os) = xyes ]; then \
- export CC=clang; \
- export CXX=clang++; \
- fi; \
+ if [ x$(on_mac_os) = xyes ]; then
+ export CC=clang
+ export CXX=clang++
+ fi
$(call gbuild, Python-$(python-version),, \
--without-ensurepip \
--with-system-ffi \
- --enable-shared) \
- && ln -sf $(ildir)/python$(python-major-version) $(ildir)/python \
- && ln -sf $(ibdir)/python$(python-major-version) $(ibdir)/python \
- && ln -sf $(iidir)/python$(python-major-version)m $(iidir)/python$(python-major-version) \
- && rm -rf $(ipydir) \
- && mkdir $(ipydir) \
- && echo "Python $(python-version)" > $@
+ --enable-shared, -j$(numthreads))
+ ln -sf $(ildir)/python$(python-major-version) $(ildir)/python
+ ln -sf $(ibdir)/python$(python-major-version) $(ibdir)/python
+ ln -sf $(iidir)/python$(python-major-version)m $(iidir)/python$(python-major-version)
+ rm -rf $(ipydir)
+ mkdir $(ipydir)
+ echo "Python $(python-version)" > $@
@@ -343,22 +125,22 @@ $(ibidir)/python: $(ibidir)/libffi \
# pyhook_before: optional steps before running `python setup.py build'
# pyhook_after: optional steps after running `python setup.py install'
pybuild = cd $(ddir); rm -rf $(2); \
- if ! $(1) $(word 1,$(filter $(tdir)/%,$^)); then \
- echo; echo "Tar error"; exit 1; \
- fi; \
- cd $(2); \
- if [ "x$(strip $(3))" != x ]; then \
- sed -e 's|@LIBDIR[@]|'"$(ildir)"'|' \
- -e 's|@INCDIR[@]|'"$(idir)/include"'|' \
- $(3) > site.cfg; \
- fi; \
- if type pyhook_before &>/dev/null; then pyhook_before; fi \
- && python setup.py build \
- && python setup.py install \
- && if type pyhook_after &>/dev/null; then pyhook_after; fi \
- && cd .. \
- && rm -rf $(2) \
- && echo "$(4)" > $@
+ if ! $(1) $(tdir)/$$tarball; then \
+ echo; echo "Tar error"; exit 1; \
+ fi; \
+ cd $(2); \
+ if [ "x$(strip $(3))" != x ]; then \
+ sed -e 's|@LIBDIR[@]|'"$(ildir)"'|' \
+ -e 's|@INCDIR[@]|'"$(idir)/include"'|' \
+ $(3) > site.cfg; \
+ fi; \
+ if type pyhook_before &>/dev/null; then pyhook_before; fi; \
+ python setup.py build; \
+ python setup.py install; \
+ if type pyhook_after &>/dev/null; then pyhook_after; fi; \
+ cd ..; \
+ rm -rf $(2); \
+ echo "$(4)" > $@
@@ -368,31 +150,40 @@ pybuild = cd $(ddir); rm -rf $(2); \
# ---------------
#
# All the necessary Python modules go here.
-$(ipydir)/asn1crypto: $(ipydir)/setuptools \
- $(tdir)/asn1crypto-$(asn1crypto-version).tar.gz
+$(ipydir)/asn1crypto-$(asn1crypto-version): $(ipydir)/setuptools-$(setuptools-version)
+ tarball=asn1crypto-$(asn1crypto-version).tar.gz
+ $(call import-source, $(asn1crypto-url), $(asn1crypto-checksum))
$(call pybuild, tar xf, asn1crypto-$(asn1crypto-version), , \
Asn1crypto $(asn1crypto-version))
-$(ipydir)/asteval: $(ipydir)/numpy \
- $(tdir)/asteval-$(asteval-version).tar.gz
+$(ipydir)/asteval-$(asteval-version): $(ipydir)/numpy-$(numpy-version)
+ tarball=asteval-$(asteval-version).tar.gz
+ $(call import-source, $(asteval-url), $(asteval-checksum))
$(call pybuild, tar xf, asteval-$(asteval-version), , \
ASTEVAL $(asteval-version))
-$(ipydir)/astroquery: $(ipydir)/astropy \
- $(ipydir)/keyring \
- $(ipydir)/requests \
- $(tdir)/astroquery-$(astroquery-version).tar.gz
- $(call pybuild, tar xf, astroquery-$(astroquery-version), ,\
+$(ipydir)/astroquery-$(astroquery-version): \
+ $(ipydir)/astropy-$(astropy-version) \
+ $(ipydir)/keyring-$(keyring-version) \
+ $(ipydir)/requests-$(requests-version)
+ tarball=astroquery-$(astroquery-version).tar.gz
+ $(call import-source, $(astroquery-url), $(astroquery-checksum))
+ $(call pybuild, tar xf, astroquery-$(astroquery-version), , \
Astroquery $(astroquery-version))
-$(ipydir)/astropy: $(ipydir)/h5py \
- $(ibidir)/expat \
- $(ipydir)/scipy \
- $(ipydir)/numpy \
- $(ipydir)/pyyaml \
- $(ipydir)/html5lib \
- $(ipydir)/beautifulsoup4 \
- $(tdir)/astropy-$(astropy-version).tar.gz
+$(ipydir)/astropy-$(astropy-version): \
+ $(ipydir)/h5py-$(h5py-version) \
+ $(ibidir)/expat-$(expat-version) \
+ $(ipydir)/scipy-$(scipy-version) \
+ $(ipydir)/numpy-$(numpy-version) \
+ $(ipydir)/pyyaml-$(pyyaml-version) \
+ $(ipydir)/html5lib-$(html5lib-version) \
+ $(ipydir)/beautifulsoup4-$(beautifulsoup4-version)
+
+ # Download the source.
+ tarball=astropy-$(astropy-version).tar.gz
+ $(call import-source, $(astropy-url), $(astropy-checksum))
+
# Currently, when the Expat library is already built in a project
# (for example as a dependency of another program), Astropy's
# internal building of Expat will conflict with the project's. So
@@ -404,107 +195,133 @@ $(ipydir)/astropy: $(ipydir)/h5py \
echo "[build]" >> setup.cfg
echo "use_system_expat=1" >> setup.cfg
}
- $(call pybuild, tar xf, astropy-$(astropy-version)) \
- && cp $(dtexdir)/astropy.tex $(ictdir)/ \
- && echo "Astropy $(astropy-version) \citep{astropy2013,astropy2018}" > $@
-
-$(ipydir)/beautifulsoup4: $(ipydir)/soupsieve \
- $(tdir)/beautifulsoup4-$(beautifulsoup4-version).tar.gz
- $(call pybuild, tar xf, beautifulsoup4-$(beautifulsoup4-version), ,\
+ $(call pybuild, tar xf, astropy-$(astropy-version))
+ cp $(dtexdir)/astropy.tex $(ictdir)/
+ echo "Astropy $(astropy-version) \citep{astropy2013,astropy2018}" > $@
+
+$(ipydir)/beautifulsoup4-$(beautifulsoup4-version): \
+ $(ipydir)/soupsieve-$(soupsieve-version)
+ tarball=beautifulsoup4-$(beautifulsoup4-version).tar.gz
+ $(call import-source, $(beautifulsoup4-url), $(beautifulsoup4-checksum))
+ $(call pybuild, tar xf, beautifulsoup4-$(beautifulsoup4-version), , \
BeautifulSoup $(beautifulsoup4-version))
-$(ipydir)/certifi: $(ipydir)/setuptools \
- $(tdir)/certifi-$(certifi-version).tar.gz
- $(call pybuild, tar xf, certifi-$(certifi-version), ,\
+$(ipydir)/certifi-$(certifi-version): $(ipydir)/setuptools-$(setuptools-version)
+ tarball=certifi-$(certifi-version).tar.gz
+ $(call import-source, $(certifi-url), $(certifi-checksum))
+ $(call pybuild, tar xf, certifi-$(certifi-version), , \
Certifi $(certifi-version))
-$(ipydir)/cffi: $(ibidir)/libffi \
- $(ipydir)/pycparser \
- $(tdir)/cffi-$(cffi-version).tar.gz
- $(call pybuild, tar xf, cffi-$(cffi-version), ,\
- cffi $(cffi-version))
-
-$(ipydir)/chardet: $(ipydir)/setuptools \
- $(tdir)/chardet-$(chardet-version).tar.gz
- $(call pybuild, tar xf, chardet-$(chardet-version), ,\
+$(ipydir)/cffi-$(cffi-version): \
+ $(ibidir)/libffi-$(libffi-version) \
+ $(ipydir)/pycparser-$(pycparser-version)
+ tarball=cffi-$(cffi-version).tar.gz
+ $(call import-source, $(cffi-url), $(cffi-checksum))
+ $(call pybuild, tar xf, cffi-$(cffi-version), ,cffi $(cffi-version))
+
+$(ipydir)/chardet-$(chardet-version): $(ipydir)/setuptools-$(setuptools-version)
+ tarball=chardet-$(chardet-version).tar.gz
+ $(call import-source, $(chardet-url), $(chardet-checksum))
+ $(call pybuild, tar xf, chardet-$(chardet-version), , \
Chardet $(chardet-version))
-$(ipydir)/corner: $(ipydir)/matplotlib \
- $(tdir)/corner-$(corner-version).tar.gz
- $(call pybuild, tar xf, corner-$(corner-version), ,\
- Corner $(corner-version)) \
- && cp $(dtexdir)/corner.tex $(ictdir)/ \
- && echo "Corner $(corner-version) \citep{corner}" > $@
-
-$(ipydir)/cryptography: $(ipydir)/cffi \
- $(ipydir)/asn1crypto \
- $(tdir)/cryptography-$(cryptography-version).tar.gz
- $(call pybuild, tar xf, cryptography-$(cryptography-version), ,\
+$(ipydir)/corner-$(corner-version): $(ipydir)/matplotlib-$(matplotlib-version)
+ tarball=corner-$(corner-version).tar.gz
+ $(call import-source, $(corner-url), $(corner-checksum))
+ $(call pybuild, tar xf, corner-$(corner-version), , \
+ Corner $(corner-version))
+ cp $(dtexdir)/corner.tex $(ictdir)/
+ echo "Corner $(corner-version) \citep{corner}" > $@
+
+$(ipydir)/cryptography-$(cryptography-version): \
+ $(ipydir)/cffi-$(cffi-version) \
+ $(ipydir)/asn1crypto-$(asn1crypto-version)
+ tarball=cryptography-$(cryptography-version).tar.gz
+ $(call import-source, $(cryptography-url), $(cryptography-checksum))
+ $(call pybuild, tar xf, cryptography-$(cryptography-version), , \
Cryptography $(cryptography-version))
-$(ipydir)/cycler: $(ipydir)/six \
- $(tdir)/cycler-$(cycler-version).tar.gz
- $(call pybuild, tar xf, cycler-$(cycler-version), ,\
+$(ipydir)/cycler-$(cycler-version): $(ipydir)/six-$(six-version)
+ tarball=cycler-$(cycler-version).tar.gz
+ $(call import-source, $(cycler-url), $(cycler-checksum))
+ $(call pybuild, tar xf, cycler-$(cycler-version), , \
Cycler $(cycler-version))
-$(ipydir)/cython: $(ipydir)/setuptools \
- $(tdir)/cython-$(cython-version).tar.gz
- $(call pybuild, tar xf, Cython-$(cython-version)) \
- && cp $(dtexdir)/cython.tex $(ictdir)/ \
- && echo "Cython $(cython-version) \citep{cython2011}" > $@
-
-$(ipydir)/esutil: $(ipydir)/numpy \
- $(tdir)/esutil-$(esutil-version).tar.gz
- $(call pybuild, tar xf, esutil-$(esutil-version), ,\
+$(ipydir)/cython-$(cython-version): $(ipydir)/setuptools-$(setuptools-version)
+ tarball=cython-$(cython-version).tar.gz
+ $(call import-source, $(cython-url), $(cython-checksum))
+ $(call pybuild, tar xf, Cython-$(cython-version))
+ cp $(dtexdir)/cython.tex $(ictdir)/
+ echo "Cython $(cython-version) \citep{cython2011}" > $@
+
+$(ipydir)/esutil-$(esutil-version): $(ipydir)/numpy-$(numpy-version)
+ tarball=esutil-$(esutil-version).tar.gz
+ $(call import-source, $(esutil-url), $(esutil-checksum))
+ $(call pybuild, tar xf, esutil-$(esutil-version), , \
esutil $(esutil-version))
-$(ipydir)/eigency: $(ibidir)/eigen \
- $(tdir)/eigency-$(eigency-version).tar.gz
- $(call pybuild, tar xf, eigency-$(eigency-version), ,\
+$(ipydir)/eigency-$(eigency-version): \
+ $(ipydir)/numpy-$(numpy-version) \
+ $(ibidir)/eigen-$(eigen-version) \
+ $(ipydir)/cython-$(cython-version)
+ tarball=eigency-$(eigency-version).tar.gz
+ $(call import-source, $(eigency-url), $(eigency-checksum))
+ $(call pybuild, tar xf, eigency-$(eigency-version), , \
eigency $(eigency-version))
-$(ipydir)/emcee: $(ipydir)/numpy \
- $(ipydir)/setuptools_scm \
- $(tdir)/emcee-$(emcee-version).tar.gz
- $(call pybuild, tar xf, emcee-$(emcee-version), ,\
+$(ipydir)/emcee-$(emcee-version): \
+ $(ipydir)/numpy-$(numpy-version) \
+ $(ipydir)/setuptools_scm-$(setuptools_scm-version)
+ tarball=emcee-$(emcee-version).tar.gz
+ $(call import-source, $(emcee-url), $(emcee-checksum))
+ $(call pybuild, tar xf, emcee-$(emcee-version), , \
emcee $(emcee-version))
-$(ipydir)/entrypoints: $(ipydir)/setuptools \
- $(tdir)/entrypoints-$(entrypoints-version).tar.gz
- $(call pybuild, tar xf, entrypoints-$(entrypoints-version), ,\
+$(ipydir)/entrypoints-$(entrypoints-version): \
+ $(ipydir)/setuptools-$(setuptools-version)
+ tarball=entrypoints-$(entrypoints-version).tar.gz
+ $(call import-source, $(entrypoints-url), $(entrypoints-checksum))
+ $(call pybuild, tar xf, entrypoints-$(entrypoints-version), , \
EntryPoints $(entrypoints-version))
-$(ipydir)/flake8: $(ipydir)/pyflakes \
- $(ipydir)/pycodestyle \
- $(tdir)/flake8-$(flake8-version).tar.gz
- $(call pybuild, tar xf, flake8-$(flake8-version), ,\
+$(ipydir)/flake8-$(flake8-version): \
+ $(ipydir)/pyflakes-$(pyflakes-version) \
+ $(ipydir)/pycodestyle-$(pycodestyle-version)
+ tarball=flake8-$(flake8-version).tar.gz
+ $(call import-source, $(flake8-url), $(flake8-checksum))
+ $(call pybuild, tar xf, flake8-$(flake8-version), , \
Flake8 $(flake8-version))
-$(ipydir)/future: $(ipydir)/setuptools \
- $(tdir)/future-$(future-version).tar.gz
- $(call pybuild, tar xf, future-$(future-version), ,\
+$(ipydir)/future-$(future-version): $(ipydir)/setuptools-$(setuptools-version)
+ tarball=future-$(future-version).tar.gz
+ $(call import-source, $(future-url), $(future-checksum))
+ $(call pybuild, tar xf, future-$(future-version), , \
Future $(future-version))
-$(ipydir)/galsim: $(ipydir)/future \
- $(ipydir)/astropy \
- $(ipydir)/eigency \
- $(ipydir)/pybind11 \
- $(ipydir)/lsstdesccoord \
- $(tdir)/galsim-$(galsim-version).tar.gz
- $(call pybuild, tar xf, GalSim-$(galsim-version)) \
- && cp $(dtexdir)/galsim.tex $(ictdir)/ \
- && echo "Galsim $(galsim-version) \citep{galsim}" > $@
-
-$(ipydir)/h5py: $(ipydir)/six \
- $(ibidir)/hdf5 \
- $(ipydir)/numpy \
- $(ipydir)/cython \
- $(ipydir)/mpi4py \
- $(ipydir)/pypkgconfig \
- $(tdir)/h5py-$(h5py-version).tar.gz
- export HDF5_MPI=ON; \
- export HDF5_DIR=$(ildir); \
- $(call pybuild, tar xf, h5py-$(h5py-version), ,\
+$(ipydir)/galsim-$(galsim-version): \
+ $(ipydir)/future-$(future-version) \
+ $(ipydir)/astropy-$(astropy-version) \
+ $(ipydir)/eigency-$(eigency-version) \
+ $(ipydir)/pybind11-$(pybind11-version) \
+ $(ipydir)/lsstdesccoord-$(lsstdesccoord-version)
+ tarball=galsim-$(galsim-version).tar.gz
+ $(call import-source, $(galsim-url), $(galsim-checksum))
+ $(call pybuild, tar xf, GalSim-$(galsim-version))
+ cp $(dtexdir)/galsim.tex $(ictdir)/
+ echo "Galsim $(galsim-version) \citep{galsim}" > $@
+
+$(ipydir)/h5py-$(h5py-version): \
+ $(ipydir)/six-$(six-version) \
+ $(ibidir)/hdf5-$(hdf5-version) \
+ $(ipydir)/numpy-$(numpy-version) \
+ $(ipydir)/cython-$(cython-version) \
+ $(ipydir)/mpi4py-$(mpi4py-version) \
+ $(ipydir)/pypkgconfig-$(pypkgconfig-version)
+ export HDF5_MPI=ON
+ export HDF5_DIR=$(ildir)
+ tarball=h5py-$(h5py-version).tar.gz
+ $(call import-source, $(h5py-url), $(h5py-checksum))
+ $(call pybuild, tar xf, h5py-$(h5py-version), , \
h5py $(h5py-version))
# `healpy' is actually installed as part of the HEALPix package. It will be
@@ -514,231 +331,283 @@ $(ipydir)/h5py: $(ipydir)/six \
# and just ask for `healpy'. To avoid confusion in such cases, we'll just
# set `healpy' to be dependent on `healpix' and not download any tarball
# for it, or write anything in the final target.
-$(ipydir)/healpy: $(ibidir)/healpix
+$(ipydir)/healpy-$(healpy-version): $(ibidir)/healpix-$(healpy-version)
touch $@
-$(ipydir)/html5lib: $(ipydir)/six \
- $(ipydir)/webencodings \
- $(tdir)/html5lib-$(html5lib-version).tar.gz
- $(call pybuild, tar xf, html5lib-$(html5lib-version), ,\
+$(ipydir)/html5lib-$(html5lib-version): \
+ $(ipydir)/six-$(six-version) \
+ $(ipydir)/webencodings-$(webencodings-version)
+ tarball=html5lib-$(html5lib-version).tar.gz
+ $(call import-source, $(html5lib-url), $(html5lib-checksum))
+ $(call pybuild, tar xf, html5lib-$(html5lib-version), , \
HTML5lib $(html5lib-version))
-$(ipydir)/idna: $(ipydir)/setuptools \
- $(tdir)/idna-$(idna-version).tar.gz
- $(call pybuild, tar xf, idna-$(idna-version), ,\
+$(ipydir)/idna-$(idna-version): $(ipydir)/setuptools-$(setuptools-version)
+ tarball=idna-$(idna-version).tar.gz
+ $(call import-source, $(idna-url), $(idna-checksum))
+ $(call pybuild, tar xf, idna-$(idna-version), , \
idna $(idna-version))
-$(ipydir)/jeepney: $(ipydir)/setuptools \
- $(tdir)/jeepney-$(jeepney-version).tar.gz
- $(call pybuild, tar xf, jeepney-$(jeepney-version), ,\
+$(ipydir)/jeepney-$(jeepney-version): $(ipydir)/setuptools-$(setuptools-version)
+ tarball=jeepney-$(jeepney-version).tar.gz
+ $(call import-source, $(jeepney-url), $(jeepney-checksum))
+ $(call pybuild, tar xf, jeepney-$(jeepney-version), , \
Jeepney $(jeepney-version))
-$(ipydir)/keyring: $(ipydir)/entrypoints \
- $(ipydir)/secretstorage \
- $(ipydir)/setuptools_scm \
- $(tdir)/keyring-$(keyring-version).tar.gz
- $(call pybuild, tar xf, keyring-$(keyring-version), ,\
+$(ipydir)/keyring-$(keyring-version): \
+ $(ipydir)/entrypoints-$(entrypoints-version) \
+ $(ipydir)/secretstorage-$(secretstorage-version) \
+ $(ipydir)/setuptools_scm-$(setuptools_scm-version)
+ tarball=keyring-$(keyring-version).tar.gz
+ $(call import-source, $(keyring-url), $(keyring-checksum))
+ $(call pybuild, tar xf, keyring-$(keyring-version), , \
Keyring $(keyring-version))
-$(ipydir)/kiwisolver: $(ipydir)/setuptools \
- $(tdir)/kiwisolver-$(kiwisolver-version).tar.gz
- $(call pybuild, tar xf, kiwisolver-$(kiwisolver-version), ,\
+$(ipydir)/kiwisolver-$(kiwisolver-version): $(ipydir)/setuptools-$(setuptools-version)
+ tarball=kiwisolver-$(kiwisolver-version).tar.gz
+ $(call import-source, $(kiwisolver-url), $(kiwisolver-checksum))
+ $(call pybuild, tar xf, kiwisolver-$(kiwisolver-version), , \
Kiwisolver $(kiwisolver-version))
-$(ipydir)/lmfit: $(ipydir)/six \
- $(ipydir)/scipy \
- $(ipydir)/emcee \
- $(ipydir)/corner \
- $(ipydir)/asteval \
- $(ipydir)/matplotlib \
- $(ipydir)/uncertainties \
- $(tdir)/lmfit-$(lmfit-version).tar.gz
- $(call pybuild, tar xf, lmfit-$(lmfit-version), ,\
+$(ipydir)/lmfit-$(lmfit-version): \
+ $(ipydir)/six-$(six-version) \
+ $(ipydir)/scipy-$(scipy-version) \
+ $(ipydir)/emcee-$(emcee-version) \
+ $(ipydir)/corner-$(corner-version) \
+ $(ipydir)/asteval-$(asteval-version) \
+ $(ipydir)/matplotlib-$(matplotlib-version) \
+ $(ipydir)/uncertainties-$(uncertainties-version)
+ tarball=lmfit-$(lmfit-version).tar.gz
+ $(call import-source, $(lmfit-url), $(lmfit-checksum))
+ $(call pybuild, tar xf, lmfit-$(lmfit-version), , \
LMFIT $(lmfit-version))
-$(ipydir)/lsstdesccoord: $(ipydir)/setuptools \
- $(tdir)/lsstdesccoord-$(lsstdesccoord-version).tar.gz
- $(call pybuild, tar xf, LSSTDESC.Coord-$(lsstdesccoord-version), ,\
+$(ipydir)/lsstdesccoord-$(lsstdesccoord-version): \
+ $(ipydir)/setuptools-$(setuptools-version)
+ tarball=lsstdesccoord-$(lsstdesccoord-version).tar.gz
+ $(call import-source, $(lsstdesccoord-url), $(lsstdesccoord-checksum))
+ $(call pybuild, tar xf, LSSTDESC.Coord-$(lsstdesccoord-version), , \
LSSTDESC.Coord $(lsstdesccoord-version))
-$(ipydir)/matplotlib: $(ipydir)/numpy \
- $(ipydir)/cycler \
- $(itidir)/texlive \
- $(ibidir)/freetype \
- $(ipydir)/pyparsing \
- $(ipydir)/kiwisolver \
- $(ibidir)/ghostscript \
- $(ibidir)/imagemagick \
- $(ipydir)/python-dateutil \
- $(tdir)/matplotlib-$(matplotlib-version).tar.gz
+$(ipydir)/matplotlib-$(matplotlib-version): \
+ $(itidir)/texlive \
+ $(ipydir)/numpy-$(numpy-version) \
+ $(ipydir)/cycler-$(cycler-version) \
+ $(ibidir)/freetype-$(freetype-version) \
+ $(ipydir)/pyparsing-$(pyparsing-version) \
+ $(ipydir)/kiwisolver-$(kiwisolver-version) \
+ $(ibidir)/ghostscript-$(ghostscript-version) \
+ $(ibidir)/imagemagick-$(imagemagick-version) \
+ $(ipydir)/python-dateutil-$(python-dateutil-version)
+
+ # Download the source.
+ tarball=matplotlib-$(matplotlib-version).tar.gz
+ $(call import-source, $(matplotlib-url), $(matplotlib-checksum))
+
# On Mac systems, the build complains about `clang' specific
# features, so we can't use our own GCC build here.
- if [ x$(on_mac_os) = xyes ]; then \
- export CC=clang; \
- export CXX=clang++; \
- fi; \
- $(call pybuild, tar xf, matplotlib-$(matplotlib-version)) \
- && cp $(dtexdir)/matplotlib.tex $(ictdir)/ \
- && echo "Matplotlib $(matplotlib-version) \citep{matplotlib2007}" > $@
-
-$(ipydir)/mpi4py: $(ibidir)/openmpi \
- $(ipydir)/setuptools \
- $(tdir)/mpi4py-$(mpi4py-version).tar.gz
- $(call pybuild, tar xf, mpi4py-$(mpi4py-version)) \
- && cp $(dtexdir)/mpi4py.tex $(ictdir)/ \
- && echo "mpi4py $(mpi4py-version) \citep{mpi4py2011}" > $@
-
-$(ipydir)/mpmath: $(ipydir)/setuptools \
- $(tdir)/mpmath-$(mpmath-version).tar.gz
- $(call pybuild, tar xf, mpmath-$(mpmath-version), ,\
+ if [ x$(on_mac_os) = xyes ]; then
+ export CC=clang
+ export CXX=clang++
+ fi
+ $(call pybuild, tar xf, matplotlib-$(matplotlib-version))
+ cp $(dtexdir)/matplotlib.tex $(ictdir)/
+ echo "Matplotlib $(matplotlib-version) \citep{matplotlib2007}" > $@
+
+$(ipydir)/mpi4py-$(mpi4py-version): \
+ $(ibidir)/openmpi-$(openmpi-version) \
+ $(ipydir)/setuptools-$(setuptools-version)
+ tarball=mpi4py-$(mpi4py-version).tar.gz
+ $(call import-source, $(mpi4py-url), $(mpi4py-checksum))
+ $(call pybuild, tar xf, mpi4py-$(mpi4py-version))
+ cp $(dtexdir)/mpi4py.tex $(ictdir)/
+ echo "mpi4py $(mpi4py-version) \citep{mpi4py2011}" > $@
+
+$(ipydir)/mpmath-$(mpmath-version): $(ipydir)/setuptools-$(setuptools-version)
+ tarball=mpmath-$(mpmath-version).tar.gz
+ $(call import-source, $(mpmath-url), $(mpmath-checksum))
+ $(call pybuild, tar xf, mpmath-$(mpmath-version), , \
mpmath $(mpmath-version))
-$(ipydir)/numpy: $(ibidir)/unzip \
- $(ibidir)/openblas \
- $(ipydir)/setuptools \
- $(tdir)/numpy-$(numpy-version).zip
- if [ x$(on_mac_os) = xyes ]; then \
- export LDFLAGS="$(LDFLAGS) -undefined dynamic_lookup -bundle"; \
- else \
- export LDFLAGS="$(LDFLAGS) -shared"; \
- fi; \
- export CFLAGS="--std=c99 $$CFLAGS"; \
- conf="$$(pwd)/reproduce/software/config/numpy-scipy.cfg"; \
+$(ipydir)/numpy-$(numpy-version): \
+ $(ibidir)/unzip-$(unzip-version) \
+ $(ibidir)/openblas-$(openblas-version) \
+ $(ipydir)/setuptools-$(setuptools-version)
+ tarball=numpy-$(numpy-version).zip
+ $(call import-source, $(numpy-url), $(numpy-checksum))
+ if [ x$(on_mac_os) = xyes ]; then
+ export LDFLAGS="$(LDFLAGS) -undefined dynamic_lookup -bundle"
+ else
+ export LDFLAGS="$(LDFLAGS) -shared"
+ fi
+ export CFLAGS="--std=c99 $$CFLAGS"
+ conf="$$(pwd)/reproduce/software/config/numpy-scipy.cfg"
$(call pybuild, unzip, numpy-$(numpy-version),$$conf, \
- Numpy $(numpy-version)) \
- && cp $(dtexdir)/numpy.tex $(ictdir)/ \
- && echo "Numpy $(numpy-version) \citep{numpy2011}" > $@
-
-$(ipydir)/pexpect: $(ipydir)/setuptools \
- $(tdir)/pexpect-$(pexpect-version).tar.gz
- $(call pybuild, tar xf, pexpect-$(pexpect-version), ,\
+ Numpy $(numpy-version))
+ cp $(dtexdir)/numpy.tex $(ictdir)/
+ echo "Numpy $(numpy-version) \citep{numpy2011}" > $@
+
+$(ipydir)/pexpect-$(pexpect-version): $(ipydir)/setuptools-$(setuptools-version)
+ tarball=pexpect-$(pexpect-version).tar.gz
+ $(call import-source, $(pexpect-url), $(pexpect-checksum))
+ $(call pybuild, tar xf, pexpect-$(pexpect-version), , \
Pexpect $(pexpect-version))
-$(ibidir)/pip3: $(ipydir)/setuptools \
- $(tdir)/pip-$(pip-version).tar.gz
- $(call pybuild, tar xf, pip-$(pip-version), ,\
+$(ipydir)/pip-$(pip-version): $(ipydir)/setuptools-$(setuptools-version)
+ tarball=pip-$(pip-version).tar.gz
+ $(call import-source, $(pip-url), $(pip-checksum))
+ $(call pybuild, tar xf, pip-$(pip-version), , \
PiP $(pip-version))
-$(ipydir)/pycodestyle: $(ipydir)/setuptools \
- $(tdir)/pycodestyle-$(pycodestyle-version).tar.gz
- $(call pybuild, tar xf, pycodestyle-$(pycodestyle-version), ,\
+$(ipydir)/pycodestyle-$(pycodestyle-version): \
+ $(ipydir)/setuptools-$(setuptools-version)
+ tarball=pycodestyle-$(pycodestyle-version).tar.gz
+ $(call import-source, $(pycodestyle-url), $(pycodestyle-checksum))
+ $(call pybuild, tar xf, pycodestyle-$(pycodestyle-version), , \
pycodestyle $(pycodestyle-version))
-$(ipydir)/pybind11: $(ibidir)/eigen \
- $(ibidir)/boost \
- $(ipydir)/setuptools \
- $(tdir)/pybind11-$(pybind11-version).tar.gz
+$(ipydir)/pybind11-$(pybind11-version): \
+ $(ibidir)/eigen-$(eigen-version) \
+ $(ibidir)/boost-$(boost-version) \
+ $(ipydir)/setuptools-$(setuptools-version)
+ tarball=pybind11-$(pybind11-version).tar.gz
+ $(call import-source, $(pybind11-url), $(pybind11-checksum))
pyhook_after() {
cp -r include/pybind11 $(iidir)/python$(python-major-version)m/
}
- $(call pybuild, tar xf, pybind11-$(pybind11-version), ,\
+ $(call pybuild, tar xf, pybind11-$(pybind11-version), , \
pybind11 $(pybind11-version))
-$(ipydir)/pycparser: $(ipydir)/setuptools \
- $(tdir)/pycparser-$(pycparser-version).tar.gz
- $(call pybuild, tar xf, pycparser-$(pycparser-version), ,\
+$(ipydir)/pycparser-$(pycparser-version): $(ipydir)/setuptools-$(setuptools-version)
+ tarball=pycparser-$(pycparser-version).tar.gz
+ $(call import-source, $(pycparser-url), $(pycparser-checksum))
+ $(call pybuild, tar xf, pycparser-$(pycparser-version), , \
pycparser $(pycparser-version))
-$(ipydir)/pyflakes: $(ipydir)/setuptools \
- $(tdir)/pyflakes-$(pyflakes-version).tar.gz
- $(call pybuild, tar xf, pyflakes-$(pyflakes-version), ,\
+$(ipydir)/pyflakes-$(pyflakes-version): $(ipydir)/setuptools-$(setuptools-version)
+ tarball=pyflakes-$(pyflakes-version).tar.gz
+ $(call import-source, $(pyflakes-url), $(pyflakes-checksum))
+ $(call pybuild, tar xf, pyflakes-$(pyflakes-version), , \
pyflakes $(pyflakes-version))
-$(ipydir)/pyparsing: $(ipydir)/setuptools \
- $(tdir)/pyparsing-$(pyparsing-version).tar.gz
- $(call pybuild, tar xf, pyparsing-$(pyparsing-version), ,\
+$(ipydir)/pyparsing-$(pyparsing-version): $(ipydir)/setuptools-$(setuptools-version)
+ tarball=pyparsing-$(pyparsing-version).tar.gz
+ $(call import-source, $(pyparsing-url), $(pyparsing-checksum))
+ $(call pybuild, tar xf, pyparsing-$(pyparsing-version), , \
PyParsing $(pyparsing-version))
-$(ipydir)/pypkgconfig: $(ipydir)/setuptools \
- $(tdir)/pkgconfig-$(pypkgconfig-version).tar.gz
+$(ipydir)/pypkgconfig-$(pypkgconfig-version): $(ipydir)/setuptools-$(setuptools-version)
+ tarball=pkgconfig-$(pypkgconfig-version).tar.gz
+ $(call import-source, $(pypkgconfig-url), $(pypkgconfig-checksum))
$(call pybuild, tar xf, pkgconfig-$(pypkgconfig-version), ,
pkgconfig $(pypkgconfig-version))
-$(ipydir)/python-dateutil: $(ipydir)/six \
- $(ipydir)/setuptools_scm \
- $(tdir)/python-dateutil-$(python-dateutil-version).tar.gz
- $(call pybuild, tar xf, python-dateutil-$(python-dateutil-version), ,\
+$(ipydir)/python-dateutil-$(python-dateutil-version): \
+ $(ipydir)/six-$(six-version) \
+ $(ipydir)/setuptools_scm-$(setuptools_scm-version)
+ tarball=python-dateutil-$(python-dateutil-version).tar.gz
+ $(call import-source, $(python-dateutil-url), $(python-dateutil-checksum))
+ $(call pybuild, tar xf, python-dateutil-$(python-dateutil-version), , \
python-dateutil $(python-dateutil-version))
-$(ipydir)/pyyaml: $(ibidir)/yaml \
- $(ipydir)/cython \
- $(tdir)/pyyaml-$(pyyaml-version).tar.gz
- $(call pybuild, tar xf, PyYAML-$(pyyaml-version), ,\
+$(ipydir)/pyyaml-$(pyyaml-version): \
+ $(ibidir)/yaml-$(yaml-version) \
+ $(ipydir)/cython-$(cython-version)
+ tarball=pyyaml-$(pyyaml-version).tar.gz
+ $(call import-source, $(pyyaml-url), $(pyyaml-checksum))
+ $(call pybuild, tar xf, PyYAML-$(pyyaml-version), , \
PyYAML $(pyyaml-version))
-$(ipydir)/requests: $(ipydir)/idna \
- $(ipydir)/numpy \
- $(ipydir)/certifi \
- $(ipydir)/chardet \
- $(ipydir)/urllib3 \
- $(tdir)/requests-$(requests-version).tar.gz
- $(call pybuild, tar xf, requests-$(requests-version), ,\
+$(ipydir)/requests-$(requests-version): $(ipydir)/idna-$(idna-version) \
+ $(ipydir)/numpy-$(numpy-version) \
+ $(ipydir)/certifi-$(certifi-version) \
+ $(ipydir)/chardet-$(chardet-version) \
+ $(ipydir)/urllib3-$(urllib3-version)
+ tarball=requests-$(requests-version).tar.gz
+ $(call import-source, $(requests-url), $(requests-checksum))
+ $(call pybuild, tar xf, requests-$(requests-version), , \
Requests $(requests-version))
-$(ipydir)/scipy: $(ipydir)/numpy \
- $(tdir)/scipy-$(scipy-version).tar.gz
- if [ x$(on_mac_os) = xyes ]; then \
- export LDFLAGS="$(LDFLAGS) -undefined dynamic_lookup -bundle"; \
- else \
- export LDFLAGS="$(LDFLAGS) -shared"; \
- fi; \
- conf="$$(pwd)/reproduce/software/config/numpy-scipy.cfg"; \
- $(call pybuild, tar xf, scipy-$(scipy-version),$$conf) \
- && cp $(dtexdir)/scipy.tex $(ictdir)/ \
- && echo "Scipy $(scipy-version) \citep{scipy2007,scipy2011}" > $@
-
-$(ipydir)/secretstorage: $(ipydir)/jeepney \
- $(ipydir)/cryptography \
- $(tdir)/secretstorage-$(secretstorage-version).tar.gz
- $(call pybuild, tar xf, SecretStorage-$(secretstorage-version), ,\
+$(ipydir)/scipy-$(scipy-version): $(ipydir)/numpy-$(numpy-version)
+ tarball=scipy-$(scipy-version).tar.gz
+ $(call import-source, $(scipy-url), $(scipy-checksum))
+ if [ x$(on_mac_os) = xyes ]; then
+ export LDFLAGS="$(LDFLAGS) -undefined dynamic_lookup -bundle"
+ else
+ export LDFLAGS="$(LDFLAGS) -shared"
+ fi
+ conf="$$(pwd)/reproduce/software/config/numpy-scipy.cfg"
+ $(call pybuild, tar xf, scipy-$(scipy-version),$$conf)
+ cp $(dtexdir)/scipy.tex $(ictdir)/
+ echo "Scipy $(scipy-version) \citep{scipy2007,scipy2011}" > $@
+
+$(ipydir)/secretstorage-$(secretstorage-version): \
+ $(ipydir)/jeepney-$(jeepney-version) \
+ $(ipydir)/cryptography-$(cryptography-version)
+ tarball=secretstorage-$(secretstorage-version).tar.gz
+ $(call import-source, $(secretstorage-url), $(secretstorage-checksum))
+ $(call pybuild, tar xf, SecretStorage-$(secretstorage-version), , \
SecretStorage $(secretstorage-version))
-$(ipydir)/setuptools: $(ibidir)/unzip \
- $(ibidir)/python \
- $(tdir)/setuptools-$(setuptools-version).zip
- $(call pybuild, unzip, setuptools-$(setuptools-version), ,\
+$(ipydir)/setuptools-$(setuptools-version): \
+ $(ibidir)/unzip-$(unzip-version) \
+ $(ibidir)/python-$(python-version)
+ tarball=setuptools-$(setuptools-version).zip
+ $(call import-source, $(setuptools-url), $(setuptools-checksum))
+ $(call pybuild, unzip, setuptools-$(setuptools-version), , \
Setuptools $(setuptools-version))
-$(ipydir)/setuptools_scm: $(ipydir)/setuptools \
- $(tdir)/setuptools_scm-$(setuptools_scm-version).tar.gz
- $(call pybuild, tar xf, setuptools_scm-$(setuptools_scm-version), ,\
+$(ipydir)/setuptools_scm-$(setuptools_scm-version): \
+ $(ipydir)/setuptools-$(setuptools-version)
+ tarball=setuptools_scm-$(setuptools_scm-version).tar.gz
+ $(call import-source, $(setuptools_scm-url), $(setuptools_scm-checksum))
+ $(call pybuild, tar xf, setuptools_scm-$(setuptools_scm-version), , \
Setuptools-scm $(setuptools_scm-version))
-$(ipydir)/sip_tpv: $(ipydir)/sympy \
- $(ipydir)/astropy \
- $(tdir)/sip_tpv-$(sip_tpv-version).tar.gz
- $(call pybuild, tar xf, sip_tpv-$(sip_tpv-version), ,) \
- && cp $(dtexdir)/sip_tpv.tex $(ictdir)/ \
- && echo "sip_tpv $(sip_tpv-version) \citep{sip-tpv}" > $@
+$(ipydir)/sip_tpv-$(sip_tpv-version): \
+ $(ipydir)/sympy-$(sympy-version) \
+ $(ipydir)/astropy-$(astropy-version)
+ tarball=sip_tpv-$(sip_tpv-version).tar.gz
+ $(call import-source, $(sip_tpv-url), $(sip_tpv-checksum))
+ $(call pybuild, tar xf, sip_tpv-$(sip_tpv-version), ,)
+ cp $(dtexdir)/sip_tpv.tex $(ictdir)/
+ echo "sip_tpv $(sip_tpv-version) \citep{sip-tpv}" > $@
-$(ipydir)/six: $(ipydir)/setuptools \
- $(tdir)/six-$(six-version).tar.gz
- $(call pybuild, tar xf, six-$(six-version), ,\
+$(ipydir)/six-$(six-version): $(ipydir)/setuptools-$(setuptools-version)
+ tarball=six-$(six-version).tar.gz
+ $(call import-source, $(six-url), $(six-checksum))
+ $(call pybuild, tar xf, six-$(six-version), , \
Six $(six-version))
-$(ipydir)/soupsieve: $(ipydir)/setuptools \
- $(tdir)/soupsieve-$(soupsieve-version).tar.gz
- $(call pybuild, tar xf, soupsieve-$(soupsieve-version), ,\
+$(ipydir)/soupsieve-$(soupsieve-version): $(ipydir)/setuptools-$(setuptools-version)
+ tarball=soupsieve-$(soupsieve-version).tar.gz
+ $(call import-source, $(soupsieve-url), $(soupsieve-checksum))
+ $(call pybuild, tar xf, soupsieve-$(soupsieve-version), , \
SoupSieve $(soupsieve-version))
-$(ipydir)/sympy: $(ipydir)/mpmath \
- $(tdir)/sympy-$(sympy-version).tar.gz
- $(call pybuild, tar xf, sympy-$(sympy-version), ,) \
- && cp $(dtexdir)/sympy.tex $(ictdir)/ \
- && echo "SymPy $(sympy-version) \citep{sympy}" > $@
-
-$(ipydir)/uncertainties: $(ipydir)/numpy \
- $(tdir)/uncertainties-$(uncertainties-version).tar.gz
- $(call pybuild, tar xf, uncertainties-$(uncertainties-version), ,\
+$(ipydir)/sympy-$(sympy-version): $(ipydir)/mpmath-$(mpmath-version)
+ tarball=sympy-$(sympy-version).tar.gz
+ $(call import-source, $(sympy-url), $(sympy-checksum))
+ $(call pybuild, tar xf, sympy-$(sympy-version), ,)
+ cp $(dtexdir)/sympy.tex $(ictdir)/
+ echo "SymPy $(sympy-version) \citep{sympy}" > $@
+
+$(ipydir)/uncertainties-$(uncertainties-version): $(ipydir)/numpy-$(numpy-version)
+ tarball=uncertainties-$(uncertainties-version).tar.gz
+ $(call import-source, $(uncertainties-url), $(uncertainties-checksum))
+ $(call pybuild, tar xf, uncertainties-$(uncertainties-version), , \
uncertainties $(uncertainties-version))
-$(ipydir)/urllib3: $(ipydir)/setuptools \
- $(tdir)/urllib3-$(urllib3-version).tar.gz
- $(call pybuild, tar xf, urllib3-$(urllib3-version), ,\
+$(ipydir)/urllib3-$(urllib3-version): $(ipydir)/setuptools-$(setuptools-version)
+ tarball=urllib3-$(urllib3-version).tar.gz
+ $(call import-source, $(urllib3-url), $(urllib3-checksum))
+ $(call pybuild, tar xf, urllib3-$(urllib3-version), , \
Urllib3 $(urllib3-version))
-$(ipydir)/webencodings: $(ipydir)/setuptools \
- $(tdir)/webencodings-$(webencodings-version).tar.gz
- $(call pybuild, tar xf, webencodings-$(webencodings-version), ,\
+$(ipydir)/webencodings-$(webencodings-version): \
+ $(ipydir)/setuptools-$(setuptools-version)
+ tarball=webencodings-$(webencodings-version).tar.gz
+ $(call import-source, $(webencodings-url), $(webencodings-checksum))
+ $(call pybuild, tar xf, webencodings-$(webencodings-version), , \
Webencodings $(webencodings-version))