aboutsummaryrefslogtreecommitdiff
path: root/reproduce/software/make
diff options
context:
space:
mode:
authorMohammad Akhlaghi <mohammad@akhlaghi.org>2020-08-27 16:47:26 +0100
committerMohammad Akhlaghi <mohammad@akhlaghi.org>2020-08-28 15:02:30 +0100
commit87948105390c035a0f0ad409db622b3850988ddb (patch)
tree78b11cacf8fbf8737ac8bc9b1226dbfb59d1c1f7 /reproduce/software/make
parentc6a4aaad62a90af9a72f9bc58650696419474239 (diff)
Plain text editors: nano in basic, emacs and vim in high-level
While a project is under development, the raw analysis software are not the only necessary software in a project. We also need tools to all the edit plain-text files within the Maneaged project. Usually people use their operating system's plain-text editor. However, when working on the project on a new computer, or in a container, the plain-text editors will have different versions, or may not be present at all! This can be very annoying and frustrating! With this commit, Maneage now installs GNU Nano as part of the basic tools. GNU Nano is a very simple and small plain text editor (the installed size is only ~3.5MB, and it is friendly to new users). Therefore, any Maneaged project can assume atleast Nano will be present (in particular when no editor is available on the running system!). GNU Emacs and VIM (both without extra dependencies, in particular without GUI support) are also optionally available in 'high-level.mk' (by adding them to 'TARGETS.conf'). The basic idea for the more advanced editors (Emacs and VIM) is that project authors can add their favorite editor while they are working on the project, but upon publication they can remove them from 'TARGETS.conf'. A few other minor things came up during this work and are now also fixed: - The 'file' program and its libraries like 'libmagic' were linking to system's 'libseccomp'! This dependency then leaked into Nano (which depends on 'libmagic'). But this is just an extra feature of 'file', only for the Linux kernel. Also, we have no dependency on it so far. So 'file' is not configured to not build with 'libseccomp'. - A typo was fixed in the line where the physical core information is being read on macOS. - The top-level directories when running './project shell' are now quoted (in case they have special characters).
Diffstat (limited to 'reproduce/software/make')
-rw-r--r--reproduce/software/make/basic.mk25
-rw-r--r--reproduce/software/make/high-level.mk45
2 files changed, 64 insertions, 6 deletions
diff --git a/reproduce/software/make/basic.mk b/reproduce/software/make/basic.mk
index 0b672d8..934580a 100644
--- a/reproduce/software/make/basic.mk
+++ b/reproduce/software/make/basic.mk
@@ -56,8 +56,13 @@ ibdir = $(BDIR)/software/installed/bin
ildir = $(BDIR)/software/installed/lib
ibidir = $(BDIR)/software/installed/version-info/proglib
-# Ultimate Makefile target.
-targets-proglib = low-level-links gcc-$(gcc-version)
+# Ultimate Makefile target. GNU Nano (a simple and very light-weight text
+# editor) is installed by default, it is recommended to have it in the
+# 'basic.mk', so Maneaged projects can be edited on any system (even when
+# there is no command-line text editor is available).
+targets-proglib = low-level-links \
+ gcc-$(gcc-version) \
+ nano-$(nano-version)
all: $(foreach p, $(targets-proglib), $(ibidir)/$(p))
# Define the shell environment
@@ -852,7 +857,8 @@ $(ibidir)/diffutils-$(diffutils-version): \
$(ibidir)/file-$(file-version): $(ibidir)/coreutils-$(coreutils-version)
tarball=file-$(file-version).tar.gz
$(call import-source, $(file-url), $(file-checksum))
- $(call gbuild, file-$(file-version), static,,V=1)
+ $(call gbuild, file-$(file-version), static, \
+ --disable-libseccomp, V=1)
echo "File $(file-version)" > $@
$(ibidir)/findutils-$(findutils-version): \
@@ -1145,11 +1151,22 @@ $(ibidir)/texinfo-$(texinfo-version): \
echo "GNU Texinfo $(texinfo-version)" > $@
$(ibidir)/which-$(which-version): $(ibidir)/coreutils-$(coreutils-version)
- tarball=/which-$(which-version).tar.gz
+ tarball=which-$(which-version).tar.gz
$(call import-source, $(which-url), $(which-checksum))
$(call gbuild, which-$(which-version), static)
echo "GNU Which $(which-version)" > $@
+# GNU Nano is a very light-weight and small, command-line text editor (in
+# total around 3.5 Mb after installation!). It is top-level target in the
+# basic tools (nothing depends on it, it just depends on GCC). This is
+# because some projects may choose to not have it by manually removing it
+# from 'targets-proglib' above (it has no effect on processing after all!).
+$(ibidir)/nano-$(nano-version): $(ibidir)/gcc-$(gcc-version)
+ tarball=nano-$(nano-version).tar.xz
+ $(call import-source, $(nano-url), $(nano-checksum))
+ $(call gbuild, nano-$(nano-version), static)
+ echo "GNU Nano $(nano-version)" > $@
+
diff --git a/reproduce/software/make/high-level.mk b/reproduce/software/make/high-level.mk
index cf9c5a1..3c5e518 100644
--- a/reproduce/software/make/high-level.mk
+++ b/reproduce/software/make/high-level.mk
@@ -449,6 +449,25 @@ $(ibidir)/eigen-$(eigen-version):
rm -rf $(ddir)/eigen-eigen-*
echo "Eigen $(eigen-version)" > $@
+# GNU Emacs is an advanced text editor (among many other things!), so it
+# isn't directly related to the analysis phase of a project. However, it
+# can be useful during the development of a project on systems that don't
+# have it natively. So probably after the project is finished and is ready
+# for publication, you can remove it from 'TARGETS.conf'.
+#
+# However, the full Emacs build has a very large number of dependencies
+# which aren't necessary in many scenarios so we are disabling everything
+# except the core Emacs functionality (using '--without-all') and we are
+# also disabling all graphic user interface features (using '--without-x').
+$(ibidir)/emacs-$(emacs-version):
+ tarball=emacs-$(emacs-version).tar.xz
+ $(call import-source, $(emacs-url), $(emacs-checksum))
+ $(call gbuild, emacs-$(emacs-version), static, \
+ --without-all --without-x \
+ --without-gnutls --with-ns=no, \
+ -j$(numthreads) V=1)
+ echo "GNU Emacs $(emacs-version)" > $@
+
$(ibidir)/expat-$(expat-version):
tarball=expat-$(expat-version).tar.lz
$(call import-source, $(expat-url), $(expat-checksum))
@@ -1374,8 +1393,30 @@ $(ibidir)/xlsxio-$(xlsxio-version): \
rm $(ibdir)/example_xlsxio_*
echo "XLSX I/O $(xlsxio-version)" > $@
-
-
+# VIM is a text editor which doesn't directly affect processing but can be
+# useful in projects during its development, for more see the comment above
+# GNU Emacs.
+$(ibidir)/vim-$(vim-version):
+ tarball=vim-$(vim-version).tar.bz2
+ $(call import-source, $(vim-url), $(vim-checksum))
+ cd $(ddir)
+ tar xf $(tdir)/$$tarball
+ n=$$(echo $(vim-version) | sed -e's|\.||')
+ cd $(ddir)/vim$$n
+ ./configure --prefix=$(idir) \
+ --disable-canberra \
+ --enable-multibyte \
+ --disable-netbeans \
+ --disable-fontset \
+ --disable-gpm \
+ --disable-acl \
+ --disable-gui \
+ --with-x=no
+ make -j$(numthreads)
+ make install
+ cd ..
+ rm -rf vim$$n
+ echo "VIM $(vim-version)" > $@