On Tue, Mar 10, 2015 at 10:47 AM, Marc Wäckerlin <m...@waeckerlin.org> wrote: > 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: ${PACKAGE_NAME}-@PACKAGE_VERSION@" > 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: ${PACKAGE_NAME}-@PACKAGE_VERSION@"' > AC_SUBST(MY_DIRTY_TRICK_TO_ADD_CODE_TO_MAKEFILE) > -------------------------------------------------------- >> >> make do-a-test > > Hey, it works in project: libpcscxx-@PACKAGE_VERSION@ > -------------------------------------------------------- > > → obviousely, this does not work for @macros@. ;) > (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
imho, configure.ac is for configuring the project, not defining 'make' rules. These 'make' rules should go into Makefile.am : do-a-test: @echo "Hey, it works in project: $(PACKAGE_NAME)-$(PACKAGE_VERSION)" Vincent Torri > > > > > 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 [$][@] $< > > moc_%.cxx: %.hxx > ${MOC} -o [$][@] $<' > AC_SUBST(AX_ADDITIONAL_QT_RULES_HACK) > ]) > -------------------------------------------------------- > > > Thank you > Regards > Marc > -- > Marc Wäckerlin > http://marc.wäckerlin.ch > http://marc.waeckerlin.org >