These are potentially computed from inside each subdir, and in addition
due to what appears to be a regression in GNU make 4.4, where it is
reevaluating variables that contain $(shell) functions, many times (in
the order of thousands, this was slowing down the build, were on the
Debian amd64 build daemons it went from 5m with GNU make 4.3 to 2h40m
with GNU make 4.4. Although the bulk of the slow down has been fixed
with previous commits, the remaining optimizations are only to avoid
this potentially happening again in the future, and to reduce useless
duplicate work.
Instead of trying to cache the values from within make itself, where
programming this there is extremely painful, and does not seem to be
able to greatly reduce the number of calls, because the build system
is going to be called multiple times for different targets. Simply
externalize the generation into several shell scripts, that we call
to generate a make fragment that then we include from the various
Makefiles.
For a Debian build with GNU make 4.3, this reduces the amount of total
pkg-config calls from around ~1600 to 128, for dpkg-buildflags from
~1100 down to 6, and for dpkg-parsechangelog from ~56 to 17, but the
slow down is not as significant there anyway.
For a Debian build with GNU make 4.4, this reduces the amount of total
pkg-config calls from around ~2600 to 128, for dpkg-buildflags from
~2800 down to 6, and for dpkg-parsechangelog from ~350 to 21.
For a Debian build with GNU make 4.4, this reduces the build time
on this system from 2m10s to ~ 1m30s.
Change-Id: I427d0ea5106dc6ed1ff9e664ccdba2fa0725b7d0
Starting with GNU make 4.4, build time have massively regressed
where before they would take 5m on amd64 now can take 2h40m. While this
seems clearly broken, the release notes are filled with notices for
breaking changes, and in particular the one for passing all make
variables down to the invoked programs executed via the «shell» GNU make
function, so it is not clear what is expected breakage and what is not.
This has been reported in Debian, but not yet upstream, and while it
seems like a clear regression, it's not clear what will be the upstream
take on it. For now apply workarounds that do not change semantics, and
which do not regress with older GNU make versions.
Use the GNU make «origin» function instead of «?=» which defaults to
defining a variable as a recursive one. Coerce already defined variables
into simple ones to avoid GNU make re-evaluating these variables for
each «shell» function invocation.
Ref: https://bugs.debian.org/1092051
Change-Id: I076fc05dd616918473a22e7e942fecfdc9851d47
… if it does not exist. Likewise in iptables-extension/Makefile .
daemon/rtpengine.pod: spell what MOS means
MAX_SESSIONS in config file does not work, it must be max-sessions.
https://github.com/sipwise/rtpengine/pull/1589
We need to use the MAKE variable in Makefiles to be able to honor
parallel builds.
While this is of no much consequence here as the kernel module is
composed of a single file, the kbuild system might still be able
to perform other actions in parallel, it still is good form and
makes this future-proof, and copy&paste resistant.
Change-Id: I43b95e59d99eb223b45007d20e18f33761cebca6
Depending on the build environment, $M might refer to a subdirectory of
the main source tree (i.e. debian directory is in $M/../debian) or the
main directory of the source tree (debian is at $M/debian). Use a shell
test to detect the correct file.
Also take git revision into account as additional info, same as the
daemon build system does.
Change-Id: Ib82ff2f9b1a1b0c94697fd91d5b9e9c9bb8e61f2
Depending on the build environment, $M might refer to a subdirectory of
the main source tree (i.e. debian directory is in $M/../debian) or the
main directory of the source tree (debian is at $M/debian). Use a shell
test to detect the correct file.
Also take git revision into account as additional info, same as the
daemon build system does.
Change-Id: Ib82ff2f9b1a1b0c94697fd91d5b9e9c9bb8e61f2
Noticed during lintian reviews + test builds
of ngcp-rtpengine-kernel, STR:
* Install ngcp-rtpengine-kernel-source + module-assistant
* m-a build ngcp-rtpengine-kernel fails with:
| tail: cannot open ‘/usr/src/modules/ngcp-rtpengine/../debian/changelog’ for reading: No such file or directory
| dpkg-parsechangelog: error: tail of /usr/src/modules/ngcp-rtpengine/../debian/changelog gave error exit status 1
| Building modules, stage 2.
| MODPOST 1 modules
| tail: cannot open ‘/usr/src/modules/ngcp-rtpengine/../debian/changelog’ for reading: No such file or directory
Fix conflicts:
| dh_gencontrol -- -v4.3.0.0+0~mr4.3.0.0+0~20160223155548.661+jessie~1.gbp6d1932+3.16.7-ckt20-1+deb8u3
| dpkg-gencontrol: error: source package has two conflicting values - ngcp-rtpengine-kernel and ngcp-rtpengine
| dh_gencontrol: dpkg-gencontrol -pngcp-rtpengine-kernel-modules-3.16.0-4-amd64 -ldebian/changelog -Tdebian/ngcp-rtpengine-kernel-modules-3.16.0-4-amd64.substvars -Pdebian/ngcp-rtpengine-kernel-modules-3.16.0-4-amd64 -v4.3.0.0+0~mr4.3.0.0+0~20160223155548.661+jessie~1.gbp6d1932+3.16.7-ckt20-1+deb8u3 returned exit code 255
| debian/rules:58: recipe for target 'binary-modules' failed
While at it Bump Standards-Version for ngcp-rtpengine-kernel
to 3.9.7 (no further changes) and fix package description.
Change-Id: Iaf7326f55cd3919afdb140d8e7acb5d3ff87b7d9
Noticed during lintian reviews + test builds
of ngcp-rtpengine-kernel, STR:
* Install ngcp-rtpengine-kernel-source + module-assistant
* m-a build ngcp-rtpengine-kernel fails with:
| tail: cannot open ‘/usr/src/modules/ngcp-rtpengine/../debian/changelog’ for reading: No such file or directory
| dpkg-parsechangelog: error: tail of /usr/src/modules/ngcp-rtpengine/../debian/changelog gave error exit status 1
| Building modules, stage 2.
| MODPOST 1 modules
| tail: cannot open ‘/usr/src/modules/ngcp-rtpengine/../debian/changelog’ for reading: No such file or directory
Fix conflicts:
| dh_gencontrol -- -v4.3.0.0+0~mr4.3.0.0+0~20160223155548.661+jessie~1.gbp6d1932+3.16.7-ckt20-1+deb8u3
| dpkg-gencontrol: error: source package has two conflicting values - ngcp-rtpengine-kernel and ngcp-rtpengine
| dh_gencontrol: dpkg-gencontrol -pngcp-rtpengine-kernel-modules-3.16.0-4-amd64 -ldebian/changelog -Tdebian/ngcp-rtpengine-kernel-modules-3.16.0-4-amd64.substvars -Pdebian/ngcp-rtpengine-kernel-modules-3.16.0-4-amd64 -v4.3.0.0+0~mr4.3.0.0+0~20160223155548.661+jessie~1.gbp6d1932+3.16.7-ckt20-1+deb8u3 returned exit code 255
| debian/rules:58: recipe for target 'binary-modules' failed
While at it Bump Standards-Version for ngcp-rtpengine-kernel
to 3.9.7 (no further changes) and fix package description.
Change-Id: Iaf7326f55cd3919afdb140d8e7acb5d3ff87b7d9