From be8481f3218b736efa8bdaa12a3a407984c2c62b Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Mon, 20 Apr 2020 01:07:49 +0100 Subject: Maneage instead of Template in README-hacking.md and copyright notices Until now, throughout Maneage we were using the old name of "Reproducible Paper Template". But we have finally decided to use Maneage, so to avoid confusion, the name has been corrected in `README-hacking.md' and also in the copyright notices. Note also that in `README-hacking.md', the main Maneage branch is now called `maneage', and the main Git remote has been changed to `https://gitlab.com/maneage/project' (this is a new GitLab Group that I have setup for all Maneage-related projects). In this repository there is only one `maneage' branch to avoid complications with the `master' branch of the projects using Maneage later. --- README-hacking.md | 428 ++++++++++++++--------------- README.md | 15 +- project | 16 +- reproduce/analysis/bash/download-multi-try | 16 +- reproduce/analysis/make/delete-me.mk | 19 +- reproduce/analysis/make/download.mk | 16 +- reproduce/analysis/make/initialize.mk | 19 +- reproduce/analysis/make/paper.mk | 19 +- reproduce/analysis/make/prepare.mk | 16 +- reproduce/analysis/make/top-make.mk | 21 +- reproduce/analysis/make/top-prepare.mk | 19 +- reproduce/analysis/make/verify.mk | 19 +- reproduce/software/config/checksums.conf | 19 +- reproduce/software/config/versions.conf | 19 +- reproduce/software/make/atlas-multiple.mk | 19 +- reproduce/software/make/atlas-single.mk | 19 +- reproduce/software/make/basic.mk | 19 +- reproduce/software/make/build-rules.mk | 19 +- reproduce/software/make/high-level.mk | 19 +- reproduce/software/make/python.mk | 19 +- reproduce/software/shell/bashrc.sh | 21 +- reproduce/software/shell/configure.sh | 22 +- tex/README.md | 21 +- tex/src/delete-me-demo.tex | 19 +- tex/src/delete-me.tex | 19 +- tex/src/preamble-biblatex.tex | 19 +- tex/src/preamble-header.tex | 19 +- tex/src/preamble-necessary.tex | 19 +- tex/src/preamble-pgfplots.tex | 19 +- tex/src/preamble-style.tex | 19 +- 30 files changed, 447 insertions(+), 525 deletions(-) diff --git a/README-hacking.md b/README-hacking.md index c1efccc..0e5d359 100644 --- a/README-hacking.md +++ b/README-hacking.md @@ -1,35 +1,34 @@ -Reproducible paper template -=========================== +Maneage: managing data lineage +============================== Copyright (C) 2018-2020 Mohammad Akhlaghi \ Copyright (C) 2020 Raul Infante-Sainz \ See the end of the file for license conditions. -This project contains a **fully working template** for doing reproducible -research (or writing a reproducible paper) as defined in the link below. If -the link below is not accessible at the time of reading, please see the -appendix at the end of this file for a portion of its introduction. Some +Maneage is a **fully working template** for doing reproducible research (or +writing a reproducible paper) as defined in the link below. If the link +below is not accessible at the time of reading, please see the appendix at +the end of this file for a portion of its introduction. Some [slides](http://akhlaghi.org/pdf/reproducible-paper.pdf) are also available to help demonstrate the concept implemented here. http://akhlaghi.org/reproducible-science.html -This template is created with the aim of supporting reproducible research -by making it easy to start a project in this framework. As shown below, it -is very easy to customize this reproducible paper template for any -particular (research) project and expand it as it starts and evolves. It -can be run with no modification (as described in `README.md`) as a -demonstration and customized for use in any project as fully described -below. - -A project designed using this template will download and build all the -necessary libraries and programs for working in a closed environment -(highly independent of the host operating system) with fixed versions of -the necessary dependencies. The tarballs for building the local environment -are also collected in a [separate -repository](https://gitlab.com/makhlaghi/reproducible-paper-dependencies). The -final output of the project is [a -paper](https://gitlab.com/makhlaghi/reproducible-paper-output/raw/master/paper.pdf). +Maneage is created with the aim of supporting reproducible research by +making it easy to start a project in this framework. As shown below, it is +very easy to customize Maneage for any particular (research) project and +expand it as it starts and evolves. It can be run with no modification (as +described in `README.md`) as a demonstration and customized for use in any +project as fully described below. + +A project designed using Maneage will download and build all the necessary +libraries and programs for working in a closed environment (highly +independent of the host operating system) with fixed versions of the +necessary dependencies. The tarballs for building the local environment are +also collected in a [separate +repository](https://gitlab.com/maneage/software-source). The final output +of the project is [a +paper](https://gitlab.com/maneage/output-raw/-/blob/master/paper.pdf). Notice the last paragraph of the Acknowledgments where all the necessary software are mentioned with their versions. @@ -37,18 +36,18 @@ Below, we start with a discussion of why Make was chosen as the high-level language/framework for project management and how to learn and master Make easily (and freely). The general architecture and design of the project is then discussed to help you navigate the files and their contents. This is -followed by a checklist for the easy/fast customization of this template to -your exciting research. We continue with some tips and guidelines on how to +followed by a checklist for the easy/fast customization of Maneage to your +exciting research. We continue with some tips and guidelines on how to manage or extend your project as it grows based on our experiences with it so far. The main body concludes with a description of possible future -improvements that are planned for the template (but not yet -implemented). As discussed above, we end with a short introduction on the -necessity of reproducible science in the appendix. - -Please don't forget to share your thoughts, suggestions and criticisms on -this template. Maintaining and designing this template is itself a separate -project, so please join us if you are interested. Once it is mature enough, -we will describe it in a paper (written by all contributors) for a formal +improvements that are planned for Maneage (but not yet implemented). As +discussed above, we end with a short introduction on the necessity of +reproducible science in the appendix. + +Please don't forget to share your thoughts, suggestions and +criticisms. Maintaining and designing Maneage is itself a separate project, +so please join us if you are interested. Once it is mature enough, we will +describe it in a paper (written by all contributors) for a formal introduction to the community. @@ -117,9 +116,10 @@ Make is a +40 year old software that is still evolving, therefore many implementations of Make exist. The only difference in them is some extra features over the [standard definition](https://pubs.opengroup.org/onlinepubs/009695399/utilities/make.html) -(which is shared in all of them). This template has been created for GNU -Make which is the most common, most actively developed, and most advanced -implementation. Just note that this template downloads, builds, internally +(which is shared in all of them). Maneage is primarily written in GNU Make +(which it installs itself, you don't have to have it on your system). GNU +Make is the most common, most actively developed, and most advanced +implementation. Just note that Maneage downloads, builds, internally installs, and uses its own dependencies (including GNU Make), so you don't have to have it installed before you try it out. @@ -168,13 +168,14 @@ your hands off the keyboard!). -Published works using this template ------------------------------------ +Published works using Maneage +----------------------------- The list below shows some of the works that have already been published -with (earlier versions of) this template. Note that this template is -evolving, so some details may be different in them. The more recent ones -can be used as a good working example besides the default template. +with (earlier versions of) Maneage. Previously it was simply called +"Reproducible paper template". Note that Maneage is evolving, so some +details may be different in them. The more recent ones can be used as a +good working example. - Infante-Sainz et al. ([2020](https://ui.adsabs.harvard.edu/abs/2020MNRAS.491.5317I), @@ -208,11 +209,11 @@ can be used as a good working example besides the default template. ([2015](http://adsabs.harvard.edu/abs/2015ApJS..220....1A), ApJS, 220, 1): The version controlled project is available [on GitLab](https://gitlab.com/makhlaghi/NoiseChisel-paper). This is the - very first (and much less mature!) implementation of this template: the - history of this template started more than two years after this paper - was published. It is a very rudimentary/initial implementation, thus it - is only included here for historical reasons. However, the project - source is complete, accurate and uploaded to arXiv along with the paper. + very first (and much less mature!) incarnation of Maneage: the history + of Maneage started more than two years after this paper was + published. It is a very rudimentary/initial implementation, thus it is + only included here for historical reasons. However, the project source + is complete, accurate and uploaded to arXiv along with the paper. @@ -221,15 +222,11 @@ can be used as a good working example besides the default template. Citation -------- -A paper will be published to fully describe this reproducible paper -template. Until then, if you used this template in your work, please cite -the paper that implemented its first version: Akhlaghi & Ichikawa +A paper to fully describe Maneage has been submitted. Until then, if you +used it in your work, please cite the paper that implemented its first +version: Akhlaghi & Ichikawa ([2015](http://adsabs.harvard.edu/abs/2015ApJS..220....1A), ApJS, 220, 1). -The experience gained with this template after several more implementations -will be used to make it robust enough for a complete and useful paper to -introduce to the community afterwards. - Also, when your paper is published, don't forget to add a notice in your own paper (in coordination with the publishing editor) that the paper is fully reproducible and possibly add a sentence or paragraph in the end of @@ -249,15 +246,15 @@ a reproducible manner. Project architecture ==================== -In order to customize this template to your research, it is important to -first understand its architecture so you can navigate your way in the -directories and understand how to implement your research project within -its framework: where to add new files and which existing files to modify -for what purpose. But if this the first time you are using this template, -before reading this theoretical discussion, please run the template once -from scratch without any chages (described in `README.md`). You will see -how it works (note that the configure step builds all necessary software, -so it can take long, but you can continue reading while its working). +In order to customize Maneage to your research, it is important to first +understand its architecture so you can navigate your way in the directories +and understand how to implement your research project within its framework: +where to add new files and which existing files to modify for what +purpose. But if this the first time you are using Maneage, before reading +this theoretical discussion, please run Maneage once from scratch without +any chages (described in `README.md`). You will see how it works (note that +the configure step builds all necessary software, so it can take long, but +you can continue reading while its working). The project has two top-level directories: `reproduce` and `tex`. `reproduce` hosts all the software building and analysis @@ -276,9 +273,9 @@ links in the project's top source directory: `.build` which points to the top build directory and `.local` for easy access to the custom built software installation directory. With these you can easily access the build directory and project-specific software from your top source directory. For -example if you run `.local/bin/ls` you will be using the `ls` of the -template, which is problably different from your system's `ls` (run them -both with `--version` to check). +example if you run `.local/bin/ls` you will be using the `ls` of Maneage, +which is problably different from your system's `ls` (run them both with +`--version` to check). Once the project is configured for your system, `./project make` will do the basic preparations and run the project's analysis with the custom @@ -287,7 +284,7 @@ version of software. The `project` script is just a wrapper, and with the (both are in the `reproduce/analysis/make` directory). In terms of organization, `top-prepare.mk` and `top-make.mk` have an -identical design, only minor differences. So, let's continue the template's +identical design, only minor differences. So, let's continue Maneage's architecture with `top-make.mk`. Once you understand that, you'll clearly understand `top-prepare.mk` also. These very high-level files are relatively short and heavily commented so hopefully the descriptions in @@ -359,7 +356,7 @@ aren't directly a prerequisite of other workhorse-Makefile targets, they can be a pre-requisite of that intermediate LaTeX macro file and thus be called when necessary. Otherwise, they will be ignored by Make. -This template also has a mode to share the build directory between several +Maneage also has a mode to share the build directory between several users of a Unix group (when working on large computer clusters). In this scenario, each user can have their own cloned project source, but share the large built files between each other. To do this, it is necessary for all @@ -441,19 +438,19 @@ files, it makes no effort in keeping the file meta data, and in particular the dates of files. Therefore when you checkout to a different branch, files that are re-written by Git will have a newer date than the other project files. However, file dates are important in the current design of -the template: Make uses file dates of the pre-requisits and targets to see +Maneage: Make uses file dates of the pre-requisits and targets to see if the target should be re-built. -To fix this problem, for this template we use a forked version of +To fix this problem, for Maneage we use a forked version of [Metastore](https://github.com/mohammad-akhlaghi/metastore). Metastore use a binary database file (which is called `.file-metadata`) to keep the modification dates of all the files under version control. This file is also under version control, but is hidden (because it shouldn't be modified -by hand). During the project's configuration, the template installs to Git -hooks to run Metastore 1) before making a commit to update its database -with the file dates in a branch, and 2) after doing a checkout, to reset -the file-dates after the checkout is complete and re-set the file dates -back to what they were. +by hand). During the project's configuration, Maneage installs to Git hooks +to run Metastore 1) before making a commit to update its database with the +file dates in a branch, and 2) after doing a checkout, to reset the +file-dates after the checkout is complete and re-set the file dates back to +what they were. In practice, Metastore should work almost fully invisiablly within your project. The only place you might notice its presence is that you'll see @@ -506,7 +503,7 @@ mind are listed below. Customization checklist ======================= -Take the following steps to fully customize this template for your research +Take the following steps to fully customize Maneage for your research project. After finishing the list, be sure to run `./project configure` and `project make` to see if everything works correctly. If you notice anything missing or any in-correct part (probably a change that has not been @@ -514,12 +511,12 @@ explained here), please let us know to correct it. As described above, the concept of reproducibility (during a project) heavily relies on [version -control](https://en.wikipedia.org/wiki/Version_control). Currently this -template uses Git as its main version control system. If you are not -already familiar with Git, please read the first three chapters of the -[ProGit book](https://git-scm.com/book/en/v2) which provides a wonderful -practical understanding of the basics. You can read later chapters as you -get more advanced in later stages of your work. +control](https://en.wikipedia.org/wiki/Version_control). Currently Maneage +uses Git as its main version control system. If you are not already +familiar with Git, please read the first three chapters of the [ProGit +book](https://git-scm.com/book/en/v2) which provides a wonderful practical +understanding of the basics. You can read later chapters as you get more +advanced in later stages of your work. First custom commit ------------------- @@ -528,21 +525,20 @@ First custom commit Arguably the easiest way to start is to clone this repository as shown below. As you see, after the cloning some further corrections to your clone's Git settings are necessary: first, you need to remove all - possibly existing Git tags from the template's history. Then you need + possibly existing Git tags from the Maneage's history. Then you need to rename the conventional `origin` remote server, and the `master` branch. This renaming allows you to use these standard names for your own customized project (which greatly helps because this convention is widely used). ```shell - $ git clone git://git.sv.gnu.org/reproduce # Clone/copy the project and its history. - $ mv reproduce my-project # Change the name to your project's name. + $ git clone https://gitlab.com/maneage/project.git # Clone/copy the project and its history. + $ mv project my-project # Change the name to your project's name. $ cd my-project # Go into the cloned directory. - $ git tag | xargs git tag -d # Delete all template tags. - $ git config remote.origin.tagopt --no-tags # No tags in future fetch/pull from this template. - $ git remote rename origin template-origin # Rename current/only remote to "template-origin". - $ git branch -m template # Rename current/only branch to "template". - $ git checkout -b master # Create and enter new "master" branch. + $ git tag | xargs git tag -d # Delete all Maneage tags. + $ git config remote.origin.tagopt --no-tags # No tags in future fetch/pull from Maneage. + $ git remote rename origin origin-maneage # Rename current/only remote to "origin-maneage". + $ git checkout -b master # Create and enter your own "master" branch. $ pwd # Just to confirm where you are. ``` @@ -566,20 +562,20 @@ First custom commit $ ./project --check-config ``` - - **Test the template**: Before making any changes, it is important to - test it and see if everything works properly with the commands - below. If there is any problem in the `./project configure` or - `./project make` steps, please contact us to fix the problem before - continuing. Since the building of dependencies in configuration can - take long, you can take the next few steps (editing the files) while - its working (they don't affect the configuration). After `./project - make` is finished, open `paper.pdf`. If it looks fine, you are ready - to start customizing the template for your project. But before that, - clean all the extra template outputs with `make clean` as shown below. + - **Test Maneage**: Before making any changes, it is important to test it + and see if everything works properly with the commands below. If there + is any problem in the `./project configure` or `./project make` steps, + please contact us to fix the problem before continuing. Since the + building of dependencies in configuration can take long, you can take + the next few steps (editing the files) while its working (they don't + affect the configuration). After `./project make` is finished, open + `paper.pdf`. If it looks fine, you are ready to start customizing the + Maneage for your project. But before that, clean all the extra Maneage + outputs with `make clean` as shown below. ```shell $ ./project configure # Build the project's software environment (can take an hour or so). - $ ./project make # Do the processing and build paper (just a simple demo in the template). + $ ./project make # Do the processing and build paper (just a simple demo). # Open 'paper.pdf' and see if everything is ok. ``` @@ -597,9 +593,9 @@ First custom commit place of `XXXXXXXXXX` in the first command below. With the second command, "push" your `master` branch to your `origin` remote, and (with the `--set-upstream` option) set them to track/follow each - other. However, the `template` branch is currently tracking/following - your `template-origin` remote (automatically set when you cloned the - template). So when pushing the `template` branch to your `origin` + other. However, the `maneage` branch is currently tracking/following + your `origin-maneage` remote (automatically set when you cloned + Maneage). So when pushing the `maneage` branch to your `origin` remote, you _shouldn't_ use `--set-upstream`. With the last command, you can actually check this (which local and remote branches are tracking each other). @@ -607,7 +603,7 @@ First custom commit ```shell git remote add origin XXXXXXXXXX # Newly created repo is now called 'origin'. git push --set-upstream origin master # Push 'master' branch to 'origin' (enable tracking). - git push origin template # Push 'template' branch to 'origin' (no tracking). + git push origin maneage # Push 'maneage' branch to 'origin' (no tracking). ``` - **Title**, **short description** and **author**: The title and basic @@ -621,10 +617,10 @@ First custom commit your own methods after finishing this checklist and doing your first commit. - - **Delete dummy parts (can be done later)**: The template contains some - parts that are only for the initial/test run, mainly as a - demonstration of important steps. They not for any real analysis. You - can remove these parts in the file below + - **Delete dummy parts (can be done later)**: Maneage contains some parts + that are only for the initial/test run, mainly as a demonstration of + important steps. They not for any real analysis. You can remove these + parts in the file below - `paper.tex`: 1) Delete the text of the abstract (from `\includeabstract{` to `\vspace{0.25cm}`) and start writing your own @@ -633,9 +629,9 @@ First custom commit body.` and `%% End of main body.`. 4) Remove the notice in the "Acknowledgments" section (in `\new{}`) and add Acknowledge your funding sources. Just don't delete the existing acknowledgment - statement: this template was designed by funding from many - grants. Since you are using it in your work, it is necessary to - acknowledge them in your work also. + statement: Maneage was designed by funding from many grants. Since + you are using it in your work, it is necessary to acknowledge them + in your work also. - `reproduce/analysis/make/top-make.mk`: Delete the `delete-me` line in the `makesrc` definition. Just make sure there is no empty line @@ -673,15 +669,15 @@ First custom commit ``` - Tell Git _not_ to merge changes in the dummy `delete-me` files, and - `paper.tex` (its contents are just dummy place holders) from the - template (by keeping their names in a `.gitattributes` file). Note - that only the first `echo` command has a `>` (to re-write the file - with the given line), the rest are `>>` (to append to it). After - doing this step in your own branch, when future commits in the - template make any change in the given files, they will not be - imported into your project's branch (it can be annoying!). You can - follow a similar strategy if you want to avoid any other set of - files to be imported from the template into your project's branch. + `paper.tex` (its contents are just dummy place holders) from Maneage + (by keeping their names in a `.gitattributes` file). Note that only + the first `echo` command has a `>` (to re-write the file with the + given line), the rest are `>>` (to append to it). After doing this + step in your own branch, when future commits in Maneage make any + change in the given files, they will not be imported into your + project's branch (it can be annoying!). You can follow a similar + strategy if you want to avoid any other set of files to be imported + from Maneage into your project's branch. ```shell $ echo "paper.tex" > .gitattributes @@ -701,9 +697,9 @@ First custom commit a year and the author's name. The License notice is a short (or full, when its not too long, like the MIT license) description of the copyright license, usually less than three paragraphs. Don't forget to - add these _two_ notices to any new file you add to this template for - your project. When you modify an existing template file (which already - has the notices), just add a copyright notice in your name under the + add these _two_ notices to any new file you add to Maneage for your + project. When you modify an existing Maneage file (which already has + the notices), just add a copyright notice in your name under the existing one(s), like the line with capital letters below. Please add this line with your name and email address to `paper.tex` and `tex/src/preamble-header.tex`. @@ -764,17 +760,17 @@ First custom commit Other basic customizations -------------------------- - - **High-level software**: The template installs all the software that - your project needs. You can specify which software your project needs - in `reproduce/software/config/TARGETS.conf`. The necessary software - are classified into two classes: 1) programs or libraries (usually - written in C/C++) which are run directly by the operating system. 2) - Python modules/libraries that are run within Python. By default + - **High-level software**: Maneage installs all the software that your + project needs. You can specify which software your project needs in + `reproduce/software/config/TARGETS.conf`. The necessary software are + classified into two classes: 1) programs or libraries (usually written + in C/C++) which are run directly by the operating system. 2) Python + modules/libraries that are run within Python. By default `TARGETS.conf` only has GNU Astronomy Utilities (Gnuastro) as one scientific program and Astropy as one scientific Python module. Both have many dependencies which will be installed into your project during the configuration step. To see a list of software that are - currently ready to be built in the template, see + currently ready to be built in Maneage, see `reproduce/software/config/versions.conf` (which has their versions also), the comments in `TARGETS.conf` describe how to use the software name from `versions.conf`. Currently the raw pipeline just uses @@ -793,7 +789,7 @@ Other basic customizations `reproduce/analysis/make/download.mk`. Have a look there to see how these values are to be used. This information about the input datasets is also used in the initial `configure` script (to inform the users), - so also modify that file. You can find all occurrences of the template + so also modify that file. You can find all occurrences of the demo dataset with the command below and replace it with your input's dataset. @@ -802,7 +798,7 @@ Other basic customizations ``` - **`README.md`**: Correct all the `XXXXX` place holders (name of your - project, your own name, address of the template's online/remote + project, your own name, address of your project's online/remote repository, link to download dependencies and etc). Generally, read over the text and update it where necessary to fit your project. Don't forget that this is the first file that is displayed on your online @@ -842,15 +838,15 @@ Other basic customizations the headers. You can use the provided function(s), or define one for your special formats. - - **Feedback**: As you use the template you will notice many things that - if implemented from the start would have been very useful for your - work. This can be in the actual scripting and architecture of the - template, or useful implementation and usage tips, like those - below. In any case, please share your thoughts and suggestions with - us, so we can add them here for everyone's benefit. + - **Feedback**: As you use Maneage you will notice many things that if + implemented from the start would have been very useful for your + work. This can be in the actual scripting and architecture of Maneage, + or useful implementation and usage tips, like those below. In any + case, please share your thoughts and suggestions with us, so we can + add them here for everyone's benefit. - **Updating TeXLive**: Currently the only software package that the - template doesn't build is TeXLive (since its not part of the analysis, + Maneage doesn't build is TeXLive (since its not part of the analysis, only for demonstration: building the PDf). So when a new version of TeXLive comes (once every year), if you would like to build the paper, its necessary to update it in your project (otherwise the configure @@ -926,8 +922,8 @@ for the benefit of others. of the processing, put all their configuration files in a devoted directory (with the program's name) within `reproduce/software/config`. Similar to the - `reproduce/software/config/gnuastro` directory (which is put in the - template as a demo in case you use GNU Astronomy Utilities). It is + `reproduce/software/config/gnuastro` directory (which is put in + Maneage as a demo in case you use GNU Astronomy Utilities). It is much cleaner and readable (thus less buggy) to avoid mixing the configuration files, even if there is no technical necessity. @@ -938,8 +934,8 @@ for the benefit of others. (copyrights aren't necessary for the latter). - *Copyright*: Always start a file containing programming constructs - with a copyright statement like the ones that this template starts - with (for example in the top level `Makefile`). + with a copyright statement like the ones that Maneage starts with + (for example in the top level `Makefile`). - *Comments*: Comments are vital for readability (by yourself in two months, or others). Describe everything you can about why you are @@ -1047,14 +1043,14 @@ for the benefit of others. .ONESHELL: .SHELLFLAGS = -ec all: mean-std.txt - shm-template = /dev/shm/$(shell whoami)-XXXXXXXXXX + shm-maneage := /dev/shm/$(shell whoami)-maneage-XXXXXXXXXX large1.txt: input.fits - out=$$(mktemp $(shm-template)) + out=$$(mktemp $(shm-maneage)) astarithmetic $< 2 + --output=$$out.fits echo "$$out" > $@ large2.txt: large1.txt input=$$(cat $<) - out=$$(mktemp $(shm-template)) + out=$$(mktemp $(shm-maneage)) astarithmetic $$input.fits 2 - --output=$$out.fits rm $$input.fits $$input echo "$$out" > $@ @@ -1064,7 +1060,7 @@ for the benefit of others. rm $$input.fits $$input ``` The important point here is that the temporary name template - (`shm-template`) has no suffix. So you can add the suffix + (`shm-maneage`) has no suffix. So you can add the suffix corresponding to your desired format afterwards (for example `$$out.fits`, or `$$out.txt`). But more importantly, when `mktemp` sets the random name, it also checks if no file exists with that name @@ -1078,15 +1074,14 @@ for the benefit of others. sure that first the file with a suffix is deleted, then the core random file (note that when working in parallel on powerful systems, in the time between deleting two files of a single `rm` command, many - things can happen!). When using this template, you can put the - definition of `shm-template` in - `reproduce/analysis/make/initialize.mk` to be usable in all the - different Makefiles of your analysis, and you won't need the three - lines above it. **Finally, BE RESPONSIBLE:** after you are finished, - be sure to clean up any possibly remaining files (due to crashes in - the processing while you are working), otherwise your RAM may fill up - very fast. You can do it easily with a command like this on your - command-line: `rm -f /dev/shm/$(whoami)-*`. + things can happen!). When using Maneage, you can put the definition + of `shm-maneage` in `reproduce/analysis/make/initialize.mk` to be + usable in all the different Makefiles of your analysis, and you won't + need the three lines above it. **Finally, BE RESPONSIBLE:** after you + are finished, be sure to clean up any possibly remaining files (due + to crashes in the processing while you are working), otherwise your + RAM may fill up very fast. You can do it easily with a command like + this on your command-line: `rm -f /dev/shm/$(whoami)-*`. - **Software tarballs and raw inputs**: It is critically important to @@ -1114,69 +1109,69 @@ for the benefit of others. project's reproducibility, so like the above for software, make sure you have a backup of them, or their persistent identifiers (PIDs). - - **Version control**: Version control is a critical component of this - template. Here are some tips to help in effectively using it. + - **Version control**: Version control is a critical component of + Maneage. Here are some tips to help in effectively using it. - *Regular commits*: It is important (and extremely useful) to have the history of your project under version control. So try to make commits regularly (after any meaningful change/step/result). - - *Keep template up-to-date*: In time, this template is going to become - more and more mature and robust (thanks to your feedback and the - feedback of other users). Bugs will be fixed and new/improved - features will be added. So every once and a while, you can run the - commands below to pull new work that is done in this template. If the - changes are useful for your work, you can merge them with your - project to benefit from them. Just pay **very close attention** to - resolving possible **conflicts** which might happen in the merge - (updated settings that you have customized in the template). + - *Keep Maneage up-to-date*: In time, Maneage is going to become more + and more mature and robust (thanks to your feedback and the feedback + of other users). Bugs will be fixed and new/improved features will be + added. So every once and a while, you can run the commands below to + pull new work that is done in Maneage. If the changes are useful for + your work, you can merge them with your project to benefit from + them. Just pay **very close attention** to resolving possible + **conflicts** which might happen in the merge (updated settings that + you have customized in Maneage). ```shell - $ git checkout template - $ git pull # Get recent work in the template + $ git checkout maneage + $ git pull # Get recent work in Maneage $ git log XXXXXX..XXXXXX --reverse # Inspect new work (replace XXXXXXs with hashs mentioned in output of previous command). $ git log --oneline --graph --decorate --all # General view of branches. $ git checkout master # Go to your top working branch. - $ git merge template # Import all the work into master. + $ git merge maneage # Import all the work into master. ``` - - *Adding this template to a fork of your project*: As you and your - colleagues continue your project, it will be necessary to have - separate forks/clones of it. But when you clone your own project on a + - *Adding Maneage to a fork of your project*: As you and your colleagues + continue your project, it will be necessary to have separate + forks/clones of it. But when you clone your own project on a different system, or a colleague clones it to collaborate with you, - the clone won't have the `template-origin` remote that you started - the project with. As shown in the previous item above, you need this - remote to be able to pull recent updates from the template. The steps - below will setup the `template-origin` remote, and a local `template` + the clone won't have the `origin-maneage` remote that you started the + project with. As shown in the previous item above, you need this + remote to be able to pull recent updates from Maneage. The steps + below will setup the `origin-maneage` remote, and a local `maneage` branch to track it, on the new clone. ```shell - $ git remote add template-origin git://git.sv.gnu.org/reproduce - $ git fetch template-origin - $ git checkout -b template --track template-origin/master + $ git remote add origin-maneage https://gitlab.com/maneage/project.git + $ git fetch origin-maneage + $ git checkout -b maneage --track origin-maneage/maneage ``` - *Commit message*: The commit message is a very important and useful aspect of version control. To make the commit message useful for others (or yourself, one year later), it is good to follow a - consistent style. The template already has a consistent formatting + consistent style. Maneage already has a consistent formatting (described below), which you can also follow in your project if you - like. You can see many examples by running `git log` in the - `template` branch. If you intend to push commits to the main - template, for the consistency of the template, it is necessary to - follow these guidelines. 1) No line should be more than 75 characters - (to enable easy reading of the message when you run `git log` on the - standard 80-character terminal). 2) The first line is the title of - the commit and should summarize it (so `git log --oneline` can be - useful). The title should also not end with a point (`.`, because its - a short single sentence, so a point is not necessary and only wastes - space). 3) After the title, leave an empty line and start the body of - your message (possibly containing many paragraphs). 4) Describe the - context of your commit (the problem it is trying to solve) as much as - possible, then go onto how you solved it. One suggestion is to start - the main body of your commit with "Until now ...", and continue - describing the problem in the first paragraph(s). Afterwards, start - the next paragraph with "With this commit ...". + like. You can see many examples by running `git log` in the `maneage` + branch. If you intend to push commits to Maneage, for the consistency + of Maneage, it is necessary to follow these guidelines. 1) No line + should be more than 75 characters (to enable easy reading of the + message when you run `git log` on the standard 80-character + terminal). 2) The first line is the title of the commit and should + summarize it (so `git log --oneline` can be useful). The title should + also not end with a point (`.`, because its a short single sentence, + so a point is not necessary and only wastes space). 3) After the + title, leave an empty line and start the body of your message + (possibly containing many paragraphs). 4) Describe the context of + your commit (the problem it is trying to solve) as much as possible, + then go onto how you solved it. One suggestion is to start the main + body of your commit with "Until now ...", and continue describing the + problem in the first paragraph(s). Afterwards, start the next + paragraph with "With this commit ...". - *Tags*: To help manage the history, tag all major commits. This helps make a more human-friendly output of `git describe`: for example @@ -1189,8 +1184,8 @@ for the benefit of others. headers](https://www.gnu.org/software/gnuastro/manual/html_node/Output-headers.html). In the checklist above, you tagged the first commit of your project with `v0`. Here is one suggestion on when to tag: when you have fully - adopted the template and have got the first (initial) results, you - can make a `v1` tag. Subsequently when you first start reporting the + adopted Maneage and have got the first (initial) results, you can + make a `v1` tag. Subsequently when you first start reporting the results to your colleagues, you can tag the commit as `v2` and increment the version on every later circulation, or referee submission. @@ -1212,9 +1207,9 @@ for the benefit of others. communications). After the research is published, you can also release the outputs repository, or you can just delete it if it is too large or un-necessary (it was just for convenience, and fully - reproducible after all). For example this template's output is - available for demonstration in the separate - [reproducible-paper-output](https://gitlab.com/makhlaghi/reproducible-paper-output) + reproducible after all). For example Maneage's output is available + for demonstration in the separate + [reproducible-paper-output](https://gitlab.com/maneage/output-raw) repository. - *Full Git history in one file*: When you are publishing your project @@ -1261,13 +1256,13 @@ future are listed below, please join us if you are interested. Package management ------------------ -It is important to have control of the environment of the project. The -current template builds the higher-level programs (for example GNU Bash, -GNU Make, GNU AWK and domain-specific software) it needs, then sets `PATH` -so the analysis is done only with the project's built software. But -currently the configuration of each program is in the Makefile rules that -build it. This is not good because a change in the build configuration does -not automatically cause a re-build. Also, each separate project on a system +It is important to have control of the environment of the project. Maneage +currently builds the higher-level programs (for example GNU Bash, GNU Make, +GNU AWK and domain-specific software) it needs, then sets `PATH` so the +analysis is done only with the project's built software. But currently the +configuration of each program is in the Makefile rules that build it. This +is not good because a change in the build configuration does not +automatically cause a re-build. Also, each separate project on a system needs to have its own built tools (that can waste a lot of space). A good solution is based on the [Nix package @@ -1346,18 +1341,17 @@ order of operations: this is contrary to the scientific spirit. Copyright information --------------------- -This file is part of the reproducible paper template - http://savannah.nongnu.org/projects/reproduce +This file is part of Maneage's core: https://gitlab.com/maneage/project -This template is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free +Maneage is free software: you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. -This template is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -more details. +Maneage is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +details. You should have received a copy of the GNU General Public License along -with Template. If not, see . +with Maneage. If not, see . diff --git a/README.md b/README.md index f89f89a..f0bde5c 100644 --- a/README.md +++ b/README.md @@ -26,12 +26,9 @@ $ ./project make To learn more about the purpose, principles and technicalities of this reproducible paper, please see `README-hacking.md`. For a general -introduction to reproducible science as implemented in this project, please -see the [principles of reproducible -science](http://akhlaghi.org/reproducible-science.html), and a -[reproducible paper -template](https://gitlab.com/makhlaghi/reproducible-paper) that is based on -it. +introduction to reproducible science as implemented in this project +(through Maneage), please see the [Maneage +project](https://gitlab.com/maneage/project) for more. @@ -92,9 +89,9 @@ requiring root/administrator permissions. Source from arXiv ----------------- If the paper is also published on arXiv, it is highly likely that the -authors also uploaded/published the full reproducible paper template there -along with the LaTeX sources. If you have downloaded (or plan to download) -this source from arXiv, some minor extra steps are necessary: +authors also uploaded/published the full project there along with the LaTeX +sources. If you have downloaded (or plan to download) this source from +arXiv, some minor extra steps are necessary: 1. If the arXiv code for the paper is 1234.56789, then the downloaded source will be called `1234.56789` (no special identification diff --git a/project b/project index e2d4c66..22a4b49 100755 --- a/project +++ b/project @@ -5,15 +5,15 @@ # # Copyright (C) 2019-2020 Mohammad Akhlaghi # -# This script is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This file is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This script is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. See . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . # Basic settings diff --git a/reproduce/analysis/bash/download-multi-try b/reproduce/analysis/bash/download-multi-try index 7a5f8f2..4136df4 100755 --- a/reproduce/analysis/bash/download-multi-try +++ b/reproduce/analysis/bash/download-multi-try @@ -28,15 +28,15 @@ # # Copyright (C) 2019-2020 Mohammad Akhlaghi # -# This script is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This script is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This script is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. See . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . diff --git a/reproduce/analysis/make/delete-me.mk b/reproduce/analysis/make/delete-me.mk index 8b97673..974561d 100644 --- a/reproduce/analysis/make/delete-me.mk +++ b/reproduce/analysis/make/delete-me.mk @@ -2,18 +2,15 @@ # # Copyright (C) 2018-2020 Mohammad Akhlaghi # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . diff --git a/reproduce/analysis/make/download.mk b/reproduce/analysis/make/download.mk index 07e9f27..48984c7 100644 --- a/reproduce/analysis/make/download.mk +++ b/reproduce/analysis/make/download.mk @@ -7,15 +7,15 @@ # # Copyright (C) 2018-2020 Mohammad Akhlaghi # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. See . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . diff --git a/reproduce/analysis/make/initialize.mk b/reproduce/analysis/make/initialize.mk index d8a8b73..ce63480 100644 --- a/reproduce/analysis/make/initialize.mk +++ b/reproduce/analysis/make/initialize.mk @@ -2,18 +2,15 @@ # # Copyright (C) 2018-2020 Mohammad Akhlaghi # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . diff --git a/reproduce/analysis/make/paper.mk b/reproduce/analysis/make/paper.mk index 8a14573..e669a96 100644 --- a/reproduce/analysis/make/paper.mk +++ b/reproduce/analysis/make/paper.mk @@ -2,18 +2,15 @@ # # Copyright (C) 2018-2020 Mohammad Akhlaghi # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . diff --git a/reproduce/analysis/make/prepare.mk b/reproduce/analysis/make/prepare.mk index 36f25e7..9f80afe 100644 --- a/reproduce/analysis/make/prepare.mk +++ b/reproduce/analysis/make/prepare.mk @@ -2,15 +2,15 @@ # # Copyright (C) 2019-2020 Mohammad Akhlaghi # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. See . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . diff --git a/reproduce/analysis/make/top-make.mk b/reproduce/analysis/make/top-make.mk index 43e88b2..feae6db 100644 --- a/reproduce/analysis/make/top-make.mk +++ b/reproduce/analysis/make/top-make.mk @@ -2,18 +2,15 @@ # # Copyright (C) 2018-2020 Mohammad Akhlaghi # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . diff --git a/reproduce/analysis/make/top-prepare.mk b/reproduce/analysis/make/top-prepare.mk index be7482c..79b976f 100644 --- a/reproduce/analysis/make/top-prepare.mk +++ b/reproduce/analysis/make/top-prepare.mk @@ -6,18 +6,15 @@ # # Copyright (C) 2019-2020 Mohammad Akhlaghi # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . diff --git a/reproduce/analysis/make/verify.mk b/reproduce/analysis/make/verify.mk index d11dcbf..1188797 100644 --- a/reproduce/analysis/make/verify.mk +++ b/reproduce/analysis/make/verify.mk @@ -2,18 +2,15 @@ # # Copyright (C) 2020 Mohammad Akhlaghi # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This file is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . diff --git a/reproduce/software/config/checksums.conf b/reproduce/software/config/checksums.conf index 37fe64d..b173589 100644 --- a/reproduce/software/config/checksums.conf +++ b/reproduce/software/config/checksums.conf @@ -2,18 +2,15 @@ # # Copyright (C) 2018-2020 Mohammad Akhlaghi # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . diff --git a/reproduce/software/config/versions.conf b/reproduce/software/config/versions.conf index 0c2cd0b..1b6de7c 100644 --- a/reproduce/software/config/versions.conf +++ b/reproduce/software/config/versions.conf @@ -3,18 +3,15 @@ # Copyright (C) 2018-2020 Mohammad Akhlaghi # Copyright (C) 2019-2020 Raul Infante-Sainz # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . diff --git a/reproduce/software/make/atlas-multiple.mk b/reproduce/software/make/atlas-multiple.mk index b05d3f8..c98130d 100755 --- a/reproduce/software/make/atlas-multiple.mk +++ b/reproduce/software/make/atlas-multiple.mk @@ -10,18 +10,15 @@ # # Copyright (C) 2019-2020 Mohammad Akhlaghi # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . ORIGLDFLAGS := $(LDFLAGS) diff --git a/reproduce/software/make/atlas-single.mk b/reproduce/software/make/atlas-single.mk index 61ae9a1..82eade9 100755 --- a/reproduce/software/make/atlas-single.mk +++ b/reproduce/software/make/atlas-single.mk @@ -10,18 +10,15 @@ # # Copyright (C) 2019-2020 Mohammad Akhlaghi # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . ORIGLDFLAGS := $(LDFLAGS) diff --git a/reproduce/software/make/basic.mk b/reproduce/software/make/basic.mk index d1fbc3f..138e07e 100644 --- a/reproduce/software/make/basic.mk +++ b/reproduce/software/make/basic.mk @@ -18,18 +18,15 @@ # Copyright (C) 2018-2020 Mohammad Akhlaghi # Copyright (C) 2019-2020 Raul Infante-Sainz # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . # Top level environment diff --git a/reproduce/software/make/build-rules.mk b/reproduce/software/make/build-rules.mk index f3ca7d2..8d78ce3 100644 --- a/reproduce/software/make/build-rules.mk +++ b/reproduce/software/make/build-rules.mk @@ -5,18 +5,15 @@ # # Copyright (C) 2018-2020 Mohammad Akhlaghi # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . diff --git a/reproduce/software/make/high-level.mk b/reproduce/software/make/high-level.mk index 06ac332..e567f0c 100644 --- a/reproduce/software/make/high-level.mk +++ b/reproduce/software/make/high-level.mk @@ -11,18 +11,15 @@ # Copyright (C) 2018-2020 Mohammad Akhlaghi # Copyright (C) 2019-2020 Raul Infante-Sainz # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . diff --git a/reproduce/software/make/python.mk b/reproduce/software/make/python.mk index 1ef1bf2..fc71113 100644 --- a/reproduce/software/make/python.mk +++ b/reproduce/software/make/python.mk @@ -11,18 +11,15 @@ # Copyright (C) 2019-2020 Raul Infante-Sainz # Copyright (C) 2019-2020 Mohammad Akhlaghi # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . diff --git a/reproduce/software/shell/bashrc.sh b/reproduce/software/shell/bashrc.sh index b2a151f..69bbba6 100755 --- a/reproduce/software/shell/bashrc.sh +++ b/reproduce/software/shell/bashrc.sh @@ -31,15 +31,12 @@ # # Copyright (C) 2019-2020 Mohammad Akhlaghi # -# This script is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This script is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# This script is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . diff --git a/reproduce/software/shell/configure.sh b/reproduce/software/shell/configure.sh index 9f6f3e6..7f837a5 100755 --- a/reproduce/software/shell/configure.sh +++ b/reproduce/software/shell/configure.sh @@ -4,18 +4,18 @@ # # Copyright (C) 2018-2020 Mohammad Akhlaghi # -# This script is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This script is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This script is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . + + + # Script settings diff --git a/tex/README.md b/tex/README.md index 0f2f0d6..a87832a 100644 --- a/tex/README.md +++ b/tex/README.md @@ -45,15 +45,12 @@ be built. ### Copyright information -This project is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This project is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -more details. - -You should have received a copy of the GNU General Public License along -with this project. If not, see . \ No newline at end of file +This file is part of Maneage. Maneage is free software: you can +redistribute it and/or modify it under the terms of the GNU General Public +License as published by the Free Software Foundation, either version 3 of +the License, or (at your option) any later version. + +Maneage is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +details. See . diff --git a/tex/src/delete-me-demo.tex b/tex/src/delete-me-demo.tex index a4f8d42..a18f822 100644 --- a/tex/src/delete-me-demo.tex +++ b/tex/src/delete-me-demo.tex @@ -2,18 +2,15 @@ % %% Copyright (C) 2019-2020 Mohammad Akhlaghi % -%% This template is free software: you can redistribute it and/or modify it -%% under the terms of the GNU General Public License as published by the -%% Free Software Foundation, either version 3 of the License, or (at your -%% option) any later version. +%% This LaTeX file is part of Maneage. Maneage is free software: you can +%% redistribute it and/or modify it under the terms of the GNU General +%% Public License as published by the Free Software Foundation, either +%% version 3 of the License, or (at your option) any later version. % -%% This template is distributed in the hope that it will be useful, but -%% WITHOUT ANY WARRANTY; without even the implied warranty of -%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%% General Public License for more details. -% -%% You should have received a copy of the GNU General Public License along -%% with this template. If not, see . +%% Maneage is distributed in the hope that it will be useful, but WITHOUT +%% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +%% FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +%% for more details. See . \begin{tikzpicture} diff --git a/tex/src/delete-me.tex b/tex/src/delete-me.tex index ae68441..e691f8c 100644 --- a/tex/src/delete-me.tex +++ b/tex/src/delete-me.tex @@ -2,18 +2,15 @@ %% %% Copyright (C) 2019-2020 Mohammad Akhlaghi % -%% This template is free software: you can redistribute it and/or modify it -%% under the terms of the GNU General Public License as published by the -%% Free Software Foundation, either version 3 of the License, or (at your -%% option) any later version. +%% This LaTeX file is part of Maneage. Maneage is free software: you can +%% redistribute it and/or modify it under the terms of the GNU General +%% Public License as published by the Free Software Foundation, either +%% version 3 of the License, or (at your option) any later version. % -%% This template is distributed in the hope that it will be useful, but -%% WITHOUT ANY WARRANTY; without even the implied warranty of -%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%% General Public License for more details. -% -%% You should have received a copy of the GNU General Public License along -%% with this template. If not, see . +%% Maneage is distributed in the hope that it will be useful, but WITHOUT +%% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +%% FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +%% for more details. See . \begin{tikzpicture} diff --git a/tex/src/preamble-biblatex.tex b/tex/src/preamble-biblatex.tex index fc9f259..1955bf0 100644 --- a/tex/src/preamble-biblatex.tex +++ b/tex/src/preamble-biblatex.tex @@ -14,18 +14,15 @@ % %% Copyright (C) 2018-2020 Mohammad Akhlaghi % -%% This template is free software: you can redistribute it and/or modify it -%% under the terms of the GNU General Public License as published by the -%% Free Software Foundation, either version 3 of the License, or (at your -%% option) any later version. +%% This LaTeX file is part of Maneage. Maneage is free software: you can +%% redistribute it and/or modify it under the terms of the GNU General +%% Public License as published by the Free Software Foundation, either +%% version 3 of the License, or (at your option) any later version. % -%% This template is distributed in the hope that it will be useful, but -%% WITHOUT ANY WARRANTY; without even the implied warranty of -%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%% General Public License for more details. -% -%% You should have received a copy of the GNU General Public License along -%% with this template. If not, see . +%% Maneage is distributed in the hope that it will be useful, but WITHOUT +%% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +%% FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +%% for more details. See . diff --git a/tex/src/preamble-header.tex b/tex/src/preamble-header.tex index 81a08b0..7b04508 100644 --- a/tex/src/preamble-header.tex +++ b/tex/src/preamble-header.tex @@ -3,18 +3,15 @@ % %% Copyright (C) 2018-2020 Mohammad Akhlaghi % -%% This template is free software: you can redistribute it and/or modify it -%% under the terms of the GNU General Public License as published by the -%% Free Software Foundation, either version 3 of the License, or (at your -%% option) any later version. +%% This LaTeX file is part of Maneage. Maneage is free software: you can +%% redistribute it and/or modify it under the terms of the GNU General +%% Public License as published by the Free Software Foundation, either +%% version 3 of the License, or (at your option) any later version. % -%% This template is distributed in the hope that it will be useful, but -%% WITHOUT ANY WARRANTY; without even the implied warranty of -%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%% General Public License for more details. -% -%% You should have received a copy of the GNU General Public License along -%% with this template. If not, see . +%% Maneage is distributed in the hope that it will be useful, but WITHOUT +%% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +%% FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +%% for more details. See . diff --git a/tex/src/preamble-necessary.tex b/tex/src/preamble-necessary.tex index b6f5b55..73cee24 100644 --- a/tex/src/preamble-necessary.tex +++ b/tex/src/preamble-necessary.tex @@ -6,18 +6,15 @@ % %% Copyright (C) 2018-2020 Mohammad Akhlaghi % -%% This template is free software: you can redistribute it and/or modify it -%% under the terms of the GNU General Public License as published by the -%% Free Software Foundation, either version 3 of the License, or (at your -%% option) any later version. +%% This LaTeX file is part of Maneage. Maneage is free software: you can +%% redistribute it and/or modify it under the terms of the GNU General +%% Public License as published by the Free Software Foundation, either +%% version 3 of the License, or (at your option) any later version. % -%% This template is distributed in the hope that it will be useful, but -%% WITHOUT ANY WARRANTY; without even the implied warranty of -%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%% General Public License for more details. -% -%% You should have received a copy of the GNU General Public License along -%% with this template. If not, see . +%% Maneage is distributed in the hope that it will be useful, but WITHOUT +%% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +%% FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +%% for more details. See . diff --git a/tex/src/preamble-pgfplots.tex b/tex/src/preamble-pgfplots.tex index 0ffb294..4131c9c 100644 --- a/tex/src/preamble-pgfplots.tex +++ b/tex/src/preamble-pgfplots.tex @@ -42,18 +42,15 @@ % %% Copyright (C) 2018-2020 Mohammad Akhlaghi % -%% This template is free software: you can redistribute it and/or modify it -%% under the terms of the GNU General Public License as published by the -%% Free Software Foundation, either version 3 of the License, or (at your -%% option) any later version. +%% This LaTeX file is part of Maneage. Maneage is free software: you can +%% redistribute it and/or modify it under the terms of the GNU General +%% Public License as published by the Free Software Foundation, either +%% version 3 of the License, or (at your option) any later version. % -%% This template is distributed in the hope that it will be useful, but -%% WITHOUT ANY WARRANTY; without even the implied warranty of -%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%% General Public License for more details. -% -%% You should have received a copy of the GNU General Public License along -%% with this template. If not, see . +%% Maneage is distributed in the hope that it will be useful, but WITHOUT +%% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +%% FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +%% for more details. See . diff --git a/tex/src/preamble-style.tex b/tex/src/preamble-style.tex index 95fafc8..25e1146 100644 --- a/tex/src/preamble-style.tex +++ b/tex/src/preamble-style.tex @@ -8,18 +8,15 @@ %% %% Copyright (C) 2019-2020 Mohammad Akhlaghi % -%% This template is free software: you can redistribute it and/or modify it -%% under the terms of the GNU General Public License as published by the -%% Free Software Foundation, either version 3 of the License, or (at your -%% option) any later version. +%% This LaTeX file is part of Maneage. Maneage is free software: you can +%% redistribute it and/or modify it under the terms of the GNU General +%% Public License as published by the Free Software Foundation, either +%% version 3 of the License, or (at your option) any later version. % -%% This template is distributed in the hope that it will be useful, but -%% WITHOUT ANY WARRANTY; without even the implied warranty of -%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%% General Public License for more details. -% -%% You should have received a copy of the GNU General Public License along -%% with this template. If not, see . +%% Maneage is distributed in the hope that it will be useful, but WITHOUT +%% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +%% FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +%% for more details. See . -- cgit v1.2.1 From ac7b82baa6b812e1086197f8e050cb373f3395f1 Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Mon, 20 Apr 2020 19:30:33 +0100 Subject: README-hacking.md: Removed TeXLive year problem and numberd checklist We recently fixed the problem of TeXLive that hard-codes the year of its build in its installation directory. But the note on this problem was still kept in `README-hacking.md'. That part is now removed. Also, to help in following the checklist, it is now an ordered list. --- README-hacking.md | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/README-hacking.md b/README-hacking.md index 0e5d359..9be0c61 100644 --- a/README-hacking.md +++ b/README-hacking.md @@ -521,7 +521,7 @@ advanced in later stages of your work. First custom commit ------------------- - - **Get this repository and its history** (if you don't already have it): + 1. **Get this repository and its history** (if you don't already have it): Arguably the easiest way to start is to clone this repository as shown below. As you see, after the cloning some further corrections to your clone's Git settings are necessary: first, you need to remove all @@ -542,7 +542,7 @@ First custom commit $ pwd # Just to confirm where you are. ``` - - **Prepare to build project**: The `./project configure` command of the + 2. **Prepare to build project**: The `./project configure` command of the next step will build the different software packages within the "build" directory (that you will specify). Nothing else on your system will be touched. However, since it takes long, it is useful to see @@ -562,7 +562,7 @@ First custom commit $ ./project --check-config ``` - - **Test Maneage**: Before making any changes, it is important to test it + 3. **Test Maneage**: Before making any changes, it is important to test it and see if everything works properly with the commands below. If there is any problem in the `./project configure` or `./project make` steps, please contact us to fix the problem before continuing. Since the @@ -580,7 +580,7 @@ First custom commit # Open 'paper.pdf' and see if everything is ok. ``` - - **Setup the remote**: You can use any [hosting + 4. **Setup the remote**: You can use any [hosting facility](https://en.wikipedia.org/wiki/Comparison_of_source_code_hosting_facilities) that supports Git to keep an online copy of your project's version controlled history. We recommend [GitLab](https://gitlab.com) because @@ -606,7 +606,7 @@ First custom commit git push origin maneage # Push 'maneage' branch to 'origin' (no tracking). ``` - - **Title**, **short description** and **author**: The title and basic + 5. **Title**, **short description** and **author**: The title and basic information of your project's output PDF paper should be added in `paper.tex`. You should see the relevant place in the preamble (prior to `\begin{document}`. After you are done, run the `./project make` @@ -617,7 +617,7 @@ First custom commit your own methods after finishing this checklist and doing your first commit. - - **Delete dummy parts (can be done later)**: Maneage contains some parts + 6. **Delete dummy parts (can be done later)**: Maneage contains some parts that are only for the initial/test run, mainly as a demonstration of important steps. They not for any real analysis. You can remove these parts in the file below @@ -688,7 +688,7 @@ First custom commit $ git add .gitattributes ``` - - **Copyright and License notice**: To be usable/modifiable by others + 7. **Copyright and License notice**: To be usable/modifiable by others after publication, _all_ the "copyright-able" files in your project (those larger than 10 lines) must have a copyright notice and license notice. Please take a moment to look at several existing files to see @@ -709,7 +709,7 @@ First custom commit Copyright (C) 2020 YOUR NAME ``` - - **Configure Git for fist time**: If you have never used Git, then you + 8. **Configure Git for fist time**: If you have never used Git, then you have to configure it with some basic information in order to have essential information in the commit messages (ignore this step if you have already done it). Git will include your name and e-mail address @@ -722,7 +722,7 @@ First custom commit $ git config --global core.editor vim ``` - - **Your first commit**: You have already made some small and basic + 9. **Your first commit**: You have already made some small and basic changes in the steps above and you are in the `master` branch. So, you can officially make your first commit in your project's history. But before that you need to make sure that there are no problems in the @@ -739,7 +739,7 @@ First custom commit $ git tag -a v0 # Tag this as the zero-th version of your project. ``` - - **Push to the remote**: Push your first commit and its tag to your + 10. **Push to the remote**: Push your first commit and its tag to your remote repository with these commands. Since we have setup your `master` branch to follow `origin/master`, you can just use `git push` from now on. @@ -749,7 +749,7 @@ First custom commit $ git push --tags ``` - - **Start your exciting research**: You are now ready to add flesh and + 11. **Start your exciting research**: You are now ready to add flesh and blood to this raw skeleton by further modifying and adding your exciting research steps. You can use the "published works" section in the introduction (above) as some fully working models to learn @@ -845,16 +845,6 @@ Other basic customizations case, please share your thoughts and suggestions with us, so we can add them here for everyone's benefit. - - **Updating TeXLive**: Currently the only software package that the - Maneage doesn't build is TeXLive (since its not part of the analysis, - only for demonstration: building the PDf). So when a new version of - TeXLive comes (once every year), if you would like to build the paper, - its necessary to update it in your project (otherwise the configure - script will crash). To do that, just modify the years in - `reproduce/software/config/texlive.conf`, then delete - `.build/software/tarballs/install-tl-unx.tar.gz`. The next time you - run `./project configure`, the new TeXLive will be installed and used. - - **Pre-publication: add notice on reproducibility**: Add a notice somewhere prominent in the first page within your paper, informing the reader that your research is fully reproducible. For example in the -- cgit v1.2.1 From ad84e266987a46d88336a23a14ea27100e4cd160 Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Mon, 20 Apr 2020 20:33:39 +0100 Subject: Configuration: current directory printed properly in stdout Until now, the message that we printed just before starting to build software didn't actually print the current directory, but only `pwd'. With this commit, this is fixed (it uses the `currentdir' variable that is already found before). --- reproduce/software/shell/configure.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/reproduce/software/shell/configure.sh b/reproduce/software/shell/configure.sh index 7f837a5..b4cf43b 100755 --- a/reproduce/software/shell/configure.sh +++ b/reproduce/software/shell/configure.sh @@ -610,6 +610,7 @@ fi # Build directory # --------------- +currentdir=$(pwd) if [ $rewritepconfig = yes ]; then cat < Date: Tue, 21 Apr 2020 18:18:20 +0100 Subject: README-hacking.md: minor clarifications in checklist Roberto Baena recently tried building a new project with Maneage and provided the following suggestions to make it more clear for a new user: 1) In the part where we talk about creating a Git repository, we should highlight that it must be empty. This is because some (for example Gitlab) propose to include a `README' file. But if the project is not empty, Git will not allow pushing to it. 2) The `(can be done later)' comment was removed from the "Delete dummy parts") to avoid confusion about applying some of them, but not others: if only some are done, it may cause problems in the build. --- README-hacking.md | 60 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/README-hacking.md b/README-hacking.md index 9be0c61..357e981 100644 --- a/README-hacking.md +++ b/README-hacking.md @@ -588,17 +588,19 @@ First custom commit perfect)](https://www.gnu.org/software/repo-criteria-evaluation.html), and later you can also host GitLab on your own server. Anyway, create an account in your favorite hosting facility (if you don't already - have one), and define a new project there. It will give you a URL - (usually starting with `git@` and ending in `.git`), put this URL in - place of `XXXXXXXXXX` in the first command below. With the second - command, "push" your `master` branch to your `origin` remote, and - (with the `--set-upstream` option) set them to track/follow each - other. However, the `maneage` branch is currently tracking/following - your `origin-maneage` remote (automatically set when you cloned - Maneage). So when pushing the `maneage` branch to your `origin` - remote, you _shouldn't_ use `--set-upstream`. With the last command, - you can actually check this (which local and remote branches are - tracking each other). + have one), and define a new project there. Please make sure *the newly + created project is empty* (some services ask to include a `README` in + a new project which is bad in this scenario, and will not allow you to + push to it). It will give you a URL (usually starting with `git@` and + ending in `.git`), put this URL in place of `XXXXXXXXXX` in the first + command below. With the second command, "push" your `master` branch to + your `origin` remote, and (with the `--set-upstream` option) set them + to track/follow each other. However, the `maneage` branch is currently + tracking/following your `origin-maneage` remote (automatically set + when you cloned Maneage). So when pushing the `maneage` branch to your + `origin` remote, you _shouldn't_ use `--set-upstream`. With the last + command, you can actually check this (which local and remote branches + are tracking each other). ```shell git remote add origin XXXXXXXXXX # Newly created repo is now called 'origin'. @@ -617,21 +619,23 @@ First custom commit your own methods after finishing this checklist and doing your first commit. - 6. **Delete dummy parts (can be done later)**: Maneage contains some parts - that are only for the initial/test run, mainly as a demonstration of - important steps. They not for any real analysis. You can remove these - parts in the file below + 6. **Delete dummy parts**: Maneage contains some parts that are only for + the initial/test run, mainly as a demonstration of important steps, + which you can use as a reference to use in your own project. But they + not for any real analysis, so you should remove these parts as + described below: - `paper.tex`: 1) Delete the text of the abstract (from - `\includeabstract{` to `\vspace{0.25cm}`) and start writing your own - (a single sentence can be enough now). 2) Add some keywords under it - in the keywords part. 3) Delete everything between `%% Start of main - body.` and `%% End of main body.`. 4) Remove the notice in the - "Acknowledgments" section (in `\new{}`) and add Acknowledge your - funding sources. Just don't delete the existing acknowledgment - statement: Maneage was designed by funding from many grants. Since - you are using it in your work, it is necessary to acknowledge them - in your work also. + `\includeabstract{` to `\vspace{0.25cm}`) and write your own own (a + single sentence can be enough now, you can complete it later). 2) + Add some keywords under it in the keywords part. 3) Delete + everything between `%% Start of main body.` and `%% End of main + body.`. 4) Remove the notice in the "Acknowledgments" section (in + `\new{}`) and Acknowledge your funding sources (this can also be + done later). Just don't delete the existing acknowledgment + statement: Maneage is possible thanks to funding from several + grants. Since Maneage is being used in your work, it is necessary to + acknowledge them in your work also. - `reproduce/analysis/make/top-make.mk`: Delete the `delete-me` line in the `makesrc` definition. Just make sure there is no empty line @@ -674,10 +678,10 @@ First custom commit the first `echo` command has a `>` (to re-write the file with the given line), the rest are `>>` (to append to it). After doing this step in your own branch, when future commits in Maneage make any - change in the given files, they will not be imported into your - project's branch (it can be annoying!). You can follow a similar - strategy if you want to avoid any other set of files to be imported - from Maneage into your project's branch. + change in these files, it will not cause a conflict with your + project when you update Maneage (it is annoying!). You can follow a + similar strategy if you want to avoid any other set of files to be + imported from Maneage into your project's branch. ```shell $ echo "paper.tex" > .gitattributes -- cgit v1.2.1 From 7d2664212f1a22fbf8680855e77a316b94282b2f Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Tue, 21 Apr 2020 19:01:43 +0100 Subject: README-hacking.md: removed any mention of tags Tags are not a fixed piece of history (they can easily be moved and not imported in a different repository), so they are only confusing in the context of Maneage (where people should branch-off the main project). the raw commit hashes are a much more robust way to store a precise moment in history. Before this commit, I removed all Tags from the main Git repositories of Maneage and thus removed any mention of Tags with `README-hacking.md'. Ofcourse, if a project decides to use tags is upto them, but we won't implement it in the main branch. --- README-hacking.md | 162 +++++++++++++++++++++++------------------------------- 1 file changed, 68 insertions(+), 94 deletions(-) diff --git a/README-hacking.md b/README-hacking.md index 357e981..76dedce 100644 --- a/README-hacking.md +++ b/README-hacking.md @@ -252,7 +252,7 @@ and understand how to implement your research project within its framework: where to add new files and which existing files to modify for what purpose. But if this the first time you are using Maneage, before reading this theoretical discussion, please run Maneage once from scratch without -any chages (described in `README.md`). You will see how it works (note that +any changes (described in `README.md`). You will see how it works (note that the configure step builds all necessary software, so it can take long, but you can continue reading while its working). @@ -274,7 +274,7 @@ top build directory and `.local` for easy access to the custom built software installation directory. With these you can easily access the build directory and project-specific software from your top source directory. For example if you run `.local/bin/ls` you will be using the `ls` of Maneage, -which is problably different from your system's `ls` (run them both with +which is probably different from your system's `ls` (run them both with `--version` to check). Once the project is configured for your system, `./project make` will do @@ -353,7 +353,7 @@ compiling it to the final PDF). So the last target in a workhorse-Makefile is a `.tex` file (with the same base-name as the Makefile, but in `$(BDIR)/tex/macros`). As a result, if the targets in a workhorse-Makefile aren't directly a prerequisite of other workhorse-Makefile targets, they -can be a pre-requisite of that intermediate LaTeX macro file and thus be +can be a prerequisite of that intermediate LaTeX macro file and thus be called when necessary. Otherwise, they will be ignored by Make. Maneage also has a mode to share the build directory between several @@ -438,8 +438,8 @@ files, it makes no effort in keeping the file meta data, and in particular the dates of files. Therefore when you checkout to a different branch, files that are re-written by Git will have a newer date than the other project files. However, file dates are important in the current design of -Maneage: Make uses file dates of the pre-requisits and targets to see -if the target should be re-built. +Maneage: Make checks the dates of the prerequisite files and target files +to see if the target should be re-built. To fix this problem, for Maneage we use a forked version of [Metastore](https://github.com/mohammad-akhlaghi/metastore). Metastore use @@ -452,13 +452,13 @@ file dates in a branch, and 2) after doing a checkout, to reset the file-dates after the checkout is complete and re-set the file dates back to what they were. -In practice, Metastore should work almost fully invisiablly within your +In practice, Metastore should work almost fully invisibly within your project. The only place you might notice its presence is that you'll see `.file-metadata` in the list of modified/staged files (commonly after merging your branches). Since its a binary file, Git also won't show you the changed contents. In a merge, you can simply accept any changes with `git add -u`. But if Git is telling you that it has changed without a merge -(for example if you started a commit, but cancelled it in the middle), you +(for example if you started a commit, but canceled it in the middle), you can just do `git checkout .file-metadata` and set it back to its original state. @@ -482,7 +482,7 @@ mind are listed below. in the workhorse-Makefiles or paper's LaTeX source. Define such constants as logically-grouped, separate configuration-Makefiles in `reproduce/analysis/config/XXXXX.conf`. Then set this - configuration-Makefiles file as a pre-requisite to any rule that uses + configuration-Makefiles file as a prerequisite to any rule that uses the variable defined in it. - Through any number of intermediate prerequisites, all processing steps @@ -522,24 +522,21 @@ First custom commit ------------------- 1. **Get this repository and its history** (if you don't already have it): - Arguably the easiest way to start is to clone this repository as shown - below. As you see, after the cloning some further corrections to your - clone's Git settings are necessary: first, you need to remove all - possibly existing Git tags from the Maneage's history. Then you need - to rename the conventional `origin` remote server, and the `master` - branch. This renaming allows you to use these standard names for your - own customized project (which greatly helps because this convention is - widely used). + Arguably the easiest way to start is to clone Maneage and prepare for + your customizations as shown below. After the cloning first you rename + the default `origin` remote server to specify that this is Maneage's + remote server. This will allow you to use the conventional `origin` + name for your own project as shown in the next steps. Second, you will + create and go into the conventional `master` branch to start + committing in your project later. ```shell $ git clone https://gitlab.com/maneage/project.git # Clone/copy the project and its history. - $ mv project my-project # Change the name to your project's name. - $ cd my-project # Go into the cloned directory. - $ git tag | xargs git tag -d # Delete all Maneage tags. - $ git config remote.origin.tagopt --no-tags # No tags in future fetch/pull from Maneage. - $ git remote rename origin origin-maneage # Rename current/only remote to "origin-maneage". - $ git checkout -b master # Create and enter your own "master" branch. - $ pwd # Just to confirm where you are. + $ mv project my-project # Change the name to your project's name. + $ cd my-project # Go into the cloned directory. + $ git remote rename origin origin-maneage # Rename current/only remote to "origin-maneage". + $ git checkout -b master # Create and enter your own "master" branch. + $ pwd # Just to confirm where you are. ``` 2. **Prepare to build project**: The `./project configure` command of the @@ -551,14 +548,14 @@ First custom commit terminal on your desktop and navigate to the same project directory that you cloned (output of last command above). Then run the following command. Once every second, this command will just print the date - (possibly followed by a non-existant directory notice). But as soon as + (possibly followed by a non-existent directory notice). But as soon as the next step starts building software, you'll see the names of software get printed as they are being built. Once any software is installed in the project build directory it will be removed. Again, don't worry, nothing will be installed outside the build directory. ```shell - # On another terminal (go to top project directory) + # On another terminal (go to top project source directory, last command above) $ ./project --check-config ``` @@ -604,7 +601,7 @@ First custom commit ```shell git remote add origin XXXXXXXXXX # Newly created repo is now called 'origin'. - git push --set-upstream origin master # Push 'master' branch to 'origin' (enable tracking). + git push --set-upstream origin master # Push 'master' branch to 'origin' (with tracking). git push origin maneage # Push 'maneage' branch to 'origin' (no tracking). ``` @@ -626,7 +623,7 @@ First custom commit described below: - `paper.tex`: 1) Delete the text of the abstract (from - `\includeabstract{` to `\vspace{0.25cm}`) and write your own own (a + `\includeabstract{` to `\vspace{0.25cm}`) and write your own (a single sentence can be enough now, you can complete it later). 2) Add some keywords under it in the keywords part. 3) Delete everything between `%% Start of main body.` and `%% End of main @@ -640,7 +637,7 @@ First custom commit - `reproduce/analysis/make/top-make.mk`: Delete the `delete-me` line in the `makesrc` definition. Just make sure there is no empty line between the `download \` and `verify \` lines (they should be - directly under eachother). + directly under each other). - `reproduce/analysis/make/verify.mk`: In the final recipe, under the commented line `Verify TeX macros`, remove the full line that @@ -692,33 +689,35 @@ First custom commit $ git add .gitattributes ``` - 7. **Copyright and License notice**: To be usable/modifiable by others - after publication, _all_ the "copyright-able" files in your project - (those larger than 10 lines) must have a copyright notice and license - notice. Please take a moment to look at several existing files to see - a few examples. The copyright notice is usually close to the start of - the file, it is the line starting with `Copyright (C)` and containing - a year and the author's name. The License notice is a short (or full, - when its not too long, like the MIT license) description of the - copyright license, usually less than three paragraphs. Don't forget to - add these _two_ notices to any new file you add to Maneage for your - project. When you modify an existing Maneage file (which already has - the notices), just add a copyright notice in your name under the - existing one(s), like the line with capital letters below. Please add - this line with your name and email address to `paper.tex` and - `tex/src/preamble-header.tex`. + 7. **Copyright and License notice**: It is necessary that _all_ the + "copyright-able" files in your project (those larger than 10 lines) + have a copyright and license notice. Please take a moment to look at + several existing files to see a few examples. The copyright notice is + usually close to the start of the file, it is the line starting with + `Copyright (C)` and containing a year and the author's name (like the + examples below). The License notice is a short description of the + copyright license, usually one or two paragraphs with a URL to the + full license. Don't forget to add these _two_ notices to *any new + file* you add in your project (you can just copy-and-paste). When you + modify an existing Maneage file (which already has the notices), just + add a copyright notice in your name under the existing one(s), like + the line with capital letters below. To start with, add this line with + your name and email address to `paper.tex`, + `tex/src/preamble-header.tex`, `reproduce/analysis/make/top-make.mk`, + and generally, all the files you modified in the previous step. ``` - Copyright (C) 2018-2020 Mohammad Akhlaghi + Copyright (C) 2018-2020 Existing Name Copyright (C) 2020 YOUR NAME ``` - 8. **Configure Git for fist time**: If you have never used Git, then you - have to configure it with some basic information in order to have - essential information in the commit messages (ignore this step if you - have already done it). Git will include your name and e-mail address - information in each commit. You can also specify your favorite text - editor for making the commit (`emacs`, `vim`, etc.). + 8. **Configure Git for fist time**: If this is the first time you are + running Git on this system, then you have to configure it with some + basic information in order to have essential information in the commit + messages (ignore this step if you have already done it). Git will + include your name and e-mail address information in each commit. You + can also specify your favorite text editor for making the commit + (`emacs`, `vim`, `nano`, and etc.). ```shell $ git config --global user.name "YourName YourSurname" @@ -727,33 +726,25 @@ First custom commit ``` 9. **Your first commit**: You have already made some small and basic - changes in the steps above and you are in the `master` branch. So, you - can officially make your first commit in your project's history. But - before that you need to make sure that there are no problems in the - project (this is a good habit to always re-build the system before a - commit to be sure it works as expected). + changes in the steps above and you are in your project's `master` + branch. So, you can officially make your first commit in your + project's history and push it. But before that, you need to make sure + that there are no problems in the project. This is a good habit to + always re-build the system before a commit to be sure it works as + expected. ```shell $ git status # See which files you have changed. - $ git diff # See the lines you have added/changed. + $ git diff # Check the lines you have added/changed. $ ./project make # Make sure everything builds successfully. $ git add -u # Put all tracked changes in staging area. $ git status # Make sure everything is fine. - $ git commit # Your first commit, add a nice description. - $ git tag -a v0 # Tag this as the zero-th version of your project. + $ git diff --cached # Confirm all the changes that will be committed. + $ git commit # Your first commit: put a good description! + $ git push # Push your commit to your remote. ``` - 10. **Push to the remote**: Push your first commit and its tag to your - remote repository with these commands. Since we have setup your - `master` branch to follow `origin/master`, you can just use `git push` - from now on. - - ```shell - $ git push - $ git push --tags - ``` - - 11. **Start your exciting research**: You are now ready to add flesh and + 10. **Start your exciting research**: You are now ready to add flesh and blood to this raw skeleton by further modifying and adding your exciting research steps. You can use the "published works" section in the introduction (above) as some fully working models to learn @@ -821,7 +812,7 @@ Other basic customizations checksum and if any file's checksum is different from the one recorded in the project, it will stop and print the problematic file and its expected and calculated checksums. First set the value of - `verify-outputs` valiable in + `verify-outputs` variable in `reproduce/analysis/config/verify-outputs.conf` to `yes`. Then go to `reproduce/analysis/make/verify.mk`. The verification of all the files is only done in one recipe. First the files that go into the @@ -961,11 +952,11 @@ for the benefit of others. contexts. - *Environment of each recipe*: If you need to define a special - environment (or alises, or scripts to run) for all the recipes in + environment (or aliases, or scripts to run) for all the recipes in your Makefiles, you can use a Bash startup file `reproduce/software/shell/bashrc.sh`. This file is loaded before every Make recipe is run, just like the `.bashrc` in your home directory is - loaded everytime you start a new interactive, non-login terminal. See + loaded every time you start a new interactive, non-login terminal. See the comments in that file for more. - *Automatic variables*: These are wonderful and very useful Make @@ -1024,8 +1015,8 @@ for the benefit of others. will give you a special shared-memory device (directory): on systems using the GNU C Library (all GNU/Linux system), it is `/dev/shm`. The contents of this directory are actually in your RAM, not in your - persistance storage like the HDD or SSD. Reading and writing from/to - the RAM is much faster than persistant storage, so if you have enough + persistence storage like the HDD or SSD. Reading and writing from/to + the RAM is much faster than persistent storage, so if you have enough RAM available, it can be very beneficial for large temporary files to be put there. You can use the `mktemp` program to give the temporary files a randomly-set name, and use text files as targets to keep that @@ -1167,23 +1158,6 @@ for the benefit of others. problem in the first paragraph(s). Afterwards, start the next paragraph with "With this commit ...". - - *Tags*: To help manage the history, tag all major commits. This helps - make a more human-friendly output of `git describe`: for example - `v1-4-gaafdb04` states that we are on commit `aafdb04` which is 4 - commits after tag `v1`. The output of `git describe` is included in - your final PDF as part of this project. Also, if you use - reproducibility-friendly software like Gnuastro, this value will also - be included in all output files, see the description of `COMMIT` in - [Output - headers](https://www.gnu.org/software/gnuastro/manual/html_node/Output-headers.html). - In the checklist above, you tagged the first commit of your project - with `v0`. Here is one suggestion on when to tag: when you have fully - adopted Maneage and have got the first (initial) results, you can - make a `v1` tag. Subsequently when you first start reporting the - results to your colleagues, you can tag the commit as `v2` and - increment the version on every later circulation, or referee - submission. - - *Project outputs*: During your research, it is possible to checkout a specific commit and reproduce its results. However, the processing can be time consuming. Therefore, it is useful to also keep track of @@ -1209,8 +1183,8 @@ for the benefit of others. - *Full Git history in one file*: When you are publishing your project (for example to Zenodo for long term preservation), it is more convenient to have the whole project's Git history into one file to - save with your datasets. Afterall, you can't be sure that your - current Git server (for example Gitlab, Github, or Bitbucket) will be + save with your datasets. After all, you can't be sure that your + current Git server (for example GitLab, Github, or Bitbucket) will be active forever. While they are good for the immediate future, you can't rely on them for archival purposes. Fortunately keeping your whole history in one file is easy with Git using the following @@ -1225,7 +1199,7 @@ for the benefit of others. ``` - You can easily upload `my-project-git.bundle` anywhere. Later, if - you need to unbundle it, you can use the following command. + you need to un-bundle it, you can use the following command. ```shell $ git clone my-project-git.bundle -- cgit v1.2.1 From d73a2628310ce01f98bf07cdf6d5d30ccf807a8a Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Sat, 25 Apr 2020 04:50:08 +0100 Subject: IMPORTANT: Primary Maneage repositories are now under maneage.org Until now, the primary Maneage URLs were under GitLab, but since we now have a dedicated URL and Git repository, its better to transfer to this as soon as possible. Therefore with this commit, throughout Maneage, any place that Maneage was referenced through GitLab has been corrected. Please correct your project's remote to point to the new repository at `git.maneage.org/project.git', and please make sure it follows the `maneage' branch. There is no more `master' branch on Maneage. --- README-hacking.md | 21 ++++++++++----------- README.md | 4 ++-- paper.tex | 26 +++++++++++--------------- project | 2 +- 4 files changed, 24 insertions(+), 29 deletions(-) diff --git a/README-hacking.md b/README-hacking.md index 76dedce..dc09072 100644 --- a/README-hacking.md +++ b/README-hacking.md @@ -26,11 +26,11 @@ libraries and programs for working in a closed environment (highly independent of the host operating system) with fixed versions of the necessary dependencies. The tarballs for building the local environment are also collected in a [separate -repository](https://gitlab.com/maneage/software-source). The final output -of the project is [a -paper](https://gitlab.com/maneage/output-raw/-/blob/master/paper.pdf). -Notice the last paragraph of the Acknowledgments where all the necessary -software are mentioned with their versions. +repository](http://git.maneage.org/tarballs-software.git/tree/). The final +output of the project is [a +paper](http://git.maneage.org/output-raw.git/plain/paper.pdf). Notice the +last paragraph of the Acknowledgments where all the necessary software are +mentioned with their versions. Below, we start with a discussion of why Make was chosen as the high-level language/framework for project management and how to learn and master Make @@ -531,7 +531,7 @@ First custom commit committing in your project later. ```shell - $ git clone https://gitlab.com/maneage/project.git # Clone/copy the project and its history. + $ git clone https://git.maneage.org/project.git # Clone/copy the project and its history. $ mv project my-project # Change the name to your project's name. $ cd my-project # Go into the cloned directory. $ git remote rename origin origin-maneage # Rename current/only remote to "origin-maneage". @@ -1131,7 +1131,7 @@ for the benefit of others. branch to track it, on the new clone. ```shell - $ git remote add origin-maneage https://gitlab.com/maneage/project.git + $ git remote add origin-maneage https://git.maneage.org/project.git $ git fetch origin-maneage $ git checkout -b maneage --track origin-maneage/maneage ``` @@ -1176,9 +1176,8 @@ for the benefit of others. release the outputs repository, or you can just delete it if it is too large or un-necessary (it was just for convenience, and fully reproducible after all). For example Maneage's output is available - for demonstration in the separate - [reproducible-paper-output](https://gitlab.com/maneage/output-raw) - repository. + for demonstration in [a + separate](http://git.maneage.org/output-raw.git/) repository. - *Full Git history in one file*: When you are publishing your project (for example to Zenodo for long term preservation), it is more @@ -1309,7 +1308,7 @@ order of operations: this is contrary to the scientific spirit. Copyright information --------------------- -This file is part of Maneage's core: https://gitlab.com/maneage/project +This file is part of Maneage's core: https://git.maneage.org/project.git Maneage is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free diff --git a/README.md b/README.md index f0bde5c..7b79b5e 100644 --- a/README.md +++ b/README.md @@ -27,8 +27,8 @@ $ ./project make To learn more about the purpose, principles and technicalities of this reproducible paper, please see `README-hacking.md`. For a general introduction to reproducible science as implemented in this project -(through Maneage), please see the [Maneage -project](https://gitlab.com/maneage/project) for more. +(through Maneage), please see Maneage project's webpage at +https://maneage.org. diff --git a/paper.tex b/paper.tex index 10c9910..6e0b5dd 100644 --- a/paper.tex +++ b/paper.tex @@ -73,8 +73,8 @@ \textsl{Keywords}: Add some keywords for your research here. \textsl{Reproducible paper}: All quantitave results (numbers and plots) - in this paper are exactly reproducible (version \projectversion{}, - \url{https://gitlab.com/makhlaghi/reproducible-paper}).} + in this paper are exactly reproducible with Maneage (version \projectversion{}, + \url{https://maneage.org}).} %% To add the first page's headers. \thispagestyle{firststyle} @@ -236,18 +236,14 @@ reproducible paper template was also supported by European Union’s Horizon %% Finish LaTeX \end{document} -%% This file is part of the reproducible paper template -%% https://gitlab.com/makhlaghi/reproducible-paper +%% This file is part of Maneage (https://maneage.org). % -%% This template is free software: you can redistribute it and/or modify it -%% under the terms of the GNU General Public License as published by the -%% Free Software Foundation, either version 3 of the License, or (at your -%% option) any later version. +%% This file is part of Maneage. Maneage is free software: you can +%% redistribute it and/or modify it under the terms of the GNU General +%% Public License as published by the Free Software Foundation, either +%% version 3 of the License, or (at your option) any later version. % -%% This template is distributed in the hope that it will be useful, but -%% WITHOUT ANY WARRANTY; without even the implied warranty of -%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%% General Public License for more details. -% -%% You should have received a copy of the GNU General Public License along -%% with Template. If not, see . +%% Maneage is distributed in the hope that it will be useful, but WITHOUT +%% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +%% FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +%% more details. See . diff --git a/project b/project index 22a4b49..efbd266 100755 --- a/project +++ b/project @@ -114,7 +114,7 @@ Make options: Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. -Reproducible paper template: https://gitlab.com/makhlaghi/reproducible-paper +Maneage URL: https://maneage.org Report bugs to mohammad@akhlaghi.org EOF -- cgit v1.2.1 From 4d3db9a78fb84f837a0b1665906ce0da1856a3e3 Mon Sep 17 00:00:00 2001 From: Pedram Ashofteh Ardakani Date: Thu, 23 Apr 2020 17:34:33 +0430 Subject: Configure.sh: build directory checked for ability to modify permissions Until now we only checked for the existance and write-ability of the build directory. But we recently discovered that if the specified build-directory is in a non-POSIX compatible partition (for example NTFS), permissions can't be modified and this can cause crashs in some programs (in particular, while building Perl, see [1]). The thing that makes this problem hard to identify is that on such partitions, `chmod' will still return 0 (so it was hard to find). With this commit, a check has been added after the user specifies the build-directory. If the proposed build directory is not able to handle permissions as expected, the configure script will not continue and will let the user know and will ask them for another directory. Also, the two printed characters at the start of error messages were changed to `**' (instead of `--'). When everything is good, we'll use `--' to tell the user that their given directory will be used as the build directory. And since there are multiple checks now, the final message to specify a new build directory is now moved to the end and not repeated in every check. [1] https://savannah.nongnu.org/support/?110220 --- reproduce/software/shell/configure.sh | 92 ++++++++++++++++++++++++++++++----- 1 file changed, 81 insertions(+), 11 deletions(-) diff --git a/reproduce/software/shell/configure.sh b/reproduce/software/shell/configure.sh index b4cf43b..dd3b9bc 100755 --- a/reproduce/software/shell/configure.sh +++ b/reproduce/software/shell/configure.sh @@ -93,6 +93,64 @@ absolute_dir () +# Check file permission handling (POSIX-compatibility) +# ---------------------------------------------------- +# +# Check if a `given' directory handles permissions as expected. +# +# This is to prevent a known bug in the NTFS filesystem that prevents +# proper installation of Perl, and probably some other packages. This +# function receives the directory as an argument and then, creates a dummy +# file, and examines whether the given directory handles the file +# permissions as expected. +# +# Returns `0' if everything is fine, and `255' otherwise. Choosing `0' is +# to mimic the `$ echo $?' behavior, while choosing `255' is to prevent +# misunderstanding 0 and 1 as true and false. +# +# ===== CAUTION! ===== # +# +# Since there is a `set -e' before running this function, the whole script +# stops and exits IF the `check_permission' (or any other function) returns +# anything OTHER than `0'! So, only use this function as a test. Here's a +# minimal example: +# +# if $(check_permission $some_directory) ; then +# echo "yay"; else "nay"; +# fi ; +check_permission () +{ + # Make a `junk' file, activate its executable flag and record its + # permissions generally. + local junkfile=$1/check_permission_tmp_file + rm -f $junkfile + echo "Don't let my short life go to waste" > $junkfile + chmod +x $junkfile + local perm_before=$(ls -l $junkfile | awk '{print $1}') + + # Now, remove the executable flag and record the permissions. + chmod -x $junkfile + local perm_after=$(ls -l $junkfile | awk '{print $1}') + + # Clean up before leaving the function + rm -f $junkfile + + # If the permissions are equal, the filesystem doesn't allow + # permissions. + if [ $perm_before = $perm_after ]; then + # Setting permission FAILED + return 1 + else + # Setting permission SUCCESSFUL + return 0 + fi +} + + + + + + # Check for C/C++ compilers # ------------------------- # @@ -653,21 +711,20 @@ EOF bdir=$(absolute_dir $build_dir) rm -rf $build_dir/$junkname else - echo " -- Can't write in '$build_dir'"; echo + echo " ** Can't write in '$build_dir'"; echo fi else if mkdir $build_dir 2> /dev/null; then instring="the newly created" bdir=$(absolute_dir $build_dir) else - echo " -- Can't create '$build_dir'"; echo + echo " ** Can't create '$build_dir'"; echo fi fi # If its given, make sure it isn't a subdirectory of the source # directory. if ! [ x"$bdir" = x ]; then - echo "Given build directory: $bdir" if echo "$bdir/" \ | grep '^'$currentdir 2> /dev/null > /dev/null; then @@ -676,17 +733,30 @@ EOF # Inform the user that this is not acceptable and reset `bdir'. bdir= - echo " -- The build-directory cannot be under the source-directory." - echo " Please specify another build-directory that is outside of the source." - echo "" - else - echo " -- Build directory set to ($instring): '$bdir'" + echo " ** The build-directory cannot be under the source-directory." + fi + fi + + # If everything is fine until now, see if we're able to manipulate + # file permissions. + if ! [ x"$bdir" = x ]; then + if ! $(check_permission $bdir); then + bdir= + echo " ** File permissions can't be modified in this directory" fi fi - # Reset `build_dir' to blank, so it continues asking when the - # previous value wasn't usable. - build_dir= + # If the build directory was good, the loop will stop, if not, + # reset `build_dir' to blank, so it continues asking for another + # directory and let the user know that they must select a new + # directory. + if [ x$bdir = x ]; then + build_dir= + echo " ** Please select another directory." + echo "" + else + echo " -- Build directory set to ($instring): '$bdir'" + fi done fi -- cgit v1.2.1 From cb74bd9fa865d2f3f26d680ff9e5e40b7db4682f Mon Sep 17 00:00:00 2001 From: Boud Roukema Date: Sat, 25 Apr 2020 22:40:07 +0200 Subject: verify-outputs.conf: typo correction in comment to avoid confusion Until now, the comment in the file said that setting the `verify-outputs` variable to `yes` disables the verification. Looking at `reproduce/analysis/make/verify.mk` shows that the opposite is true. With this commit, the word `disable` is replaced with `enable` so that the user is not confused by the conflict between the source code in the other file and this comment. --- reproduce/analysis/config/verify-outputs.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reproduce/analysis/config/verify-outputs.conf b/reproduce/analysis/config/verify-outputs.conf index 4f99661..9f5f25a 100644 --- a/reproduce/analysis/config/verify-outputs.conf +++ b/reproduce/analysis/config/verify-outputs.conf @@ -1,2 +1,2 @@ -# To disable verification of output datasets set this variable to yes +# To enable verification of output datasets set this variable to yes verify-outputs = yes -- cgit v1.2.1 From d058b0ca46efc179da2c826e40e934f8dd7edacb Mon Sep 17 00:00:00 2001 From: Zahra Sharbaf Date: Sun, 26 Apr 2020 07:37:07 +0430 Subject: Corrected Gnuastro configuration directory in initialize.mk Recently (in Commit 8eb0892e) the Gnuastro configuration files moved under "reproduce/analysis/config/gnuastro" directory (before that they were in `reproduce/software/config/gnuastro)'. But this hadn't been reflected in it the variable that defines this directory in `initialize.mk'. With this commit, the address of the Gnuastro configuration files directory is corrected, allowing Gnuastro programs to operate properly when it is used. --- reproduce/analysis/make/initialize.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reproduce/analysis/make/initialize.mk b/reproduce/analysis/make/initialize.mk index ce63480..a4802cb 100644 --- a/reproduce/analysis/make/initialize.mk +++ b/reproduce/analysis/make/initialize.mk @@ -36,7 +36,7 @@ bashdir = reproduce/analysis/bash pconfdir = reproduce/analysis/config installdir = $(BDIR)/software/installed # --------- Delete for no Gnuastro --------- -gconfdir = reproduce/software/config/gnuastro +gconfdir = reproduce/analysis/config/gnuastro # ------------------------------------------ -- cgit v1.2.1 From 3409a54c74e522ebac48546c2c5347dea6aeee16 Mon Sep 17 00:00:00 2001 From: Zahra Sharbaf Date: Sun, 26 Apr 2020 08:50:49 +0430 Subject: README-hacking.md: described why automatic preparation only occurs once Recently (since Commit 7d0c5ef77), the preparation is not run automatically every time. It is only run automatically the first time and needs to be manually called with the `--prepare-redo' option. But this wasn't explained in `README-hacking.md' (currently the main documentation of Maneage). With this commit, a description about invoking the preparation process after the first attempt of the running project has been added to `README-hacking.md'. --- README-hacking.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/README-hacking.md b/README-hacking.md index dc09072..644de44 100644 --- a/README-hacking.md +++ b/README-hacking.md @@ -840,7 +840,26 @@ Other basic customizations case, please share your thoughts and suggestions with us, so we can add them here for everyone's benefit. - - **Pre-publication: add notice on reproducibility**: Add a notice + - **Re-preparation**: Automatic preparation is only run in the first run + of the project on a system, to re-do the preparation you have to use + the option below. Here is the reason for this: when its necessary, the + preparation process can be slow and will unnecessarily slow down the + whole project while the project is under development (focus is on the + analysis that is done after preparation). Because of this, preparation + will be done automatically for the first time that the project is run + (when `.build/software/preparation-done.mk` doesn't exist). After the + preparation process completes once, future runs of `./project make` + will not do the preparation process anymore (will not call + `top-prepare.mk`). They will only call `top-make.mk` for the + analysis. To manually invoke the preparation process after the first + attempt, the `./project make` script should be run with the + `--prepare-redo` option, or you can delete the special file above. + + ```shell + $ ./project make --prepare-redo + ``` + + - **Pre-publication**: add notice on reproducibility**: Add a notice somewhere prominent in the first page within your paper, informing the reader that your research is fully reproducible. For example in the end of the abstract, or under the keywords with a title like -- cgit v1.2.1 From a21ea20c54628989b9737e9aa2ecd72806456307 Mon Sep 17 00:00:00 2001 From: Boud Roukema Date: Sun, 26 Apr 2020 16:20:37 +0200 Subject: Configuration: improved version separation from tarball name Until now, the sed script for determining URL download rules in the three software building Makefiles (`basic.mk', `high-level.mk' and `python.mk') considered package names such as `fftw-3...` and `fftw2-2.1...` to be identical. As the example above shows, this would make it hard to include some software that may hav conflicting non-number names. With this commit, the SED script that is used to separate the version from the tarball name only matches numbers that are after a dash (`-'). Therefore considers `fftw-3...` and `fftw-2...` to be identical, but `fftw-3-...` and `fftw2-2.1...` to be different. As a result of this change, the `elif' check for some of the other programs like `m4', or `help2man' was also corrected in all three Makefiles. While doing this check on all the software, we noticed that `zlib-version' is being repeated two times in `version.conf' so it was removed. It caused no complications, because both were the same number, but could lead to bugs later. --- reproduce/software/config/versions.conf | 4 ++-- reproduce/software/make/basic.mk | 12 ++++++++---- reproduce/software/make/high-level.mk | 19 +++++++++++-------- reproduce/software/make/python.mk | 28 +++++++++++++++------------- 4 files changed, 36 insertions(+), 27 deletions(-) diff --git a/reproduce/software/config/versions.conf b/reproduce/software/config/versions.conf index 1b6de7c..35ede19 100644 --- a/reproduce/software/config/versions.conf +++ b/reproduce/software/config/versions.conf @@ -213,6 +213,6 @@ libgit2-version = 0.28.2 netpbm-version = 10.86.99 wcslib-version = 6.4 -# Minizip is installed as a part of `zlib', and they have the same version. -zlib-version = 1.2.11 +# Minizip is installed with the same `zlib' tarball, and they have the same +# version. minizip-version = $(zlib-version) diff --git a/reproduce/software/make/basic.mk b/reproduce/software/make/basic.mk index 138e07e..ebcd9b1 100644 --- a/reproduce/software/make/basic.mk +++ b/reproduce/software/make/basic.mk @@ -156,14 +156,18 @@ tarballs = $(foreach t, bash-$(bash-version).tar.lz \ , $(tdir)/$(t) ) $(tarballs): $(tdir)/%: | $(lockdir) - n=$$(echo $* | sed -e's/[0-9\-]/ /g' \ - -e's/\./ /g' \ + # Remove the version numbers and suffix from the tarball name so we + # can search more easily only with the program name. This requires + # the first character of the version to be a digit: packages such + # as `foo' and `foo-3' will not be distinguished, but `foo' and + # `foo2' will be distinguished. + n=$$(echo $* | sed -e's/-[0-9]/ /' -e's/\./ /g' \ | awk '{print $$1}' ); \ \ mergenames=1; \ if [ $$n = bash ]; then c=$(bash-checksum); w=http://akhlaghi.org/maneage-software; \ elif [ $$n = binutils ]; then c=$(binutils-checksum); w=http://ftp.gnu.org/gnu/binutils; \ - elif [ $$n = bzip ]; then c=$(bzip2-checksum); w=http://akhlaghi.org/maneage-software; \ + elif [ $$n = bzip2 ]; then c=$(bzip2-checksum); w=http://akhlaghi.org/maneage-software; \ elif [ $$n = cert ]; then c=$(cert-checksum); w=http://akhlaghi.org/maneage-software; \ elif [ $$n = coreutils ]; then c=$(coreutils-checksum); w=http://ftp.gnu.org/gnu/coreutils;\ elif [ $$n = curl ]; then c=$(curl-checksum); w=https://curl.haxx.se/download; \ @@ -181,7 +185,7 @@ $(tarballs): $(tdir)/%: | $(lockdir) elif [ $$n = libiconv ]; then c=$(libiconv-checksum); w=https://ftp.gnu.org/pub/gnu/libiconv; \ elif [ $$n = libtool ]; then c=$(libtool-checksum); w=http://ftp.gnu.org/gnu/libtool; \ elif [ $$n = lzip ]; then c=$(lzip-checksum); w=http://download.savannah.gnu.org/releases/lzip; \ - elif [ $$n = m ]; then \ + elif [ $$n = m4 ]; then \ mergenames=0; \ c=$(m4-checksum); \ w=http://akhlaghi.org/maneage-software/m4-1.4.18-patched.tar.gz; \ diff --git a/reproduce/software/make/high-level.mk b/reproduce/software/make/high-level.mk index e567f0c..3e87d3b 100644 --- a/reproduce/software/make/high-level.mk +++ b/reproduce/software/make/high-level.mk @@ -203,14 +203,17 @@ tarballs = $(foreach t, apachelog4cxx-$(apachelog4cxx-version).tar.lz \ , $(tdir)/$(t) ) $(tarballs): $(tdir)/%: | $(lockdir) - # Remove all numbers, `-' and `.' from the tarball name so we can - # search more easily only with the program name. - @n=$$(echo $* | sed -e's/[0-9\-]/ /g' -e's/\./ /g' \ - | awk '{print $$1}' ) + # Remove the version numbers and suffix from the tarball name so we + # can search more easily only with the program name. This requires + # the first character of the version to be a digit: packages such + # as `foo' and `foo-3' will not be distinguished, but `foo' and + # `foo2' will be distinguished. + @n=$$(echo $* | sed -e's/-[0-9]/ /' -e's/\./ /g' \ + | awk '{print $$1}' ) # Set the top download link of the requested tarball. mergenames=1 - if [ $$n = apachelog ]; then c=$(apachelog4cxx-checksum); w=http://akhlaghi.org/maneage-software + if [ $$n = apachelog4cxx ]; then c=$(apachelog4cxx-checksum); w=http://akhlaghi.org/maneage-software elif [ $* = apr-util-$(apr-util-version).tar.gz ]; then c=$(apr-util-checksum); w=https://www-us.apache.org/dist/apr elif [ $$n = apr ]; then c=$(apr-checksum); w=https://www-us.apache.org/dist/apr @@ -262,7 +265,7 @@ $(tarballs): $(tdir)/%: | $(lockdir) majorver=$$(echo $(hdf5-version) | sed -e 's/\./ /g' | awk '{printf("%d.%d", $$1, $$2)}') w=https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-$$majorver/hdf5-$(hdf5-version)/src/$* elif [ $$n = healpix ]; then c=$(healpix-checksum); w=http://akhlaghi.org/maneage-software - elif [ $$n = help ]; then c=$(help2man-checksum); w=http://ftp.gnu.org/gnu/help2man + elif [ $$n = help2man ]; then c=$(help2man-checksum); w=http://ftp.gnu.org/gnu/help2man elif [ $$n = imagemagick ]; then c=$(imagemagick-checksum); w=http://akhlaghi.org/maneage-software elif [ $$n = imfit ]; then mergenames=0 @@ -273,12 +276,12 @@ $(tarballs): $(tdir)/%: | $(lockdir) elif [ $$n = lapack ]; then c=$(lapack-checksum); w=http://www.netlib.org/lapack elif [ $$n = libnsl ]; then c=$(libnsl-checksum); w=http://akhlaghi.org/maneage-software elif [ $$n = libpng ]; then c=$(libpng-checksum); w=https://download.sourceforge.net/libpng - elif [ $$n = libgit ]; then + elif [ $$n = libgit2 ]; then mergenames=0 c=$(libgit2-checksum) w=https://github.com/libgit2/libgit2/archive/v$(libgit2-version).tar.gz elif [ $$n = libtirpc ]; then c=$(libtirpc-checksum); w=https://downloads.sourceforge.net/libtirpc - elif [ $$n = libxml ]; then c=$(libxml2-checksum); w=ftp://xmlsoft.org/libxml2 + elif [ $$n = libxml2 ]; then c=$(libxml2-checksum); w=ftp://xmlsoft.org/libxml2 elif [ $$n = missfits ]; then c=$(missfits-checksum); w=https://www.astromatic.net/download/missfits elif [ $$n = netpbm ]; then c=$(netpbm-checksum); w=http://akhlaghi.org/maneage-software elif [ $$n = openblas ]; then diff --git a/reproduce/software/make/python.mk b/reproduce/software/make/python.mk index fc71113..f378650 100644 --- a/reproduce/software/make/python.mk +++ b/reproduce/software/make/python.mk @@ -131,16 +131,18 @@ $(pytarballs): $(tdir)/%: # first string. @if [ $* = python-dateutil-$(python-dateutil-version).tar.gz ]; then n=dateutil - elif [ $* = h5py-$(h5py-version).tar.gz ]; then - n=h5py # elif [ $* = strange-tarball5name-version.tar.gz ]; then # n=strange5-name else - # Remove all numbers, `-' and `.' from the tarball name so we can - # search more easily only with the program name. - n=$$(echo $* | sed -e's/[0-9\-]/ /g' -e's/\./ /g' \ - | awk '{print $$1}') + # Remove the version numbers and suffix from the tarball name so + # we can search more easily only with the program name. This + # requires the first character of the version to be a digit: + # packages such as `foo' and `foo-3' will not be distinguished, + # but `foo' and `foo2' will be distinguished. + n=$$(echo $* | sed -e's/-[0-9]/ /' -e's/\./ /g' \ + | awk '{print $$1}' ) + fi # Set the top download link of the requested tarball. The ones @@ -180,11 +182,11 @@ $(pytarballs): $(tdir)/%: c=$(secretstorage-checksum) hash=a6/89/df343dbc2957a317127e7ff2983230dc5336273be34f2e1911519d85aeb5 h=$(pytopurl)/$$hash/SecretStorage-$(secretstorage-version).tar.gz - elif [ $$n = asn ]; then h=fc/f1/8db7daa71f414ddabfa056c4ef792e1461ff655c2ae2928a2b675bfed6b4; c=$(asn1crypto-checksum) + elif [ $$n = asn1crypto ]; then h=fc/f1/8db7daa71f414ddabfa056c4ef792e1461ff655c2ae2928a2b675bfed6b4; c=$(asn1crypto-checksum) elif [ $$n = asteval ]; then h=50/3f/29b7935c6dc09ee96dc347edc66c57e8ef68d595dd35b763a36a117acc8c; c=$(asteval-checksum) elif [ $$n = astroquery ]; then h=e2/af/a3cd3b30745832a0e81f5f13327234099aaf5d03b7979ac947a888e68e91; c=$(astroquery-checksum) elif [ $$n = astropy ]; then h=de/96/7feaca4b9be134128838395a9d924ea0b389ed4381702dcd9d11ae31789f; c=$(astropy-checksum) - elif [ $$n = beautifulsoup ]; then h=80/f2/f6aca7f1b209bb9a7ef069d68813b091c8c3620642b568dac4eb0e507748; c=$(beautifulsoup4-checksum) + elif [ $$n = beautifulsoup4 ]; then h=80/f2/f6aca7f1b209bb9a7ef069d68813b091c8c3620642b568dac4eb0e507748; c=$(beautifulsoup4-checksum) elif [ $$n = certifi ]; then h=55/54/3ce77783acba5979ce16674fc98b1920d00b01d337cfaaf5db22543505ed; c=$(certifi-checksum) elif [ $$n = cffi ]; then h=64/7c/27367b38e6cc3e1f49f193deb761fe75cda9f95da37b67b422e62281fcac; c=$(cffi-checksum) elif [ $$n = chardet ]; then h=fc/bb/a5768c230f9ddb03acc9ef3f0d4a3cf93462473795d18e9535498c8f929d; c=$(chardet-checksum) @@ -195,23 +197,23 @@ $(pytarballs): $(tdir)/%: elif [ $$n = emcee ]; then h=f0/c0/cd433f2aedeef9b1e5ed7d236c82564f7518fe7fe2238fa141ea9ce08e73; c=$(emcee-checksum) elif [ $$n = entrypoints ]; then h=b4/ef/063484f1f9ba3081e920ec9972c96664e2edb9fdc3d8669b0e3b8fc0ad7c; c=$(entrypoints-checksum) elif [ $$n = esutil ]; then h=5b/91/77e38282fd3d47b55e351544ab179eb209b309a8d2d40f8cdb6241beda00; c=$(esutil-checksum) - elif [ $$n = flake ]; then h=8d/a7/99222c9200af533c1ecb1120d99adbd1c033b57296ac5cb39d121db007a8; c=$(flake8-checksum) + elif [ $$n = flake8 ]; then h=8d/a7/99222c9200af533c1ecb1120d99adbd1c033b57296ac5cb39d121db007a8; c=$(flake8-checksum) elif [ $$n = future ]; then h=3f/bf/57733d44afd0cf67580658507bd11d3ec629612d5e0e432beb4b8f6fbb04; c=$(future-checksum) elif [ $$n = h5py ]; then h=43/27/a6e7dcb8ae20a4dbf3725321058923fec262b6f7835179d78ccc8d98deec; c=$(h5py-checksum) - elif [ $$n = html ]; then h=85/3e/cf449cf1b5004e87510b9368e7a5f1acd8831c2d6691edd3c62a0823f98f; c=$(html5lib-checksum) + elif [ $$n = html5lib ]; then h=85/3e/cf449cf1b5004e87510b9368e7a5f1acd8831c2d6691edd3c62a0823f98f; c=$(html5lib-checksum) elif [ $$n = idna ]; then h=ad/13/eb56951b6f7950cadb579ca166e448ba77f9d24efc03edd7e55fa57d04b7; c=$(idna-checksum) elif [ $$n = jeepney ]; then h=16/1d/74adf3b164a8d19a60d0fcf706a751ffa2a1eaa8e5bbb1b6705c92a05263; c=$(jeepney-checksum) elif [ $$n = keyring ]; then h=15/88/c6ce9509438bc02d54cf214923cfba814412f90c31c95028af852b19f9b2; c=$(keyring-checksum) elif [ $$n = kiwisolver ]; then h=31/60/494fcce70d60a598c32ee00e71542e52e27c978e5f8219fae0d4ac6e2864; c=$(kiwisolver-checksum) elif [ $$n = lmfit ]; then h=59/6e/117794cf85b7345361877e49245870490ae438f1981dea3c6af1316b30e7; c=$(lmfit-checksum) elif [ $$n = matplotlib ]; then h=12/d1/7b12cd79c791348cb0c78ce6e7d16bd72992f13c9f1e8e43d2725a6d8adf; c=$(matplotlib-checksum) - elif [ $$n = mpi ]; then h=04/f5/a615603ce4ab7f40b65dba63759455e3da610d9a155d4d4cece1d8fd6706; c=$(mpi4py-checksum) + elif [ $$n = mpi4py ]; then h=04/f5/a615603ce4ab7f40b65dba63759455e3da610d9a155d4d4cece1d8fd6706; c=$(mpi4py-checksum) elif [ $$n = mpmath ]; then h=ca/63/3384ebb3b51af9610086b23ea976e6d27d6d97bf140a76a365bd77a3eb32; c=$(mpmath-checksum) elif [ $$n = numpy ]; then h=ac/36/325b27ef698684c38b1fe2e546e2e7ef9cecd7037bcdb35c87efec4356af; c=$(numpy-checksum) elif [ $$n = pexpect ]; then h=1c/b1/362a0d4235496cb42c33d1d8732b5e2c607b0129ad5fdd76f5a583b9fcb3; c=$(pexpect-checksum) elif [ $$n = pip ]; then h=4c/4d/88bc9413da11702cbbace3ccc51350ae099bb351febae8acc85fec34f9af; c=$(pip-checksum) elif [ $$n = pkgconfig ]; then h=6e/a9/ff67ef67217dfdf2aca847685fe789f82b931a6957a3deac861297585db6; c=$(pypkgconfig-checksum) - elif [ $$n = pybind ]; then h=aa/91/deb6743e79e22ab01502296570b39b8404f10cc507a6692d612a7fee8d51; c=$(pybind11-checksum) + elif [ $$n = pybind11 ]; then h=aa/91/deb6743e79e22ab01502296570b39b8404f10cc507a6692d612a7fee8d51; c=$(pybind11-checksum) elif [ $$n = pycodestyle ]; then h=1c/d1/41294da5915f4cae7f4b388cea6c2cd0d6cd53039788635f6875dfe8c72f; c=$(pycodestyle-checksum) elif [ $$n = pycparser ]; then h=68/9e/49196946aee219aead1290e00d1e7fdeab8567783e83e1b9ab5585e6206a; c=$(pycparser-checksum) elif [ $$n = pyflakes ]; then h=52/64/87303747635c2988fcaef18af54bfdec925b6ea3b80bcd28aaca5ba41c9e; c=$(pyflakes-checksum) @@ -227,7 +229,7 @@ $(pytarballs): $(tdir)/%: elif [ $$n = soupsieve ]; then h=0c/52/e9088bb9b96e2d39fc3b33fcda5b4fde9d71473536ac660a1ca9a0958a2f; c=$(soupsieve-checksum) elif [ $$n = sympy ]; then h=54/2e/6adb11fe599d4cfb7e8833753350ac51aa2c0603c226b36f9051cc9d2425; c=$(sympy-checksum) elif [ $$n = uncertainties ]; then h=2a/c2/babbe5b16141859dd799ed31c03987100a7b6d0ca7c0ed4429c96ce60fdf; c=$(uncertainties-checksum) - elif [ $$n = urllib ]; then h=b1/53/37d82ab391393565f2f831b8eedbffd57db5a718216f82f1a8b4d381a1c1; c=$(urllib3-checksum) + elif [ $$n = urllib3 ]; then h=b1/53/37d82ab391393565f2f831b8eedbffd57db5a718216f82f1a8b4d381a1c1; c=$(urllib3-checksum) elif [ $$n = virtualenv ]; then h=51/aa/c395a6e6eaaedfa5a04723b6446a1df783b16cca6fec66e671cede514688; c=$(virtualenv-checksum) elif [ $$n = webencodings ]; then h=0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47; c=$(webencodings-checksum) # elif [ $$n = strange5-name ]; then h=XXXXX; c=$(XXXXX-checksum) -- cgit v1.2.1 From d474d4c8e1f67743b84a6ad852d5d80a31a9103d Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Mon, 27 Apr 2020 02:55:01 +0100 Subject: Aborting with informative error when GNU gettext not found Until now, we wouldn't explicity check for GNU gettext. If it was present on the system, we would just add a link to it in Maneage's installation directory. However, in bug #58248, Boud noticed that Git (a basic software) actually needs it to complete its installation. Unfortunately we haven't had the tiem to include a build of Gettext in Maneage. Because it is mostly available on many systems, it hasn't been reported too commonly, it also has many dependencies which make it a little time consuming to install. So with this commit, we actually check for GNU gettext right after checking the compiler and if its not available an informative error message is written to inform the user of the problem, along with suggestions on fixing it (how to install GNU gettext from their package manager). --- reproduce/software/shell/configure.sh | 40 ++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/reproduce/software/shell/configure.sh b/reproduce/software/shell/configure.sh index dd3b9bc..6f3ed7f 100755 --- a/reproduce/software/shell/configure.sh +++ b/reproduce/software/shell/configure.sh @@ -299,7 +299,7 @@ rm -f $testprog $testsource # See if the C compiler can build static libraries # ------------------------------------------------ - +# # We are manually only working with shared libraries: because some # high-level programs like Wget and cURL need dynamic linking and if we # build the libraries statically, our own builds will be ignored and these @@ -316,6 +316,44 @@ static_build=no +# Check for GNU gettext +# --------------------- +# +# Some of the basic sofware need GNU gettext which we don't yet install. +has_gettext=0 +if type msgfmt > /dev/null 2>/dev/null; then has_gettext=1; fi +if [ $has_gettext = 0 ]; then + cat < Date: Mon, 27 Apr 2020 17:08:36 +0200 Subject: Configration bug fixed: identify pkg-config from its tarball name Until Commit 3409a54 (from yesterday), pkg-config was found correctly in `reproduce/software/make/basic.mk` by searching for `pkg`. However, commit a21ea20 made an improvement in the regular expression for relating package names and download filenames, and the string `pkg-config` with the new regex no longer simplifies to `pkg`. The result of this was that the basic.mk could not find `pkg-config` in the list of packages, since it was still listed as `pkg`. This blocked downloading for a system without pkg-config preloaded. With this commit (of just a few bytes), the bug is fixed. --- reproduce/software/make/basic.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reproduce/software/make/basic.mk b/reproduce/software/make/basic.mk index ebcd9b1..79411d2 100644 --- a/reproduce/software/make/basic.mk +++ b/reproduce/software/make/basic.mk @@ -200,7 +200,7 @@ $(tarballs): $(tdir)/%: | $(lockdir) c=$(perl-checksum); \ v=$$(echo $(perl-version) | sed -e's/\./ /g' | awk '{printf("%d.0", $$1)}'); \ w=https://www.cpan.org/src/$$v; \ - elif [ $$n = pkg ]; then c=$(pkgconfig-checksum); w=http://pkg-config.freedesktop.org/releases; \ + elif [ $$n = pkg-config ]; then c=$(pkgconfig-checksum); w=http://pkg-config.freedesktop.org/releases; \ elif [ $$n = readline ]; then c=$(readline-checksum); w=http://ftp.gnu.org/gnu/readline; \ elif [ $$n = sed ]; then c=$(sed-checksum); w=http://ftp.gnu.org/gnu/sed; \ elif [ $$n = tar ]; then c=$(tar-checksum); w=http://ftp.gnu.org/gnu/tar; \ -- cgit v1.2.1 From 2fb0b2a92b034f6ea869eec8ebea8614145759de Mon Sep 17 00:00:00 2001 From: Boud Roukema Date: Mon, 27 Apr 2020 23:49:33 +0200 Subject: Configration bug fixed: other problematic software names from tarball Similar to the previous commit (e43e3291483699), following a change made yesterday in the identification of software names from their tarballs, a few other problematic names are corrected with this commit: `apr-util', HDF5, TeX Live's installation tarball and `rpcsvc-proto'. Even though we have visually checked the list of software, other unidentified similar cases may remain and will be fixed when found in practice. --- reproduce/software/make/high-level.mk | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/reproduce/software/make/high-level.mk b/reproduce/software/make/high-level.mk index 3e87d3b..eccc073 100644 --- a/reproduce/software/make/high-level.mk +++ b/reproduce/software/make/high-level.mk @@ -214,9 +214,8 @@ $(tarballs): $(tdir)/%: | $(lockdir) # Set the top download link of the requested tarball. mergenames=1 if [ $$n = apachelog4cxx ]; then c=$(apachelog4cxx-checksum); w=http://akhlaghi.org/maneage-software - elif [ $* = apr-util-$(apr-util-version).tar.gz ]; then - c=$(apr-util-checksum); w=https://www-us.apache.org/dist/apr elif [ $$n = apr ]; then c=$(apr-checksum); w=https://www-us.apache.org/dist/apr + elif [ $$n = apr-util ]; then c=$(apr-util-checksum); w=https://www-us.apache.org/dist/apr elif [ $$n = astrometry ]; then c=$(astrometrynet-checksum); w=http://astrometry.net/downloads elif [ $$n = atlas ]; then mergenames=0 @@ -259,7 +258,7 @@ $(tarballs): $(tdir)/%: | $(lockdir) w=https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs$$v elif [ $$n = gnuastro ]; then c=$(gnuastro-checksum); w=http://ftp.gnu.org/gnu/gnuastro elif [ $$n = gsl ]; then c=$(gsl-checksum); w=http://ftp.gnu.org/gnu/gsl - elif [ $$n = hdf ]; then + elif [ $$n = hdf5 ]; then mergenames=0 c=$(hdf5-checksum) majorver=$$(echo $(hdf5-version) | sed -e 's/\./ /g' | awk '{printf("%d.%d", $$1, $$2)}') @@ -271,7 +270,7 @@ $(tarballs): $(tdir)/%: | $(lockdir) mergenames=0 c=$(imfit-checksum) w=http://www.mpe.mpg.de/~erwin/resources/imfit/imfit-$(imfit-version)-source.tar.gz - elif [ $$n = install ]; then c=NO-CHECK-SUM; w=http://mirror.ctan.org/systems/texlive/tlnet + elif [ $$n = install-tl-unx ]; then c=NO-CHECK-SUM; w=http://mirror.ctan.org/systems/texlive/tlnet elif [ $$n = jpegsrc ]; then c=$(libjpeg-checksum); w=http://ijg.org/files elif [ $$n = lapack ]; then c=$(lapack-checksum); w=http://www.netlib.org/lapack elif [ $$n = libnsl ]; then c=$(libnsl-checksum); w=http://akhlaghi.org/maneage-software @@ -298,7 +297,7 @@ $(tarballs): $(tdir)/%: | $(lockdir) elif [ $$n = R ]; then c=$(R-checksum); majver=$$(echo $(R-version) | sed -e's/\./ /g' | awk '{print $$1}') w=https://cran.r-project.org/src/base/R-$$majver - elif [ $$n = rpcsvc ]; then c=$(rpcsvc-proto-checksum); w=https://github.com/thkukuk/rpcsvc-proto/releases/download/v$(rpcsvc-proto-version) + elif [ $$n = rpcsvc-proto ]; then c=$(rpcsvc-proto-checksum); w=https://github.com/thkukuk/rpcsvc-proto/releases/download/v$(rpcsvc-proto-version) elif [ $$n = scamp ]; then c=$(scamp-checksum); w=http://akhlaghi.org/maneage-software elif [ $$n = scons ]; then mergenames=0 -- cgit v1.2.1 From 4a53bd5ebd43414e5f21ac8cad6017f026921f56 Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Tue, 28 Apr 2020 02:30:26 +0100 Subject: Astropy will no longer be installed by default Until now Gnuastro and Astropy where installed by default in any clean build of Maneage. Gnuastro is used to do the demonstration analysis that is reported in the paper and Astropy was just there to help in testing the building of the MANY tools it depends on! It (and its dependencies) also had several papers that helped show software citation. However, as Boud suggested in task #15619, the burden of installing them for a new user may be too much and any future changes will cause merge conflicts. It may also give the impression that Maneage is only/mainly written for astronomers. So with this commit, I am removing Astropy as a default target. But we can only remove Gnuastro after we include an alternative analysis in the demonstration `delete-me' files. Following Boud's suggestion in that task, `TARGETS.conf' was also added to the files to be ignored in any future merge (in the checklist of `README-hacking.mk'). The solution was already described there, but mainly focused on the deleted `delete-me' files. So with this commit, I brought out this item as a more prominent item in the list. Maybe we can later add the analysis done in the Maneage paper (not yet published). In terms of testing the software builds, we already have task #15272 (Single target to build all high-level software, for testing) that aims to have a single configure option to install ALL high-level software and we can ask people to try if they like and report errors. --- README-hacking.md | 53 +++++++++++++++++++--------------- reproduce/software/config/TARGETS.conf | 2 +- 2 files changed, 31 insertions(+), 24 deletions(-) diff --git a/README-hacking.md b/README-hacking.md index 644de44..149c6a2 100644 --- a/README-hacking.md +++ b/README-hacking.md @@ -669,27 +669,34 @@ First custom commit $ ./project make ``` - - Tell Git _not_ to merge changes in the dummy `delete-me` files, and - `paper.tex` (its contents are just dummy place holders) from Maneage - (by keeping their names in a `.gitattributes` file). Note that only - the first `echo` command has a `>` (to re-write the file with the - given line), the rest are `>>` (to append to it). After doing this - step in your own branch, when future commits in Maneage make any - change in these files, it will not cause a conflict with your - project when you update Maneage (it is annoying!). You can follow a - similar strategy if you want to avoid any other set of files to be - imported from Maneage into your project's branch. + 7. **Don't merge some files in future updates**: As described below, you + can later update your infra-structure (for example to fix bugs) by + merging your `master` branch with `maneage`. For files that you have + created in your own branch, there will be no problem. However if you + modify an existing Maneage file for your project, next time its + updated on `maneage` you'll have an annoying conflict. The commands + below show how to fix this future problem. With them, you can + configure Git to ignore the changes in `maneage` for some of the files + you have already edited and deleted above (and will edit below). Note + that only the first `echo` command has a `>` (to write over the file), + the rest are `>>` (to append to it). If you want to avoid any other + set of files to be imported from Maneage into your project's branch, + you can follow a similar strategy. We recommend only doing it when you + encounter the same conflict in more than one merge and there is no + other change in that file. Also, don't add core Maneage Makefiles, + otherwise Maneage can break on the next run. - ```shell - $ echo "paper.tex" > .gitattributes - $ echo "tex/src/delete-me.mk merge=ours" >> .gitattributes - $ echo "tex/src/delete-me-demo.mk merge=ours" >> .gitattributes - $ echo "reproduce/analysis/make/delete-me.mk merge=ours" >> .gitattributes - $ echo "reproduce/analysis/config/delete-me-num.conf merge=ours" >> .gitattributes - $ git add .gitattributes - ``` + ```shell + $ echo "paper.tex merge=ours" > .gitattributes + $ echo "tex/src/delete-me.mk merge=ours" >> .gitattributes + $ echo "tex/src/delete-me-demo.mk merge=ours" >> .gitattributes + $ echo "reproduce/analysis/make/delete-me.mk merge=ours" >> .gitattributes + $ echo "reproduce/software/config/TARGETS.conf merge=ours" >> .gitattributes + $ echo "reproduce/analysis/config/delete-me-num.conf merge=ours" >> .gitattributes + $ git add .gitattributes + ``` - 7. **Copyright and License notice**: It is necessary that _all_ the + 8. **Copyright and License notice**: It is necessary that _all_ the "copyright-able" files in your project (those larger than 10 lines) have a copyright and license notice. Please take a moment to look at several existing files to see a few examples. The copyright notice is @@ -711,7 +718,7 @@ First custom commit Copyright (C) 2020 YOUR NAME ``` - 8. **Configure Git for fist time**: If this is the first time you are + 9. **Configure Git for fist time**: If this is the first time you are running Git on this system, then you have to configure it with some basic information in order to have essential information in the commit messages (ignore this step if you have already done it). Git will @@ -722,10 +729,10 @@ First custom commit ```shell $ git config --global user.name "YourName YourSurname" $ git config --global user.email your-email@example.com - $ git config --global core.editor vim + $ git config --global core.editor nano ``` - 9. **Your first commit**: You have already made some small and basic + 10. **Your first commit**: You have already made some small and basic changes in the steps above and you are in your project's `master` branch. So, you can officially make your first commit in your project's history and push it. But before that, you need to make sure @@ -744,7 +751,7 @@ First custom commit $ git push # Push your commit to your remote. ``` - 10. **Start your exciting research**: You are now ready to add flesh and + 11. **Start your exciting research**: You are now ready to add flesh and blood to this raw skeleton by further modifying and adding your exciting research steps. You can use the "published works" section in the introduction (above) as some fully working models to learn diff --git a/reproduce/software/config/TARGETS.conf b/reproduce/software/config/TARGETS.conf index 84962f7..8d3bdb0 100644 --- a/reproduce/software/config/TARGETS.conf +++ b/reproduce/software/config/TARGETS.conf @@ -39,4 +39,4 @@ top-level-programs = gnuastro # Python libraries/modules. -top-level-python = astropy +top-level-python = -- cgit v1.2.1 From c778a69df31901be9a7726c51a7ab784aa3414d8 Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Tue, 28 Apr 2020 03:18:52 +0100 Subject: Better explanation at the end of the configuration Until now, at the end of the configuration step, we would tell the user this: "To change the configuration later, please re-run './project configure', DO NOT manually edit the relevant files". However, as Boud suggested in Bug #58243, this is against our principle to encourage users to modify Maneage. With this commit, that explanation has been expanded by a few sentences to tell the users what to change and warn them in case they decide to change the build-directory. --- reproduce/software/shell/configure.sh | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/reproduce/software/shell/configure.sh b/reproduce/software/shell/configure.sh index 6f3ed7f..5837642 100755 --- a/reproduce/software/shell/configure.sh +++ b/reproduce/software/shell/configure.sh @@ -1514,12 +1514,16 @@ cat < Date: Wed, 29 Apr 2020 03:45:21 +0100 Subject: Reactivated --host-cc config option to use host C compiler Until now, if GCC couldn't be built for any reason, Maneage would crash and the user had no way forward. Since GCC is complicated, it may happen and is frustrating to wait until the bug is fixed. Also, while debugging Maneage, when we know GCC has no problem, because it takes so long, it discourages testing. With this commit, we have re-activated the `--host-cc' option. It was already defined in the options of `./project', but its affect was nullified by hard-coding it to zero in the configure script on GNU/Linux systems. So with this commit that has been removed and the user can use their own C compiler on a GNU/Linux operating system also. Furthermore, to inform the user about this option and its usefulness, when GCC fails to build, a clear warning message is printed, instructing the user to post the problem as a bug and telling them how to continue building the project with the `--host-cc' option. --- reproduce/software/make/basic.mk | 27 +++++++++++++++++++++++---- reproduce/software/shell/configure.sh | 1 - 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/reproduce/software/make/basic.mk b/reproduce/software/make/basic.mk index 79411d2..779320f 100644 --- a/reproduce/software/make/basic.mk +++ b/reproduce/software/make/basic.mk @@ -1297,8 +1297,8 @@ $(ibidir)/gcc: | $(ibidir)/binutils \ tar xf $(word 1,$(filter $(tdir)/%,$|)); \ if [ $$odir != $(ddir) ]; then \ ln -s $$odir/gcc-$(gcc-version) $(ddir)/gcc-$(gcc-version); \ - fi \ - && cd gcc-$(gcc-version) \ + fi; \ + if cd gcc-$(gcc-version) \ && mkdir build \ && cd build \ && ../configure SHELL=$(ibdir)/bash \ @@ -1347,6 +1347,25 @@ $(ibidir)/gcc: | $(ibidir)/binutils \ rm -rf $$odir; \ rm $(ddir)/gcc-$(gcc-version); \ fi \ - && ln -sf $(ibdir)/gcc $(ibdir)/cc \ - && echo "GNU Compiler Collection (GCC) $(gcc-version)" > $@; \ + && ln -sf $(ibdir)/gcc $(ibdir)/cc; \ + then \ + echo "GNU Compiler Collection (GCC) $(gcc-version)" > $@; \ + else echo; echo; echo; \ + echo "_________________________________________________"; \ + echo "!!!!!!!! Warning from Maneage !!!!!!!!"; \ + echo; \ + echo "Unfortunately building of GCC failed on this system!"; \ + echo "Can you please copy the last ~500 lines above and post it"; \ + echo "as a bug here (as an attached file):"; \ + echo " https://sv.nongnu.org/support/?func=additem&group=reproduce"; \ + echo; \ + echo "In the meantime, please re-configure Maneage with '--host-cc'"; \ + echo "like below so it uses your own C compiler for building the"; \ + echo "high-level software ('-e' is to use the existing configuration):"; \ + echo; \ + echo " ./project configure -e --host-cc"; \ + echo; \ + echo "__________ SEE NOTE FROM MANEAGE ABOVE __________"; \ + echo; exit 1; \ + fi; \ fi diff --git a/reproduce/software/shell/configure.sh b/reproduce/software/shell/configure.sh index 5837642..cce6e62 100755 --- a/reproduce/software/shell/configure.sh +++ b/reproduce/software/shell/configure.sh @@ -383,7 +383,6 @@ ______________________________________________________ EOF sleep 5 else - host_cc=0 on_mac_os=no fi -- cgit v1.2.1 From 82666074e0c921e53c21b9e2c444e9a2d407d092 Mon Sep 17 00:00:00 2001 From: Boud Roukema Date: Wed, 29 Apr 2020 18:45:33 +0200 Subject: Fixed OpenSSL deprecation bug on some OSs, causing problems in libgit2 Until this commit, the configure step would fail with an error when compiling libgit2 on a test system. The origin of this bug, on the OS that was tested, appears to be that in OpenSSL Version 1.1.1a, openssl/ec.h fails to include openssl/openconf.h. The bug is described in more detail at https://savannah.nongnu.org/bugs/index.php?58263 With this commit, this is fixed by manually inserting a necessary components. In particular, `sed` is used to insert a preprocessor instruction into `openssl/openconf.h`, defining `DEPRECATED_1_2_0(f)`, for an arbitrary section of code `f`, to include that code rather than exclude it or warn about it. This commit is valid provided that openssl remains at a version earlier than 1.2.0. Starting at version 1.2.0, deprecation warnings should be run normally. We have thus moved the version of OpenSSL in `versions.conf' to the section for programs that need to be manually checked for version updates with a note to remind the user when reaching that version. Other packages that use OpenSSL may benefit from this commit, not just libgit2. --- reproduce/software/config/versions.conf | 6 +++++- reproduce/software/make/basic.mk | 11 +++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/reproduce/software/config/versions.conf b/reproduce/software/config/versions.conf index 35ede19..d19f095 100644 --- a/reproduce/software/config/versions.conf +++ b/reproduce/software/config/versions.conf @@ -43,7 +43,6 @@ metastore-version = 1.1.2-23-fa9170b mpc-version = 1.1.0 mpfr-version = 4.0.2 ncurses-version = 6.1 -openssl-version = 1.1.1a patchelf-version = 0.10 perl-version = 5.30.0 pkgconfig-version = 0.29.2 @@ -216,3 +215,8 @@ wcslib-version = 6.4 # Minizip is installed with the same `zlib' tarball, and they have the same # version. minizip-version = $(zlib-version) + +# From version 1.2 OpenSSL may not need a manual addition, as described in +# its comments and `https://savannah.nongnu.org/bugs/?58263'. If it doesn't +# cause problems, put it back in the list of "Basic/low-level" tools. +openssl-version = 1.1.1a \ No newline at end of file diff --git a/reproduce/software/make/basic.mk b/reproduce/software/make/basic.mk index 779320f..0bec163 100644 --- a/reproduce/software/make/basic.mk +++ b/reproduce/software/make/basic.mk @@ -805,6 +805,14 @@ $(ibidir)/openssl: $(tdir)/cert.pem \ # environment variable. # # https://wiki.openssl.org/index.php/Compilation_and_Installation + # + # Bug 58263 (https://savannah.nongnu.org/bugs/?58263): In OpenSSL + # Version 1.1.1a (also checked in 1.1.1g), `openssl/ec.h' fails to + # include `openssl/openconf.h' on some OSs. The SED hack below + # inserts a hardwired element of `openssl/openconf.h' that is + # needed to include sections of code `f` that are deprecated in + # 1.2.0, but not yet in 1.1.1. This problem may be solved in + # version 1.2.x, so please check again in that bug. if [ x$(on_mac_os) = xyes ]; then \ export KERNEL_BITS=64; \ copt="shared no-ssl2 no-ssl3 enable-ec_nistp_64_gcc_128"; \ @@ -817,6 +825,9 @@ $(ibidir)/openssl: $(tdir)/cert.pem \ --with-zlib-lib=$(ildir) \ --with-zlib-include=$(idir)/include, \ -j$(numthreads), , ./config ) \ + && mv -v $(idir)/include/openssl/ec.h $(idir)/include/openssl/ec.h.orig \ + && sed -e 's,\(# include .openssl/opensslconf\.h.\),\1\n#ifndef DEPRECATEDIN_1_2_0\n#define DEPRECATEDIN_1_2_0(f) f;\n#endif\n,' \ + $(idir)/include/openssl/ec.h.orig > $(idir)/include/openssl/ec.h \ && cp $(tdir)/cert.pem $(idir)/etc/ssl/cert.pem \ && if [ $$? = 0 ]; then \ if [ x$(on_mac_os) = xyes ]; then \ -- cgit v1.2.1