aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorLines
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.
2018-12-13Minor update in checklist, incremented Gnuastro versionMohammad Akhlaghi-3/+3
A minor correction was made in the checklist (since we only have one `foreach' loop in the top-level Makefile) and also the version of Gnuastro was incremented.
2018-12-13Fixed numthreads in dependencies alsoMohammad Akhlaghi-7/+8
Some problems with using the number of threads in dependency building were fixed.
2018-12-11Updated the version of GitMohammad Akhlaghi-1/+1
The version of Git was updated to the most recent version (2.20.0).
2018-12-11Passing -j build options to dependency building bottle-necksMohammad Akhlaghi-3/+11
Some host Make systems may not allow automatic passing of the number of threads to sub-Makes. So while building the basic dependencies, we'll need to explicity add the `-j' option to the Make files that can benefit most from it: those that are dependencies of many others (Tar & Make), or are the last to build (Coreutils).
2018-12-11Removed extra line on Gnuastro from checklistMohammad Akhlaghi-1/+0
An extra line regarding the removal of Gnuastro in the checklist was removed (we don't report the Gnuastro version at the start of the paper any more).
2018-12-06Added generic copying/license file to topMohammad Akhlaghi-0/+674
As is common in most projects, a generic "COPYING" file has been added in the top directory to mark the license of the whole project.
2018-12-06Edited README.md to show example dependency repositoryMohammad Akhlaghi-3/+3
To help and be more clear a link to this pipeline's dependency repository has been added to `README.md'.
2018-12-06Gnuastro's special BuildProgram configuration file addedMohammad Akhlaghi-0/+9
Gnuastro's BuildProgram is a little special: it is actually built during the building of Gnuastro to keep important include and lib directory information and if someone wants to use BuildProgram, this information is necessary. So a special configuration is added for it in `reproduce/config/gnuastro'. This configuration file will allow users to set their own special configuration if they like, then it will load the installed BuildProgram configuration file.
2018-12-05CFITSIO configure script looks for our build of cURL on Mac OSMohammad Akhlaghi-3/+20
On Mac OS systems, CFITSIO doesn't use path to find the `curl-config' program (used by to give the library header and linking options), but uses an absolute path. Therefore the only way we can ask CFITSIO to look into our build of cURL is to manually change that absolute address. Also, since all the libraries are now linked dynamically, we don't need the extra linking flags when building WCSLIB (so it finds CFITSIO).
2018-12-05Updated README.mdMohammad Akhlaghi-15/+15
The README.md file was updated to reflect recent changes in the pipeline (especially regarding the downloader).
2018-12-05Corrected comment on downloader in configure scriptMohammad Akhlaghi-12/+5
The comment above the downloader section of the configure script was not up to date with how the pipeline uses a downloader during configuration and building now. So it was updated.
2018-12-05Configuring on multiple threadsMohammad Akhlaghi-2/+2
Until now we had constrained the configuration step to one thread to easily see failures on other systems. But with most tests passing successfully now, we are using the total number of available threads.
2018-12-05Forgotten line break comment addedMohammad Akhlaghi-6/+4
Mac OS's `install_name_tool' program's command is broken up into two lines, but I had forgotten to add a line-break so the command would fail. I didn't notice it myself because this error only shows up on Mac OS systems that actually need to parse it.
2018-12-04Shared library absolute address fixed in Libgit2 and WCSLIB on Mac OSMohammad Akhlaghi-26/+67
The build systems of Libgit2 and WCSLIB on Mac OS does not account for installation in non-standard addresses: `Libgit2' keeps the absolute address of its build directory (not the installation directory) and WCSLIB doesn't write any absolute address at all (so the system uses the first one it finds). To address these issues, we are now using Mac OS's `install_name_tool' program to fix the absolute path within the installed shared library. Since the version of the library is actually present in its shared library name, in `dependency-versions.mk' we have also separated these two libraries so later when their version is changed, we are careful in correcting the shared library name also.
2018-12-04Removed already built symbolic links to OS toolsMohammad Akhlaghi-0/+2
`ln' will complain about a link already existing. So to avoid having to rely on the `-f' option (which may not be portable across systems), when we are making symbolic links to the OS tools that we won't be building, we now remove the file if it exists, then make a new symbolic link.