dumpdef
grava a lista de macros com sua definição em um arquivo. Em padrão m4 , esse arquivo é um erro padrão, então a única maneira de obtê-lo é com um redirecionamento externo ao script m4. O GNU m4 fornece o debugfile
macro para redirecionar a saída para um arquivo que pode ser lido novamente com input
, mas você não pode confiar em uma implementação específica de m4 no autoconf.
Mesmo se você conseguir obter a saída de dumpdef
, o formato da saída não será especificado. Você pode usar index
e substr
para dividir uma string em linhas, mas isso pressupõe que a implementação imprime uma macro por linha, o que não é garantido; Além disso, os valores macro podem conter novas linhas. Com o GNU m4, a saída é ambígua: você não consegue distinguir
define('foo', 'hello')
define('fooo', 'world')
de
define('foo', 'hello
fooo: world')
Supondo que a implementação m4 imprima uma macro por linha e siga o nome com dois pontos, você pode reunir nomes de macros em potencial dessa maneira e usar ifdef
para verificar se eles são de fato nomes de macros. Mas você está à mercê de uma implementação que não usa o mesmo formato de impressão de depuração.
A melhor maneira de resolver seu problema é provavelmente fora de m4.