#!/bin/sh set -euf generate_header () { echo "/* WARNING: file is autogenerated */" echo "" echo "#include " echo "" echo "#ifndef ${UPPER}_OIDS_" echo "#define ${UPPER}_OIDS_" echo "" while read name oid; do if [ -n "$name" ]; then lname=$(echo "$name" | tr '[:upper:]' '[:lower:]') echo "GQuark _${LOWER}_oid_${lname}_get_quark (void) G_GNUC_CONST;" echo "#define ${UPPER}_OID_${name} _${LOWER}_oid_${lname}_get_quark ()" echo "" fi done echo "" echo "#endif /* ${UPPER}_OIDS_ */" } generate_source () { echo "/* WARNING: file is autogenerated */" echo "" echo "#include \"$HEADER\"" echo "" while read name oid; do if [ -n "$name" ]; then lname=$(echo "$name" | tr '[:upper:]' '[:lower:]') echo "GQuark" echo "_${LOWER}_oid_${lname}_get_quark (void)" echo "{" echo " static size_t inited = 0;" echo " static GQuark quark = 0;" echo " if (g_once_init_enter (&inited)) {" echo " quark = g_quark_from_static_string (\"${oid}\");" echo " g_once_init_leave (&inited, 1);" echo " }" echo " return quark;" echo "}" echo "" fi done } UPPER="PREFIX" LOWER="prefix" while getopts 'c:h:p:' arg; do case $arg in p) UPPER=$(echo "$OPTARG" | tr '[:lower:]' '[:upper:]') LOWER=$(echo "$OPTARG" | tr '[:upper:]' '[:lower:]') ;; c) SOURCE="$OPTARG" ;; h) HEADER="$OPTARG" ;; *) echo "gcr-mkoids: invalid argument: $arg" >&2 exit 2 ;; esac done shift $(expr $OPTIND - 1) if [ $# -ne 1 ]; then echo "gcr-mkoids: specify input file on command line" exit 2 fi INPUT="$1" if [ -n "$HEADER" ]; then generate_header < $INPUT > $HEADER fi if [ -n "$SOURCE" ]; then generate_source < $INPUT > $SOURCE fi