better dependency management
authorMichael Wallner <mike@php.net>
Wed, 1 Feb 2017 08:52:16 +0000 (09:52 +0100)
committerMichael Wallner <mike@php.net>
Wed, 1 Feb 2017 08:52:16 +0000 (09:52 +0100)
.gitignore
Makefile.frag
config.m4
m4/psi/psi.m4
src/call.h

index b8e7d88..d81b816 100644 (file)
@@ -76,4 +76,4 @@ php_psi_unions.h
 /token.h
 /types.h
 /types/
-*.d
+*.dep
index 65e5ed7..d192749 100644 (file)
@@ -63,22 +63,23 @@ $(PHP_PSI_SRCDIR)/src/context.c: $(PHP_PSI_SRCDIR)/php_psi_consts.h $(PHP_PSI_SR
 
 # -- deps
 
-PHP_PSI_DEPEND = $(PHP_PSI_SOURCES:.c=.d)
+PHP_PSI_DEPEND = $(patsubst $(PHP_PSI_SRCDIR)/%,$(PHP_PSI_BUILDDIR)/%,$(PHP_PSI_SOURCES:.c=.dep))
 
 .PHONY: psi-clean-depend
 psi-clean-depend:
-       -rm -f $(PHP_PSI_DEPEND)
+       -rm -f $(PHP_PSI_DEPEND) $(PHP_PSI_BUILDDIR)/php_psi.dep
 
 psi-clean: psi-clean-depend
 
-%.d: %.c
-       $(CC) -MM -MG -MF $@ -MT $(patsubst $(PHP_PSI_SRCDIR)/%,$(PHP_PSI_BUILDDIR)/%,$(@:.d=.lo)) \
+$(PHP_PSI_BUILDDIR)/%.dep: $(PHP_PSI_SRCDIR)/%.c
+       $(CC) -MM -MG -MF $@ -MT $(patsubst $(PHP_PSI_SRCDIR)/%,$(PHP_PSI_BUILDDIR)/%,$(@:.dep=.lo)) \
                $(CPPFLAGS) $(DEFS) $(INCLUDES) $< \
                        || touch $@
 
 DEPS = 
 ifneq  ($(DEPS),)
 -include $(PHP_PSI_DEPEND)
+-include $(PHP_PSI_BUILDDIR)/php_psi.dep
 endif
 
 
index db96d5f..fa20964 100644 (file)
--- a/config.m4
+++ b/config.m4
@@ -133,6 +133,7 @@ if test "$PHP_PSI" != no; then
        AC_DEFINE_UNQUOTED([PSI_DECLS], ["$PSI_DECLS"], [Predefined functions])
        AC_DEFINE_UNQUOTED([PSI_VA_DECLS], ["$PSI_VA_DECLS"], [Predefined vararg functions])
 
+       PHP_ADD_INCLUDE($PHP_PSI_SRCDIR)
        PHP_ADD_INCLUDE($PHP_PSI_SRCDIR/src)
        PHP_ADD_INCLUDE($PHP_PSI_SRCDIR/src/types)
        PHP_ADD_BUILD_DIR($PHP_PSI_BUILDDIR/src)
index 63ed194..c8eec18 100644 (file)
@@ -16,7 +16,17 @@ dnl Creates stubs of the headers with pre-defined types etc.
 dnl These headers are included by src/context.c.
 dnl This macro must be called prior any checks for a type, struct, decl etc.
 AC_DEFUN(PSI_CONFIG_INIT, [
+       cat >$PHP_PSI_BUILDDIR/php_psi.dep <<EOF
+\$(PHP_PSI_SRCDIR)/php_psi.h:
+php_psi.h:
+\$(PHP_PSI_SRCDIR)/php_psi_stdinc.h:
+php_psi_stdinc.h:
+EOF
        for i in $PSI_STDTYPES $PSI_TYPES $PSI_STRUCTS $PSI_UNIONS $PSI_CONSTS $PSI_REDIRS $PSI_MACROS $PSI_DECLS $PSI_VA_DECLS $PSI_FN_DECLS; do
+               cat >>$PHP_PSI_BUILDDIR/php_psi.dep <<EOF
+$i:
+$(basename $i):
+EOF
                cat >$i <<EOF
 /* generated by configure */
 #include "php_psi_stdinc.h"
index 01e6ead..895fa96 100644 (file)
@@ -100,5 +100,4 @@ void **psi_call_frame_push_auto(struct psi_call_frame *frame, void *auto_free);
 
 void psi_call_frame_free(struct psi_call_frame *frame);
 
-
 #endif