[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Part 2: Add Cleanfiles for User Defined Special Sources [Re: How to
From: |
Marc Wäckerlin |
Subject: |
Re: Part 2: Add Cleanfiles for User Defined Special Sources [Re: How to add new Makefile-Rules through Configure?] |
Date: |
Tue, 10 Mar 2015 10:47:37 +0100 |
User-agent: |
Roundcube Webmail/0.9.5 |
Thank you for the answers.
The question remains:
Isn't there a proper way to add makefile rules from within a
configure.ac script?
Am 10.03.2015 00:46, schrieb Peter Johansson:
On 03/09/2015 06:34 PM, Marc Wäckerlin wrote:
Just to state my intention: I want to ad a couple of M4-Macros to
support users of now unsupported build tools, namely doxygen, Qt,
dpkg-buildpackage, rpmbuild, ...; then I will deliver those as M4
macro library that can be included in configure.ac and that should do
as much as possible "automagically" - as usual within the autotools.
I have a macro YAT_SVN_RELEASE that I use in several projects
http://dev.thep.lu.se/yat/svn/trunk/m4/yat_svn_release.m4
Ok, I see, you generate a separate auxiliary.am file with your rules.
But then the user of your macro still has to include that auxiliary.am
in his makefile. My intention is, to push new rules from configure.ac to
a makefile without any other user interaction than including my m4 macro
or calling my m4 function ("user" here means the programmer that uses my
m4 environment).
You may also find AX_ADD_AM_MACRO_STATIC useful
http://www.gnu.org/software/autoconf-archive/ax_add_am_macro_static.html#ax_add_am_macro_static
Hmm, one option could be to append rules to an existing makefile.in file
...
Is that less evil than my variable-hack?
This works, but is it "acceptable" coding?
configure.ac:
--------------------------------------------------------
AC_CONFIG_FILES([makefile])
cat >> makefile.in <<EOF
do-a-test:
@echo "Hey, it works in project: address@hidden@"
EOF
--------------------------------------------------------
make do-a-test
Hey, it works in project: libpcscxx-3.1.282
--------------------------------------------------------
and is it better than this trick:
configure.ac:
--------------------------------------------------------
MY_DIRTY_TRICK_TO_ADD_CODE_TO_MAKEFILE='
do-a-test:
@echo "Hey, it works in project: address@hidden@"'
AC_SUBST(MY_DIRTY_TRICK_TO_ADD_CODE_TO_MAKEFILE)
--------------------------------------------------------
make do-a-test
Hey, it works in project: address@hidden@
--------------------------------------------------------
→ obviousely, this does not work for @address@hidden ;)
(not a problem for me)
From the functionality perspective, the variable-trick puts a rule in
every makefile, where the append-trick puts a rule in a specific
makefile. Sometime the first is better, sometimes the latter.
Both hacks do the trick, but both are still a hack, so again: Is there a
better way?
Any comments on what is a proper solution?
Requirements fo a solution:
- Add makefile rules from within configure.ac
- No maual changes in makefile.am files required
Just for your information, actually my m4 macro offers:
Debian build rule, to be added in top makefile:
--------------------------------------------------------
AC_DEFUN([AX_USE_DEBIAN_PACKAGING], [
README_DEB=$(tail -n +3 README | sed -e 's/^$/./g' -e 's/^/ /g')
AC_SUBST(README_DEB)
_AM_SUBST_NOTMAKE([README_DEB])
AC_CONFIG_FILES([debian/changelog debian/control])
AX_DEBIAN_MAKE_RULES='
EXTRA_DIST += ${top_srcdir}/debian
DISTCLEANFILES += debian/changelog debian/control
ifeq (${subdir},.)
all:
clean-local: clean-debian-targets
clean-debian-targets:
-rm -rf
${PACKAGE_NAME}_${PACKAGE_VERSION}~${DISTRO}.${BUILD_NUMBER}.{dsc,tar.gz}
${PACKAGE_NAME}_${PACKAGE_VERSION}~${DISTRO}.${BUILD_NUMBER}*.changes
$(shell sed -n '"'"'s,Package:
\(.*\),\1_${PACKAGE_VERSION}~${DISTRO}.${BUILD_NUMBER}*.deb,p;'"'"'
debian/control)
deb: distdir
cd ${distdir} && ( export CFLAGS="${CFLAGS}"; export
CPPFLAGS="${CPPFLAGS}"; export CXXFLAGS="${CXXFLAGS}"; export
LDFLAGS="${LDFLAGS}"; export DEB_CFLAGS_APPEND="${CFLAGS}"; export
DEB_CPPFLAGS_APPEND="${CPPFLAGS}"; export
DEB_CXXFLAGS_APPEND="${CXXFLAGS}"; export
DEB_LDFLAGS_APPEND="${LDFLAGS}"; dpkg-buildpackage )
.PHONY: clean-debian-targets deb
endif'
AC_SUBST(AX_DEBIAN_MAKE_RULES)
])
--------------------------------------------------------
And for qt:
--------------------------------------------------------
AC_DEFUN([AX_CXX_CHECK_QT], [
qt_modules="$2"
AX_CXX_QT_TOOLS # detect moc, uic, ...
HAVE_$1=0
PKG_CHECK_MODULES([$1], [${qt_modules//Qt/Qt5}], [
HAVE_$1=1
AC_DEFINE([HAVE_$1])
AM_CPPFLAGS+=" ${$1_CFLAGS}"
AM_CXXFLAGS+=" ${$1_CFLAGS}"
LIBS+=" ${$1_LIBS}"
], [
PKG_CHECK_MODULES([$1], [${qt_modules}], [
HAVE_$1=1
AC_DEFINE([HAVE_$1])
AM_CPPFLAGS+=" ${$1_CFLAGS}"
AM_CXXFLAGS+=" ${$1_CFLAGS}"
LIBS+=" ${$1_LIBS}"
], [HAVE_$1=0])
])
AM_CONDITIONAL(HAVE_$1, test $HAVE_$1 -eq 1)
AC_SUBST(AM_CPPFLAGS)
AC_SUBST(AM_CXXFLAGS)
AX_ADDITIONAL_QT_RULES_HACK='
%_ui.hxx: %.ui
${UIC} -o address@hidden $<
moc_%.cxx: %.hxx
${MOC} -o address@hidden $<'
AC_SUBST(AX_ADDITIONAL_QT_RULES_HACK)
])
--------------------------------------------------------
Thank you
Regards
Marc
--
Marc Wäckerlin
http://marc.wäckerlin.ch
http://marc.waeckerlin.org
Re: How to add new Makefile-Rules through Configure?, Gavin Smith, 2015/03/09