diff options
author | Mohammad Akhlaghi <mohammad@akhlaghi.org> | 2019-07-28 02:32:20 +0100 |
---|---|---|
committer | Mohammad Akhlaghi <mohammad@akhlaghi.org> | 2019-07-28 02:53:34 +0100 |
commit | 6ef4cc854d1df46b719de5d66b45537b0aa11f92 (patch) | |
tree | a4b9680ef483167e41089a4a8b911cca70c11164 /reproduce/analysis/make | |
parent | 8847155563e25aa70663413f6a8dc9657ca79993 (diff) |
Single wrapper instead of old ./configure, Makefile and ./for-group
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.
Diffstat (limited to 'reproduce/analysis/make')
-rw-r--r-- | reproduce/analysis/make/initialize.mk | 20 | ||||
-rw-r--r-- | reproduce/analysis/make/paper.mk | 6 | ||||
-rw-r--r-- | reproduce/analysis/make/top.mk | 12 |
3 files changed, 20 insertions, 18 deletions
diff --git a/reproduce/analysis/make/initialize.mk b/reproduce/analysis/make/initialize.mk index d2b026e..f8a09e6 100644 --- a/reproduce/analysis/make/initialize.mk +++ b/reproduce/analysis/make/initialize.mk @@ -84,8 +84,6 @@ tikzdir = $(texbdir)/tikz # Before defining the local sub-environment here, we'll need to save the # system's environment for some scenarios (for example after `clean'ing the # built programs). -sys-path := $(PATH) -sys-rm := $(shell which rm) curdir := $(shell echo $$(pwd)) @@ -97,7 +95,7 @@ curdir := $(shell echo $$(pwd)) # # We want the full recipe to be executed in one call to the shell. Also we # want Make to run the specific version of Bash that we have installed -# during `./configure' time. +# during `./project configure' time. # # Regarding the directories, this project builds its major dependencies # itself and doesn't use the local system's default tools. With these @@ -116,7 +114,11 @@ export LDFLAGS := -L$(installdir)/lib export SHELL := $(installdir)/bin/bash export CPPFLAGS := -I$(installdir)/include export LD_LIBRARY_PATH := $(installdir)/lib -export DYLD_LIBRARY_PATH := $(installdir)/lib + +# RPATH is automatically written in macOS, so `DYLD_LIBRARY_PATH' is +# ultimately redundant. But on some systems, even having a single value +# causes crashs (see bug #56682). So we'll just give it no value at all. +export DYLD_LIBRARY_PATH := @@ -190,15 +192,17 @@ clean: clean-mmap # features like ignoring the listing of a file with `!()' that we # are using afterwards. shopt -s extglob - rm -rf $(BDIR)/!(software) + rm -rf $(BDIR)/tex/macros/!(dependencies.tex|dependencies-bib.tex) + rm -rf $(BDIR)/!(software|tex) $(BDIR)/tex/!(macros|build) + rm -rf $(BDIR)/tex/build/!(tikz) $(BDIR)/tex/build/tikz/* distclean: clean # We'll be deleting the built environent programs and just need the # `rm' program. So for this recipe, we'll use the host system's # `rm', not our own. - $(sys-rm) -rf $(BDIR) - $(sys-rm) -f Makefile .gnuastro .local .build - $(sys-rm) -f $(pconfdir)/LOCAL.mk $(gconfdir)/gnuastro-local.conf + $$sys-rm -rf $(BDIR) + $$sys-rm -f Makefile .gnuastro .local .build + $$sys-rm -f $(pconfdir)/LOCAL.mk $(gconfdir)/gnuastro-local.conf diff --git a/reproduce/analysis/make/paper.mk b/reproduce/analysis/make/paper.mk index c17028a..436bac4 100644 --- a/reproduce/analysis/make/paper.mk +++ b/reproduce/analysis/make/paper.mk @@ -64,11 +64,9 @@ $(mtexdir)/project.tex: $(foreach s, $(subst paper,,$(makesrc)), $(mtexdir)/$(s) echo "'reproduce/analysis/config/pdf-build.mk'." echo echo "If you don't have LaTeX within the project, please re-run" - echo "'./configure' when you have internet access. To speed it up," - echo "you can keep the previous configuration files (answer 'n'" - echo "when it asks about re-writing previous configuration files)." + echo "'./project configure -e' when you have internet access." else - echo "For more, run './.local/bin/make more-on-building-pdf=1'" + echo "For more, run './project make more-on-building-pdf=1'" fi echo echo "" > $@ diff --git a/reproduce/analysis/make/top.mk b/reproduce/analysis/make/top.mk index b753979..7d20800 100644 --- a/reproduce/analysis/make/top.mk +++ b/reproduce/analysis/make/top.mk @@ -19,7 +19,8 @@ -# Load the local configuration (created after running `./configure'). +# Load the local configuration (created after running +# `./project configure'). include reproduce/software/config/installation/LOCAL.mk @@ -49,9 +50,8 @@ include reproduce/software/config/installation/LOCAL.mk # # Controlling this requires two variables that are available at this stage: # -# - `GROUP-NAME': from `LOCAL.mk' (which was built by `./configure'). -# - `reproducible_paper_group_name': from the `./for-group' script (if it -# was used to call Make). +# - `GROUP-NAME': from `LOCAL.mk' (which was built by `./project configure'). +# - `reproducible_paper_group_name': value to the `--group' option. # # The analysis is only done when both have the same group name. Note that # when the project isn't being built for a group, both variables will be an @@ -70,10 +70,10 @@ else all: @if [ "x$(GROUP-NAME)" = x ]; then \ echo "Project is NOT configured for groups, please run"; \ - echo " $$ .local/bin/make"; \ + echo " $$ ./project make"; \ else \ echo "Project is configured for groups, please run"; \ - echo " $$ ./for-group $(GROUP-NAME) make -j8"; \ + echo " $$ ./project make --group=$(GROUP-NAME) -j8"; \ fi endif |