Skip to content
  • Mohammad Akhlaghi's avatar
    IMPORTANT: analysis outputs written in BDIR/analysis · d9a68559
    Mohammad Akhlaghi authored
    Until now, the build directory contained a 'software/' directory (that
    hosted all the built software), a 'tex/' subdirectory for the final
    building of the paper, and many other directories containing
    intermediate/final data of the specific project. But this mixing of built
    software and data is against our modularity and minimal complexity
    principles: built software and built data are separate things and keeping
    them separate will enable many optimizations.
    
    With this commit, the build directory of the core Maneage branch will only
    contain two sub-directories: 'software/' and 'analysis/'. The 'software/'
    directory has the same contents as before and is not touched in this
    commit. However, the 'analysis/' directory is new and everything created in
    the './project make' phase of the project will be created inside of this
    directory.
    
    To facilitate easy access to these top-level built directories, two new
    variables are defined at the top of 'initialize.mk': 'badir', which is
    short for "built-analysis directory" and 'bsdir', which is short for
    "built-software directory".
    
    HOW TO IMPLEMENT THIS CHANGE IN YOUR PROJECT. It is easy: simply replace
    all occurances of '$(BDIR)' in your project's subMakefiles (except the ones
    below) to '$(badir)'. To confirm if everything is fine before building your
    project from scratch after merging, you can run the following command to
    see where 'BDIR' is used and confirm the only remaning cases.
    
      $ grep -r BDIR reproduce/analysis/*
      --> make/verify.mk: innobdir=$$(echo $$infile | sed -e's|$(BDIR)/||g'); \
      --> make/initialize.mk:badir=$(BDIR)/analysis
      --> make/initialize.mk:bsdir=$(BDIR)/software
      --> make/initialize.mk:	$$sys_rm -rf $(BDIR)
      --> make/top-prepare.mk:all: $(BDIR)/software/preparation-done.mk
    
    'BDIR' should only be present in lines of the files above. If you see
    '$(BDIR)' used anywhere else, simply change it to '$(badir)'. Ofcourse, if
    your project assumes BDIR in other contexts, feel free to keep it, it will
    not conflict. If anything un-expected happens, please post a comment on the
    link below (you need to be registered on Savannah to post a comment):
    
    https://savannah.nongnu.org/task/?15855
    
    One consequence of this change is that the 'analysis/' subdirectory can be
    optionally mounted on a separate partition. The need for this actually came
    up for some new users of Maneage in a Docker image. Docker can fix
    portability problems on systems that we haven't yet supported (even
    Windows!), or had a chance to fix low-level issues on. However, Docker
    doesn't have a GUI interface. So to see the built PDF or intermediate data,
    it was necessary to copy the built data to the host system after every
    change, which is annoying during working on a project. It would also need
    two copies of the source: one in the host, one in the container. All these
    frustrations can be fixed with this new feature.
    
    To describe this scenario, README.md now has a new section titled "Only
    software environment in the Docker image". It explains step-by-step how you
    can make a Docker image to only host the built software environment. While
    your project's source, software tarballs and 'BDIR/analysis' directories
    are on your host operating system. It has been tested before this commit
    and works very nicely.
    d9a68559