about summary refs log tree commit diff
path: root/xlint
diff options
context:
space:
mode:
authorPiotr Wójcik <chocimier@tlen.pl>2018-10-26 19:04:27 +0200
committerLeah Neukirchen <leah@vuxu.org>2018-10-29 16:45:16 +0100
commit744274dbe1b0a8b3d726b7402812a8f9b7fb20d2 (patch)
tree41228e7cf5283d70946c9ca00239ca94b13b0480 /xlint
parent934934a89f46b135dbcf77a5006019a7754cd0f9 (diff)
downloadxtools-744274dbe1b0a8b3d726b7402812a8f9b7fb20d2.tar.gz
xtools-744274dbe1b0a8b3d726b7402812a8f9b7fb20d2.tar.xz
xtools-744274dbe1b0a8b3d726b7402812a8f9b7fb20d2.zip
xlint: check variables order
Closes: #100 [via git-merge-pr]
Diffstat (limited to 'xlint')
-rwxr-xr-xxlint76
1 files changed, 76 insertions, 0 deletions
diff --git a/xlint b/xlint
index d083ff9..cc85f25 100755
--- a/xlint
+++ b/xlint
@@ -19,6 +19,81 @@ header() {
 	fi
 }
 
+variables_order() {
+	local curr_index max_index max_index_line variables_end message line
+	max_index=0
+	while IFS="" read -r line; do
+		case "$line" in
+			pkgname=*) curr_index=1;;
+			reverts=*) curr_index=2;;
+			version=*) curr_index=3;;
+			revision=*) curr_index=4;;
+			noarch=*) curr_index=5;;
+			revision=*) curr_index=6;;
+			wrksrc=*) curr_index=7;;
+			build_wrksrc=*) curr_index=8;;
+			build_style=*) curr_index=9;;
+			cmake_args=*) curr_index=10;;
+			cmake_builddir=*) curr_index=10;;
+			configure_args=*) curr_index=10;;
+			configure_script=*) curr_index=10;;
+			go_build_tags=*) curr_index=10;;
+			go_get=*) curr_index=10;;
+			go_import_path=*) curr_index=10;;
+			go_ldflags=*) curr_index=10;;
+			go_package=*) curr_index=10;;
+			make_build_args=*) curr_index=10;;
+			make_build_target=*) curr_index=10;;
+			make_check_args=*) curr_index=10;;
+			make_check_target=*) curr_index=10;;
+			make_cmd=*) curr_index=10;;
+			make_install_args=*) curr_index=10;;
+			make_install_target=*) curr_index=10;;
+			make_use_env=*) curr_index=10;;
+			meson_builddir=*) curr_index=10;;
+			meson_cmd=*) curr_index=10;;
+			meson_crossfile=*) curr_index=10;;
+			perl_configure_dirs=*) curr_index=10;;
+			python_versions=*) curr_index=10;;
+			stackage=*) curr_index=10;;
+			hostmakedepends=*) curr_index=11;;
+			makedepends=*) curr_index=12;;
+			depends=*) curr_index=13;;
+			checkdepends=*) curr_index=14;;
+			short_desc=*) curr_index=15;;
+			maintainer=*) curr_index=16;;
+			license=*) curr_index=17;;
+			homepage=*) curr_index=18;;
+			changelog=*) curr_index=19;;
+			distfiles=*) curr_index=20;;
+			checksum=*) curr_index=21;;
+			alternatives=*) curr_index=22;;
+			"#"*) continue;;
+			" "*) continue;;
+			"	"*) continue;;
+			"_"*"="*) continue;;
+			*"="*) curr_index=23;;
+			"") variables_end=1;;
+			*"{") variables_end=1;;
+			*) continue;;
+		esac
+
+		if [ "$variables_end" ]; then
+			return
+		elif [ "$curr_index" -lt "$max_index" ]; then
+			message="$template: Place $max_index_line= after ${line%%=*}="
+		elif [ "$curr_index" -gt "$max_index" ]; then
+			max_index="$curr_index"
+			max_index_line="${line%%=*}"
+			if [ "$message" ]; then
+				echo "$message"
+				message=
+			fi
+		fi
+	done < "$template"
+	[ -n "$message" ] && echo "$message"
+}
+
 variables=$(echo -n "#.*
 _.*
 .*_descr
@@ -199,6 +274,7 @@ for template; do
 	pkgname=$(grep -Po "^pkgname=\K.*" "$template")
 	version=$(grep -Po "^version=\K.*" "$template")
 	scan "distfiles=.*\Q$version\E" 'use ${version} in distfiles instead'
+	variables_order
 	header
 	else
 	echo no such template "$template" 1>&2