Age | Commit message (Collapse) | Author | Lines |
|
Until now, we were assuming that the users would just clone the project in
Git. But after submitting arXiv:1909.11230, and trying to build directly
from the arXiv source, I noticed several problems that wouldn't allow users
to build it automatically. So I tried the build step by step and was able
to find a fix for the several issues that came up.
The scripting parts of the fix were primarily related to the fact that the
unpacked arXiv tarball isn't under version control, so some checks had to
be put there. Also, we wanted to make it easy to remove the extra files, so
an extra `--clean-texdit' option was added to `./project'.
Finally, some manual corrections were necessary (prior to running
`./project', which are now described in `README.md'. Most of the later
steps can be automated and we should do it later, I just don't have enough
time now.
|
|
The description of arXiv:1909.11230 was slightly modified to be in the same
format as the other papers.
|
|
This paper was published on arXiv today and is a good example for people to
see the application of this system in practice.
|
|
Until now, the pipeline was instructed to only ignore the current temporary
project distribution directory. So if there were directories from previous
builds, they were wrongly included in the current tarball.
With this commit, we don't just ignore the directory of the current
distribution, but generally, all directories starting with `paper-v*'.
|
|
Until now customizing it was a little more detailed, for example the
copyright statement wasn't generic and was about "this template". So the
user would have to correct it.
With this commit, the copyright statment just says "this project", so it
can apply to the raw template and also any customization of it. Also, some
minor edits were made in the various parts of the text to make it more
clear.
|
|
Users that are not familiar with the file structure of the project may
specify the current directory (to-level source directory) as their
build-directory. This will cause a crash right after answering the
questions, where `rm' will complain about `tex/build' not being deleted
because it exists as a directory.
To avoid such confusing situtations, the configure script now checks if the
build directory is actually a sub-directory of the source. If it is, it
will complain with a short message and abort. Also, a `CAUTION' statment
has been put in the initial description, right ontop of the question.
This bug was reported Carlos Allende Prieto and David Valls-Gabaud.
|
|
Until now, when the commit was tagged, `git describe' would just print the
tag and no longer the commit checksum. This is bad because the checksum is
a much more robust way to confirm the point in history.
With this commit the `--long' option has been added to `git describe' to
fix this issue. From now on, when we are on a tag, it will print the tag
followed by a `-0-' and the first characters of the checksum.
|
|
`./project make dist' will package all the LaTeX-specific files (and
analysis source files) into one `tar.gz' file that is ready to upload to
servers like arXiv. However, it wasn't updated for some time, so running it
would complain about not having a `configure' script in the top of the
project.
With this commit, it now works with the new file-structure of the project
and also copies all the BibLaTeX source files and `paper.bbl' into the top
tarball directory, which allows arXiv to build the paper as intended.
The output of `./project make dist' has been uploaded and tested on arXiv
and it is built by arXiv perfectly.
Also, a short description of all the special `make' targets was added to
the output of `./project --help'.
|
|
After a re-read on Gitlab, it has been slightly edited to be more clear.
|
|
When you want to publish your project, it is very convenient to have a
single file that contains the whole history. So a tip is added to
`README-hacking.md' that describes how to do this with `git bundle'.
|
|
Until now, we weren't explicitly asking for BibLaTeX to build the citations
with only initial of the author's given names. Therefore when one BibTeX
entry had a full given name and another had only initials, this would also
be reflected in the paper's bibliography.
With this commit, the `giveninits=true' option is given to BibLaTeX to
always only print the initial character of an author's given name.
|
|
Until now the SExtractor BibTeX entry has the first-name and family name in
the same field, while the family-name should be in curly braces. Also, it
was missing an ADS URL. So the default ADS generated BibTeX entry for
SExtractor is now used instead of the old one.
|
|
In some cases, users of the template may not need the other template
headers, they may only want `preamble-biblatex.tex'. But `xcolor' needs to
be loaded before being able to load the various colors we use in the
references. So to be self-consistent, it is loaded.
Also, the default style was also printing the month of the publication
which is not common. So a line was added to clear the `month' field before
building the Bibliography.
|
|
New versions of astropy, bash, cmake, curl, findutils, gawk, gcc,
ghostscript, git, make, gsl had recently come so they are updated with this
commit.
About GNU Findutils and GNU Make: I was bootstrapping (building the tarball
of) these two separately separately because their standard tarball release
had problems on some systems. Both have been updated now so I am no longer
using my own webpage as their main URL.
A special note about GNU Make. I just noticed that during bootstrapping,
GNU Make would use the fixed version string of `4.2.90' for any commit!!!
But fortunately they have officially released their 4.2.90 version, so we
are safely using their own webpage. The only difference is the compression
format. My old bootstrapped build was `tar.lz', but the standard release is
`tar.gz'.
Also, all the basic programs (installed in `.local/bin') in `basic.mk' are
now existance-only dependencies (after a `|'). Because later programs just
use them at a very basic level, so there is no need to rebuild everything
when Bash gets updated for example.
|
|
Until this commit, `fpack' and `funpack' were not installed by default
with the installation of CFITSIO. It is necessary to explicity do a
`make fpack' and `make funpack' to have them installed. With this
commit, these two programs have been added.
|
|
Until this commit, the name of the variable for `beautifulsoup4'
checksum was wrong, and because of that, it was not able to install it.
With this commit, `beautifulsoup-checksum' has been replaced for
`beautifulsoup4-checksum' in the `reproduce/software/make/python.mk'
Makefile, and the problem has been fixed. This was not noticed
previously because this Python package is only installed when some high
level programs are requested to be installed.
With this commit the version of `imagemagick' program has been also
updated because the previous version is not available in the official
website anymore.
|
|
When trying to install `libgit2' on my macOS system, it complains about
not finding `_iconv*' functions! But apparently `libgit2' has its own
implementation of `libiconv' that it uses if it can't find `libiconv' on
macOS. So, the solution to this problem was to add `-DUSE_ICONV=OFF' to
the configuration options of `libgit2'.
I reported this issue that now is fixed thanks to the help of Mohammad
Akhlaghi.
|
|
Until now, in version 3.0.1, mpi4py couldn't be built with the most recent
version of OpenMPI. However, after trying the next version (3.0.2), I
noticed that it builds successfully without a problem.
|
|
After making the previous commit, I noticed an extra line (redundantly
defining a wrong `BASH_ENV') that should have been deleted. It has been
corrected.
|
|
Until now the only way to define the environment of the Make recipes was
through the exported Make variables (mostly in `initialize.mk' for the
analysis steps for example). However, there is only so much you can do with
environment variables! In some situations you want slightly more
complicated environment control, like setting an alias or running of
scripts (things that are commonly done in the `~/.bashrc' file of users to
configure their interactive, non-login shells).
With this commit, a `reproduce/software/bash/bashrc.sh' has been defined
for this job (which is currently empty!). Every major Make step of the
project adds this file as the `BASH_ENV' environment variable, so the shell
that is created to execute a recipe first executes this file, then the
recipe. Each top-level Makefile also defines a `PROJECT_STATUS' environment
variable that enables users to limit their envirnoment setup based on the
condition it is being setup (in particular in the early phase of
`basic.mk', where the user can't make any assumption about the programs and
has to write a portable shell script).
|
|
After adding the libiconv library to the template, the C++ library uses
three of its functions (`libiconv', `libiconv_open' and
`libiconv_close'). However, it doesn't explicity link with it inside its
shared library!
I tried by exporting `LIBS=-liconv' before the GCC configure script but it
crashed as soon as it went on to the second GCC building stage (because
this environment variable was no longer present there). I also tried adding
the C++ configure option of `--enable-cstdio' to the GCC configure options
(so it doesn't use iconv according to the manual), but it made no change.
With this commit, as a brute-force solution, `patchelf --add-needed' is run
on the installed `libstdc++.so', so `libiconv.so' is explicitly included
inside the `libstdc++' shared library.
This bug was found by Roberto Baena Galle while trying to load Matplotlib
(which needed the C++ library).
This fixes bug #56702.
|
|
Until now, there was no check on the integrity of the contents of the
downloaded/copied software tarballs, we only relied on the tarball
name. This could be bad for reproducibility and security, for example on
one server the name of a tarball may be the same but with different
content.
With this commit, the SHA512 checksums of all the software are stored in
the newly created `checksums.mk' (similar to how the versions are stored in
the `versions.mk'). The resulting variable is then defined for each
software and after downloading/copying the file we check to see if the new
tarball has the same checksum as the stored value. If it doesn't the script
will crash with an error, informing the user of the problem.
The only limitation now is a bootstrapping problem: if the host system
doesn't already an `sha512sum' executable, we will not do any checksum
verification until we install our `sha512sum' (as part of GNU
Coreutils). All the tarballs downloaded after GNU Coreutils are built will
have their checksums validated. By default almost all GNU/Linux systems
will have a usable `sha512sum' (its part of GNU Coreutils after all for a
long time: from the Coreutils Changelog file atleast since 2013).
This completes task #15347.
|
|
We recently moved the system's `rm' program absolute address to a shell
variable that is found during the `./project' script. But I had forgot to
account for the difference between the Make and Bash variable naming
differences. I had also forgot to add a value to the HOME variable.
With this commit both are corrected: the system's `rm' path is now called
`sys_rm' and the HOME variable is set.
|
|
Until now, to work on a project, it was necessary to `./configure' it and
build the software. Then we had to run `.local/bin/make' to run the project
and do the analysis every time. If the project was a shared project between
many users on a large server, it was necessary to call the `./for-group'
script.
This way of managing the project had a major problem: since the user
directly called the lower-level `./configure' or `.local/bin/make' it was
not possible to provide high-level control (for example limiting the
environment variables). This was especially noticed recently with a bug
that was related to environment variables (bug #56682).
With this commit, this problem is solved using a single script called
`project' in the top directory. To configure and build the project, users
can now run these commands:
$ ./project configure
$ ./project make
To work on the project with other users in a group these commands can be
used:
$ ./project configure --group=GROUPNAME
$ ./project make --group=GROUPNAME
The old options to both configure and make the project are still valid. Run
`./project --help' to see a list. For example:
$ ./project configure -e --host-cc
$ ./project make -j8
The old `configure' script has been moved to
`reproduce/software/bash/configure.sh' and is called by the new `./project'
script. The `./project' script now just manages the options, then passes
control to the `configure.sh' script. For the "make" step, it also reads
the options, then calls Make. So in the lower-level nothing has
changed. Only the `./project' script is now the single/direct user
interface of the project.
On a parallel note: as part of bug #56682, we also found out that on some
macOS systems, the `DYLD_LIBRARY_PATH' environment variable has to be set
to blank. This is no problem because RPATH is automatically set in macOS
and the executables and libraries contain the absolute address of the
libraries they should link with. But having `DYLD_LIBRARY_PATH' can
conflict with some low-level system libraries and cause very hard to debug
linking errors (like that reported in the bug report).
This fixes bug #56682.
|
|
Until now the description of the commit message guidelines wasn't clear
enough and could cause confusion, in particular because it didn't describe
why some basic formatting issues are mandatory.
With this commit, it is explained that the main reason we require
contributors for follow this format is "consistency" within the
project. Also generally it was edited to become more elaborate and explain
the points more clearly.
I also ran a spell check over the whole file and fixed a few typos.
This correction was suggested by Mohammad-reza Khellat.
|
|
Until now, like all other software, PatchELF would install with dynamic
linking. However, PatchELF links with `libstdc++' so on one system, I
noticed that PatchELF gives a segmentation fault and corrupts `libstdc++'
while correcting its RPATH (after installing GCC). The solution is to build
PatchELF statically.
With this commit, we force PatchELF to be built statically (it only
installs on GNU/Linux systems anyway, so there is no problem with static
linking on macOS). This solved the problem on that system.
While looking at its documentation, I also noticed that a new version of
PatchELF has been released after almost three years, so it has been updated
in the template also.
This fixes bug #56673.
|
|
Some bugs have been fixed in the new version of WCSLIB, so it has been
updated in the template.
|
|
The previous implementation of using shared memory to build software was
edited to be more clear and less prone to errors.
|
|
More than two releases and bug fixes have been made to libgit2. So we are
now using a more recent version in the template.
|
|
Until now, the template would unpack the software and build them directly
in the build directory of each project. After installation, the whole
unpacked directory is deleted. However, building the software involves the
reading and writing of millions of files, so on the long run, it can be bad
for the non-volatile memory (HDDs or SSDs), it can also be slightly slow.
To fix this, if the system has a shared-memory directory (commonly named
`/dev/shm'), we can do the temporary building of the software there. The
great thing about this unique directory is that it is actually in the RAM,
not on the HDD/SSD. This can slightly improve the speed (not much
probably), but more importantly it will not do any long-term harm to the
host's HDDs/SSDs.
With this commit, when there is a shared memory directory mounted in
`/dev/shm', and it has enough space (currently set to 2GB), the
`./configure' script will make `.build/software/build-tmp' as a symbolic
link to a fixed directory there. Otherwise, it will just build it as a
directory in the project's shared directory.
The structure has been defined in such a way that we can later easily add
different standard shared-memory locations (for different operating
systems).
This completes task #15336.
|
|
Configure script: when `texlive-ready-tlmgr' is not created, it is similar
to not having installed TeXLive. A check was added so in this scenario the
`./configure' script doesn't crash.
high-level.mk: `cairo' and `pixman' are now installed in parallel and with
`V=1' (so the full compilation and linking command is printed).
|
|
In one of the last few commits, the commands in the recipe of libgit2 was
merged with `&&' so it stops if anything fails. But I had forgot to add a
`;' at the end of the `install_name_tool' command. This is corrected with
this commit.
|
|
Until this commit, the addion of `-liconv' to `CXXFLAGS' in `high-level.mk'
dependend on `host_cc', but I had forgot that `host_cc' isn't defined for
`high-level.mk'. It is now defined for this Makefile also in the configure
script.
Also, the Standard C++ library depends on `libgcc_s.so.1', so after
building GCC, it was necessary to add Rpath to it.
|
|
While doing a clean build, several issues were found in the pipeline and
corrected. The main issue was that with the recent installation of
`libiconv', the GCC standard C++ library depends on `libiconv', so we need
to explicity add an `-liconv' to any C++ compilation.
The other corrected points are:
- The C++ compiler is now explicitly defined in `CXX'.
- libgit2 and WCSLIB's recipes weren't using `&&' between statements, so
if there was an error, it would still build the target!
- The CMake bootstrapping script now builds much faster in parallel.
|
|
While testing on a system with no Texinfo, we noticed that M4 depends on
Texinfo. To fix this problem, with this commit, it is now included in the
pipeline.
While doing a clean build, a few minor issues were also found and corrected
in the other rules.
|
|
To build the software, we need a C/C++ compiler. But until now at configure
time there was no check on this. As a result, when the system didn't have
them, the user would only learn in a crash of the programs.
With this commit, some checks have been added at configure time to do basic
checks and inform the user if necessary.
|
|
Until now there was no guideline in `README-hacking.md' to describe/suggest
a good format for commit messages.
With this commit a point has been added in the "Tips" section to help new
developers contribute more smoothly.
The necessity of this paragraph was pointed out by Mohammad-reza Khellat.
|
|
Until now, we were using the `--enable-single' configure-time option of
FFTW to build its single-precision library. The reason was that according
to the output of `./configure --help', this was equivalent to
`--enable-float'. However, the single precision library wasn't being built.
As a result, on systems that already had it, SExtractor would use the
system's library and on other systems, it would simply not pass the
configure step.
With this commit, we are now using `--enable-float' which fixes this
problem and installs the `libfftw3f*' libraries (showing that it is not
equal to `--enable-single'!). Also, some optimization flags were added to
hopefully make it faster.
This issue was found thanks to Zahra Sharbaf and Hamed Altafi.
This fixes bug #56588.
|
|
Until now, we were letting the TeXLive installer use the default
CTAN-chosen mirror based on the host. But in many cases, this is not
efficient and sometimes those servers don't work.
With this commit, we manually set the server to use (`rit.edu'), which is
relatively fast and up to date. In this way, until we build TeXLive from
source, every user will be using the same CTAN mirror.
|
|
On some Fedora systems, Wget's build conflicts with libiconv.
With this commit, we use Wget's `--without-libiconv-prefix' configure
option so it will be built without an outside libiconv.
|
|
On some Fedora systems, libffi installs under `lib64', not `lib'. As a
result, Python's Setuptools can't find it and will not built (complaining
about not finding the `_ctypes' module).
With this commit, we fix this problem by explicitly putting a copy of
libffi's installed libraries within the `lib' directory.
This issue was found while testing the pipeline with Elham Saremi and Hamed
Altafi.
|
|
Until now, we weren't explicitly setting the C and Fortran compiler
environment variables (`CC' and `F77'). As a result, if the user's system
had already set them, there would be a problem (and the system's compilers
would be used).
With this commit, we are explicitly setting these two environment variables
at the start of `high-level.mk'.
This bug was found after a discussion with Elham Saremi.
|
|
An existing `libiconv' can cause a conflict with `pkg-config', this is why
`libiconv' depends on `pkg-config'. On a clean build, `pkg-config' is built
first. But when we don't have a clean build (and `libiconv' exists) there
will be a problem.
With this commit, before re-building `pkg-config', we'll remove any
possibly existing installation of `libiconv'.
|
|
There was only a conflict with `.file-metadata'.
|
|
While reviewing Prasenjit's commits, I noticed that we had forgot to add
the citation for TIDES, also to make things clear, the program/library
build rules are now sorted alphabetically.
Finally, I noticed that after building the TiKZ PDF figures, it is crashing
(like on Prasenjit's computer). After looking around, I noticed its because
we were setting the of the `TEXINPUTS' environment variable to be the
installed TeX Live directory (which was ultimately redundant because by
default TeX will look into where it was installed). The important thing is
just that we remove any possible value the host system has, not to set new
directories.
|
|
Libiconv has to be installed before pkg-config otherwise there
would be a compilation error:
gconvert.c:61:2: error: #error GNU libiconv not in use but included
iconv.h is from libiconv
61 | #error GNU libiconv not in use but included iconv.h is from
libiconv
|
|
TIDES is an ODE integrator with multiple-precision arithmetic.
|
|
Several corrections were necessary in the basic build: 1) the
version of GCC on some systems includes an `_' which would cause
a crash when building the PDF. 2) libcharset had to be manually
added to the Git build.
|
|
Prasenjit Saha reported that while building on a macOS, Git complained
about not finding `libiconv' functions. Therefore with this commit,
`libiconv' is also built as a dependency of Git.
Also, since the build of Binutils (and the subsequent GCC) doesn't depend
on the exact versions of the other basic software, they are set as
existance-only prerequsites (ignoring their timestamps). This is done to
avoid re-building when it is not needed.
|
|
The comment above Gnuastro's build rule is not longer relevant, so it has
been removed.
|