]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#2558] improved searching of yanglint and its libraries
authorAndrei Pavel <andrei@isc.org>
Mon, 5 Sep 2022 19:52:48 +0000 (22:52 +0300)
committerAndrei Pavel <andrei@isc.org>
Fri, 23 Sep 2022 10:37:15 +0000 (13:37 +0300)
.gitlab-ci.yml
configure.ac
src/share/yang/modules/utils/.gitignore
src/share/yang/modules/utils/check-hashes.sh.in [moved from src/share/yang/modules/utils/check-hashes.sh with 56% similarity, mode: 0644]
src/share/yang/modules/utils/check-revisions.sh.in [moved from src/share/yang/modules/utils/check-revisions.sh with 50% similarity, mode: 0644]

index 4714f7ea7b68ba19b8df71a5a280b22a21f63b5a..77f6e26e1bff4dee0cd1a5d8e190eaa5a1a897ee 100644 (file)
@@ -97,8 +97,8 @@ shellcheck:
     - SCRIPTS+="src/share/database/scripts/pgsql/upgrade_011_to_012.sh.in "
     - SCRIPTS+="src/share/database/scripts/pgsql/upgrade_012_to_013.sh.in "
     - SCRIPTS+="src/share/database/scripts/pgsql/wipe_data.sh.in "
-    - SCRIPTS+="src/share/yang/modules/utils/check-hashes.sh "
-    - SCRIPTS+="src/share/yang/modules/utils/check-revisions.sh "
+    - SCRIPTS+="src/share/yang/modules/utils/check-hashes.sh.in "
+    - SCRIPTS+="src/share/yang/modules/utils/check-revisions.sh.in "
     - SCRIPTS+="src/share/yang/modules/utils/gen-revisions.sh "
     - SCRIPTS+="src/share/yang/modules/utils/reinstall.sh.in "
     - SCRIPTS+="tools/add-config-h.sh "
