Improve sdksyms.c automatic generation (Fix #19245).

Since it is already parsing cpp output, create a dependency file
in the same process. This will cause sdksyms.c to be regenerated
whenever a sdk header is modified.
  This also uses the gmake 'sinclude' directive (don't fail if
included file doesn't exist). This should not cause any problems
given that gmake only constructs are used in several other Makefiles.
This commit is contained in:
Paulo Cesar Pereira de Andrade 2008-12-23 18:07:54 -02:00
parent 477c327087
commit 86dc660588
2 changed files with 17 additions and 2 deletions

View File

@ -21,7 +21,9 @@ libloader_la_SOURCES = \
os.c \
sdksyms.c
CLEANFILES = sdksyms.c
CLEANFILES = sdksyms.c sdksyms.dep
sdksyms.c: sdksyms.sh
sdksyms.dep sdksyms.c: sdksyms.sh
CPP='$(CPP)' AWK='$(AWK)' $(srcdir)/sdksyms.sh $(top_srcdir) $(AM_CFLAGS) $(CFLAGS) $(INCLUDES)
sinclude sdksyms.dep

View File

@ -333,6 +333,8 @@ BEGIN {
print(" */");
printf("/* topdir=%s */\n", topdir);
print("_X_HIDDEN void *xorg_symbols[] = {");
printf("sdksyms.c:") > "sdksyms.dep";
}
/^# [0-9]+ "/ {
# Process text after a include in a relative path or when the
@ -340,6 +342,15 @@ BEGIN {
# Note that indexing starts at 1; 0 means no match, and there
# is a starting ".
sdk = $3 !~ /^"\// || index($3, topdir) == 2;
if (sdk && $3 ~ /\.h"$/) {
# remove quotes
gsub(/"/, "", $3);
if (! headers[$3]) {
printf(" \\\n %s", $3) >> "sdksyms.dep";
headers[$3] = 1;
}
}
}
/^extern[ ]/ {
@ -394,6 +405,8 @@ BEGIN {
END {
print("};");
print("") >> "sdksyms.dep";
}' > _sdksyms.c
STATUS=$?