#!/usr/bin/awk -f # Usage: bin/mk_libvirt_constants /path/to/libvirt/include/libvirt/*.h | \ # sort | uniq > include/libvirt_constants.hrl BEGIN { inenum = 0 } # https://www.gnu.org/software/gawk/manual/html_node/Join-Function.html function join(array, start, end, sep, result, i) { if (sep == "") sep = " " else if (sep == SUBSEP) # magic value sep = "" result = array[start] for (i = start + 1; i <= end; i++) result = result sep array[i] return result } function err(msg) { print msg > "/dev/stderr" exit 1 } function ensure_comma(str) { if (str !~ /,/ && str ~ /\/\*/) { sub("\\/\\*", ", \\/\\*", str) } else if (str !~ /,/) { sub("$", ",", str) } return str } function strip(str) { sub("^\\s*", "", str) sub("\\s*$", "", str) return str } function token(t) { # #define ABC 1234 if (t ~ /^[0-9\-]+$/) { return t } # #define ABC (1U << 31) else if (t ~ /^\(*[-1-9]+U$/) { sub("U", "", t) return t } # #define ABC XYZ else if (t ~ /^[A-Z0-9_]+$/) { return "?" t } # #define ABC (1 << 31) else if (t ~ /<