From f7605e7eedc7edc07ba1f3f58d857777fad6d3a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Ska=C5=82acki?= Date: Tue, 6 Nov 2018 18:41:46 +0100 Subject: [PATCH 1/6] Rename command argument --component-version is a better name than --version, as --version conventionally means "print program version and exit". --- README.adoc | 10 +++--- examples/components_individually.sh | 14 ++++---- install_gpg_all.sh | 56 ++++++++++++++--------------- install_gpg_component.sh | 14 ++++---- 4 files changed, 47 insertions(+), 47 deletions(-) diff --git a/README.adoc b/README.adoc index 998acbd..6fe3ee9 100644 --- a/README.adoc +++ b/README.adoc @@ -28,7 +28,7 @@ Builds and installs a specific component of GPG. Two options are mandatory: * `--component`, which specifies a component name -* `--version`, which specifies component version (can be `latest`) +* `--component-version`, which specifies component version (can be `latest`) For example, following snippet will build and install the most recent release of Pinentry: @@ -37,19 +37,19 @@ of Pinentry: ---- ./install_gpg_component.sh \ --component pinentry \ - --version latest + --component-version latest ---- Furthermore, script is capable of fetching source from Git repository (instead of downloading tarballs with stable releases). In such case, a `--git` option -should be supplied, and `--version` should specify the desired Git ref. For +should be supplied, and `--component-version` should specify the desired Git ref. For example, following will build the current master of Pinentry component: [source,bash] ---- ./install_gpg_component.sh \ --component pinentry \ - --version master \ + --component-version master \ --git ---- @@ -97,7 +97,7 @@ example: ---- ./install_gpg_component.sh \ --component pinentry \ - --version latest \ + --component-version latest \ --build-dir ~/build-gpg \ --configure-opts "--enable-pinentry-qt --enable-pinentry-curses" ---- diff --git a/examples/components_individually.sh b/examples/components_individually.sh index d4c7e7e..993819d 100755 --- a/examples/components_individually.sh +++ b/examples/components_individually.sh @@ -22,15 +22,15 @@ BUILD_DIR="${TRAVIS_BUILD_DIR}/b" # libgpg-error, and enable it (default) for other components. # In order to satisfy dependencies, components should be installed # in a specific order. -./install_gpg_component.sh --component libgpg-error --version latest --sudo \ +./install_gpg_component.sh --component libgpg-error --component-version latest --sudo \ --configure-opts "--disable-doc" -./install_gpg_component.sh --component libgcrypt --version latest --sudo \ +./install_gpg_component.sh --component libgcrypt --component-version latest --sudo \ --build-dir "${BUILD_DIR}" -./install_gpg_component.sh --component libassuan --version latest --sudo -./install_gpg_component.sh --component libksba --version latest --sudo -./install_gpg_component.sh --component npth --version latest --sudo -./install_gpg_component.sh --component pinentry --version 1.1.0 --sudo -./install_gpg_component.sh --component gnupg --version 2.2.10 --sudo \ +./install_gpg_component.sh --component libassuan --component-version latest --sudo +./install_gpg_component.sh --component libksba --component-version latest --sudo +./install_gpg_component.sh --component npth --component-version latest --sudo +./install_gpg_component.sh --component pinentry --component-version 1.1.0 --sudo +./install_gpg_component.sh --component gnupg --component-version 2.2.10 --sudo \ --configure-opts "--enable-gpg-sha256 --disable-gpg-sha512 --enable-doc" ############### diff --git a/install_gpg_all.sh b/install_gpg_all.sh index 2936473..3020997 100755 --- a/install_gpg_all.sh +++ b/install_gpg_all.sh @@ -80,40 +80,40 @@ main() { case "$GPG_VERSION" in "2.2") - ./install_gpg_component.sh --component libgpg-error --version 1.31 "${@:2}" - ./install_gpg_component.sh --component libgcrypt --version 1.8.2 "${@:2}" - ./install_gpg_component.sh --component libassuan --version 2.5.1 "${@:2}" - ./install_gpg_component.sh --component libksba --version 1.3.5 "${@:2}" - ./install_gpg_component.sh --component npth --version 1.5 "${@:2}" - ./install_gpg_component.sh --component pinentry --version 1.1.0 "${@:2}" - ./install_gpg_component.sh --component gnupg --version 2.2.7 "${@:2}" + ./install_gpg_component.sh --component libgpg-error --component-version 1.31 "${@:2}" + ./install_gpg_component.sh --component libgcrypt --component-version 1.8.2 "${@:2}" + ./install_gpg_component.sh --component libassuan --component-version 2.5.1 "${@:2}" + ./install_gpg_component.sh --component libksba --component-version 1.3.5 "${@:2}" + ./install_gpg_component.sh --component npth --component-version 1.5 "${@:2}" + ./install_gpg_component.sh --component pinentry --component-version 1.1.0 "${@:2}" + ./install_gpg_component.sh --component gnupg --component-version 2.2.7 "${@:2}" ;; "2.1") - ./install_gpg_component.sh --component libgpg-error --version 1.27 "${@:2}" - ./install_gpg_component.sh --component libgcrypt --version 1.7.6 "${@:2}" - ./install_gpg_component.sh --component libassuan --version 2.4.3 "${@:2}" - ./install_gpg_component.sh --component libksba --version 1.3.5 "${@:2}" - ./install_gpg_component.sh --component npth --version 1.2 "${@:2}" - ./install_gpg_component.sh --component pinentry --version 0.9.5 "${@:2}" - ./install_gpg_component.sh --component gnupg --version 2.1.20 "${@:2}" + ./install_gpg_component.sh --component libgpg-error --component-version 1.27 "${@:2}" + ./install_gpg_component.sh --component libgcrypt --component-version 1.7.6 "${@:2}" + ./install_gpg_component.sh --component libassuan --component-version 2.4.3 "${@:2}" + ./install_gpg_component.sh --component libksba --component-version 1.3.5 "${@:2}" + ./install_gpg_component.sh --component npth --component-version 1.2 "${@:2}" + ./install_gpg_component.sh --component pinentry --component-version 0.9.5 "${@:2}" + ./install_gpg_component.sh --component gnupg --component-version 2.1.20 "${@:2}" ;; "latest") - ./install_gpg_component.sh --component libgpg-error --version latest "${@:2}" - ./install_gpg_component.sh --component libgcrypt --version latest "${@:2}" - ./install_gpg_component.sh --component libassuan --version latest "${@:2}" - ./install_gpg_component.sh --component libksba --version latest "${@:2}" - ./install_gpg_component.sh --component npth --version latest "${@:2}" - ./install_gpg_component.sh --component pinentry --version latest "${@:2}" - ./install_gpg_component.sh --component gnupg --version latest "${@:2}" + ./install_gpg_component.sh --component libgpg-error --component-version latest "${@:2}" + ./install_gpg_component.sh --component libgcrypt --component-version latest "${@:2}" + ./install_gpg_component.sh --component libassuan --component-version latest "${@:2}" + ./install_gpg_component.sh --component libksba --component-version latest "${@:2}" + ./install_gpg_component.sh --component npth --component-version latest "${@:2}" + ./install_gpg_component.sh --component pinentry --component-version latest "${@:2}" + ./install_gpg_component.sh --component gnupg --component-version latest "${@:2}" ;; "master") - ./install_gpg_component.sh --component libgpg-error --version master --git "${@:2}" - ./install_gpg_component.sh --component libgcrypt --version master --git "${@:2}" - ./install_gpg_component.sh --component libassuan --version master --git "${@:2}" - ./install_gpg_component.sh --component libksba --version master --git "${@:2}" - ./install_gpg_component.sh --component npth --version master --git "${@:2}" - ./install_gpg_component.sh --component pinentry --version master --git "${@:2}" - ./install_gpg_component.sh --component gnupg --version master --git "${@:2}" + ./install_gpg_component.sh --component libgpg-error --component-version master --git "${@:2}" + ./install_gpg_component.sh --component libgcrypt --component-version master --git "${@:2}" + ./install_gpg_component.sh --component libassuan --component-version master --git "${@:2}" + ./install_gpg_component.sh --component libksba --component-version master --git "${@:2}" + ./install_gpg_component.sh --component npth --component-version master --git "${@:2}" + ./install_gpg_component.sh --component pinentry --component-version master --git "${@:2}" + ./install_gpg_component.sh --component gnupg --component-version master --git "${@:2}" ;; esac diff --git a/install_gpg_component.sh b/install_gpg_component.sh index 3b2267d..64fa691 100755 --- a/install_gpg_component.sh +++ b/install_gpg_component.sh @@ -15,30 +15,30 @@ USAGE EXAMPLES # Installing latest version of libgpg-error - install_gpg_component.rb --component libgpg-error --version latest + install_gpg_component.rb --component libgpg-error --component-version latest # Installing latest version of libgpg-error with sudo - install_gpg_component.rb --component libgpg-error --version latest --sudo + install_gpg_component.rb --component libgpg-error --component-version latest --sudo # Installing latest git revision of libgpg-error - install_gpg_component.rb --component libgpg-error --version master --git + install_gpg_component.rb --component libgpg-error --component-version master --git # Passing options to ./configure script - install_gpg_component.rb --component libgpg-error --version latest --configure-opts "--disable-doc --exec-prefix=/my/bin" + install_gpg_component.rb --component libgpg-error --component-version latest --configure-opts "--disable-doc --exec-prefix=/my/bin" OPTIONS --component COMPONENT Component to install - --version VERSION + --component-version VERSION Component version to install (use "latest" for the latest release), or git ref (branch, tag, commit hash etc.) when used with "--git" option (typically "master"). --[no-]git Fetch source code from git repository instead of downloading release, - pass branch or tag name to --version argument. By default it is off. + pass branch or tag name to --component-version argument. By default it is off. --[no-]sudo Whether to do 'sudo make install', or just 'make install', and whether @@ -92,7 +92,7 @@ parse_cli_arguments() shift shift ;; - --version) + --component-version) _arg_version="$2" shift shift From 1020ea2d56bb7b8d4366b3c0a27c583b0f7ce26d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Ska=C5=82acki?= Date: Thu, 8 Nov 2018 17:28:57 +0100 Subject: [PATCH 2/6] Rename command argument --component-name is a better name than just --component, as it is more descriptive. But most importantly, it is consistent with a recently added --component-version. --- README.adoc | 8 ++--- examples/components_individually.sh | 14 ++++---- install_gpg_all.sh | 56 ++++++++++++++--------------- install_gpg_component.sh | 12 +++---- 4 files changed, 45 insertions(+), 45 deletions(-) diff --git a/README.adoc b/README.adoc index 6fe3ee9..a1d6390 100644 --- a/README.adoc +++ b/README.adoc @@ -27,7 +27,7 @@ Builds and installs a specific component of GPG. Two options are mandatory: -* `--component`, which specifies a component name +* `--component-name`, which specifies a component name * `--component-version`, which specifies component version (can be `latest`) For example, following snippet will build and install the most recent release @@ -36,7 +36,7 @@ of Pinentry: [source,bash] ---- ./install_gpg_component.sh \ - --component pinentry \ + --component-name pinentry \ --component-version latest ---- @@ -48,7 +48,7 @@ example, following will build the current master of Pinentry component: [source,bash] ---- ./install_gpg_component.sh \ - --component pinentry \ + --component-name pinentry \ --component-version master \ --git ---- @@ -96,7 +96,7 @@ example: [source,bash] ---- ./install_gpg_component.sh \ - --component pinentry \ + --component-name pinentry \ --component-version latest \ --build-dir ~/build-gpg \ --configure-opts "--enable-pinentry-qt --enable-pinentry-curses" diff --git a/examples/components_individually.sh b/examples/components_individually.sh index 993819d..7632460 100755 --- a/examples/components_individually.sh +++ b/examples/components_individually.sh @@ -22,15 +22,15 @@ BUILD_DIR="${TRAVIS_BUILD_DIR}/b" # libgpg-error, and enable it (default) for other components. # In order to satisfy dependencies, components should be installed # in a specific order. -./install_gpg_component.sh --component libgpg-error --component-version latest --sudo \ +./install_gpg_component.sh --component-name libgpg-error --component-version latest --sudo \ --configure-opts "--disable-doc" -./install_gpg_component.sh --component libgcrypt --component-version latest --sudo \ +./install_gpg_component.sh --component-name libgcrypt --component-version latest --sudo \ --build-dir "${BUILD_DIR}" -./install_gpg_component.sh --component libassuan --component-version latest --sudo -./install_gpg_component.sh --component libksba --component-version latest --sudo -./install_gpg_component.sh --component npth --component-version latest --sudo -./install_gpg_component.sh --component pinentry --component-version 1.1.0 --sudo -./install_gpg_component.sh --component gnupg --component-version 2.2.10 --sudo \ +./install_gpg_component.sh --component-name libassuan --component-version latest --sudo +./install_gpg_component.sh --component-name libksba --component-version latest --sudo +./install_gpg_component.sh --component-name npth --component-version latest --sudo +./install_gpg_component.sh --component-name pinentry --component-version 1.1.0 --sudo +./install_gpg_component.sh --component-name gnupg --component-version 2.2.10 --sudo \ --configure-opts "--enable-gpg-sha256 --disable-gpg-sha512 --enable-doc" ############### diff --git a/install_gpg_all.sh b/install_gpg_all.sh index 3020997..44bb6f8 100755 --- a/install_gpg_all.sh +++ b/install_gpg_all.sh @@ -80,40 +80,40 @@ main() { case "$GPG_VERSION" in "2.2") - ./install_gpg_component.sh --component libgpg-error --component-version 1.31 "${@:2}" - ./install_gpg_component.sh --component libgcrypt --component-version 1.8.2 "${@:2}" - ./install_gpg_component.sh --component libassuan --component-version 2.5.1 "${@:2}" - ./install_gpg_component.sh --component libksba --component-version 1.3.5 "${@:2}" - ./install_gpg_component.sh --component npth --component-version 1.5 "${@:2}" - ./install_gpg_component.sh --component pinentry --component-version 1.1.0 "${@:2}" - ./install_gpg_component.sh --component gnupg --component-version 2.2.7 "${@:2}" + ./install_gpg_component.sh --component-name libgpg-error --component-version 1.31 "${@:2}" + ./install_gpg_component.sh --component-name libgcrypt --component-version 1.8.2 "${@:2}" + ./install_gpg_component.sh --component-name libassuan --component-version 2.5.1 "${@:2}" + ./install_gpg_component.sh --component-name libksba --component-version 1.3.5 "${@:2}" + ./install_gpg_component.sh --component-name npth --component-version 1.5 "${@:2}" + ./install_gpg_component.sh --component-name pinentry --component-version 1.1.0 "${@:2}" + ./install_gpg_component.sh --component-name gnupg --component-version 2.2.7 "${@:2}" ;; "2.1") - ./install_gpg_component.sh --component libgpg-error --component-version 1.27 "${@:2}" - ./install_gpg_component.sh --component libgcrypt --component-version 1.7.6 "${@:2}" - ./install_gpg_component.sh --component libassuan --component-version 2.4.3 "${@:2}" - ./install_gpg_component.sh --component libksba --component-version 1.3.5 "${@:2}" - ./install_gpg_component.sh --component npth --component-version 1.2 "${@:2}" - ./install_gpg_component.sh --component pinentry --component-version 0.9.5 "${@:2}" - ./install_gpg_component.sh --component gnupg --component-version 2.1.20 "${@:2}" + ./install_gpg_component.sh --component-name libgpg-error --component-version 1.27 "${@:2}" + ./install_gpg_component.sh --component-name libgcrypt --component-version 1.7.6 "${@:2}" + ./install_gpg_component.sh --component-name libassuan --component-version 2.4.3 "${@:2}" + ./install_gpg_component.sh --component-name libksba --component-version 1.3.5 "${@:2}" + ./install_gpg_component.sh --component-name npth --component-version 1.2 "${@:2}" + ./install_gpg_component.sh --component-name pinentry --component-version 0.9.5 "${@:2}" + ./install_gpg_component.sh --component-name gnupg --component-version 2.1.20 "${@:2}" ;; "latest") - ./install_gpg_component.sh --component libgpg-error --component-version latest "${@:2}" - ./install_gpg_component.sh --component libgcrypt --component-version latest "${@:2}" - ./install_gpg_component.sh --component libassuan --component-version latest "${@:2}" - ./install_gpg_component.sh --component libksba --component-version latest "${@:2}" - ./install_gpg_component.sh --component npth --component-version latest "${@:2}" - ./install_gpg_component.sh --component pinentry --component-version latest "${@:2}" - ./install_gpg_component.sh --component gnupg --component-version latest "${@:2}" + ./install_gpg_component.sh --component-name libgpg-error --component-version latest "${@:2}" + ./install_gpg_component.sh --component-name libgcrypt --component-version latest "${@:2}" + ./install_gpg_component.sh --component-name libassuan --component-version latest "${@:2}" + ./install_gpg_component.sh --component-name libksba --component-version latest "${@:2}" + ./install_gpg_component.sh --component-name npth --component-version latest "${@:2}" + ./install_gpg_component.sh --component-name pinentry --component-version latest "${@:2}" + ./install_gpg_component.sh --component-name gnupg --component-version latest "${@:2}" ;; "master") - ./install_gpg_component.sh --component libgpg-error --component-version master --git "${@:2}" - ./install_gpg_component.sh --component libgcrypt --component-version master --git "${@:2}" - ./install_gpg_component.sh --component libassuan --component-version master --git "${@:2}" - ./install_gpg_component.sh --component libksba --component-version master --git "${@:2}" - ./install_gpg_component.sh --component npth --component-version master --git "${@:2}" - ./install_gpg_component.sh --component pinentry --component-version master --git "${@:2}" - ./install_gpg_component.sh --component gnupg --component-version master --git "${@:2}" + ./install_gpg_component.sh --component-name libgpg-error --component-version master --git "${@:2}" + ./install_gpg_component.sh --component-name libgcrypt --component-version master --git "${@:2}" + ./install_gpg_component.sh --component-name libassuan --component-version master --git "${@:2}" + ./install_gpg_component.sh --component-name libksba --component-version master --git "${@:2}" + ./install_gpg_component.sh --component-name npth --component-version master --git "${@:2}" + ./install_gpg_component.sh --component-name pinentry --component-version master --git "${@:2}" + ./install_gpg_component.sh --component-name gnupg --component-version master --git "${@:2}" ;; esac diff --git a/install_gpg_component.sh b/install_gpg_component.sh index 64fa691..14dd6f4 100755 --- a/install_gpg_component.sh +++ b/install_gpg_component.sh @@ -15,20 +15,20 @@ USAGE EXAMPLES # Installing latest version of libgpg-error - install_gpg_component.rb --component libgpg-error --component-version latest + install_gpg_component.rb --component-name libgpg-error --component-version latest # Installing latest version of libgpg-error with sudo - install_gpg_component.rb --component libgpg-error --component-version latest --sudo + install_gpg_component.rb --component-name libgpg-error --component-version latest --sudo # Installing latest git revision of libgpg-error - install_gpg_component.rb --component libgpg-error --component-version master --git + install_gpg_component.rb --component-name libgpg-error --component-version master --git # Passing options to ./configure script - install_gpg_component.rb --component libgpg-error --component-version latest --configure-opts "--disable-doc --exec-prefix=/my/bin" + install_gpg_component.rb --component-name libgpg-error --component-version latest --configure-opts "--disable-doc --exec-prefix=/my/bin" OPTIONS - --component COMPONENT + --component-name COMPONENT Component to install --component-version VERSION @@ -87,7 +87,7 @@ parse_cli_arguments() while test $# -gt 0 do case "$1" in - --component) + --component-name) _arg_component="$2" shift shift From 64919ae6722f4cd36bfb6bc8ae73d4ff906de25a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Ska=C5=82acki?= Date: Thu, 8 Nov 2018 18:54:19 +0100 Subject: [PATCH 3/6] Implement new option in "install component" script Introduce option --component-git-ref which supersedes --git option, and replaces --component-version in context of former --git option. In other words, --component-git-ref REF replaces the sequence of --git --component-version REF options. This change is expected to simplify program interface, make option names more obvious and consistent, and reduce confusion. --- install_gpg_all.sh | 14 +++++++------- install_gpg_component.sh | 19 +++++++++++-------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/install_gpg_all.sh b/install_gpg_all.sh index 44bb6f8..d06a3b0 100755 --- a/install_gpg_all.sh +++ b/install_gpg_all.sh @@ -107,13 +107,13 @@ main() { ./install_gpg_component.sh --component-name gnupg --component-version latest "${@:2}" ;; "master") - ./install_gpg_component.sh --component-name libgpg-error --component-version master --git "${@:2}" - ./install_gpg_component.sh --component-name libgcrypt --component-version master --git "${@:2}" - ./install_gpg_component.sh --component-name libassuan --component-version master --git "${@:2}" - ./install_gpg_component.sh --component-name libksba --component-version master --git "${@:2}" - ./install_gpg_component.sh --component-name npth --component-version master --git "${@:2}" - ./install_gpg_component.sh --component-name pinentry --component-version master --git "${@:2}" - ./install_gpg_component.sh --component-name gnupg --component-version master --git "${@:2}" + ./install_gpg_component.sh --component-name libgpg-error --component-git-ref master --git "${@:2}" + ./install_gpg_component.sh --component-name libgcrypt --component-git-ref master --git "${@:2}" + ./install_gpg_component.sh --component-name libassuan --component-git-ref master --git "${@:2}" + ./install_gpg_component.sh --component-name libksba --component-git-ref master --git "${@:2}" + ./install_gpg_component.sh --component-name npth --component-git-ref master --git "${@:2}" + ./install_gpg_component.sh --component-name pinentry --component-git-ref master --git "${@:2}" + ./install_gpg_component.sh --component-name gnupg --component-git-ref master --git "${@:2}" ;; esac diff --git a/install_gpg_component.sh b/install_gpg_component.sh index 14dd6f4..23806d5 100755 --- a/install_gpg_component.sh +++ b/install_gpg_component.sh @@ -21,7 +21,7 @@ EXAMPLES install_gpg_component.rb --component-name libgpg-error --component-version latest --sudo # Installing latest git revision of libgpg-error - install_gpg_component.rb --component-name libgpg-error --component-version master --git + install_gpg_component.rb --component-name libgpg-error --component-git-ref master # Passing options to ./configure script install_gpg_component.rb --component-name libgpg-error --component-version latest --configure-opts "--disable-doc --exec-prefix=/my/bin" @@ -33,12 +33,16 @@ OPTIONS --component-version VERSION Component version to install (use "latest" for the latest release), - or git ref (branch, tag, commit hash etc.) when used with "--git" + or git ref (branch, tag, commit hash etc.) when used with "--component-git-ref" option (typically "master"). - --[no-]git + Either --component-version or --component-git-ref is mandatory. + + --component-git-ref REF Fetch source code from git repository instead of downloading release, - pass branch or tag name to --component-version argument. By default it is off. + use branch or tag name specified by REF argument (typically "master"). + + Either --component-version or --component-git-ref is mandatory. --[no-]sudo Whether to do 'sudo make install', or just 'make install', and whether @@ -94,6 +98,7 @@ parse_cli_arguments() ;; --component-version) _arg_version="$2" + _arg_git="off" shift shift ;; @@ -115,12 +120,10 @@ parse_cli_arguments() _arg_sudo="off" shift ;; - --git) + --component-git-ref) + _arg_version="$2" _arg_git="on" shift - ;; - --no-git) - _arg_git="off" shift ;; --folding-style) From 934a1ed9c824eac785d6e6b7ca5334a2115ac772 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Ska=C5=82acki?= Date: Tue, 13 Nov 2018 16:35:36 +0100 Subject: [PATCH 4/6] Consistent error handling --- install_gpg_component.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/install_gpg_component.sh b/install_gpg_component.sh index 23806d5..3aa926c 100755 --- a/install_gpg_component.sh +++ b/install_gpg_component.sh @@ -292,6 +292,17 @@ fold_end() esac } +###################### +# ERROR HANDLING # +###################### + +readonly __progname=$(basename $0) + +errx() { + echo -e "$__progname: $@" >&2 + exit 1 +} + ###################### # MAIN # ###################### From cb24f3788ef01be35089071d76d0feb881145ccd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Ska=C5=82acki?= Date: Tue, 13 Nov 2018 16:37:30 +0100 Subject: [PATCH 5/6] Rewrite interface of "install all" script Write command arguments parser similar to one in install_gpg_component.sh script. --- examples/all_2.1.sh | 2 +- examples/all_2.2.sh | 2 +- examples/all_head.sh | 2 +- examples/all_latest.sh | 2 +- examples/build_dir.sh | 2 +- examples/configure_options.sh | 2 +- examples/folding_travis.sh | 2 +- examples/install_prefix.sh | 2 +- examples/no_sudo.sh | 2 +- install_gpg_all.sh | 183 ++++++++++++++++------------------ 10 files changed, 93 insertions(+), 108 deletions(-) diff --git a/examples/all_2.1.sh b/examples/all_2.1.sh index b6566a6..cf70a4d 100755 --- a/examples/all_2.1.sh +++ b/examples/all_2.1.sh @@ -13,7 +13,7 @@ set -v # Print executed lines # Note that `sudo ./install_gpg_all …` is not the same—it would compile as # root (not recommended), and won't trigger post-install steps (including # ldconfig). -./install_gpg_all.sh 2.1 --sudo +./install_gpg_all.sh --suite-version 2.1 --sudo ############### # TESTS # diff --git a/examples/all_2.2.sh b/examples/all_2.2.sh index d147031..d042fce 100755 --- a/examples/all_2.2.sh +++ b/examples/all_2.2.sh @@ -13,7 +13,7 @@ set -v # Print executed lines # Note that `sudo ./install_gpg_all …` is not the same—it would compile as # root (not recommended), and won't trigger post-install steps (including # ldconfig). -./install_gpg_all.sh 2.2 --sudo +./install_gpg_all.sh --suite-version 2.2 --sudo ############### # TESTS # diff --git a/examples/all_head.sh b/examples/all_head.sh index 17e7cef..605d3cd 100755 --- a/examples/all_head.sh +++ b/examples/all_head.sh @@ -14,7 +14,7 @@ set -v # Print executed lines # Note that `sudo ./install_gpg_all …` is not the same—it would compile as # root (not recommended), and won't trigger post-install steps (including # ldconfig). -./install_gpg_all.sh master --sudo +./install_gpg_all.sh --suite-version master --sudo ############### # TESTS # diff --git a/examples/all_latest.sh b/examples/all_latest.sh index 2d80eb1..d37e14f 100755 --- a/examples/all_latest.sh +++ b/examples/all_latest.sh @@ -14,7 +14,7 @@ set -v # Print executed lines # Note that `sudo ./install_gpg_all …` is not the same—it would compile as # root (not recommended), and won't trigger post-install steps (including # ldconfig). -./install_gpg_all.sh latest --sudo +./install_gpg_all.sh --suite-version latest --sudo ############### # TESTS # diff --git a/examples/build_dir.sh b/examples/build_dir.sh index 2109dbb..bad8bfb 100755 --- a/examples/build_dir.sh +++ b/examples/build_dir.sh @@ -22,7 +22,7 @@ mkdir -p ${BUILD_DIR} # Note that `sudo ./install_gpg_all …` is not the same—it would compile as # root (not recommended), and won't trigger post-install steps (including # ldconfig). -./install_gpg_all.sh 2.2 --sudo --build-dir ${BUILD_DIR} +./install_gpg_all.sh --suite-version 2.2 --sudo --build-dir ${BUILD_DIR} ############### # TESTS # diff --git a/examples/configure_options.sh b/examples/configure_options.sh index deb3a9f..060e483 100755 --- a/examples/configure_options.sh +++ b/examples/configure_options.sh @@ -14,7 +14,7 @@ set -v # Print executed lines # --enable-gpg-sha256 and --disable-gpg-sha512 are relevant to GnuPG component, # whereas --disable-doc is relevant for all components. This is okay, however # warnings will be printed. -./install_gpg_all.sh latest --sudo --configure-opts "--disable-doc \ +./install_gpg_all.sh --suite-version latest --sudo --configure-opts "--disable-doc \ --enable-pinentry-curses --enable-gpg-sha256 --disable-gpg-sha512" ############### diff --git a/examples/folding_travis.sh b/examples/folding_travis.sh index 6f4b150..712317d 100755 --- a/examples/folding_travis.sh +++ b/examples/folding_travis.sh @@ -14,7 +14,7 @@ set -v # Print executed lines # Note that `sudo ./install_gpg_all …` is not the same—it would compile as # root (not recommended), and won't trigger post-install steps (including # ldconfig). -./install_gpg_all.sh latest --sudo --folding-style travis | tee ./output +./install_gpg_all.sh --suite-version latest --sudo --folding-style travis | tee ./output ############### # TESTS # diff --git a/examples/install_prefix.sh b/examples/install_prefix.sh index 55c923a..5278248 100755 --- a/examples/install_prefix.sh +++ b/examples/install_prefix.sh @@ -33,7 +33,7 @@ export PATH="${EXEC_PREFIX}/bin:${PATH}" mkdir -p ${GPG_PREFIX} ${EXEC_PREFIX} ${MAN_DIR} -./install_gpg_all.sh latest --sudo --configure-opts "${GPG_CONFIGURE_OPTS}" +./install_gpg_all.sh --suite-version latest --sudo --configure-opts "${GPG_CONFIGURE_OPTS}" ############### # TESTS # diff --git a/examples/no_sudo.sh b/examples/no_sudo.sh index fb8b08f..fd81c19 100755 --- a/examples/no_sudo.sh +++ b/examples/no_sudo.sh @@ -29,7 +29,7 @@ export PATH="${GPG_PREFIX}/bin:${PATH}" mkdir -p ${GPG_PREFIX} -./install_gpg_all.sh latest --no-sudo --configure-opts "${GPG_CONFIGURE_OPTS}" +./install_gpg_all.sh --suite-version latest --no-sudo --configure-opts "${GPG_CONFIGURE_OPTS}" ############### # TESTS # diff --git a/install_gpg_all.sh b/install_gpg_all.sh index d06a3b0..551af96 100755 --- a/install_gpg_all.sh +++ b/install_gpg_all.sh @@ -1,119 +1,86 @@ -#!/bin/bash - -# Popular combinations of GPG software versions. -# -# For v2.2: https://gist.github.com/vt0r/a2f8c0bcb1400131ff51 -# For v2.1: https://gist.github.com/mattrude/3883a3801613b048d45b +#!/usr/bin/env bash # -# USAGE: -# ./install_gpg_all.sh [] -# -# EXAMPLE -# ./install_gpg_all.sh 2.2 - -set -e - -readonly __progname=$(basename $0) - -errx() { - echo -e "$__progname: $@" >&2 - exit 1 -} -usage() { - echo "usage: $__progname [-i ] [-d]" - echo "" - echo " Options:" - echo " -d for dry run, not building GPG components." - echo " -i to select the GPG version to install [major.minor], defaults to `latest`." - echo " - `latest`: latest version of GnuPG." - echo " - `x.y`: specific version x.y of GnuPG, e.g. `2.2`." - echo " - `master`: build from GnuPG git master branch." - echo " -h to display this message" - echo "" - echo " Arguments can also be set via environment variables: " - echo " - GPG_VERSION" - exit 1 -} +###################### +# ARGUMENTS HANDLING # +###################### -prequisites_yum() { - yum install -y bzip2 gcc make sudo +print_help () +{ + cat < +HELP } -detect_platform() { - # Determine OS platform - DISTRO=$(awk -F= '/^NAME/{print $2}' /etc/os-release | tr -d \") - echo "$DISTRO" +set_default_options() +{ + _arg_suite="latest" + _arr_component_options=() } -main() { - - while getopts ":idh" o; do - case "${o}" in - i) - readonly local GPG_VERSION=${OPTARG} - ;; - d) - readonly local DRYRUN=1 - ;; - h) - usage - ;; - *) - usage - ;; +parse_cli_arguments() +{ + while test $# -gt 0 + do + case "$1" in + --suite-version) + _arg_suite="$2" + shift + shift + ;; + -h|--help) + print_help + exit 0 + ;; + *) + _arr_component_options=("${@}") + break esac done +} - if [ "x$GPG_VERSION" == "x" ]; then - GPG_VERSION="latest" - fi - - DISTRO="$(detect_platform)" - - case $DISTRO in - "CentOS Linux") - echo "Installing CentOS yum dependencies" - prequisites_yum - ;; - esac +###################### +# BUILDING # +###################### - case "$GPG_VERSION" in +install_suite() +{ + case "${_arg_suite}" in "2.2") - ./install_gpg_component.sh --component-name libgpg-error --component-version 1.31 "${@:2}" - ./install_gpg_component.sh --component-name libgcrypt --component-version 1.8.2 "${@:2}" - ./install_gpg_component.sh --component-name libassuan --component-version 2.5.1 "${@:2}" - ./install_gpg_component.sh --component-name libksba --component-version 1.3.5 "${@:2}" - ./install_gpg_component.sh --component-name npth --component-version 1.5 "${@:2}" - ./install_gpg_component.sh --component-name pinentry --component-version 1.1.0 "${@:2}" - ./install_gpg_component.sh --component-name gnupg --component-version 2.2.7 "${@:2}" + ./install_gpg_component.sh --component-name libgpg-error --component-version 1.31 "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name libgcrypt --component-version 1.8.2 "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name libassuan --component-version 2.5.1 "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name libksba --component-version 1.3.5 "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name npth --component-version 1.5 "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name pinentry --component-version 1.1.0 "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name gnupg --component-version 2.2.7 "${_arr_component_options[@]}" ;; "2.1") - ./install_gpg_component.sh --component-name libgpg-error --component-version 1.27 "${@:2}" - ./install_gpg_component.sh --component-name libgcrypt --component-version 1.7.6 "${@:2}" - ./install_gpg_component.sh --component-name libassuan --component-version 2.4.3 "${@:2}" - ./install_gpg_component.sh --component-name libksba --component-version 1.3.5 "${@:2}" - ./install_gpg_component.sh --component-name npth --component-version 1.2 "${@:2}" - ./install_gpg_component.sh --component-name pinentry --component-version 0.9.5 "${@:2}" - ./install_gpg_component.sh --component-name gnupg --component-version 2.1.20 "${@:2}" + ./install_gpg_component.sh --component-name libgpg-error --component-version 1.27 "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name libgcrypt --component-version 1.7.6 "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name libassuan --component-version 2.4.3 "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name libksba --component-version 1.3.5 "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name npth --component-version 1.2 "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name pinentry --component-version 0.9.5 "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name gnupg --component-version 2.1.20 "${_arr_component_options[@]}" ;; "latest") - ./install_gpg_component.sh --component-name libgpg-error --component-version latest "${@:2}" - ./install_gpg_component.sh --component-name libgcrypt --component-version latest "${@:2}" - ./install_gpg_component.sh --component-name libassuan --component-version latest "${@:2}" - ./install_gpg_component.sh --component-name libksba --component-version latest "${@:2}" - ./install_gpg_component.sh --component-name npth --component-version latest "${@:2}" - ./install_gpg_component.sh --component-name pinentry --component-version latest "${@:2}" - ./install_gpg_component.sh --component-name gnupg --component-version latest "${@:2}" + ./install_gpg_component.sh --component-name libgpg-error --component-version latest "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name libgcrypt --component-version latest "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name libassuan --component-version latest "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name libksba --component-version latest "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name npth --component-version latest "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name pinentry --component-version latest "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name gnupg --component-version latest "${_arr_component_options[@]}" ;; "master") - ./install_gpg_component.sh --component-name libgpg-error --component-git-ref master --git "${@:2}" - ./install_gpg_component.sh --component-name libgcrypt --component-git-ref master --git "${@:2}" - ./install_gpg_component.sh --component-name libassuan --component-git-ref master --git "${@:2}" - ./install_gpg_component.sh --component-name libksba --component-git-ref master --git "${@:2}" - ./install_gpg_component.sh --component-name npth --component-git-ref master --git "${@:2}" - ./install_gpg_component.sh --component-name pinentry --component-git-ref master --git "${@:2}" - ./install_gpg_component.sh --component-name gnupg --component-git-ref master --git "${@:2}" + ./install_gpg_component.sh --component-name libgpg-error --component-git-ref master "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name libgcrypt --component-git-ref master "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name libassuan --component-git-ref master "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name libksba --component-git-ref master "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name npth --component-git-ref master "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name pinentry --component-git-ref master "${_arr_component_options[@]}" + ./install_gpg_component.sh --component-name gnupg --component-git-ref master "${_arr_component_options[@]}" ;; esac @@ -122,9 +89,27 @@ main() { | INSTALL COMPLETE! | +-------------------+ DONE +} +###################### +# ERROR HANDLING # +###################### + +readonly __progname=$(basename $0) + +errx() { + echo -e "$__progname: $@" >&2 + exit 1 } -main "$@" +###################### +# MAIN # +###################### + +set -e # Early exit if any command returns non-zero status code + +set_default_options +parse_cli_arguments "$@" +install_suite exit 0 From f23860de27af5ab527838e9e335f6342612ef506 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Ska=C5=82acki?= Date: Tue, 13 Nov 2018 18:12:52 +0100 Subject: [PATCH 6/6] Document recent interface changes --- README.adoc | 50 ++++++++++++++++++++++------------------ install_gpg_all.sh | 49 ++++++++++++++++++++++++++++++++++++++- install_gpg_component.sh | 6 ++++- 3 files changed, 80 insertions(+), 25 deletions(-) diff --git a/README.adoc b/README.adoc index a1d6390..a030ac6 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -A set of build scripts for Gnu Privacy Guard. +A set of build scripts for GNU Privacy Guard. image:https://img.shields.io/travis/riboseinc/gpg-build-scripts/master.svg["Build Status", link="https://travis-ci.org/riboseinc/gpg-build-scripts"] @@ -12,8 +12,8 @@ https://gist.github.com/mattrude/3883a3801613b048d45b#gistcomment-2378027). When building from Git, additional software is needed, in particular Git, Automake, and more recent version of Gettext. Note that Gettext available in -Ubuntu Trusty is too old for this purpose, and that makes building from Git -in Travis CI environment bit more difficult. +Ubuntu Trusty is too old for this purpose--this fact must be taken into account +when building from Git in Travis CI environment. == Scripts @@ -23,16 +23,15 @@ the `examples` subdirectory. === `install_gpg_component.sh` -Builds and installs a specific component of GPG. +Builds and installs a specific component of GnuPG. The source code is obtained +either from released tarballs, or from Git repository. -Two options are mandatory: +When building stable releases from tarballs, two options are mandatory: * `--component-name`, which specifies a component name * `--component-version`, which specifies component version (can be `latest`) -For example, following snippet will build and install the most recent release -of Pinentry: - +.Example: building the most recent release of Pinentry. [source,bash] ---- ./install_gpg_component.sh \ @@ -40,22 +39,30 @@ of Pinentry: --component-version latest ---- -Furthermore, script is capable of fetching source from Git repository (instead -of downloading tarballs with stable releases). In such case, a `--git` option -should be supplied, and `--component-version` should specify the desired Git ref. For -example, following will build the current master of Pinentry component: +.Example: building Pinentry version 1.1.0. +[source,bash] +---- +./install_gpg_component.sh \ + --component-name pinentry \ + --component-version 1.1.0 +---- + +When building from Git repository, two options are mandatory: + +* `--component-name`, which specifies a component name +* `--component-git-ref`, which specifies a Git branch or tag (commonly `master`) +.Example: building Pinentry from Git as of current master. [source,bash] ---- ./install_gpg_component.sh \ --component-name pinentry \ - --component-version master \ - --git + --component-git-ref master ---- -Run script with `--help` option in order to display a more detailed -documentation: +Run script with `--help` option in order to list all available options: +.Example: printing script help. [source,bash] ---- ./install_gpg_component.sh --help @@ -63,8 +70,8 @@ documentation: === `install_gpg_all.sh` -Builds and installs all components of GPG. The first parameter describes -the desired version of GPG. Supported values are: `2.1`, `2.2`, `latest`, and +Builds and installs all components of GnuPG. The first parameter describes +the desired version of GnuPG. Supported values are: `2.1`, `2.2`, `latest`, and `master`. Other components are installed in best-matching versions, which is defined as follows: @@ -77,14 +84,13 @@ Prefer `latest` over `2.2`. Any other parameters supplied will be passed to `install_gpg_component.sh`. -For example, following snippet will install the freshest GPG, and its components -without documentation: +For example, following snippet will install the freshest GnuPG, and its +components without documentation: [source,bash] ---- ./install_gpg_all.sh \ latest \ - --build-dir ~/build-gpg \ --configure-opts "--disable-doc" ---- @@ -98,7 +104,6 @@ example: ./install_gpg_component.sh \ --component-name pinentry \ --component-version latest \ - --build-dir ~/build-gpg \ --configure-opts "--enable-pinentry-qt --enable-pinentry-curses" ---- @@ -110,7 +115,6 @@ The `./configure` script assumes that all the dependencies are installed in ---- ./install_gpg_all.sh \ latest \ - --build-dir ~/build-gpg \ --configure-opts "\ --prefix=/opt/gpg \ --with-libgpg-error-prefix=/opt/gpg \ diff --git a/install_gpg_all.sh b/install_gpg_all.sh index 551af96..4ce7065 100755 --- a/install_gpg_all.sh +++ b/install_gpg_all.sh @@ -8,7 +8,54 @@ print_help () { cat < +USAGE + + install_gpg_all.sh + +DESCRIPTION + + Installs a whole GnuPG suite. + + All arguments which are not recognized by this script are forwarded to + install_gpg_component.sh script (). They must be + specified after (if any). + +EXAMPLES + + # Installing latest version of all GnuPG software + install_gpg_component.sh --suite-version latest + + # Installing GnuPG 2.1 + install_gpg_component.sh --suite-version 2.1 + + # Passing options to install_gpg_component.sh scripts + install_gpg_component.sh --suite-version latest --sudo + +OPTIONS + + --suite-version VERSION + + Defines which version of GnuPG components should be installed. Default + is "latest". + + Following values for VERSION are supported: + + "2.2" + GnuPG 2.2, and matching dependencies. + + "2.1" + GnuPG 2.1, and matching dependencies. + + "latest" + Latest version of GnuPG, and its dependecies. Prefer "latest" + over "2.2". + + "master" + Install all GnuPG components from Git master branch. + + --help, -h + Displays this message. + HELP } diff --git a/install_gpg_component.sh b/install_gpg_component.sh index 3aa926c..9a674e7 100755 --- a/install_gpg_component.sh +++ b/install_gpg_component.sh @@ -12,6 +12,10 @@ USAGE install_gpg_component.rb +DESCRIPTION + + Installs a single component of GnuPG suite. + EXAMPLES # Installing latest version of libgpg-error @@ -29,7 +33,7 @@ EXAMPLES OPTIONS --component-name COMPONENT - Component to install + Component to install. This option is mandatory. --component-version VERSION Component version to install (use "latest" for the latest release),