Age | Commit message (Collapse) | Author | Lines |
|
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.
|
|
During the last month, several core GNU programs were updated, so their
versions in the pipeline have also been updated.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
As part of the pipeline, `.texlive2018' may be created. So it is added to
`.gitignore'.
|
|
A closing double-quotation was missing in the command to read about
Automatic variables in Make.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
Some problems with using the number of threads in dependency building were
fixed.
|
|
The version of Git was updated to the most recent version (2.20.0).
|
|
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).
|
|
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).
|
|
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.
|
|
To help and be more clear a link to this pipeline's dependency repository
has been added to `README.md'.
|
|
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.
|
|
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).
|
|
The README.md file was updated to reflect recent changes in the pipeline
(especially regarding the downloader).
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
`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.
|
|
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.
|
|
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'.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
We were missing a `\' at the end of the `$(call' function of Coreutils to
connect the two lines. It has been fixed now.
|
|
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.
|
|
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.
|
|
To help in debugging, we are only running the Makefiles within the
configure script on one thread.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
There was an extra `$(lockdir)' target in `download.mk'. This has been
corrected.
|
|
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).
|
|
GNU Binutils (which provides the GNU Linker) is not ported to Mac OS
systems. GCC also takes a very long time to build, and if we are to still
have linking problems with LLVM's linker, it would be better to just ignore
GCC also and use the system's C compiler and linker together.
So for the time being, GCC isn't a main target of the basic dependencies
and won't be installed. But we have kept the rules that were checked on a
GNU/Linux operating system.
|
|
Previously the SHELL environment variable was only set in `./configure',
`make', and `make install' after our internal Bash was installed. This
caused problems with Lzip's configure script on older shells (tested on a
Mac OS by Raul Infante Sainz).
So now, before having our own Bash, we set it to a possibly existing Bash
on the system and if that isn't present, just the standard `/bin/sh'.
|
|
The pipeline now installs GCC and all its necessary prerequisites.
|
|
The linker of LLVM version 10.0.0 (clang-1000.11.45.5) doesn't recognize
the `-rpath' linker option! After some searching, apparently it does
recognize `-rpath-link' so we are testing with that now.
|