gob2 preprocessor with autoconf/make

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

 



hi all,

I'm trying to maintain a project that intensively uses a preprocessor called "gob2" to produce glib/gtk-compatible C. i kinda like it, and want to keep it, but it's integration to autoconf has quirks. i hope somebody on the list can give me some hints how to solve it better.

so, gob2 produces both .h and .c/.cc file from a source .gob. it has an option --no-touch-headers, that will only update the .h if it actually changes.

currently, i'm using the gob2.m4 that comes with the gob distribution, find it at the end of this message.

and insert "GOB2_CHECK(2.0.0)" into my configure.ac.
my Makefile.ams contain, for every .gob:
	BUILT_SOURCES = foo.cc foo.h
	pkginclude_HEADERS = foo.h
	foo_la_SOURCES = foo.gob foo.cc foo.h

and additionally:
	%.cc %.h %-private.h: %.gob
		@GOB2@ --for-cpp --no-private-header --no-touch-headers $<

this is the way suggested by the gob manpage, but i deem it unneccessary redundant. it is also quirky in other ways, dependencies dont work properly (the gob2 manpage states that --no-touch-headers will 'confuse' automake).

could there be an easier way, so i just have to add my source .gob (probably the .h if i want it installed) to the Makefile.am? and the dependencies work like supposed?

any help/hints/finished .m4 scripts are highly appreciated. i hope this is the right list for this question, if not, please notify me privately, and sorry.

-dan

gob2.m4 from the gob dist (http://www.5z.com/jirka/gob.html)
------------ 
dnl
dnl GOB_HOOK(script if found, fail)
dnl if fail = "failure", abort if GOB not found
dnl


AC_DEFUN(GOB2_HOOK,[
	AC_PATH_PROG(GOB2,gob2)
	if test ! x$GOB2 = x; then	
		if test ! x$1 = x; then 
			AC_MSG_CHECKING(for gob-2 >= $1)
			g_r_ve=`echo $1|sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
			g_r_ma=`echo $1|sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
			g_r_mi=`echo $1|sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
			g_ve=`$GOB2 --version 2>&1|sed 's/Gob version \([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
			g_ma=`$GOB2 --version 2>&1|sed 's/Gob version \([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
			g_mi=`$GOB2 --version 2>&1|sed 's/Gob version \([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`

			if test $g_ve -eq $g_r_ve; then
				if test $g_ma -ge $g_r_ma; then
					if test $g_mi -ge $g_r_mi; then
						AC_MSG_RESULT(ok)
					else
						if test $g_ma -gt $g_r_ma; then
							AC_MSG_RESULT(ok)
						else
							AC_MSG_ERROR("found $g_ve.$g_ma.$g_mi requires $g_r_ve.$g_r_ma.$g_r_mi")
						fi
					fi
				else
					AC_MSG_ERROR("found $g_ve.$g_ma.$g_mi requires $g_r_ve.$g_r_ma.$g_r_mi")
				fi
			else
				if test $g_ve -gt $g_r_ve; then
					AC_MSG_RESULT(ok)
				else
					AC_MSG_ERROR(major version $g_ve found but $g_r_ve required)
				fi
			fi
	
			unset gob_version
			unset g_ve
			unset g_ma
			unset g_mi
			unset g_r_ve
			unset g_r_ma
			unset g_r_mi
		fi
		AC_SUBST(GOB2)
		$2
	else		
		$3
	fi
])

AC_DEFUN([GOB2_CHECK],[
	GOB2_HOOK($1,[],[AC_MSG_WARN([Cannot find GOB-2, check http://www.5z.com/jirka/gob.html])])
])

------------ 


-- 
dan@xxxxxxx
http://f3c.com/dan/




[Index of Archives]     [GCC Help]     [Kernel Discussion]     [RPM Discussion]     [Red Hat Development]     [Yosemite News]     [Linux USB]     [Samba]

  Powered by Linux