# Build the project's Python dependencies. # # ------------------------------------------------------------------------ # !!!!! IMPORTANT NOTES !!!!! # # This Makefile will be run by the initial `./project configure' script. It # is not included into the reproduction pipe after that. # # ------------------------------------------------------------------------ # # Copyright (C) 2019 Raul Infante-Sainz # Copyright (C) 2019 Mohammad Akhlaghi # # This Makefile is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This Makefile is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # A copy of the GNU General Public License is available at # . # Python enviroment # ----------------- # # The main Python environment variable is `PYTHONPATH'. However, so far we # have found several other Python-related environment variables on some # systems which might interfere. To be safe, we are removing all their # values. export PYTHONPATH := $(installdir)/lib/python/site-packages export PYTHONPATH2 := $(PYTHONPATH) export PYTHONPATH3 := $(PYTHONPATH) export _LMFILES_ := export LOADEDMODULES := export MPI_PYTHON_SITEARCH := export MPI_PYTHON2_SITEARCH := export MPI_PYTHON3_SITEARCH := # 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 \ 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 \ cryptography-$(cryptography-version).tar.gz \ cycler-$(cycler-version).tar.gz \ cython-$(cython-version).tar.gz \ entrypoints-$(entrypoints-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 \ 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 \ pycparser-$(pycparser-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 \ 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 [ $* = h5py-$(h5py-version).tar.gz ]; then n=h5py # elif [ $* = strange-tarball5name-version.tar.gz ]; then # n=strange5-name else # Remove all numbers, `-' and `.' from the tarball name so we can # search more easily only with the program name. n=$$(echo $* | sed -e's/[0-9\-]/ /g' -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 = 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 = asn ]; then h=fc/f1/8db7daa71f414ddabfa056c4ef792e1461ff655c2ae2928a2b675bfed6b4; c=$(asn1crypto-checksum) elif [ $$n = astroquery ]; then h=61/50/a7a08f9e54d7d9d97e69433cd88231e1ad2901811c9d1ae9ac7ccaef9396; c=$(astroquery-checksum) elif [ $$n = astropy ]; then h=b9/10/523355eb8cb9839552c8f0fbc9425a1c87c8ff2e55f4df85469a5a4164d3; c=$(astropy-checksum) elif [ $$n = beautifulsoup ]; 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 = cryptography ]; then h=07/ca/bc827c5e55918ad223d59d299fff92f3563476c3b00d0a9157d9c0217449; c=$(cryptography-checksum) elif [ $$n = cycler ]; then h=c2/4b/137dea450d6e1e3d474e1d873cd1d4f7d3beed7e0dc973b06e8e10d32488; c=$(cycler-checksum) elif [ $$n = entrypoints ]; then h=b4/ef/063484f1f9ba3081e920ec9972c96664e2edb9fdc3d8669b0e3b8fc0ad7c; c=$(entrypoints-checksum) elif [ $$n = h5py ]; then h=43/27/a6e7dcb8ae20a4dbf3725321058923fec262b6f7835179d78ccc8d98deec; c=$(h5py-checksum) elif [ $$n = html ]; 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 = matplotlib ]; then h=12/d1/7b12cd79c791348cb0c78ce6e7d16bd72992f13c9f1e8e43d2725a6d8adf; c=$(matplotlib-checksum) elif [ $$n = mpi ]; 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 = pip ]; then h=4c/4d/88bc9413da11702cbbace3ccc51350ae099bb351febae8acc85fec34f9af; c=$(pip-checksum) elif [ $$n = pkgconfig ]; then h=6e/a9/ff67ef67217dfdf2aca847685fe789f82b931a6957a3deac861297585db6; c=$(pypkgconfig-checksum) elif [ $$n = pycparser ]; then h=68/9e/49196946aee219aead1290e00d1e7fdeab8567783e83e1b9ab5585e6206a; c=$(pycparser-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=c2/f7/c7b501b783e5a74cf1768bc174ee4fb0a8a6ee5af6afa92274ff964703e0; c=$(setuptools-checksum) elif [ $$n = setuptools_scm ]; then h=54/85/514ba3ca2a022bddd68819f187ae826986051d130ec5b972076e4f58a9f3; 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 = urllib ]; 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. 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" 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 # 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: $(tdir)/python-$(python-version).tar.gz \ $(ibidir)/libffi # 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 gbuild, $<, Python-$(python-version),, \ --without-ensurepip \ --with-system-ffi \ --enable-shared) \ && v=$$(echo $(python-version) | awk 'BEGIN{FS="."} \ {printf "%d.%d\n", $$1, $$2}') \ && ln -sf $(ildir)/python$$v $(ildir)/python \ && ln -sf $(ibdir)/python$$v $(ibdir)/python \ && ln -sf $(iidir)/python$$v"m" $(iidir)/python$$v \ && rm -rf $(ipydir) \ && mkdir $(ipydir) \ && echo "Python $(python-version)" > $@ # Non-PiP Python module installation # ---------------------------------- # # To build Python packages with direct access to a `setup.py' (if no direct # access to `setup.py' is needed, pip can be used). # Arguments of this function are the numbers # 1) Unpack command # 2) Package name # 3) Unpacked directory name after unpacking the tarball # 4) site.cfg file (optional) # 5) Official software name.(for paper). pybuild = cd $(ddir); rm -rf $(3); \ if ! $(1) $(2); then echo; echo "Tar error"; exit 1; fi; \ cd $(3); \ if [ "x$(strip $(4))" != x ]; then \ sed -e 's|@LIBDIR[@]|'"$(ildir)"'|' \ -e 's|@INCDIR[@]|'"$(idir)/include"'|' \ $(4) > site.cfg; \ fi; \ python setup.py build \ && python setup.py install \ && cd .. \ && rm -rf $(3) \ && echo "$(5)" > $@ # Python modules # --------------- # # All the necessary Python modules go here. $(ipydir)/asn1crypto: $(tdir)/asn1crypto-$(asn1crypto-version).tar.gz \ $(ipydir)/setuptools $(call pybuild, tar xf, $<, asn1crypto-$(asn1crypto-version), , \ Asn1crypto $(asn1crypto-version)) $(ipydir)/astroquery: $(tdir)/astroquery-$(astroquery-version).tar.gz \ $(ipydir)/beautifulsoup4 \ $(ipydir)/html5lib \ $(ipydir)/requests \ $(ipydir)/astropy \ $(ipydir)/keyring \ $(ipydir)/numpy $(call pybuild, tar xf, $<, astroquery-$(astroquery-version), ,\ Astroquery $(astroquery-version)) $(ipydir)/astropy: $(tdir)/astropy-$(astropy-version).tar.gz \ $(ipydir)/h5py \ $(ipydir)/numpy \ $(ipydir)/scipy $(call pybuild, tar xf, $<, astropy-$(astropy-version)) \ && cp $(dtexdir)/astropy.tex $(ictdir)/ \ && echo "Astropy $(astropy-version) \citep{astropy2013,astropy2018}" > $@ $(ipydir)/beautifulsoup4: $(tdir)/beautifulsoup4-$(beautifulsoup4-version).tar.gz \ $(ipydir)/soupsieve $(call pybuild, tar xf, $<, beautifulsoup4-$(beautifulsoup4-version), ,\ BeautifulSoup $(beautifulsoup4-version)) $(ipydir)/certifi: $(tdir)/certifi-$(certifi-version).tar.gz \ $(ipydir)/setuptools $(call pybuild, tar xf, $<, certifi-$(certifi-version), ,\ Certifi $(certifi-version)) $(ipydir)/cffi: $(tdir)/cffi-$(cffi-version).tar.gz \ $(ipydir)/pycparser \ $(ibidir)/libffi $(call pybuild, tar xf, $<, cffi-$(cffi-version), ,\ cffi $(cffi-version)) $(ipydir)/chardet: $(tdir)/chardet-$(chardet-version).tar.gz \ $(ipydir)/setuptools $(call pybuild, tar xf, $<, chardet-$(chardet-version), ,\ Chardet $(chardet-version)) $(ipydir)/cryptography: $(tdir)/cryptography-$(cryptography-version).tar.gz \ $(ipydir)/asn1crypto \ $(ipydir)/cffi $(call pybuild, tar xf, $<, cryptography-$(cryptography-version), ,\ Cryptography $(cryptography-version)) $(ipydir)/cycler: $(tdir)/cycler-$(cycler-version).tar.gz \ $(ipydir)/six $(call pybuild, tar xf, $<, cycler-$(cycler-version), ,\ Cycler $(cycler-version)) $(ipydir)/cython: $(tdir)/cython-$(cython-version).tar.gz \ $(ipydir)/setuptools $(call pybuild, tar xf, $<, Cython-$(cython-version)) \ && cp $(dtexdir)/cython.tex $(ictdir)/ \ && echo "Cython $(cython-version) \citep{cython2011}" > $@ $(ipydir)/entrypoints: $(tdir)/entrypoints-$(entrypoints-version).tar.gz \ $(ipydir)/setuptools $(call pybuild, tar xf, $<, entrypoints-$(entrypoints-version), ,\ EntryPoints $(entrypoints-version)) $(ipydir)/h5py: $(tdir)/h5py-$(h5py-version).tar.gz \ $(ipydir)/pypkgconfig \ $(ipydir)/setuptools \ $(ipydir)/cython \ $(ipydir)/mpi4py \ $(ipydir)/numpy \ $(ibidir)/hdf5 \ $(ipydir)/six export HDF5_MPI=ON; \ export HDF5_DIR=$(ildir); \ $(call pybuild, tar xf, $<, h5py-$(h5py-version), ,\ h5py $(h5py-version)) $(ipydir)/html5lib: $(tdir)/html5lib-$(html5lib-version).tar.gz \ $(ipydir)/webencodings \ $(ipydir)/six $(call pybuild, tar xf, $<, html5lib-$(html5lib-version), ,\ HTML5lib $(html5lib-version)) $(ipydir)/idna: $(tdir)/idna-$(idna-version).tar.gz \ $(ipydir)/setuptools $(call pybuild, tar xf, $<, idna-$(idna-version), ,\ idna $(idna-version)) $(ipydir)/jeepney: $(tdir)/jeepney-$(jeepney-version).tar.gz \ $(ipydir)/setuptools $(call pybuild, tar xf, $<, jeepney-$(jeepney-version), ,\ Jeepney $(jeepney-version)) $(ipydir)/keyring: $(tdir)/keyring-$(keyring-version).tar.gz \ $(ipydir)/setuptools_scm \ $(ipydir)/secretstorage \ $(ipydir)/entrypoints $(call pybuild, tar xf, $<, keyring-$(keyring-version), ,\ Keyring $(keyring-version)) $(ipydir)/kiwisolver: $(tdir)/kiwisolver-$(kiwisolver-version).tar.gz \ $(ipydir)/setuptools $(call pybuild, tar xf, $<, kiwisolver-$(kiwisolver-version), ,\ Kiwisolver $(kiwisolver-version)) $(ipydir)/matplotlib: $(tdir)/matplotlib-$(matplotlib-version).tar.gz \ $(ipydir)/python-dateutil \ $(ibidir)/ghostscript \ $(ibidir)/imagemagick \ $(ipydir)/kiwisolver \ $(ipydir)/pyparsing \ $(ibidir)/freetype \ $(itidir)/texlive \ $(ipydir)/cycler \ $(ipydir)/numpy $(call pybuild, tar xf, $<, matplotlib-$(matplotlib-version)) \ && cp $(dtexdir)/matplotlib.tex $(ictdir)/ \ && echo "Matplotlib $(matplotlib-version) \citep{matplotlib2007}" > $@ $(ipydir)/mpi4py: $(tdir)/mpi4py-$(mpi4py-version).tar.gz \ $(ipydir)/setuptools \ $(ibidir)/openmpi $(call pybuild, tar xf, $<, mpi4py-$(mpi4py-version)) \ && cp $(dtexdir)/mpi4py.tex $(ictdir)/ \ && echo "mpi4py $(mpi4py-version) \citep{mpi4py2011}" > $@ $(ipydir)/mpmath: $(tdir)/mpmath-$(mpmath-version).tar.gz \ $(ipydir)/setuptools $(call pybuild, tar xf, $<, mpmath-$(mpmath-version), ,\ mpmath $(mpmath-version)) $(ipydir)/numpy: $(tdir)/numpy-$(numpy-version).zip \ $(ipydir)/setuptools \ $(ibidir)/openblas \ $(ibidir)/unzip 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/installation/numpy-scipy.cfg"; \ $(call pybuild, unzip, $<, numpy-$(numpy-version),$$conf, \ Numpy $(numpy-version)) \ && cp $(dtexdir)/numpy.tex $(ictdir)/ \ && echo "Numpy $(numpy-version) \citep{numpy2011}" > $@ $(ibidir)/pip3: $(tdir)/pip-$(pip-version).tar.gz \ $(ipydir)/setuptools $(call pybuild, tar xf, $<, pip-$(pip-version), ,\ PiP $(pip-version)) $(ipydir)/pypkgconfig: $(tdir)/pkgconfig-$(pypkgconfig-version).tar.gz \ $(ipydir)/setuptools $(call pybuild, tar xf, $<, pkgconfig-$(pypkgconfig-version), , pkgconfig $(pypkgconfig-version)) $(ipydir)/pycparser: $(tdir)/pycparser-$(pycparser-version).tar.gz \ $(ipydir)/setuptools $(call pybuild, tar xf, $<, pycparser-$(pycparser-version), ,\ pycparser $(pycparser-version)) $(ipydir)/pyparsing: $(tdir)/pyparsing-$(pyparsing-version).tar.gz \ $(ipydir)/setuptools $(call pybuild, tar xf, $<, pyparsing-$(pyparsing-version), ,\ PyParsing $(pyparsing-version)) $(ipydir)/python-dateutil: $(tdir)/python-dateutil-$(python-dateutil-version).tar.gz \ $(ipydir)/setuptools_scm \ $(ipydir)/six $(call pybuild, tar xf, $<, python-dateutil-$(python-dateutil-version), ,\ python-dateutil $(python-dateutil-version)) $(ipydir)/pyyaml: $(tdir)/pyyaml-$(pyyaml-version).tar.gz \ $(ibidir)/yaml \ $(ipydir)/cython \ $(ipydir)/setuptools $(call pybuild, tar xf, $<, PyYAML-$(pyyaml-version), ,\ PyYAML $(pyyaml-version)) $(ipydir)/requests: $(tdir)/requests-$(requests-version).tar.gz \ $(ipydir)/certifi \ $(ipydir)/chardet \ $(ipydir)/urllib3 \ $(ipydir)/numpy \ $(ipydir)/idna $(call pybuild, tar xf, $<, requests-$(requests-version), ,\ Requests $(requests-version)) $(ipydir)/scipy: $(tdir)/scipy-$(scipy-version).tar.gz \ $(ipydir)/numpy 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/installation/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: $(tdir)/secretstorage-$(secretstorage-version).tar.gz \ $(ipydir)/cryptography \ $(ipydir)/jeepney $(call pybuild, tar xf, $<, SecretStorage-$(secretstorage-version), ,\ SecretStorage $(secretstorage-version)) $(ipydir)/setuptools: $(tdir)/setuptools-$(setuptools-version).zip \ $(ibidir)/python \ $(ibidir)/unzip $(call pybuild, unzip, $<, setuptools-$(setuptools-version), ,\ Setuptools $(setuptools-version)) $(ipydir)/setuptools_scm: $(tdir)/setuptools_scm-$(setuptools_scm-version).tar.gz \ $(ipydir)/setuptools $(call pybuild, tar xf, $<, setuptools_scm-$(setuptools_scm-version), ,\ Setuptools-scm $(setuptools_scm-version)) $(ipydir)/sip_tpv: $(tdir)/sip_tpv-$(sip_tpv-version).tar.gz \ $(ipydir)/astropy \ $(ipydir)/numpy \ $(ipydir)/sympy $(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: $(tdir)/six-$(six-version).tar.gz \ $(ipydir)/setuptools $(call pybuild, tar xf, $<, six-$(six-version), ,\ Six $(six-version)) $(ipydir)/soupsieve: $(tdir)/soupsieve-$(soupsieve-version).tar.gz \ $(ipydir)/setuptools $(call pybuild, tar xf, $<, soupsieve-$(soupsieve-version), ,\ SoupSieve $(soupsieve-version)) $(ipydir)/sympy: $(tdir)/sympy-$(sympy-version).tar.gz \ $(ipydir)/setuptools \ $(ipydir)/mpmath $(call pybuild, tar xf, $<, sympy-$(sympy-version), ,) \ && cp $(dtexdir)/sympy.tex $(ictdir)/ \ && echo "SymPy $(sympy-version) \citep{sympy}" > $@ $(ipydir)/urllib3: $(tdir)/urllib3-$(urllib3-version).tar.gz \ $(ipydir)/setuptools $(call pybuild, tar xf, $<, urllib3-$(urllib3-version), ,\ Urllib3 $(urllib3-version)) $(ipydir)/webencodings: $(tdir)/webencodings-$(webencodings-version).tar.gz \ $(ipydir)/setuptools $(call pybuild, tar xf, $<, webencodings-$(webencodings-version), ,\ Webencodings $(webencodings-version))