aboutsummaryrefslogtreecommitdiff
path: root/reproduce/src
AgeCommit message (Collapse)AuthorLines
2019-01-22Using fork of metastore to work when getpwuid isn't usableMohammad Akhlaghi-16/+36
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-2/+18
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-19/+130
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/+123
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-18Sanity check to run the Make with proper group permissionsMohammad Akhlaghi-12/+60
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-15Many network-related libraries ignored in Wget and cURLMohammad Akhlaghi-9/+44
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-46/+157
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-10cURL added as a dependency of GitMohammad Akhlaghi-1/+2
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-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-8/+8
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-2/+3
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-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-13Fixed numthreads in dependencies alsoMohammad Akhlaghi-7/+7
Some problems with using the number of threads in dependency building were fixed.
2018-12-11Passing -j build options to dependency building bottle-necksMohammad Akhlaghi-3/+10
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-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-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-22/+54
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.
2018-12-04Low-level links nolonger a prerequisite of programsMohammad Akhlaghi-11/+8
Until now the low-level links that we put in our internal installation from the operating system were a prerequisite of essentially all the basic dependencies. So a change in them would mean a full re-build of all the basic dependencies. But in building the basic dependencies, we already have the operating system's PATH and other environment variables. So unlike the higher-level dependencies, they don't need these links at all! With this commit, the `low-level-links' file is placed in `installed/bin' and is a top-level target of the basic dependencies build. In this way, if it is necessary to update/change to use something from the host operating system, we can simply delete it and run `./configure' again wihout having to re-build all the basic dependencies.
2018-12-04Link to `sw_vers' for Mac OS systems also createdMohammad Akhlaghi-0/+3
On Mac OS systems, the `sw_vers' executable prints information about the operating system. It is used by TeX Live to determine the necessary builds to download and install. We are thus importing it as a low-level tool in `dependency-basics.mk'.
2018-12-04Configure script for GNU Build system now an input argumentMohammad Akhlaghi-8/+10
Until now, we were checking the existance of the `configure' file and if it wasn't present, we would check for `config' (for OpenSSL which also has a lower-level "Configure" script that is called by the `config' script). But after two tests on Mac machines by Raul Infante Sainz and Cristina Martínez Lombilla, we found out that Mac Os's file names aren't case sensitive and thus the build wouldn't use `config', but `Configure'. Now, the exact configuration script can be specified as the 7th argument to the `gbuild' script. If it isn't given, the standard `configure' name will be used, but when it is, the given name will be used.
2018-12-03Checking Mac OS host for configuring OpenSSLMohammad Akhlaghi-2/+14
OpenSSL can't automatically detect the architecture of Mac OS systems, so as it suggests on its Wiki, it needs some help for doing that. With this commit, we are checking the build on Mac OS with the presence of `otool' (Mac OS's linker). If it's there, we'll add the OpenSSL configuration options suggested by OpenSSL's Wiki.
2018-12-03Added rpath in basic dependencies, remove input if download failsMohammad Akhlaghi-4/+8
Until now, we weren't including the `rpath' linking options to the basic dependencies. They are now added. Also, when the download of an input file fails for any reason, an empty file won't be replaced there any more.
2018-12-03Gnuastro's dependencies fully sorted by build timeMohammad Akhlaghi-4/+9
In the previous commit, I forgot to actually add some changes to the staging area before committing an pushing. So some of the changes discussed in the previous commit and now commited.
2018-12-03Gnuastro's dependencies sorted by length of buildMohammad Akhlaghi-1/+1
Make builds the dependencies of each package based on the order in the prerequisites list. So when building in parallel, it can greatly help the over-all build speed if larger packages are built first. Therefore the three larger Gnuastro dependencies are now placed at earlier places of the prerequisites.
2018-12-03Minor typo correction in building CoreutilsMohammad Akhlaghi-1/+1
We were missing a `\' at the end of the `$(call' function of Coreutils to connect the two lines. It has been fixed now.
2018-12-03Trusted CA certificates also downloaded for Wget usageMohammad Akhlaghi-9/+20
To enable easy downloading of HTTPS links with Wget (this pipeline's defaut downloader), we need a set of trusted CA certificates. Until the time that we can generate one ourselves, one generic set of trusted CA certificates is now downloaded like a tarball and placed in the OpenSSL configuration directory. With these CA certificates, within the pipeline we can now safely use the pipeline's own installed Wget.
2018-12-03Preference for shared library linkingMohammad Akhlaghi-45/+80
Some high-level programs like Wget and cURL need to be built in shared mode because they also include dynamic loading of libraries. Therefore, if we only build the lower-level libraries in static mode, our own build will be ignored and they will go and find the system's shared libraries to link with. Because of this, for now, we have manually set the `static_build' variable in the configure script to `no'. Also, if the downloader fails, we'll delete the output (an empty file in the case of Wget) because it interefers with a target definition.
2018-12-02Wget and OpenSSL now installed as a basic dependencyMohammad Akhlaghi-83/+134
The TeX Live installer needs Wget to operate smoothly, especially on recent Mac OS systems that don't have Wget pre-installed. Also, it would be good for the pipeline to have its own downloader. So with this commit, the pipeline also installs Wget and OpenSSL which is a dependency. Many other small changes/fixes were done in this process.
2018-12-01Improved TeXLive installation checksMohammad Akhlaghi-26/+48
Thanks to the check by Cristina Martínez, some corrections were made when we attempt to download and install TeXLive. Further checks and corrections will be in due time.
2018-11-30Downloading TeX Live tarball in general download ruleMohammad Akhlaghi-29/+26
Until now, we were downloading TeX Live's tarball within the same rule that unpacked it. But this causes problems for situations were it cannot be downloaded within the pipeline (and manually placed in the tarball directory). So now, the TeX Live downloader is treated like all the other downloaders.
2018-11-30cURL now also available as downloader with -L flagMohammad Akhlaghi-1/+5
The main reason I wasn't using cURL as a downloading tool was that I wasn't familar with how to ask it to follow a re-direct. But I just found out that its with the `-L' configure time option. So it is now added as a downloader tool to the pipeline.
2018-11-30Setting libgit2 to build statically in any caseMohammad Akhlaghi-2/+11
On the Libgit2 webpage, it has recommended to build it statically on Mac systems. By default we are doing this on Linux systems, but the `-static' flag failed on Mac. But apparently CMake might be able to deal with the issue in a different way.
2018-11-29File is made before calling flock (file locking)Mohammad Akhlaghi-0/+1
While testing on another computer, I noticed that to operate properly, the file given to `flock' must be created before it is called. This is a low-level difference (how the system treats files), so it wasn't apparent on my system. To fix it, we have added a `touch' command before it.
2018-11-29Remove extra lockdir target in download.mkMohammad Akhlaghi-1/+1
There was an extra `$(lockdir)' target in `download.mk'. This has been corrected.
2018-11-29Optional rpath link option, CMake search path set, static WCSLIBMohammad Akhlaghi-8/+9
Thanks to a test build on Raul Infante Sainz's Mac OS computer, we were able to address some issues and will be trying them after this commit: a) The LLVM linker on that computer didn't recognize `-rpath-link'! So at configure time we now check for it and only include it when the linker recognizes it. b) CMake corrections: 1) `CMAKE_LIBRARY_PATH' is now defined so CMake can look in our custom directory to find the necessary libraries. 2) To build and install the CMake built programs, we now simply use `make' and `make install'. c) To avoid particular linking problems with WCSLIB (which has special problems compared to other libraries), we are now deleting the shared library version (both on GNU and Mac systems).