index 6af7e1f9e966439ca55dacfed65b4810ec982330..9bf969ee5d38436541c8741dd345e081be81f9c9 100644 (file)
@@ -1691,6 +1691,10 @@ AC_CONFIG_FILES([src/share/database/scripts/pgsql/wipe_data.sh],
 AC_CONFIG_FILES([src/share/yang/Makefile])
 AC_CONFIG_FILES([src/share/yang/modules/Makefile])
 AC_CONFIG_FILES([src/share/yang/modules/utils/Makefile])
+AC_CONFIG_FILES([src/share/yang/modules/utils/check-hashes.sh],
+                [chmod +x src/share/yang/modules/utils/check-hashes.sh])
+AC_CONFIG_FILES([src/share/yang/modules/utils/check-revisions.sh],
+                [chmod +x src/share/yang/modules/utils/check-revisions.sh])
 AC_CONFIG_FILES([src/share/yang/modules/utils/reinstall.sh],
                 [chmod +x src/share/yang/modules/utils/reinstall.sh])
 AC_CONFIG_FILES([tools/Makefile])
index 8cf91b2f93093dde42d926e795d859f0283bab28..e797fab5cf6c3ec5dfb455d4fe8e6e682d955e13 100644 (file)
@@ -1 +1,3 @@
+/check-hashes.sh
+/check-revisions.sh
 /reinstall.sh
old mode 100755 (executable)
new mode 100644 (file)
similarity index 56%
rename from src/share/yang/modules/utils/check-hashes.sh
rename to src/share/yang/modules/utils/check-hashes.sh.in
index 968289d..8ca411f
@@ -18,8 +18,7 @@
 set -eu
 
 # Change directory to the YANG modules' directory.
-script_path=$(cd "$(dirname "${0}")" && pwd)
-cd "${script_path}/.."
+cd "@abs_top_srcdir@/src/share/yang/modules"
 
 amend=false
 if test "${1-}" = '-a' || test "${1-}" = '--amend'; then
@@ -27,24 +26,38 @@ if test "${1-}" = '-a' || test "${1-}" = '--amend'; then
 fi
 
 exit_code=0
-for m in *.yang
-do
-    hash1=$(yanglint -f yin "${m}" | openssl dgst -sha256 | sed 's/(stdin)= //' | sed 's/SHA2-256//')
+
+LIBYANG_PREFIX='@LIBYANG_PREFIX@'
+
+# Find yanglint.
+if test -f "${LIBYANG_PREFIX}/bin/yanglint"; then
+    yanglint="${LIBYANG_PREFIX}/bin/yanglint"
+    LD_LIBRARY_PATH="${LD_LIBRARY_PATH-}:${LIBYANG_PREFIX}/lib:${LIBYANG_PREFIX}/lib64"
+    export LD_LIBRARY_PATH
+elif command -v yanglint; then
+    yanglint='yanglint'
+else
+    exit_code=$((exit_code | 2))
+    printf 'ERROR: cannot find yanglint.\n' >&2
+    exit "${exit_code}"
+fi
+
+for m in *.yang; do
+    hash1=$("${yanglint}" -f yin "${m}" | openssl dgst -sha256 | sed 's/(stdin)= //' | sed 's/SHA2-256//')
     h="hashes/$(basename "${m}" .yang).hash"
-    if test -f "${h}"
-    then
+    if test -f "${h}"; then
         hash2=$(cat "${h}")
         if test "$hash1" != "$hash2"
         then
-            exit_code=$((exit_code | 1))
-            printf 'hash mismatch on %s expected %s in %s\n' "${m}" "${hash1}" "${h}"
+            exit_code=$((exit_code | 4))
+            printf 'ERROR: hash mismatch on %s expected %s in %s\n' "${m}" "${hash1}" "${h}" >&2
             if "${amend}"; then
                 printf '%s\n' "${hash1}" > "${h}"
             fi
         fi
     else
-        exit_code=$((exit_code | 2))
-        printf 'missing hash file %s for %s\n' "${h}" "${m}"
+        exit_code=$((exit_code | 8))
+        printf 'ERROR: missing hash file %s for %s\n' "${h}" "${m}" >&2
         if "${amend}"; then
             printf '%s\n' "${hash1}" > "${h}"
         fi
old mode 100755 (executable)
new mode 100644 (file)
similarity index 50%
rename from src/share/yang/modules/utils/check-revisions.sh
rename to src/share/yang/modules/utils/check-revisions.sh.in
index 04c9615..92b1573
 set -eu
 
 # Change directory to the YANG modules' directory.
-script_path=$(cd "$(dirname "${0}")" && pwd)
-cd "${script_path}/.."
+cd "@abs_top_srcdir@/src/share/yang/modules"
 
-error=0
-for m in *.yang
-do
-    rev1=$(yanglint -f yin "${m}" | grep '<revision date=' | head -1 | sed \
+exit_code=0
+
+LIBYANG_PREFIX='@LIBYANG_PREFIX@'
+
+# Find yanglint.
+if test -f "${LIBYANG_PREFIX}/bin/yanglint"; then
+    yanglint="${LIBYANG_PREFIX}/bin/yanglint"
+    LD_LIBRARY_PATH="${LD_LIBRARY_PATH-}:${LIBYANG_PREFIX}/lib:${LIBYANG_PREFIX}/lib64"
+    export LD_LIBRARY_PATH
+elif command -v yanglint; then
+    yanglint='yanglint'
+else
+    exit_code=$((exit_code | 2))
+    printf 'ERROR: cannot find yanglint.\n' >&2
+    exit "${exit_code}"
+fi
+
+for m in *.yang; do
+    rev1=$("${yanglint}" -f yin "${m}" | grep '<revision date=' | head -1 | sed \
  's/.*<revision date="\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\)".*/\1/')
     rev2=$(echo "${m}" | sed \
  's/.*@\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\)\..*/\1/')
 
-    if test "${rev1}" != "${rev2}"
-    then
-        error=1
-        printf 'revision mismatch on %s got %s\n' "${m}" "${rev1}"
+    if test "${rev1}" != "${rev2}"; then
+        exit_code=$((exit_code | 4))
+        printf 'ERROR: revision mismatch on module %s: revision date is %s, file name has %s.\n' "${m}" "${rev1}" "${rev2}" >&2
     fi
 done
-exit $error
+
+exit "${exit_code}"