aboutsummaryrefslogtreecommitdiff
path: root/reproduce/src/make
AgeCommit message (Collapse)AuthorLines
2018-11-28Better control of shared library linkingMohammad Akhlaghi-30/+52
Until now we weren't explicity writing the full path of the dynamic libraries necessary for linking a program. But now with `-Wl,-rpath=$(ildir)' we ensure that the linker keeps the address of the dynamic libraries necessary for linking at linking time, not running time. Also, `pkg-config' is also built when preparing the basics. Several other minor corrections were made thanks to the great help of Raúl Infante Sainz.
2018-11-26Making lock file directoryMohammad Akhlaghi-2/+2
We had forgot to add the rule to build the lock file directory for downloading data. This has been corrected.
2018-11-26High-level dependencies build without system's PATHMohammad Akhlaghi-66/+127
The high-level dependencies are now built without having access to the system's PATH. To do this, all the necessary software that we aren't building ourselves are now brought into the installed `bin/' directory using a symbolic link to the corresponding software on the host. To do this, it was also necessary to increase the number of basic/low-level packages that we are building, and add several more (Diffutils and Findutils). With this process in place, we now have a list of the exact software packages that we are not building our selves, enabling easy building of all such dependencies in the future.
2018-11-26sh executable now available in PATHMohammad Akhlaghi-0/+15
While working on a research project using this pipeline, I noticed that we don't have any `sh' executable within our PATH. However, some programs (including Gnuastro's configure script, when it is checking for shells to use with Libtool) check and use it. So after building Bash, we also build an `sh' symbolic link to point to the built Bash executable.
2018-11-25Rule of tex/pipeline.tex now defined in paper.mk not top MakefileMohammad Akhlaghi-122/+143
To avoid redundant steps in the the top-level Makefile and make it simpler and easier to follow, we now define the base names of all the Makefiles in the `makesrc' variable of the top-level Makefile. `makesrc' is then used to define the Makefiles to include and the necessary TeX macros at the same time. This is much more clear and obvious than the previous case were we had to list the Makefiles and TeX macro files separately in the top level Makefile.
2018-11-25More generic naming conventionMohammad Akhlaghi-31/+33
Until now, we were keeping the input file within the reproduction pipeline's directories using the same name as the database/server. Now, we are using a short/summarized filename convention for the input dataset.
2018-11-25Pipeline now downloads and uses an input datasetMohammad Akhlaghi-18/+126
In most analysis situations (except for simulations), an input dataset is necessary, but that part of the pipeline was just left out and a general `SURVEY' variable was set and never used. So with this commit, we actually use a sample FITS file from the FITS standard webpage, show it (as well as its histogram) and do some basic calculations on it. This preparation of the input datasets is done in a generic way to enable easy addition of more datasets if necessary.
2018-11-22Ghostscript was updated to version 9.26Mohammad Akhlaghi-1/+1
A new version of the ghostscript package is now available, so the used version in the pipeline (previously 9.25) has been incremented to 9.26.
2018-11-21Changing of README files in checklistMohammad Akhlaghi-1/+0
When you point to this project, the `README.md' file is the default file that opens on GitLab and other online git repositories. Since a reproduction pipeline project is different from the actual pipeline, its best for the default text that opens to describe the paper, not the pipeline. The old `README.md' is also kept, but its now called `REAME-pipeline.md'.
2018-11-20Configure script passes if TeX Live was not finalizedMohammad Akhlaghi-82/+116
When there is a problem in creating the final TeX Live installation, the previous version of the pipeline would not understand and just finish! We would later have problems in building the paper. So the following series of steps were taken: to keep the recipes in a shorter and easier to understand way, the steps to install TeX Live are now one rule (that produce `.local/bin/texlive-ready-tlmgr' when its successful), and the steps to install the necessary packages are in another rule (that produce `.local/bin/texlive-ready' when its successful). When control comes back inside configure, if `.local/bin/texlive-ready' isn't there (something failed during the TeX Live installation, or building packages), then the whole TeX Live installation directory (`.local/texlive') will be deleted along with the two output files. This will help ensure that future steps can check the availablility of a working TeX Live in the pipeline.
2018-11-20Not including system's libraries in high-level dependenciesMohammad Akhlaghi-5/+8
The system's libraries are no longer used in building the higher-level dependencies. Also, thanks to Raul Infante Sainz, we found out that Bash's build script was still removing the extra directory information (not good!).
2018-11-20GNU Coreutils now built in basic dependenciesMohammad Akhlaghi-48/+46
GNU Coreutils are basic programs that can help in the configuration of higher-level programs. Because of that, it was a dependency of almost all software built in `dependencies.mk'. To make things more clear, easier to read and faster (when building in parallel), the building of Coreutils is now moved to the `dependencies-basic.mk' rules. There, it is built along-side Bash. Since `dependenceis-basic.mk' is run and completed before `dependencies.mk', with this, we can be sure that Coreutils is present by the time we want to build the higher-level programs. Also, Zlib is now added as a dependency of Git also (it is necessary for its build).
2018-11-19Libtool set as Gnuastro dependencyMohammad Akhlaghi-2/+3
Until now, we were building Libtool as a high-level `top-level-programs' software. But all tools that use the `./configure' script already have a version of Libtool in them. So ultimately the `libtool' in the PATH is not used. However, in the case of Gnuastro, we need libtool for running BulidProgram. So in effect, its a dependency of Gnuastro.
2018-11-19Removed GNU Binutils, CMake's built with its own bootstrapMohammad Akhlaghi-112/+118
When the C compiler is not GNU GCC, linking with GNU Binutils is going to cause problems. So until the time that we can include GCC into this pipeline, its best to avoid Binutils also. Also, for building CMake, we were relying on an installed CMake, but now, we are using its own `./bootstrap' script, so it can be built even if the host system doesn't have CMake. Also, for TeX Live, we are now setting a custom file as main target to avoid complications with symbolic links as targets in Make. Finally, when the user says they don't want to re-write an existing configuration file, no extra notices will be printed and the configure script will immediately start building programs.
2018-11-19Minor corrections for easy applying of checklistMohammad Akhlaghi-4/+8
After going through the checklist for starting a new project based on the pipeline, I noticed some parts that could be modified to be more clear. They are now applied.
2018-11-19Gzip's tarball in tar.gz instead of tar.lzMohammad Akhlaghi-27/+27
Until now, we were using a customized `tar.lz' tarball for Gzip. But on systems that don't have GNU Tar, this will cause a problem (non-GNU Tar doesn't recognize `.tar.lz'). So to keep things simple, we are using the customized gzip in `tar.gz' format. After the internal build of GNU Tar and Lzip, the default method of unpacking (`tar xf XXXXX.tar.XX') will work nicely on all the standard compression algorithms and we don't have to modify our commands based on the algorithm (nice feature of GNU Tar).
2018-11-18Updated README and README.md for new dependency building featuresMohammad Akhlaghi-1/+1
The two README files have been updated to explain the new feature of downloading and building dependencies.
2018-11-18Pipeline also installs TeX live and necessary packagesMohammad Akhlaghi-36/+102
Since the final product of the pipeline is a LaTeX-created PDF file, it was necessary to also have LaTeX within the pipeline. With this commit, TeX Live is also built as part of the configuration and all the necessary packages to build the PDF are also installed and mentioned in the paper along with their versions.
2018-11-17TeX Live also built within the pipeline (no extra packages yet)Mohammad Akhlaghi-11/+30
TeX Live is now also downloaded and built by the reproduction pipeline. Currently on the basic (TeX and LaTeX) source is built but no extra packages, so the PDF building will fail. We'll add them in the next commit.
2018-11-16Minor correction in shell's if statementMohammad Akhlaghi-2/+2
If the Makefile `$(static_build)' variable in '/reproduce/src/make/dependencies-build-rules.mk' isn't defined (by mistake), it will default to blank space, then the Shell will complain about a bad formatted operator (needing two operands). So an `x' was added before it and before `yes' which will allow us to safely pass such cases without a terrible crash.
2018-11-16Configure script checks if static libraries will be builtMohammad Akhlaghi-4/+53
The default Mac compiler has problems building static libraries. Since we are not yet building the GNU C Compiler as part of the pipeline, we'll have to rely on the host system's compiler. Therefore, a check is now added a the start of the configure script that will build a minimal program with the `-static' flag and if it fails, it will print a warning. Afterwards, none of the dependencies will be built with the `-static' flag.
2018-11-15Fixed small typo (missed a semi-colon)Mohammad Akhlaghi-2/+2
A semi-colon was missed in defining the link for `zlib'. It is now added.
2018-11-15Binutils and other compressors also included in pipelineMohammad Akhlaghi-68/+147
To have better control over the build, GNU Binutils, Bzip2, GNU Gzip, and XZ Utils have also been added to the pipeline. Some other minor cleanups and fixes were also implemented throughout the process.
2018-11-15Static linking flag added to LDFLAGS, using special Bash scriptMohammad Akhlaghi-22/+21
Until now, when a package was to be built statically, we were adding the `--static' option to `CFLAGS'. This was the wrong place to put it! It should be in the linking step (thus `LDFLAGS'). Also, based on Bash's configure script, we are now using the more generic form of `-static' (single dash, not double dash). On the other hand, the `--disable-shared' option isn't available in many of the packages and it is highly redundant with the `-static' option, so it has been removed to avoid an extra warning in such packages.
2018-11-14Lzip and Tar also built as basic dependenciesMohammad Akhlaghi-74/+88
To ensure the easy unpacking and building of the programs, Lzip and Tar are now also build during the initial setup phase. Some minor corrections were also applied to make things cleaner and smoother.
2018-11-14Configuration stops if a dependency cannot be builtMohammad Akhlaghi-43/+87
Until now, we used semicolons in Make's Call function definitions to build the programs with GNU build system or CMake. Therefore, if any step of the process failed, the rest would be ignorant to it and pass. Now, we use `&&' to separate the different processing steps. In this way, we can be sure that if any of them fails (during configuration, or building for example), the pipeline will also stop and not continue to the next command (in the same recipe). Since the two Make Call functions were identical in the two `dependencies-basic.mk' and `dependencies.mk', they are now in one file to be imported in both. This bug was found by Raul Infante Sainz.
2018-11-14./configure and building of Bash and Make with more basic toolsMohammad Akhlaghi-30/+132
After a test by Raúl Infante Sainz, we found out that the configure script and the Make script for Bash and Make are making too many assumptions on more recent versions of both. As a result, it couldn't be built. Therefore, the `configure' script was modified to not use more recent tools like `readlink' (to find the absolute address of a relative one). It was also re-organized to not have to read the configuration parameters from a text file. The parameters are directly read from the command-line and are written into the proper file afterwards. This removes the need to opening a text editor by the user (which also caused problems on Raúl's system). To fix the Make version issue, the building of Bash and Make are now done in a new Makefile (`reproduce/src/make/dependencies-basic.mk'). This file doesn't make many of the assumptions that were made in `dependencies.mk'. So it should hopefully work on any version of Make. To help in debugging, for now, the Makefile of configure, are asked to work on one thread (the `-j' option is commented in the `configure'). But after checks, we'll fix this.
2018-11-13Most library versions are now also checkedMohammad Akhlaghi-50/+87
All the libraries that define their version string as a macro in their headers are now also checked in `reproduce/src/make/initialize.mk'. Also, the CFITSIO tarball now follows the same versioning style as the rest of the tarballs: a script is added to convert the version string into what is included in the tarball.
2018-11-13Version of programs checked on each run of pipelineMohammad Akhlaghi-9/+32
The version of all programs is now checked in `reproduce/make/src/initialize.mk' and the pipeline won't complete if any of the program versions change from those listed in `reproduce/config/pipeline/dependency-versions.mk'. Since the pipeline is systematically checking all program versions, we don't need Gnuastro's `--onlyversion' option any more. So it (and all references to it) have been removed.
2018-11-12System's environment (including PATH) only available for LaTeXMohammad Akhlaghi-5/+12
The system's environment is now removed from the internal processing of the pipeline, except for LaTeX.
2018-11-12Corrected CFITSIO building recipeMohammad Akhlaghi-1/+1
We were mistakenly using GSL's name for the unpacked tarball.
2018-11-12Libcurl, Git, CMake, TIFF, Zlib also built at configure timeMohammad Akhlaghi-90/+142
During the configuration step several new programs that were necessary for a more complete controlled environment are now also downloaded and built statically.
2018-11-12Added tarball host webp addresses for downloadMohammad Akhlaghi-12/+15
The host web address of most of the necessary packages was blank (filled with `WWWWWWWWWWWWWWWW' as a place holder). They now point to the correct webpages.
2018-11-12Dependencies built at the start of the pipelineMohammad Akhlaghi-73/+407
To enable easy/proper reproduction of results, all the high-level dependencies are now built within the pipeline and installed in a fixed directory that is added to the PATH of the Makefile. This includes GNU Bash and GNU Make, which are then used to run the pipeline. The `./configure' script will first build Bash and Make within itself, then it will build All the dependencies are also built to be static. So after they are built, changing of the system's low-level libraries (like C library) won't change the tarballs. Currently the C library and C compiler aren't built within the pipeline, but we'll hopefully add them to the build process also. With this change, we now have full control of the shell and Make that will be used in the pipeline, so we can safely remove some of the generalities we had before.
2018-08-11Emphasized correcting name in copyright notice in checklistMohammad Akhlaghi-3/+3
While trying the checklist, I noticed that I had forgot to add my name after the copyright year and that `reproduce/src/make/paper.mk' still had my own name on it, the copyright notice also said `script' instead of `Makefile' which is now corrected.
2018-08-11Corrected copyright notice correction description in checklistMohammad Akhlaghi-0/+1
To be more generic (and avoid listing file names in `README.md'), a command is now used to find the files where the name has to be added to the copyright notice. Also, I noticed that `reproduce/src/make/paper.mk' lacked a placeholder name/email, so one was added.
2018-08-11Not using random distribution in demonstration plotMohammad Akhlaghi-2/+1
Different implementations of AWK may use different random number generators, so even setting the seed will not ensure a reproducible result. Because of this, the random plot may be different when the pipeline runs on different systems and this can confuse early users (its contrary to the exact reproducibility that is the whole purpose of this pipeline). The plot is just a simple X^2 plot, showing the squared value of the X axis on the Y axis. It is very simple, but atleast it will be identical on all systems. Also, there may be too many complicated things in the pipeline already for an early user, and its just a demonstration, so the easier/simpler, the better.
2018-08-11Added bash as a dependency to be checked at configure timeMohammad Akhlaghi-1/+1
While we had set the default Makefile SHELL to be bash, we weren't actually checking if `bash' is available on the system. With this commit, it is also checked at configure time.
2018-02-27More clear comments in paper.mkMohammad Akhlaghi-3/+7
The comments needed to be corrected to fit and explain the new logic (LaTeX being run within another directory).
2018-02-27Default PDF now uses PGFPlots and BibLaTeXMohammad Akhlaghi-7/+105
Making plots and including references are integral parts of a scientific paper. Therefore to demonstrate how cleanly they can be used within the pipeline, they are now used to produce the final PDF. To use PGFPlots a random dataset is made (using AWK's random function) and is plotted using PGFPlots. The minimum and maximum values of the dataset are also included in the text to further show how such calculations can go into the macros and text. For the references, the NoiseChisel paper was added as a reference to cite when using this pipeline along with the MUSE UDF paper I, which uses this pipeline for two sections. Following this discussion, citation is also discussed in `README.md` and the NoiseChisel paper is also added as a published work with a reproduction pipeline.
2018-02-27Copyrights and TeX management made more clearMohammad Akhlaghi-9/+26
Until now, the copyright statement was left empty for the users of the pipeline to fill. However, the files have already been created and have an author (or contributing authors) before the user starts using the pipeline. So the original authors of the files are added along with the year. The user can add their own name to the existing files under the "Contributing author" when they start and they will be the "Original author" of the new files they create. Several changes were also made to the TeX management: - LaTeX is run within a `reproduce/build/tex/build' directory now. Not in the top reproduction pipeline directory. This helps keep all the auxiliary TeX files and directories in that directory and keep the top reproduction pipeline directory clean. After the final PDF is built, a copy is put in the top reproduction pipeline directory for easy viewing. - The PGFPlots preamble was also made more useful, allowing the name of the `.tex' file to also be the name of the final plot that is produced. This is a GREAT feature, because without it, the TiKZ externalization would be based on order of the plots within the paper. But now, order is irrelevant and we can even delete the TiKZ files within the processing workhorse-Makefiles so the plots are definitly rebuilt on the next run. - The paper is now in a two-column format to be more similar to published papers. A tip on debugging Make was added to `README.md'.
2018-02-20Necessary programs checked at configure timeMohammad Akhlaghi-17/+1
The mandatory and optional (for example downloader) dependencies are now checked at configure time so users can know what they may be missing before the processing starts. Since its recommended to be run in parallel, it can be hard to find what you are missing after running the pipeline. As part of these checks, the program to use for downloading is now also set at configure time, it is only used as a pre-defined (in `LOCAL.mk') variable during Make's processing. A small title was also added to discus the pipeline architecture that will be filled in the next commit.
2018-02-15Gnuastro's memory mapping is now a local variableMohammad Akhlaghi-0/+4
As described in the commens above `MINMAPSIZE' of `LOCAL.mk.in', the amount of memory to map to HDD/SSD or keep in RAM is a local issue and not relevant to the pipeline's results. So it is now defined in a `gnuastro-local.conf' file. To keep the Makefiles clean, this file is created by the `./configure' script. To do this cleanly, the `./configure' script was also almost fully re-written with better functionality now.
2018-02-14clean-mmap now a dependency of cleanMohammad Akhlaghi-2/+2
Until now, Gnuastro's `mmap' files were included in the `rm' commands of `clean*' rules two times. But by setting `clean-mmap' as a dependency of `clean', it is now only necessary to have them in the Makefile once. This also makes the code much more cleaner.
2018-02-14Symbolic link to build directory now permanently addedMohammad Akhlaghi-24/+21
Managing this symbolic link as a prerequisite that may or maynot be defined just made the code too dirty. It is almost always needed, so it is now a super-high-level prerequisite (first dependency of the `all' target, even before the final PDF). In this way, we can be sure it is always built and that nothing else depends on it. If the user doesn't want it, they can simply remove it from the top `Makefile'.
2018-02-14Sanity checks added, local settings now in LOCAL.mk.inMohammad Akhlaghi-11/+57
The choice of whether or not to make a PDF is now also a local system issue, not a general pipeline issue. So it has been put in the new `LOCAL.mk.in' file which replaces the old `DIRECTORIES.mk.in'. All local settings (things that when changed should not be version-controlled) should be defined in this file. A sanity check was added to find if `./configure' has been run before `make' or not (using the `LOCAL.mk' file which is an output of the configuration step). If `LOCAL.mk' doesn't exist, an error will be printed informing the user that `./configure' needs to be run first. The configure script also provides more clear and hopefully better information on its purpose and what must be done. Since `make clean', it is executed even when `./configure' hasn't been run, it will only delete the build directory and its contents when local configuration has been done. A `distclean' target was also added which will first "clean" the pipeline, then delete the `LOCAL.mk.in' file. To allow rules like `make' to be run even if `BDIR' isn't defined (`./configure' hasn't been run yet), a fake `BDIR' is defined in such cases.
2018-02-08Initialization results now a .PHONY targetMohammad Akhlaghi-6/+10
Recently the filename keeping TeX macros for the versions was changed from `versions.tex' to `initialization.tex' (since it also contained the build directory). However, it was forgotten to correct the change of name in the `.PHONY' targets, so it was not being rebuilt every time. This is corrected now.
2018-02-07First commit to the reproduction pipeline templateMohammad Akhlaghi-0/+216
Let's start working on this pipeline independently with this first commit. It is based on my previous experiences, but I had never made a skeleton of a pipeline before, it was always within a working analysis. But now that the pipeline has a separate repository for its self, we will be able to work on it and use it as a base for future work and modify it to make it even better. Hopefully in time (and with the help of others), it will grow and become much more robust and useful.