# HG changeset patch # User Paul Boddie # Date 1573330895 -3600 # Node ID 329669d3b8150177a2a99a47c43a2613de3c2f1e # Parent 2a5b1d2b294c6c185a4a0bd730c70463b973d1dc Added templates and a program to generate Makefile include files. diff -r 2a5b1d2b294c -r 329669d3b815 mk_interface_inc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mk_interface_inc Sat Nov 09 21:21:35 2019 +0100 @@ -0,0 +1,83 @@ +#!/bin/sh + +DIRNAME=`dirname "$0"` +PROGNAME=`basename "$0"` + +TEMPLATES="$DIRNAME/templates" + +# Test for arguments. + +if [ ! "$1" ] || [ "$1" = '--help' ] ; then + cat 1>&2 < \\ + [ -N ] [ ... ] + +This program reads a template from... + +$TEMPLATES + +...and produces a Makefile for inclusion in other Makefiles alongside suitable +definitions and rules. + +Specifying the -C option produces a compound/composite/component interface +employing other interfaces. Providing the -N option with a name overrides the +name of the generated interface. The individual interface names or filenames +must then be given. +EOF + exit 1 +fi + +# Determine what kind of interface is involved. + +if [ "$1" = '-C' ] ; then + COMP=$1 + shift 1 +else + COMP= +fi + +# Get the interface name, filename or filename prefix. + +NAME=$1 +shift 1 + +# Obtain the prefix or root of the interface filename. + +INTERFACE_PREFIX=`basename "$NAME" .idl` + +# Test for an interface name. + +INTERFACE_NAME=$INTERFACE_PREFIX + +if [ "$COMP" ] ; then + if [ "$1" = '-N' ] ; then + shift 1 + INTERFACE_NAME=$1 + shift 1 + fi + + INTERFACE_FILES= + + for NAME in $* ; do + INTERFACE_FILES="$INTERFACE_FILES `basename \"$NAME\" .idl`" + done +fi + +# Obtain a suitable identifier as a variable name prefix. + +VARNAME=`echo "$INTERFACE_PREFIX" | tr [:blank:] _` + +# Substitution rules. + +SUB_VARNAME='s/{VARNAME}/'"$VARNAME"'/g' +SUB_PREFIX='s/{INTERFACE_PREFIX}/'"$INTERFACE_PREFIX"'/g' +SUB_FILES='s/{INTERFACE_FILES}/'"$INTERFACE_FILES"'/g' +SUB_NAME='s/{INTERFACE_NAME}/'"$INTERFACE_NAME"'/g' + +# Substitute the above values for the placeholders in the Makefile template. + +if [ "$COMP" ] ; then + sed "$SUB_VARNAME;$SUB_PREFIX;$SUB_FILES;$SUB_NAME" "$TEMPLATES/comp_interface.inc" +else + sed "$SUB_VARNAME;$SUB_PREFIX" "$TEMPLATES/interface.inc" +fi diff -r 2a5b1d2b294c -r 329669d3b815 templates/comp_interface.inc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/templates/comp_interface.inc Sat Nov 09 21:21:35 2019 +0100 @@ -0,0 +1,17 @@ +# -*- Makefile -*- + +{VARNAME}_INTERFACES = {INTERFACE_FILES} +{VARNAME}_PREFIX = {INTERFACE_PREFIX} +{VARNAME}_NAME = {INTERFACE_NAME} +{VARNAME}_IDL = $(call interfaces_to_idl,$({VARNAME}_INTERFACES)) +{VARNAME}_SERVER = $(call interfaces_to_server,$({VARNAME}_PREFIX)) +{VARNAME}_EXPORTED = $(call exported_files, $(call interfaces_to_interfaces_h,$({VARNAME}_PREFIX))) +{VARNAME}_OPTIONS = --comp=$({VARNAME}_PREFIX) --comp-name=$({VARNAME}_NAME) + +$({VARNAME}_SERVER): $({VARNAME}_IDL) $({VARNAME}_EXPORTED) + $(IDL_PROG) -d $(BUILD_DIR) $({VARNAME}_OPTIONS) --headers --routines --language=c++ $({VARNAME}_IDL) + +$({VARNAME}_EXPORTED): $({VARNAME}_IDL) + $(IDL_PROG) -d $(EXPORTED_DIR) $({VARNAME}_OPTIONS) --interfaces --language=c++ $({VARNAME}_IDL) + +# vim: set ft=make: diff -r 2a5b1d2b294c -r 329669d3b815 templates/interface.inc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/templates/interface.inc Sat Nov 09 21:21:35 2019 +0100 @@ -0,0 +1,14 @@ +# -*- Makefile -*- + +{VARNAME}_PREFIX = {INTERFACE_PREFIX} +{VARNAME}_IDL = $(call interfaces_to_idl,$({VARNAME}_PREFIX)) +{VARNAME}_SERVER = $(call interfaces_to_server,$({VARNAME}_PREFIX)) +{VARNAME}_EXPORTED = $(call exported_files,$(call interfaces_to_interface_h,$({VARNAME}_PREFIX))) + +$({VARNAME}_SERVER): $({VARNAME}_IDL) $({VARNAME}_EXPORTED) + $(IDL_PROG) -d $(BUILD_DIR) --server --headers --routines --language=c++ $({VARNAME}_IDL) + +$({VARNAME}_EXPORTED): $({VARNAME}_IDL) + $(IDL_PROG) -d $(EXPORTED_DIR) --server --interfaces --language=c++ $({VARNAME}_IDL) + +# vim: set ft=make: