automake
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

non recursive make and BUILT_SOURCES: circular dependency error


From: Vincent Torri
Subject: non recursive make and BUILT_SOURCES: circular dependency error
Date: Wed, 13 Feb 2013 23:15:32 +0100

Hello,

I am porting a library from a recursive make to a non recursive one.
This library must generate c files wit ha tool named
"ender_generator", using BUILT_SOURCES

I have that directory structure:

Makefile.am
data/
  dom/
    Makefile.mk
  svg/
    Makefile.mk
    esvg_private.ender
src/
  lib/
    dom/
      Makefile.mk
      other c files
    css/
      Makefile.mk
      other c files
    svg/
      generated/
        Makefile.mk
      Makefile.mk
      other c files

in the top level Makefile.am:

[code]
lib_LTLIBRARIES =
bin_PROGRAMS =
check_PROGRAMS =
CLEANFILES =
EXTRA_DIST =
include src/lib/css/Makefile.mk
include src/lib/dom/Makefile.mk
include src/lib/svg/generated/Makefile.mk
etc...
[/code]

I have to generated files in src/lib/svg/generated/, using the
ender_generate tool, using the file esvg_private.ender.

src/lib/css/Makefile.mk and src/lib/dom/Makefile.mk are just standard
files for creating a library. For example, src/lib/css/Makefile.mk :

[code]
CLEANFILES += \
src/lib/css/ecss_lexer.c \
src/lib/css/ecss_grammar.c \
src/lib/css/ecss_grammar.h

lib_LTLIBRARIES += src/lib/css/libecss.la

installed_cssheadersdir = $(pkgincludedir)address@hidden@/css
dist_installed_cssheaders_DATA = src/lib/css/Ecss.h

src_lib_css_libecss_la_SOURCES = \
src/lib/css/ecss_context.c \
src/lib/css/ecss_main.c \
src/lib/css/ecss_rule.c \
src/lib/css/ecss_selector.c \
src/lib/css/ecss_style.c \
src/lib/css/ecss_grammar.y \
src/lib/css/ecss_filter.c \
src/lib/css/ecss_filter_class.c \
src/lib/css/ecss_filter_id.c \
src/lib/css/ecss_lexer.l \
src/lib/css/ecss_private.h

src_lib_css_libecss_la_YFLAGS = -d -p ecss_
src_lib_css_libecss_la_LFLAGS = -o$(LEX_OUTPUT_ROOT).c
src_lib_css_libecss_la_CPPFLAGS = -DECSS_BUILD @ECSS_CFLAGS@
src_lib_css_libecss_la_LIBADD = @ECSS_LIBS@ @LEXLIB@
src_lib_css_libecss_la_LDFLAGS = -no-undefined -version-info @version_info@
[/code]

Now, the src/lib/svg/generated/Makefile.mk file, which generates the c files:

[code]
GENERATED_FLAGS = -x

GENERATED_ELEMENTS = \
src/lib/svg/generated/esvg_generated_element.c \
src/lib/svg/generated/esvg_generated_element_a.c

GENERATED_TYPES = \
src/lib/svg/generated/esvg_generated_boolean_animated.c \
src/lib/svg/generated/esvg_generated_color.c

GENERATED_FILES = $(GENERATED_ELEMENTS) $(GENERATED_TYPES)

src_lib_svg_generated_esvg_generated_matrix_GFLAGS = -o
src_lib_svg_generated_esvg_generated_rect_GFLAGS = -o

CLEANFILES += $(GENERATED_FILES)

BUILT_SOURCES = $(GENERATED_FILES)

%.c: $(top_srcdir)/data/svg/esvg_private.ender
        ender_generator $(GENERATED_FLAGS) $(value $(addsuffix
_GFLAGS,$(basename $@))) $(top_srcdir)/data/svg/esvg_private.ender
$(basename $(subst esvg_generated_,,$@)) $@
[/code]

GENERATED_ELEMENTS and GENERATED_TYPES have more files, but i have
removes  them so that it's a bit clearer to read.

When I run 'make', I obtain the following output:

[code]
make: Circular data/svg/esvg_private.ender.c <-
data/svg/esvg_private.ender dependency dropped.
ender_generator -x  ./data/svg/esvg_private.ender data/dom/Makefile.mk
data/dom/Makefile.mk.c
etc...
[/code]

So:

0) the recursive build works. Instead of Makefile.mk, we have usual
Makefile.am files
1) I have not written the make rule in
src/lib/svg/generated/Makefile.mk. I'm just porting to a non recursive
build.
2) I don't understand where the circular dependency is (first line of
the output above). Certainly from an implicit rule, but i don't see it
3) also, the second line of the output above shows the use of
data/dom/Makefile.mk, and not the files of BUILT_SOURCES. So i'm
really completely lost...

any help is really welcome :-)

thank you

Vincent Torri



reply via email to

[Prev in Thread] Current Thread [Next in Thread]