aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorLines
2019-03-18Reseting path in script to make symbolic links to system programsMohammad Akhlaghi-8/+10
Until recently, there was no problem with the `makelink' script of `dependencies-basic.mk' because it was called on separate recipe lines (and thus separate shells). But recently we added a call to it within a single shell (for GCC on Mac OS systems). So a previous call to it would effect the next call. To fix this, in this commit, we are re-setting PATH to its original value after each call finishes.
2019-03-18No Bzip2 shared libraries on macOS systemsMohammad Akhlaghi-3/+9
Bzip2 has a special/separate Makefile to build shared libraries which didn't work on a macOS. So with this commit, we are allowing Bzip2 shared libraries only on macOS systems. Also, I noticed that macOS's `sed' doesn't have the `-i' option (to do the change in place within the same file). So we are using `-e' to write the changed Makefile in a temporary directory, then rename that.
2019-03-11Not checking software versions in initialize.mkMohammad Akhlaghi-83/+84
Until now, we were actually running all the programs to check their versions during initialization. But now that the number of programs has increased, this can be slow. With this commit, we simply report the version as a constant string. Maybe later, we can follow the strategy of the TeX Live packages and write them all at configure time.
2019-03-11for-group gives write permission to all built software in the endMohammad Akhlaghi-0/+16
Since the `install' script also sets permissions manually, the permissions that we define in `for-group' don't usually affect the installed files. Therefore the installed files of one user can't be modified/deleted by another. With this commit, after for-group finishes configuration, it also adds the write flag for all group members in the whole installation directory.
2019-03-08For-group script can allow to arguments to Make callMohammad Akhlaghi-1/+1
Until now the `./for-group' script would only add one argument to the Make call, but in some situations, you need a second argument is well. With this option, any possible fourth argument to `./for-group' is passed to Make.
2019-03-08Using system's GCC on MacMohammad Akhlaghi-49/+63
We still have a few problems with building GCC on a MacOS system. To allow using the pipeline on this operating system, until we find the solution, GCC is only built on non-Mac systems. On Mac, we'll just make a symbolic link to the host's executables.
2019-03-07Several new Python packages added for full buildMohammad Akhlaghi-12/+77
To ensure that we have all the necessary Python dependencies, I done an offline build and noticed that several packages were also necessary for the `./configure' step to finish (`libffi', `asn1crypto', `cffi', `jeepney', `pycparser' and `secretstorage'). With this commit they are added.
2019-03-06Reseting Python environment variables also when building PythonMohammad Akhlaghi-5/+31
Until now, we were only resetting the Python environment variables in the actual processing Makefiles, not in the Makefile that build Python and its modules. They are now added there also.
2019-03-06Imported work on many basic Python modulesMohammad Akhlaghi-112/+542
With the help of Raul, we were able to build many higher-level Python packages to enable the installation of packages like Matplotlib and Astroquery. With this commit, that work is being merged into the master branch.
2019-03-06Astroquery, astropy, matplotlib and numpy are now in the pipelineRaul Infante-Sainz-15/+48
Until this commit, we had some of the python packages intalled but they did not work properly because of the `PYTHONPATH' variables. That is, the pipeline's `python' was the `python' of the system instead of the pipeline's `python'. With this commit this issue has been fixed by setting the correct `PYTHONPATH'. In this commit we also modify the installation of `bzip2' because `CMake' was complaining about some libraries built statically.
2019-03-01Elaboration in README-hacking.mk's future improvements sectionMohammad Akhlaghi-30/+43
This section was a little outdated and since then, a more clear/exact image of using the Nix experience for the reproducible paper template has been added.
2019-02-28Typo correction in libpng installationRaul Infante-Sainz-1/+1
In the libpng installation there was `ilibdir' instead of `ilidir'.
2019-02-28GNU GCC is now in the pipelineRaul Infante-Sainz-55/+65
Until now, the pipeline was not installing its own `gcc' but using the system one by making a symbolic link. With this commit, GNU GCC has been added into the pipeline. Right now the installation does not work on Mac OS system beause of some conflicts with `clang', but in principle it should work on GNU Linux distributions.
2019-02-28Python installation and related packages have been splitRaul Infante-Sainz-6/+42
Until now the installation of Python and its packages (numpy, astropy, astroquery, etc.) were done in the same `makefile'. With this commit the installation of Python and its packages have been split and now it is independent of the other programs. The installation of all Python packages needs to be written explicitely because pip is not used anymore.
2019-02-28Git hooks for metastore check for the existance of metastoreRaul Infante-Sainz-5/+15
Until now, once the Git hooks have been installed (after the installation of Metastore), if metastore doesn't exist (for example by manually deleting the build directory for a re-build with same configurations as before) we can't run `git commit' and `git checkout' will print an ugly warning. With this commit, the two Git hooks check for the existance of Metastore and if it doesn't exist, they won't do anything.
2019-02-23GCC build rule doesn't depend on BinutilsMohammad Akhlaghi-17/+16
In an attempt to test the GCC build rule (without Binutils, because its too architecture dependent), all the necessary dependencies were moved to GCC (from `ld'). Also `fortran' was also added to the languages supported by GCC. This rule built GCC 8.2.0 nicely on my GNU/Linux system. But `gcc' is still not a final target to built, so the rule is being ignored for now.
2019-02-21Matplotlib is now in the pipelineRaul Infante-Sainz-5/+69
As matplotlib is a general package for plotting and it is widely used in science, we have added it to the pipeline. When installing a dependency of matplotlib `python-dateutil', we found a conflict in the download of the tarball. This is because the name has a dash (-) in the middle. In addition, the name starts with 'python', so it is the same as the python itself. Now it is possible to install any package with any name, just adding an elif in before the URL direction.
2019-02-20Installed astroquery in the pipelineRaul Infante-Sainz-50/+332
All dependencies for building astroquery package have been done. Until nowthe Python dependencies were built in the same Makefile as the high level libraries and programs. But, because astroquery has many dependencies we split the Python and Python packages installation in a new Makefile. The installation of differents packages are done using Python and not pip, because we found some problems when doing it with pip. Apparently there are some interferences between the packages installed by the pip of the system and the pip installed as part of Python in the pipeline.
2019-02-20Pipeline's Bash and AWK deleted when re-building ncursesMohammad Akhlaghi-0/+7
As in all programs, the build process of ncurses depends on the running shell (Bash) and AWK. At the start of the building of ncurses, we remove its library. But Bash and AWK depend on ncurses to run (this creates a circular dependency). Therefore its necessary to remove the Bash and AWK executables when re-building ncurses. This bug was found by Raul Infante Sainz.
2019-02-13Imported recent work on building Python within the pipelineMohammad Akhlaghi-68/+225
Raul Infante-Sainz added the building of Python (along with the Numpy and Astropy packages) into the pipeline. That work is now being merged into the main pipeline branch. There was only this small problem that needed to be fixed: the Python tarball's name after unpacking is actually `Python-X.X.X' (with a captial P), not `python-X.X.X'. This has been corrected with this merge.
2019-02-13Minor cosmetic corrections in software tarball downloading ruleMohammad Akhlaghi-3/+3
The zip program wasn't placed correctly (in alphabetical order) and its URL command had the wrong indentation! Both have no effect at all on the processing and are only cosmetic (to help in readability).
2019-02-13Astropy installed in the pipelineRaul Infante-Sainz-78/+209
Astropy was added and one very important thing is that we have to use the pypi tarball (https://pypi.org/) (which is bootstrapped) and not the github tarball.
2019-02-07Numpy is now in the pipelineRaul Infante-Sainz-3/+21
Python needs some packages to be really useful. Numpy is the most important package for using Python and a lot of other packages depend on it. In this commit we add numpy to the pipeline. The tarball of numpy right now is fossies.
2019-02-07Python is now in the pipelineRaul Infante-Sainz-2/+11
Many projects use Python so it is necessary include it in the pipeline.
2019-02-06Minor correction in description of downloading wrapperMohammad Akhlaghi-3/+3
In the example running code of the wrapper script, I had just written `./download-multi-try', but this script is meant to be run from the top of the project directory. This could cause confusion. So the example script now starts with `/path/to/download-multi-try'.
2019-02-06Removed .sh suffix in download wrapper scriptMohammad Akhlaghi-2/+4
We don't have a `.sh' suffix in the other scripts of `reproduce/src/bash', so it was also removed from this script.
2019-02-06Wrapper script for multiple attempts at downloading inputsMohammad Akhlaghi-2/+110
Until now, downloading was treated similar to any other operation in the Makefile: if it crashes, the pipeline would crash. But network errors aren't like processing errors: attempting to download a second time will probably not crash (network relays are very complex and not reproducible and packages get lost all the time)! This is usually not felt in downloading one or two files, but when downloading many thousands of files, it will happen every once and a while and its a real waste of time until you check to just press enter again! With this commit we have the `reproduce/src/bash/download-multi-try.sh' script in the pipeline which will repeat the downoad several times (with incrasing time intervals) before crashing and thus fix the problem.
2019-02-06Better management for .tex directories to build from tarballMohammad Akhlaghi-85/+120
In order to collaborate effectively in the project, even project members that don't necessarily want (or have the capacity) to do the whole analysis must be able to contribute to the project. Until now, the users of the distributed tarball could only modify the text and not the figures (built with PGFPlots) of the paper. With this commit, the management of TeX source files in the pipeline was slightly modified to allow this as cleanly as I could think of now! In short, the hand-written TeX files are now kept in `tex/src' and for the pipeline's generated TeX files (in particular the old `tex/pipeline.tex'), we now have a `tex/pipeline' symbolic-link/directory that points to the `tex' directory under the build directory. When packaging the project, `tex/pipeline' will be a full directory with a copy of all the necessary files. Therefore as far as LaTeX is concerned, having a build-directory is no longer relevant. Many other small changes were made to do this job cleanly which will just make this commit message too long! Also, the old `tarball' and `zip' targets are now `dist' and `dist-zip' (as in the standard GNU Build system).
2019-02-05Ability to package project into tarball or zip fileMohammad Akhlaghi-26/+134
With this commit, it is now possible to package the project into a tarball or zip file, ready to be distributed to collaborators who only want to modify the final paper (and not do the analysis technicalities), or for uploading to sites like arXiv, or online LaTeX sharing pages.
2019-02-05for-group: better check of group name and fixed make argumentMohammad Akhlaghi-5/+9
A few issues came up while testing the `for-group' script in one of the projects based on this pipeline that are being fixed with this commit: 1) We are ultimately using the `sg' command to use the specified group, not `chgrp'. So in cases where `chgrp' has problems, this would cause a wrong error. So for the test of the given group's existance, we are now directly calling `sg'. 2) In the call to `make' we were mistakenly giving make the `$2' (which is `make' on the command-line) argument. Since `./for-group' now takes the group name as its first argument, this should have been `$3'. 3) To help in readability, and also allow for group names with a space, `reproducible_paper_group_name' is now defined and exported before the final call to `sg'.
2019-02-01Group name is now part of the local configurationMohammad Akhlaghi-111/+90
Until now, the group name to build the project actually went into the Git source of the project! This doesn't allow exact reproducibility on different machines (where the group name may be different). With this commit, the `for-group' script has been modified to accept the group name as its first argument and pass that onto `configure' and Make. This is much better now, because not only the existance of a group installation is checked, but also the name of the group. It also made things simpler (in particular in `LOCAL.mk.in').
2019-02-01Configure script ending message now accounts for group buildingMohammad Akhlaghi-1/+6
Until now, the `./configure' script would only print the `.local/bin/make -j8' command. But when configured for groups, a different command should be used. It now does a check just before running and suggests the proper command.
2019-02-01Configure script now runs under /bin/bashMohammad Akhlaghi-1/+1
Until now it was `/bin/sh', but on Debian systems, this can cause problems because by default they use a much weaker shell (dash) which doesn't recognize functions.
2019-01-24Updated fork of metastore allows building on macOSMohammad Akhlaghi-4/+20
I recently found another fork of metastore that allows its build on macOS systems (https://github.com/mpctx/metastore). So I forked it into my own fork with several other corrections (mostly cosmetic!), so it is now much better suited for this pipeline. Raul Infante-Sainz has already tested the building of metastore on his macOS. In a previous test, we also noticed that libbsd should not be built on Mac systems, so it is now a conditional prerequisite to metastore.
2019-01-23Removing files ending with a ~ in the git checkout hookMohammad Akhlaghi-3/+18
While editing files, some editors create temporary `~' files that can cause problems in metastore's ability to delete their host directory if its not on the other branch. With this commit, a `find' call was added to the post checkout Git hook to remove such temporary files before metastore is called. Also, some comments were added to both git hooks to make them easier to understand for a beginner.
2019-01-23New note to checklist for including pipeline-origin in new cloneMohammad Akhlaghi-0/+16
I needed to take these steps in a few occasions on a project I am building over this pipeline. This will commonly happen when a team starts using this pipeline, so it was added to make things easier.
2019-01-23README-pipeline.md is now called README-hacking.mdMohammad Akhlaghi-1/+1
To be more generic and recognizable, the `README-pipeline.md' script was renamed to `README-hacking.md'. In essence, it is just that: to hack the existing pipeline for your own project. We follow a similar naming convention in many GNU software.
2019-01-23Corrections in metastore's git hooksMohammad Akhlaghi-3/+3
Two corrections were made in the Git hooks of Metastore. 1) The shebang at the start of the scripts now uses the absolute adress of our installed bash, not the relative `.local/bin/bash'. Note that it is possible to use Git within subdirectories and in that scenario, the `.local' will fail. 2) The `$$user' section was removed from the command to find the user's group. With the user as an argument, `groups' may print the user's name first, then their list of groups. When this happens, the script would be just repeating the user's name. But the raw `groups' command will list the groups of the running user.
2019-01-23Corrected check for patchelf when building BashMohammad Akhlaghi-6/+9
Until now, the check to see if the patchelf program should be used or not (for GNU/Linux vs. Mac installations) was mistakenly added over the step that we define the `sh' symbolic link, not over the call to patchelf. This is corrected with this commit.
2019-01-22Updated to newly modified version of metastoreMohammad Akhlaghi-9/+4
In this version, too many extra notices (just regarding a change from branch to branch) are not printed with `-q'. Instead only a one line statement is printed that it is saved or applied.
2019-01-22Not checking metastore's version temporarilyMohammad Akhlaghi-2/+7
Until we see what happens with the pull request of our suggested features in metastore, its version isn't written directly into the executable, so we won't actually check it, but write the version directly into the paper.
2019-01-22Using fork of metastore to work when getpwuid isn't usableMohammad Akhlaghi-17/+37
After testing the built of Metastore on a server, I noticed that because its `/etc/passwd' doesn't have the list of users, the `getpwuid' call within metastore failed and wouldn't let it finish. So I looked into the code and was able to implement a solution to this problem by adding two options to it for default values for the user and group. Also, file attributes are not necessary in our (current) use case of metastore and caused crashes on our server, so they are also disabled.
2019-01-21Libbsd added as a dependency of MetastoreMohammad Akhlaghi-19/+37
Metastore depends on `bsd/string.h' to work properly (atleast on GNU/Linux systems). The first system I tried building with had that library, so I didn't notice! With this commit, we also build `libbsd' as part of the pipeline. Also, I couldn't find libbsd's version in any of its installed headers, so like Libjpeg, we can't actually check and will directly write our internal version into the paper.
2019-01-21Metastore package now installed to allow keeping file meta-dataMohammad Akhlaghi-35/+147
The pipeline heavily depends on file meta data (and in particular the modification dates), for example the configuration-Makefiles within the pipeline are set as prerequisites to the rules of the pipeline. However, when Git checks out a branch, it doesn't preserve the meta-data of the files unique to that branch (for example program source files or configuration-Makefiles). As a result, the rules that depend on them will be re-done. This is especially troublesome in the scenario of this reproducible paper project because we commonly need to switch between branches (for example to import recent work in the pipeline into the projects). After some searching, I think the Metastore program is the best solution. Metastore is now built as part of the pipeline and through two Git hooks, it is called by Git to store the original meta-data of files into a binary file that is version controlled (and managed by Metastore).
2019-01-21Separate LaTeX build directory for each user in group scenarioMohammad Akhlaghi-7/+43
When building in group mode, users can manage them selves to work on independent analysis steps and thus not cause conflicts. However, until now, there was no way to avoid conflicts in building the final paper. To fix this problem, when we are in group mode, the pipeline will create a separate LaTeX build director for each user and also a separate PDF file for each user. This will ensure that their compilations don't conflict.
2019-01-21Patchelf also built to manually set RPATH in Bash and AWKMohammad Akhlaghi-92/+124
With the current build system, Bash and AWK don't write RPATH into the executables. This causes many problems in the pipeline (for example when using the `$(shell)' function in Make which doesn't have `LD_LIBRARY_PATH'). After consulting the Bash and Make mailing lists, so far, the best solution was to use the Patchelf program to manually write RPATH in these executables. With this commit, Patchelf is now installed in the pipeline and used in Bash and AWK to fix this problem.
2019-01-20Cleaner, more managable, build of BashMohammad Akhlaghi-6/+10
The build of bash has been made a little cleaner to help in readability and management of the code.
2019-01-20Removed webp and zstd as dependencies of libtiffMohammad Akhlaghi-1/+2
The TIFF library can optionally depend on webp [1] and zstd [2]. But these aren't commonly used in scientific datasets so to avoid a longer build and managing of extra dependencies (atleast for now!), we are disabling them. The problem is that they cause a dependency on the host system and if they are updated/removed, the relevant pipeline programs will crash. [1] https://en.wikipedia.org/wiki/WebP [2] https://en.wikipedia.org/wiki/Zstandard
2019-01-20Corrected copyright typo in dependencies-basic.mkMohammad Akhlaghi-1/+2
In the previous commit, the copyright year and owner were mistakenly modified. They are corrected now.
2019-01-20Bash is built with its own libreadline, not using oursMohammad Akhlaghi-104/+113
While working on a pipeline based on this, I noticed many linking errors of our installed Bash, complaining that it can't link with libreadline. This was while readline was present in the proper directory and the Bash within a recipe would work properly. After some investigation, I found out that this is because Make's `foreach' function (which was used to define the targets) was apparently calling Bash without setting `LD_LIBRARY_PATH', causing this error. To avoid such sitations, Bash now uses its internal build of readline and we no longer ask it to link with the installed readline.