build: fix dependencies for generated headers

Some source files depend on other generated headers. For example,
"libnm/nm-device-modem.c" includes the generated "libnm/nm-enum-types.h".

The generated headers are part of BUILT_SOURCES to ensure that
they are generated first. However, this only works for `make all`
and `make check`.

We want that a plain `make dist` works as well. Thus, we need to
explicitly declare the additional dependencies.

Previously, that was done by having an explicity dependency of the
source files to the generated headers. However, that results in make
thinking the sources are build targets and out-of-tree builds fail:

  ./autogen.sh
  make distclean
  mkdir -p X/Y
  cd X/Y
  ../../configure --enable-tests=yes --with-valgrind=no --enable-gtk-doc --enable-more-warnings=error --with-udev-dir=/data/src/_NetworkManager/NetworkManager-1.5.2/_inst/lib/udev --with-wext=no --enable-ifcfg-rh--enable-ifupdown --enable-ifnet --disable-code-coverage --srcdir=../.. --prefix=/data/src/_NetworkManager/NetworkManager-1.5.2/_instr
  make -d V=1

fails with
  CPPFLAGS="" CFLAGS="-Wall -std=gnu99 -Werror -Wshadow -Wmissing-declarations -Wmissing-prototypes -Wdeclaration-after-statement -Wfloat-equal -Wno-unused-parameter -Wno-sign-compare -Wstrict-prototypes -Wno-unused-but-set-variable -Wundef -Wimplicit-function-declaration -Wpointer-arith -Winit-self -Wmissing-include-dirs -Wno-pragmas -g -O2 -Warray-bounds -Wunused-value  -fno-strict-aliasing  -fdata-sections -ffunction-sections -Wl,--gc-sections" LDFLAGS="" CC="gcc" PKG_CONFIG="/usr/bin/pkg-config" DLLTOOL="false"  CFLAGS="-Wall -std=gnu99 -Werror -Wshadow -Wmissing-declarations -Wmissing-prototypes -Wdeclaration-after-statement -Wfloat-equal -Wno-unused-parameter -Wno-sign-compare -Wstrict-prototypes -Wno-unused-but-set-variable -Wundef -Wimplicit-function-declaration -Wpointer-arith -Winit-self -Wmissing-include-dirs -Wno-pragmas -g -O2 -Warray-bounds -Wunused-value  -fno-strict-aliasing  -fdata-sections -ffunction-sections -Wl,--gc-sections -Wno-error" /usr/bin/g-ir-scanner   --namespace=NM --nsversion=1.0 --libtool="/bin/sh ./libtool" --pkg=gio-2.0 --pkg=gudev-1.0 --include=Gio-2.0 --pkg-export=libnm  --library=libnm/libnm.la --warn-all --identifier-prefix=NM --symbol-prefix=nm --cflags-begin -I../../shared -I./shared -I../../libnm-core -I./libnm-core  -pthread -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_32 -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_32   -I/usr/include/nss3 -I/usr/include/nspr4 -I./introspection -I../../libnm -I./libnm -I/usr/include/gudev-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -DG_LOG_DOMAIN=\""libnm"\" -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIB -DNMRUNDIR=\"/data/src/_NetworkManager/NetworkManager-1.5.2/_instr/var/run/NetworkManager\" --cflags-end  libnm-core/nm-core-enum-types.h shared/nm-version-macros.h ../../libnm-core/nm-connection.h ../../libnm-core/nm-core-types.h ../../libnm-core/nm-dbus-interface.h ../../libnm-core/nm-errors.h ../../libnm-core/nm-setting-8021x.h ../../libnm-core/nm-setting-adsl.h ../../libnm-core/nm-setting-bluetooth.h ../../libnm-core/nm-setting-bond.h ../../libnm-core/nm-setting-bridge-port.h ../../libnm-core/nm-setting-bridge.h ../../libnm-core/nm-setting-cdma.h ../../libnm-core/nm-setting-connection.h ../../libnm-core/nm-setting-dcb.h ../../libnm-core/nm-setting-generic.h ../../libnm-core/nm-setting-gsm.h ../../libnm-core/nm-setting-infiniband.h ../../libnm-core/nm-setting-ip-config.h ../../libnm-core/nm-setting-ip-tunnel.h ../../libnm-core/nm-setting-ip4-config.h ../../libnm-core/nm-setting-ip6-config.h ../../libnm-core/nm-setting-macvlan.h ../../libnm-core/nm-setting-olpc-mesh.h ../../libnm-core/nm-setting-ppp.h ../../libnm-core/nm-setting-pppoe.h ../../libnm-core/nm-setting-proxy.h ../../libnm-core/nm-setting-serial.h ../../libnm-core/nm-setting-team-port.h ../../libnm-core/nm-setting-team.h ../../libnm-core/nm-setting-tun.h ../../libnm-core/nm-setting-vlan.h ../../libnm-core/nm-setting-vpn.h ../../libnm-core/nm-setting-vxlan.h ../../libnm-core/nm-setting-wimax.h ../../libnm-core/nm-setting-wired.h ../../libnm-core/nm-setting-wireless-security.h ../../libnm-core/nm-setting-wireless.h ../../libnm-core/nm-setting.h ../../libnm-core/nm-simple-connection.h ../../libnm-core/nm-utils.h ../../libnm-core/nm-version.h ../../libnm-core/nm-vpn-dbus-interface.h ../../libnm-core/nm-vpn-editor-plugin.h ../../libnm-core/nm-vpn-plugin-info.h libnm-core/nm-core-enum-types.c shared/nm-utils/nm-shared-utils.c ../../libnm-core/crypto.c ../../libnm-core/nm-connection.c ../../libnm-core/nm-dbus-utils.c ../../libnm-core/nm-errors.c ../../libnm-core/nm-keyfile-reader.c ../../libnm-core/nm-keyfile-utils.c ../../libnm-core/nm-keyfile-writer.c ../../libnm-core/nm-property-compare.c ../../libnm-core/nm-setting-8021x.c ../../libnm-core/nm-setting-adsl.c ../../libnm-core/nm-setting-bluetooth.c ../../libnm-core/nm-setting-bond.c ../../libnm-core/nm-setting-bridge-port.c ../../libnm-core/nm-setting-bridge.c ../../libnm-core/nm-setting-cdma.c ../../libnm-core/nm-setting-connection.c ../../libnm-core/nm-setting-dcb.c ../../libnm-core/nm-setting-generic.c ../../libnm-core/nm-setting-gsm.c ../../libnm-core/nm-setting-infiniband.c ../../libnm-core/nm-setting-ip-config.c ../../libnm-core/nm-setting-ip-tunnel.c ../../libnm-core/nm-setting-ip4-config.c ../../libnm-core/nm-setting-ip6-config.c ../../libnm-core/nm-setting-macvlan.c ../../libnm-core/nm-setting-olpc-mesh.c ../../libnm-core/nm-setting-ppp.c ../../libnm-core/nm-setting-pppoe.c ../../libnm-core/nm-setting-proxy.c ../../libnm-core/nm-setting-serial.c ../../libnm-core/nm-setting-team-port.c ../../libnm-core/nm-setting-team.c ../../libnm-core/nm-setting-tun.c ../../libnm-core/nm-setting-vlan.c ../../libnm-core/nm-setting-vpn.c ../../libnm-core/nm-setting-vxlan.c ../../libnm-core/nm-setting-wimax.c ../../libnm-core/nm-setting-wired.c ../../libnm-core/nm-setting-wireless-security.c ../../libnm-core/nm-setting-wireless.c ../../libnm-core/nm-setting.c ../../libnm-core/nm-simple-connection.c ../../libnm-core/nm-utils.c ../../libnm-core/nm-vpn-editor-plugin.c ../../libnm-core/nm-vpn-plugin-info.c ../../libnm-core/crypto_nss.c libnm/nm-enum-types.h ../../libnm/NetworkManager.h ../../libnm/nm-access-point.h ../../libnm/nm-active-connection.h ../../libnm/nm-client.h ../../libnm/nm-device-adsl.h ../../libnm/nm-device-bond.h ../../libnm/nm-device-bridge.h ../../libnm/nm-device-bt.h ../../libnm/nm-device-ethernet.h ../../libnm/nm-device-generic.h ../../libnm/nm-device-infiniband.h ../../libnm/nm-device-ip-tunnel.h ../../libnm/nm-device-macvlan.h ../../libnm/nm-device-modem.h ../../libnm/nm-device-olpc-mesh.h ../../libnm/nm-device-team.h ../../libnm/nm-device-tun.h ../../libnm/nm-device-vlan.h ../../libnm/nm-device-vxlan.h ../../libnm/nm-device-wifi.h ../../libnm/nm-device-wimax.h ../../libnm/nm-device.h ../../libnm/nm-dhcp-config.h ../../libnm/nm-ip-config.h ../../libnm/nm-object.h ../../libnm/nm-remote-connection.h ../../libnm/nm-types.h ../../libnm/nm-vpn-connection.h ../../libnm/nm-vpn-editor.h ../../libnm/nm-wimax-nsp.h ../../libnm/nm-secret-agent-old.h ../../libnm/nm-vpn-plugin-old.h ../../libnm/nm-vpn-service-plugin.h libnm/nm-enum-types.c ../../libnm/nm-access-point.c ../../libnm/nm-active-connection.c ../../libnm/nm-client.c ../../libnm/nm-dbus-helpers.c ../../libnm/nm-device-adsl.c ../../libnm/nm-device-bond.c ../../libnm/nm-device-bridge.c ../../libnm/nm-device-bt.c ../../libnm/nm-device-ethernet.c ../../libnm/nm-device-generic.c ../../libnm/nm-device-infiniband.c ../../libnm/nm-device-ip-tunnel.c ../../libnm/nm-device-macvlan.c ../../libnm/nm-device-modem.c ../../libnm/nm-device-olpc-mesh.c ../../libnm/nm-device-team.c ../../libnm/nm-device-tun.c ../../libnm/nm-device-vlan.c ../../libnm/nm-device-vxlan.c ../../libnm/nm-device-wifi.c ../../libnm/nm-device-wimax.c ../../libnm/nm-device.c ../../libnm/nm-dhcp-config.c ../../libnm/nm-dhcp4-config.c ../../libnm/nm-dhcp6-config.c ../../libnm/nm-ip-config.c ../../libnm/nm-ip4-config.c ../../libnm/nm-ip6-config.c ../../libnm/nm-manager.c ../../libnm/nm-object.c ../../libnm/nm-remote-connection.c ../../libnm/nm-remote-settings.c ../../libnm/nm-secret-agent-old.c ../../libnm/nm-vpn-connection.c ../../libnm/nm-vpn-plugin-old.c ../../libnm/nm-vpn-editor.c ../../libnm/nm-vpn-service-plugin.c ../../libnm/nm-wimax-nsp.c libnm/libnm.la --output libnm/NM-1.0.gir
  ERROR: shared/nm-utils/nm-shared-utils.c: no such a file or directory
  /usr/share/gobject-introspection-1.0/Makefile.introspection:155: recipe for target 'libnm/NM-1.0.gir' failed
  make: *** [libnm/NM-1.0.gir] Error 1

