[GIT PULL -perfbook] Improve portability of build scripts

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Paul,

As I mentioned a month ago or so, I've been working on improving
portability of building perfbook.

By portability, I did actual tests mostly under FreeBSD and light weight
alpine container images, not under macOS.
So I don't know if this enables native build for macOS, but here we are.

I don't expect any regression for existing build environments.
(Famous last words!)

        Thanks, Akira
--

The following changes since commit 7876fdfc56dd679b41f68ca5507f1637de35bbb6:

  defer/rcu: Include Butler Lampson RCU assessment (2023-02-28 13:30:47 -0800)

are available in the Git repository at:

  https://github.com/akiyks/perfbook.git tags/for-paul-portable-build

for you to fetch changes up to f7592d2c93182397b032413d68fa139baae262fa:

  FAQ-BUILD.txt: Remove /bin/bash from list of requirements (2023-03-10 20:15:12 +0900)

----------------------------------------------------------------
Improve portability of build scripts

Makefile and build scripts have assumed utility commands found
on GNU/Linux systems.
Past attempts to build perfbook under non-GNU/Linux hosts such as
macOS and FreeBSD failed due to differences in directory-tree
conventions and lack of command features specific to GNU variants.

Here is a list of non-portable conventions and features assumed
in the past:

    - /usr/bin/perl in shebang
    - date: syntax of options for format conversion
    - sed: -e in front of regex can be omitted
    - sed: "{" in to-be-replaced regex where repeat count is not
      expected is interpreted as literal "{"
    - sed: multi-line edit
    - grep: -z option

* Changes made for better portability:

    - #!/usr/bin/perl -> #!/usr/bin/env perl
    - sed: always use -e in front of regex
    - sed: escape literal "{" in to-be-replaced regexs

* Still need capable implementation of commands:

    - date: format conversion
	(needed in autodate.sh)
	either GNU or BSD flavor works, busybox date can't do such conversion
    - sed: multi-line edit
	(needed in extractqqz.sh)
	    - FreeBSD's native sed lacks this feature
    - grep: -z option
	(for checking \cref{}{} which should be \crefrange{}{})
	    - busybox grep on alpine lacks this config
	This check is moved from Makefile to cleverefcheck.sh and
	skipped if an incapable grep is detected.

  Necessary features of date and sed are now checked in the very beginning
  of make runs. Manually running "make precheck" can give a verbose
  result of the check.

  For those who have a full featured command in a different name,
  make/environment variables SED, DATE, or GREP can be used to specify
  an alternative name or full path.

* Package/command removed from requirements:

    - fig2ps
    - which
    - bash

** fig2ps

  On most Linux and other UNIX-like distros, fig2ps is not provided as
  a distro package.

  fig2ps would be needed if LaTeX special strings (such as math expressions)
  were used in FIG files. But it is not the case. Instead, fig2dev is
  good enough for .fig --> .eps conversions.

  fig2dev should be available for most distros as a package named
  "fig2dev" or "transfig".

** which

  It has become usual to be greeted with the

     "which: command not found"

  message on minimal installation of Linux distros, for example,
  RHEL/CentOS/Fedora and Arch.
  Instead, "command -v" is the portable way for testing command
  existence since POSIX 2008/2013.

** /bin/bash

  It turns out that existing build scripts work with variety of /bin/sh
  choices including dash, bash, zsh, and even busybox sh.
  The setting of "SHELL = /bin/bash" in Makefile is now dropped.

Tested under FreeBSD 13.1 and alpine.

----------------------------------------------------------------
Akira Yokosawa (15):
      Use /usr/bin/env in shebang of perl scripts
      extractqqz.sh: Allow alternative command name for 'sed'
      Makefile: Use multiple '-e' flags for non-GNU sed compatibility
      autodate.sh: Add code for BSD-flavor date command
      autodate.sh: Allow alternative command name for 'date'
      Makefile: Use portable egrep pattern (enclose '{' in '[]')
      Makefile: Move CREFPAIR check into cleverefcheck.sh
      FAQ-BUILD.txt: Add Q&A on building under non-GNU/Linux systems
      Use fig2dev as fallback to fig2eps
      Add precheck.sh
      FAQ-BUILD: Mention precheck
      Stop using 'which' command in bulid scripts
      FAQ-BUILD.txt: Remove fig2ps from necessary packages
      Makefile: Remove 'SHELL = /bin/bash'
      FAQ-BUILD.txt: Remove /bin/bash from list of requirements

 FAQ-BUILD.txt              | 53 +++++++++++++++++++++++--
 Makefile                   | 54 ++++++++++++-------------
 a2ping-rule.mk             |  2 +-
 epstopdf-rule.mk           |  2 +-
 utilities/autodate.sh      | 24 +++++++++---
 utilities/checkfcv.pl      |  2 +-
 utilities/cleverefcheck.pl |  2 +-
 utilities/cleverefcheck.sh | 23 +++++++++++
 utilities/divideqqz.pl     |  2 +-
 utilities/extpagegroup.pl  |  2 +-
 utilities/extractqqz.sh    | 17 ++++----
 utilities/fcvextract.pl    |  2 +-
 utilities/gen_snippet_d.pl |  2 +-
 utilities/mpostcheck.sh    |  4 +-
 utilities/precheck.sh      | 98 ++++++++++++++++++++++++++++++++++++++++++++++
 utilities/qqzreorder.pl    |  2 +-
 utilities/reorder_ltms.pl  |  2 +-
 utilities/verbboxcheck.pl  |  2 +-
 18 files changed, 238 insertions(+), 57 deletions(-)
 create mode 100755 utilities/precheck.sh



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux