aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorLines
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.
2019-01-20Corrected symbolic links to the extra pkgconfigs of ncursesMohammad Akhlaghi-6/+6
The targets of the links to have the extra common `ncurses' packages were previously just `pkgconfig/*.pc'! But this would only work when run within the `installed/lib' directory, not any other! So the targets for these packages now use an absolute address.
2019-01-19Some typos corrected in README-pipeline.mdMohammad Akhlaghi-3/+3
In a few cases, I had used a signle quote to close `. This would not display properly on the Gitlab webpage, so they are corrected.
2019-01-18Sanity check to run the Make with proper group permissionsMohammad Akhlaghi-73/+225
If the `./for-group' script is not used properly, it can lead to the whole pipeline being re-run. Therefore it is important to do a sanity check immediately at the start of Make's processing and inform the user if there is a problem. With this commit, `./for-group' exports the `reproducible_paper_for_group' variable which is used by both the initial `./configure' script, and later in each call to Make. The `./configure' script will use it to write a value in `reproduce/config/pipeline/LOCAL.mk' and Make will use it to compare with the value in `reproduce/config/pipeline/LOCAL.mk'. If there is an inconsistency, Make will not even attempt to build anything and will just print a message and abort.
2019-01-17Added Gnuastro in paragraph with all programsMohammad Akhlaghi-14/+15
Until now, Gnuastro was only mentioned in the first acknowledgments section, but not in the paragraph with all the program names. But these two are not mutually exclusive. All the software should be mentioned in the last paragraph and those that need special mention can be mentioned before it.
2019-01-17README-pipeline.md referenced in README.mdMohammad Akhlaghi-1/+3
Until now, there was no reference to `README-pipeline.md' within the `README.md' file. Since `README.md' is the first file that someone reads and the basic perpose and structure of the pipeline is described in `README-pipeline.md', it was necessary to bring it up there.
2019-01-15Many network-related libraries ignored in Wget and cURLMohammad Akhlaghi-10/+45
Wget and cURL depend on many network related libraries by default and if they are present on the host operating system, they will be linked with. This causes problems for the pipeline when these libraries are updated on the host system. With this commit, I went through the configure time options of both Wget and cURL and removed any library that didn't seem related to merely downloading of files (possibly with SSL, because we do build OpenSSL in the pipeline). Also, I noticed a new version of cURL has come, so that is also updated.
2019-01-14Links to the built libncursesw corrected after its buildMohammad Akhlaghi-5/+3
In a previous implementation, we were using a `target' variable to define the final target of several links, but with the new `sov' solution, we just used its base name. However, we had forgot to correct two instances of `target'. This is corrected now. Also, the step to clean all already built outputs of the NCURSES library has been simplified to a platform independent wildcard.
2019-01-14Better linking of different NCURSESW namesMohammad Akhlaghi-45/+50
On Mac OS systems, the full version number is not used in the filename given to libncurses. For example for version 6.1, it is called `libncursesw.6.dylib'. So a more generic and easier to maintain and read script is now used to be able to make links for both Mac and GNU/Linux systems. In short, instead of checking if we are in Mac every time, we just set the suffixes at the start based on the machine once as variables and use those to define the links.
2019-01-14Fixed call to sed in the standard GNU Build systemMohammad Akhlaghi-4/+5
The call to SED in `dependencies-build-rules.mk' had the file name before the options. On some verions of SED, this would cause problems. So the filename is now given after the options.
2019-01-14ConvertType's --colormap option added, necessary from Gnuastro 0.8Mohammad Akhlaghi-1/+1
The new `--colormap' option was added to the call to Gnuastro's ConvertType program. Since Gnuastro 0.8, ConvertType needs this option for converting a single-channel dataset to a color-supporting format.
2019-01-14GNU NCURSES and GNU Readline also built before GNU BashMohammad Akhlaghi-65/+179
Readline is a prerequisite of Bash and AWK, while NCURSES is a prerequisite of Readline. With the recent update of GNU Bash (and thus GNU Readline) on my host operating system, the pipeline crashed and I noticed this hole in the pipeline. In particular, AWK (which linked with Readline 7.0) would complain about not finding it and abort.
2019-01-10Minor typo correction in comment of for-group scriptMohammad Akhlaghi-3/+2
A minor typo was fixed to help in readability.
2019-01-10cURL added as a dependency of GitMohammad Akhlaghi-1/+3
Git needs cURL in its build. Until now, by chance cURL was always built before Git, but while building this pipeline on a system, Git was built before cURL and we found the problem. I also noticed that we hadn't added `Your name <your@email.address>' to the `for-group' script. This has been corrected now.
2019-01-10ccache ignored and disabledMohammad Akhlaghi-3/+16
ccache is a super annoying program in the context of the reproduction pipeline. On systems that use it, the `gcc' and `g++' that are found in PATH are actually calls to `ccache' (so it can manage their call)! Two steps have been taken to ignore and disable ccache (if it isn't ignored properly!): 1) when making symbolic links to compilers, if a directory containing `ccache' is present in the PATH, it is first removed, then we look for the low-level programs that we won't be building. 2) The `CCACHE_DISABLE' environment variable is set to 1 where necessary (with the other environment variables).
2019-01-10Wrapper script to allow groups working in the build directoryMohammad Akhlaghi-0/+87
On large projects, its often necessary to share the build directory between the various users of the pipeline. To simplify the process a `for-group' script is now added to the pipeline which is just a wrapper over the `./configure' and `.local/bin/make' commands to make sure that the group owner of the outputs and the permission flags are set properly.
2019-01-08Updated versions of core GNU programsMohammad Akhlaghi-7/+7
During the last month, several core GNU programs were updated, so their versions in the pipeline have also been updated.
2019-01-08When installing Bash, check if the sh link is already presentMohammad Akhlaghi-2/+7
After installing Bash, we would just blindly try to build the $(ibdir)/sh' symbolic link. But that could fail if it already existed. To make things clean, we now remove any link first before attempting to make a new one.
2019-01-02Copyright year updated to 2019Mohammad Akhlaghi-9/+9
Since the current implementation of this pipeline officially started in 2018, all the files only had 2018 in their copyright years. This has now been corrected to 2018-2019.
2019-01-01--with-pc-path for pkg-config configurationMohammad Akhlaghi-1/+1
By giving this option specifically at the build time of Pkg-config, we'll ensure that any package that uses pkg-config will first look into our locally installed build.
2018-12-31Updated Gzip and Gnuastro versions to standard buildsMohammad Akhlaghi-24/+25
Both Gzip and Gnuastro were being bootstrapped personally from their Git repository until now. But fortunately a new release of both came out last week and so to make things standard we are now using their standard tarballs. I also noticed that we weren't checking the version of Gzip or mentioning it in the acknowledgement section. This was also corrected.
2018-12-27Igoring .texlive* in the top build directoryMohammad Akhlaghi-0/+1
As part of the pipeline, `.texlive2018' may be created. So it is added to `.gitignore'.
2018-12-27Corrected typo in README-pipeline.mdMohammad Akhlaghi-1/+1
A closing double-quotation was missing in the command to read about Automatic variables in Make.
2018-12-19Removed temporary file for testing Bzip2's versionMohammad Akhlaghi-6/+7
Bzip2's verison is found differently from the other programs (because it writes no standard error, not standard output!). So a custom function is written for it which includes creating a temporary file. But we had forgot to delete that file after the version is found.
2018-12-18Forced linking of bin/sh and verbose Make in GitMohammad Akhlaghi-3/+4
While checking the build of the previous commit, a failure happened when linking `reproduce/build/dependencies/installed/bin/sh' with the built Bash (because the symbolic link already existed!). So a `-f' flag was added to `ln' to just change it without complaining. I also noticed that the Git build was also not in verbose mode. So this has also been corrected.
2018-12-18Gzip compiles in verbose mode to be clear and help in debugsMohammad Akhlaghi-1/+1
While we were testing this pipeline on a Mac OS system, we found and reported a problem in Gzip's build (bug #33689). However, since the Gzip build is not verbose, it was necessary to run its `make' with `V=1'. Generally, since almost all the programs are built in verbose mode (where you can see the compilation commands), we have also set this flag in any build to be clear and make it easier to spot bugs in the future.
2018-12-13Added extra note to the input datasets directoryMohammad Akhlaghi-1/+4
To make things clear for a user of the pipeline its mentioned that the given input directory is only read and nothing is written to it.