The error is due to "shared/nm-utils/nm-shared-utils.h" not using VPATH:

       Finished prerequisites of target file 'shared/nm-utils/nm-shared-utils.c'.
       Prerequisite 'libnm-util/nm-utils-enum-types.h' is newer than target 'shared/nm-utils/nm-shared-utils.c'.
      Must remake target 'shared/nm-utils/nm-shared-utils.c'.
    Ignoring VPATH name '../../shared/nm-utils/nm-shared-utils.c'.

The proper fix is to have the object files depend on the generated
headers instead.
This commit is contained in:
Thomas Haller 2016-11-20 15:03:45 +01:00
parent b3d4bc578d
commit 29ac5de825

View File

@ -303,7 +303,9 @@ endef
$(foreach f,$(filter %.c,$(introspection_sources)),$(eval $(call _make_nmdbus_rule,$f)))
BUILT_SOURCES += $(introspection_sources) $(DBUS_INTERFACE_DOCS)
BUILT_SOURCES += \
$(introspection_sources) \
$(DBUS_INTERFACE_DOCS)
EXTRA_DIST += \
introspection/nm-access-point.xml \
@ -485,6 +487,8 @@ GLIB_GENERATED += \
$(libnm_core_lib_c_mkenums)
nm_core_enum_types_sources = $(libnm_core_lib_h_pub_real)
$(libnm_core_libnm_core_la_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
libnm_core_libnm_core_la_CPPFLAGS = \
$(dflt_cppflags_libnm_core) \
-DG_LOG_DOMAIN=\""libnm"\" \
@ -734,7 +738,6 @@ lib_LTLIBRARIES += libnm/libnm.la
GLIB_GENERATED += \
$(libnm_lib_h_pub_mkenums) \
$(libnm_lib_c_mkenums)
nm_enum_types_sources = \
$(libnm_lib_h_pub_mkenums) \
$(libnm_lib_h_pub_real) \
@ -742,6 +745,8 @@ nm_enum_types_sources = \
nm_enum_types_MKENUMS_H_FLAGS = --identifier-prefix NM --fhead '\#include <nm-core-enum-types.h>\n'
nm_enum_types_MKENUMS_C_FLAGS = --identifier-prefix NM --fhead '\#include "nm-default.h"\n'
$(libnm_libnm_la_OBJECTS): $(libnm_lib_h_pub_mkenums)
libnm_libnm_la_CPPFLAGS = \
$(dflt_cppflags_libnm_core) \
-I$(builddir)/introspection \
@ -762,7 +767,7 @@ nodist_libnm_libnm_la_SOURCES = \
$(libnm_lib_h_pub_mkenums) \
$(libnm_lib_c_mkenums)
$(libnm_lib_c_real): $(introspection_sources) $(libnm_lib_h_pub_mkenums)
$(libnm_libnm_la_OBJECTS): $(introspection_sources)
EXTRA_libnm_libnm_la_DEPENDENCIES = \
libnm/libnm.ver
@ -1228,7 +1233,7 @@ src_libNetworkManagerBase_la_SOURCES += \
src/platform/wifi/wifi-utils-wext.h
endif
$(src_libNetworkManagerBase_la_SOURCES): $(introspection_sources)
$(src_libNetworkManagerBase_la_OBJECTS): $(introspection_sources)
src_libNetworkManagerBase_la_LIBADD = \
libnm-core/libnm-core.la \
@ -1401,7 +1406,7 @@ src_libNetworkManager_la_SOURCES = \
\
$(NULL)
$(src_libNetworkManager_la_SOURCES): $(introspection_sources)
$(src_libNetworkManager_la_OBJECTS): $(introspection_sources)
src_libNetworkManager_la_LIBADD = \
src/libNetworkManagerBase.la \
@ -2855,7 +2860,7 @@ dispatcher_libnm_dispatcher_core_la_LIBADD = \
libnm/libnm.la \
$(GLIB_LIBS)
dispatcher/nm-dispatcher.c: $(introspection_sources)
$(dispatcher_nm_dispatcher_OBJECTS): $(introspection_sources)
dispatcher_nm_dispatcher_SOURCES = \
shared/nm-dispatcher-api.h \
@ -3451,6 +3456,8 @@ GLIB_GENERATED += \
$(libnm_util_lib_c_mkenums)
nm_utils_enum_types_sources = $(filter-out libnm-util/NetworkManager%,$(libnm_util_lib_h_pub_real))
$(libnm_util_libnm_util_la_OBJECTS): $(libnm_util_lib_h_pub_mkenums)
libnm_util_libnm_util_la_LIBADD = \
$(GLIB_LIBS) \
$(DBUS_LIBS) \
@ -3494,8 +3501,6 @@ libnm_util_libtest_crypto_la_SOURCES += libnm-util/crypto_nss.c
libnm_util_libtest_crypto_la_LIBADD += $(NSS_LIBS)
endif
$(libnm_util_lib_c_real): $(libnm_util_lib_h_pub_mkenums)
pkgconfig_DATA += libnm-util/libnm-util.pc
DISTCLEANFILES += libnm-util/libnm-util.pc
@ -3757,6 +3762,7 @@ GLIB_GENERATED += \
$(libnm_glib_lib_c_mkenums)
nm_glib_enum_types_sources = $(libnm_glib_lib_h_pub_real)
$(libnm_glib_libnm_glib_la_OBJECTS): $(libnm_glib_lib_h_pub_mkenums)
check_programs_norun += libnm-glib/libnm-glib-test
@ -3795,6 +3801,7 @@ GLIB_GENERATED += \
$(libnm_glib_vpn_c_mkenums)
nm_vpn_enum_types_sources = $(libnm_glib_vpn_h_real)
$(libnm_glib_libnm_glib_vpn_la_OBJECTS): $(libnm_glib_vpn_h_mkenums)
libnm-glib/nm-vpn-plugin-glue.h: $(srcdir)/introspection/nm-vpn-plugin.xml
$(AM_V_GEN) dbus-binding-tool --prefix=nm_vpn_plugin --mode=glib-server --output=$@ $<
@ -3809,8 +3816,6 @@ BUILT_SOURCES += \
libnm-glib/nm-vpn-plugin.c: libnm-glib/nm-vpn-plugin-glue.h
libnm-glib/nm-secret-agent.c: libnm-glib/nm-secret-agent-glue.h
$(libnm_glib_lib_c_real): $(libnm_glib_lib_h_pub_mkenums)
pkgconfig_DATA += \
libnm-glib/libnm-glib.pc \
libnm-glib/libnm-glib-vpn.pc