From 4f376e9f27209fb5a69addcc56a37abe8fb8ef01 Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Tue, 10 May 2022 01:46:37 +0200 Subject: initialize.mk: Git call in variable works with LD_LIBRARY_PATH Until now, the '$(project-commit-hash)' Make variable of 'initialize.mk' simply called 'git' to find the commit hash. However, due to one of the recent software updates, we noticed that this command is no longer working (and the project commit hash wasn't getting printed in the PDF)! The problem was that Maneage's Git, couldn't find the 'libiconv' library that it was built with. With this commit, the '$(shell' command that calls Git, first exports 'LD_LIBRARY_PATH' to Maneage's software build directory. As a result, the Git command can work and will report the commit as a LaTeX macro to be used in the paper. To avoid relying on PATH outside of Make recipes, we now also directly call the Git executable with Maneage. Some other minor issues have been found and fixed in this commit: - README-hacking.md: some minor edits and typo corrections. - initialize.mk: the '$(curdir)' variable is now used in several places that we were calling 'pwd'. - versions.conf: 'xlsxio-version' now included with other programs. Until now it was commented because GCC 11.1.0 had issues with it. However, GCC 11.2.0 doesn't have a problem any more, so it has been returned to the list of all high-level programs. - xorg.mk: used same format to comment recipe lines as the other Makefiles (a '#' followed by a TAB). - preamble-pgfplots.tex: lines to comment for building an EPS figure with PGFPlots have been re-formatted to be more human-readable. --- README-hacking.md | 21 ++++++++++----------- reproduce/analysis/make/initialize.mk | 28 ++++++++++++++++++---------- reproduce/software/config/versions.conf | 5 +---- reproduce/software/make/basic.mk | 2 +- reproduce/software/make/xorg.mk | 8 ++++---- tex/src/preamble-pgfplots.tex | 16 +++++++++------- 6 files changed, 43 insertions(+), 37 deletions(-) diff --git a/README-hacking.md b/README-hacking.md index b721d6d..030082b 100644 --- a/README-hacking.md +++ b/README-hacking.md @@ -1066,14 +1066,13 @@ future. the plots should be uploaded directly to Zenodo so they can be viewed/downloaded with a simple link in the caption. For example see the last sentence of the caption of Figure 1 in - [arXiv:2006.03018v1](https://arxiv.org/pdf/2006.03018v1.pdf), it points - to [the - data](https://zenodo.org/record/3872248/files/tools-per-year.txt) that - was used to create that figure's top plot. As you see, this will allow - your paper's readers (again, most probably your future-self!) to - directly access the numbers of each visualization (plot/figure) with a - simple click in a trusted server. This also shows the major advantage of - having your data as simple plain-text where possible, as described + [arXiv:2006.03018](https://arxiv.org/pdf/2006.03018.pdf), it points to + [the data](https://zenodo.org/record/3872248/files/tools-per-year.txt) + that was used to create that figure's left-side plot. As you see, this + will allow your paper's readers (again, most probably your future-self!) + to directly access the numbers of each visualization (plot/figure) with + a simple click in a trusted server. This also shows the major advantage + of having your data as simple plain-text where possible, as described above. To help you keep all your to-be-visualized datasets in a single place, Maneage has the two `tex-publish-dir` and `data-publish-dir` directories that are defined in `reproduce/analysis/make/initialize.mk`, @@ -1116,7 +1115,7 @@ future. - **Confirm if your project builds from scratch**: Before publishing anything, you should see if your project can indeed reproduce itself! You may be mistakenly using temporarily created files that aren't built - when teh project is built from scratch (this happens a lot and is very + when the project is built from scratch (this happens a lot and is very dangerous for the integrity of your project!). So, go to a temporary directory, clone your project from its repository and try configuring and building it from scratch in a new-temporary build-directory. It is @@ -1177,8 +1176,8 @@ future. `.build/software/tarballs`. It is necessary to upload these with your project to avoid relying on third party servers. In the future any one of those servers may go down and if so, your project won't - be buildable. You can generate this tarball easily with `make - dist-software`. + be buildable. You can generate this tarball easily with `./project + make dist-software`. * All the figure (and other) output datasets of the project. Don't rename these files, let them have the same descriptive name diff --git a/reproduce/analysis/make/initialize.mk b/reproduce/analysis/make/initialize.mk index 7e9e938..4e8ee68 100644 --- a/reproduce/analysis/make/initialize.mk +++ b/reproduce/analysis/make/initialize.mk @@ -165,7 +165,9 @@ export OMPI_MCA_plm_rsh_agent=/bin/false # Recipe startup script. export PROJECT_STATUS := make -export BASH_ENV := $(shell pwd)/reproduce/software/shell/bashrc.sh +export BASH_ENV := $(curdir)/reproduce/software/shell/bashrc.sh + + @@ -209,9 +211,18 @@ $(lockdir): | $(bsdir); mkdir $@ -# Version and distribution tarball definitions -project-commit-hash := $(shell if [ -d .git ]; then \ - echo $$(git describe --dirty --always --long); else echo NOGIT; fi) +# Version and distribution tarball definitions. +# +# We need to export 'LD_LIBRARY_PATH' before calling 'git' because we the +# default export of 'LD_LIBRARY_PATH' doesn't take effect at this point +# (only within the recipes). Its also safe to directly use the 'git' +# executable using its absolute location (and not rely on 'PATH' at this +# stage). +project-commit-hash := $(shell \ + if [ -d .git ]; then \ + export LD_LIBRARY_PATH="$(installdir)/lib"; \ + echo $$($(installdir)/bin/git describe --dirty --always --long); \ + else echo NOGIT; fi) project-package-name := maneaged-$(project-commit-hash) project-package-contents = $(texdir)/$(project-package-name) @@ -385,7 +396,6 @@ $(project-package-contents): paper.pdf | $(texdir) # Package into '.tar.gz' or '.tar.lz'. dist dist-lzip: $(project-package-contents) - curdir=$$(pwd) cd $(texdir) tar -cf $(project-package-name).tar $(project-package-name) if [ $@ = dist ]; then @@ -396,21 +406,19 @@ dist dist-lzip: $(project-package-contents) lzip -f --best $(project-package-name).tar fi rm -rf $(project-package-name) - cd $$curdir + cd $(curdir) mv $(texdir)/$(project-package-name).tar.$$suffix ./ # Package into '.zip'. dist-zip: $(project-package-contents) - curdir=$$(pwd) cd $(texdir) zip -q -r $(project-package-name).zip $(project-package-name) rm -rf $(project-package-name) - cd $$curdir + cd $(curdir) mv $(texdir)/$(project-package-name).zip ./ # Package the software tarballs. dist-software: - curdir=$$(pwd) dirname=software-$(project-commit-hash) cd $(bsdir) if [ -d $$dirname ]; then rm -rf $$dirname; fi @@ -419,7 +427,7 @@ dist-software: tar -cf $$dirname.tar $$dirname gzip -f --best $$dirname.tar rm -rf $$dirname - cd $$curdir + cd $(curdir) mv $(bsdir)/$$dirname.tar.gz ./ diff --git a/reproduce/software/config/versions.conf b/reproduce/software/config/versions.conf index 2a27ddd..34d074c 100644 --- a/reproduce/software/config/versions.conf +++ b/reproduce/software/config/versions.conf @@ -152,6 +152,7 @@ tides-version = 2.0 util-linux-version = 2.37.2 valgrind-version = 3.18.1 vim-version = 8.2 +xlsxio-version = 0.2.21 yaml-version = 0.2.5 # Xorg packages @@ -286,10 +287,6 @@ wheel-version = 0.37.0 # it. #healpix-version = 3.50 -# XLSX I/O (until version 0.2.29) crashes during compilation with GCC -# 11.1.0, so we are temporarily commenting it. -#xlsxio-version = 0.2.21 - # Setuptools-rust crash (https://savannah.nongnu.org/bugs/index.php?61731), # so it and its dependencies are being ignored: 'cryptography', and thus # 'secretstorage' and thus 'keyring' and thus 'astroquery'. diff --git a/reproduce/software/make/basic.mk b/reproduce/software/make/basic.mk index 5967a1d..adb157b 100644 --- a/reproduce/software/make/basic.mk +++ b/reproduce/software/make/basic.mk @@ -1200,7 +1200,7 @@ $(ibidir)/binutils-$(binutils-version): \ # being, if the project is being run on a macOS, we'll just set a link. $(ibidir)/gcc-$(gcc-version): $(ibidir)/binutils-$(binutils-version) - # Function to let the users know what to do if build fails. +# Function to let the users know what to do if build fails. error_message() { echo; echo echo "_________________________________________________" diff --git a/reproduce/software/make/xorg.mk b/reproduce/software/make/xorg.mk index 6e62595..dd707e5 100644 --- a/reproduce/software/make/xorg.mk +++ b/reproduce/software/make/xorg.mk @@ -120,18 +120,18 @@ $(ibidir)/fontconfig-$(fontconfig-version): \ $(ibidir)/libxml2-$(libxml2-version) \ $(ibidir)/freetype-$(freetype-version) \ $(ibidir)/util-linux-$(util-linux-version) - # Import the source. +# Import the source. tarball=fontconfig-$(fontconfig-version).tar.lz $(call import-source, $(fontconfig-url), $(fontconfig-checksum)) - # Add the extra environment variables for using 'libuuid' of - # 'util-linux'. +# Add the extra environment variables for using 'libuuid' of +# 'util-linux'. ulidir=$(idir)/util-linux export LDFLAGS="-L$$ulidir/lib $(LDFLAGS)" export CPPFLAGS="-I$$ulidir/include $(CPPFLAGS)" export PKG_CONFIG_PATH=$(PKG_CONFIG_PATH):$$ulidir/lib/pkgconfig - # Build it. +# Build it. $(call gbuild, fontconfig-$(fontconfig-version),, \ $(XORG_CONFIG) --sysconfdir=$(idir)/etc \ --disable-docs, V=1 -j$(numthreads)) diff --git a/tex/src/preamble-pgfplots.tex b/tex/src/preamble-pgfplots.tex index 75119d6..c200845 100644 --- a/tex/src/preamble-pgfplots.tex +++ b/tex/src/preamble-pgfplots.tex @@ -109,13 +109,15 @@ %% Uncomment the following lines for EPS and PS images. Note that you still %% have to use the 'pdflatex' executable and also add a '[dvips]' option to %% graphicx. - -%% \tikzset{external/system call={rm -f "\image".eps "\image".ps -%% "\image".dvi; latex \tikzexternalcheckshellescape -halt-on-error -%% -interaction=batchmode -jobname "\image" "\texsource"; -%% dvips -o "\image".ps "\image".dvi; -%% ps2eps "\image.ps"}} - +%%\tikzset{ +%% external/system call={ +%% rm -f "\image".eps "\image".ps "\image".dvi; +%% latex \tikzexternalcheckshellescape -halt-on-error +%% -interaction=batchmode -jobname "\image" "\texsource"; +%% dvips -o "\image".ps "\image".dvi; +%% ps2eps "\image.ps" +%% } +%%} -- cgit v1.2.1