dnl # dnl # /usr/share/aclocal/svgc.m4 dnl # dnl # Configure paths for svgc dnl # Andrew V.Kosteltsev dnl ============================================================ dnl dnl Synopsis: dnl AC_CHECK_SVGC([MIN-VERSION [, # minimum svgc version, e.g. 1.1.0 dnl DEFAULT-WITH-SVGC [, # default value for --with-svgc option dnl DEFAULT-WITH-SVGC-TEST [,# default value for --with-svgc-test option dnl EXTEND-VARS [, # whether CFLAGS/LDFLAGS/etc are extended dnl ACTION-IF-FOUND [, # action to perform if svgc was found dnl ACTION-IF-NOT-FOUND # action to perform if svgc was not found dnl ]]]]]]) dnl Examples: dnl AC_CHECK_SVGC(1.1.0) dnl AC_CHECK_SVGC(1.1.0,,,no,CFLAGS="$CFLAGS -DHAVE_SVGC $SVGC_CFLAGS") dnl AC_CHECK_SVGC(1.1.0,yes,yes,yes,CFLAGS="$CFLAGS -DHAVE_SVGC") dnl dnl dnl If you have to change prefix returned by svgc-config script or change dnl location of svgc-config, you may set environment variable SVGC_CONFIG, dnl for example: dnl dnl # export SVGC_CONFIG="svgc-config --prefix=/usr/local" dnl # export SVGC_CONFIG="/usr/bin/svgc-config --prefix=/usr/local" dnl dnl ============================================================ dnl dnl ============================================================ dnl auxilliary macros dnl ============================================================ AC_DEFUN([_AC_SVGC_ERROR], [dnl AC_MSG_RESULT([*FAILED*]) cat <>/ /' 1>&2 $1 EOT exit 1 ]) AC_DEFUN([_AC_SVGC_VERBOSE], [dnl if test ".$verbose" = .yes; then AC_MSG_RESULT([ $1]) fi ]) dnl ============================================================ dnl the user macro dnl ============================================================ AC_DEFUN([AC_CHECK_SVGC], [dnl dnl dnl ============================================================ dnl prerequisites dnl ============================================================ AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_CPP])dnl dnl dnl ============================================================ dnl set SVGC_CONFIG variable dnl ============================================================ if test -z "$SVGC_CONFIG"; then SVGC_CONFIG='svgc-config' fi dnl SVGC_CPPFLAGS='' SVGC_CFLAGS='' SVGC_LDFLAGS='' SVGC_LIBS='' AC_SUBST(SVGC_CPPFLAGS) AC_SUBST(SVGC_CFLAGS) AC_SUBST(SVGC_LDFLAGS) AC_SUBST(SVGC_LIBS) dnl dnl ============================================================ dnl command line options dnl ============================================================ AC_MSG_CHECKING(for svgc) _AC_SVGC_VERBOSE([]) AC_ARG_WITH(svgc,dnl [ --with-svgc[=ARG] Build with svgc Library (default=]ifelse([$2],,yes,$2)[)],dnl ,dnl with_svgc="ifelse([$2],,yes,$2)" )dnl AC_ARG_WITH(svgc-test,dnl [ --with-svgc-test Perform svgc Sanity Test (default=]ifelse([$3],,yes,$3)[)],dnl ,dnl with_svgc_test="ifelse([$3],,yes,$3)" )dnl _AC_SVGC_VERBOSE([+ Command Line Options:]) _AC_SVGC_VERBOSE([ o --with-svgc=$with_svgc]) _AC_SVGC_VERBOSE([ o --with-svgc-test=$with_svgc_test]) dnl dnl ============================================================ dnl configuration dnl ============================================================ if test ".$with_svgc" != .no; then svgc_subdir=no svgc_subdir_opts='' case "$with_svgc" in subdir:* ) svgc_subdir=yes changequote(, )dnl svgc_subdir_opts=`echo $with_svgc | sed -e 's/^subdir:[^ ]*[ ]*//'` with_svgc=`echo $with_svgc | sed -e 's/^subdir:\([^ ]*\).*$/\1/'` changequote([, ])dnl ;; esac svgc_version="" svgc_location="" svgc_type="" svgc_cppflags="" svgc_cflags="" svgc_ldflags="" svgc_libs="" if test ".$with_svgc" = .yes; then # via config script in $PATH changequote(, )dnl svgc_version=`($SVGC_CONFIG --version) 2>/dev/null |\ sed -e 's/^.*\([0-9]\.[0-9]*[ab.][0-9]*\).*$/\1/'` changequote([, ])dnl if test ".$svgc_version" != .; then svgc_location=`$SVGC_CONFIG --prefix` svgc_type='installed' svgc_cppflags=`$SVGC_CONFIG --cppflags` svgc_cflags=`$SVGC_CONFIG --cflags` svgc_ldflags=`$SVGC_CONFIG --ldflags` svgc_libs=`$SVGC_CONFIG --libs` fi elif test -d "$with_svgc"; then with_svgc=`echo $with_svgc | sed -e 's;/*$;;'` svgc_found=no # via config script under a specified directory # (a standard installation, but not a source tree) if test ".$svgc_found" = .no; then for _dir in $with_svgc/bin $with_svgc; do if test -f "$_dir/svgc-config"; then test -f "$_dir/svgc-config.in" && continue # svgc-config in source tree! changequote(, )dnl svgc_version=`($_dir/svgc-config --version) 2>/dev/null |\ sed -e 's/^.*\([0-9]\.[0-9]*[ab.][0-9]*\).*$/\1/'` changequote([, ])dnl if test ".$svgc_version" != .; then svgc_location=`$_dir/svgc-config --prefix` svgc_type="installed" svgc_cppflags=`$_dir/svgc-config --cppflags` svgc_cflags=`$_dir/svgc-config --cflags` svgc_ldflags=`$_dir/svgc-config --ldflags` svgc_libs=`$_dir/svgc-config --libs` svgc_found=yes break fi fi done fi fi _AC_SVGC_VERBOSE([+ Determined Location:]) _AC_SVGC_VERBOSE([ o path: $svgc_location]) _AC_SVGC_VERBOSE([ o type: $svgc_type]) if test ".$svgc_version" = .; then if test ".$with_svgc" != .yes; then _AC_SVGC_ERROR([dnl Unable to locate svgc under $with_svgc. Please specify the correct path to either a svgc installation tree (use --with-svgc=DIR if you used --prefix=DIR for installing svgc in the past).]) else _AC_SVGC_ERROR([dnl Unable to locate svgc in any system-wide location (see \$PATH). Please specify the correct path to either a svgc installation tree (use --with-svgc=DIR if you used --prefix=DIR for installing svgc in the past, or set the SVGC_CONFIG environment variable to the full path to svgc-config).]) fi fi dnl ======================================================== dnl Check whether the found version is sufficiently new dnl ======================================================== _req_version="ifelse([$1],,1.0.0,$1)" for _var in svgc_version _req_version; do eval "_val=\"\$${_var}\"" _major=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[ab.]]\)\([[0-9]]*\)/\1/'` _minor=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[ab.]]\)\([[0-9]]*\)/\2/'` _rtype=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[ab.]]\)\([[0-9]]*\)/\3/'` _micro=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[ab.]]\)\([[0-9]]*\)/\4/'` case $_rtype in "a" ) _rtype=0 ;; "b" ) _rtype=1 ;; "." ) _rtype=2 ;; esac _hex=`echo dummy | awk '{ printf("%d%02d%1d%02d", major, minor, rtype, micro); }' \ "major=$_major" "minor=$_minor" "rtype=$_rtype" "micro=$_micro"` eval "${_var}_hex=\"\$_hex\"" done _AC_SVGC_VERBOSE([+ Determined Versions:]) _AC_SVGC_VERBOSE([ o existing: $svgc_version -> 0x$svgc_version_hex]) _AC_SVGC_VERBOSE([ o required: $_req_version -> 0x$_req_version_hex]) _ok=0 if test ".$svgc_version_hex" != .; then if test ".$_req_version_hex" != .; then if test $svgc_version_hex -ge $_req_version_hex; then _ok=1 fi fi fi if test ".$_ok" = .0; then _AC_SVGC_ERROR([dnl Found svgc version $svgc_version, but required at least version $_req_version. Upgrade svgc under $svgc_location to $_req_version or higher first, please.]) fi dnl ======================================================== dnl Perform svgc Sanity Compile Check dnl ======================================================== if test ".$with_svgc_test" = .yes; then _ac_save_CPPFLAGS="$CPPFLAGS" _ac_save_CFLAGS="$CFLAGS" _ac_save_LDFLAGS="$LDFLAGS" _ac_save_LIBS="$LIBS" CPPFLAGS="$CPPFLAGS $svgc_cppflags" CFLAGS="$CFLAGS $svgc_cflags" LDFLAGS="$LDFLAGS $svgc_ldflags" LIBS="$LIBS $svgc_libs" _AC_SVGC_VERBOSE([+ Test Build Environment:]) _AC_SVGC_VERBOSE([ o CPPFLAGS=\"$CPPFLAGS\"]) _AC_SVGC_VERBOSE([ o CFLAGS=\"$CFLAGS\"]) _AC_SVGC_VERBOSE([ o LDFLAGS=\"$LDFLAGS\"]) _AC_SVGC_VERBOSE([ o LIBS=\"$LIBS\"]) cross_compile=no define(_code1, [dnl #include /* exit( 3 ) */ #include /* printf( 3 ) */ #include /* unlink( 2 ) */ #include ]) define(_code2, [dnl struct __svg_sheet *sheet; struct __svg_line *line; struct __svg_cmd *cmd; struct __svg_cmds *cmds; struct __svg_scene *scene; double width = 500.0; double height = 400.0; double lm = 10.0; double rm = 10.0; double tm = 10.0; double bm = 10.0; int main( void ) { FILE *fp; sheet = (struct __svg_sheet *)__svg_new_sheet( width, height, lm, rm, tm, bm ); if( !sheet ) { printf( "Unable to create sheet\n" ); } (void)__svg_set_stroke_width( (struct __svg_node *)sheet, 0.5 ); scene = __svg_new_scene( sheet ); if( !scene ) { printf( "Unable to create scene\n" ); } __svg_set_scene_stroke( "black" ); __svg_set_scene_stroke_width( 0.5 ); __svg_set_scene_stroke_linecap( LINECAP_SQUARE ); line = (struct __svg_line *)__svg_new_line( lm, 200, width - rm, 200 ); (void)__svg_scene_add_node( scene, (struct __svg_node *)line ); __svg_paint_scene( scene, 1, "test.svg" ); __svg_free_scene( scene ); if( !(fp = fopen( "conftestval", "w" )) ) { return( 1 ); } fprintf( fp, "yes" ); fclose( fp ); unlink( "test.svg" ); return( 0 ); } ]) _AC_SVGC_VERBOSE([+ Performing Sanity Checks:]) _AC_SVGC_VERBOSE([ o pre-processor test]) AC_TRY_CPP(_code1, _ok=yes, _ok=no) if test ".$_ok" != .yes; then _AC_SVGC_ERROR([dnl Found svgc $svgc_version under $svgc_location, but was unable to perform a sanity pre-processor check. This means the svgc header svgc.h was not found. We used the following build environment: >> CPP="$CPP" >> CPPFLAGS="$CPPFLAGS" See config.log for possibly more details.]) fi _AC_SVGC_VERBOSE([ o link check]) AC_TRY_LINK(_code1, [struct __svg_node *sheet; sheet = __svg_new_sheet( 500.0, 400.0, 10.0, 10.0, 10.0, 10.0 ); if( !sheet ) return( 1 ); __svg_free_node( sheet );], _ok=yes, _ok=no) if test ".$_ok" != .yes; then _AC_SVGC_ERROR([dnl Found svgc $svgc_version under $svgc_location, but was unable to perform a sanity linker check. This means the svgc library libsvgc.a was not found. We used the following build environment: >> CC="$CC" >> CFLAGS="$CFLAGS" >> LDFLAGS="$LDFLAGS" >> LIBS="$LIBS" See config.log for possibly more details.]) fi _AC_SVGC_VERBOSE([ o run-time check]) AC_TRY_RUN(_code1 _code2, _ok=`cat conftestval`, _ok=no, _ok=no) if test ".$_ok" != .yes; then if test ".$_ok" = .no; then _AC_SVGC_ERROR([dnl Found svgc $_svgc_version under $svgc_location, but was unable to perform a sanity execution check. This usually means that the svgc shared library libsvgc.so is present but \$LD_LIBRARY_PATH is incomplete to execute a svgc test. In this case either disable this test via --without-svgc-test, or extend \$LD_LIBRARY_PATH. We used the following build environment: >> CC="$CC" >> CFLAGS="$CFLAGS" >> LDFLAGS="$LDFLAGS" >> LIBS="$LIBS" See config.log for possibly more details.]) else _AC_SVGC_ERROR([dnl Found svgc $svgc_version under $svgc_location, but was unable to perform a sanity run-time check. This usually means that the svgc library failed to work and possibly caused a core dump in the test program. In this case it is strongly recommended that you re-install svgc. We used the following build environment: >> CC="$CC" >> CFLAGS="$CFLAGS" >> LDFLAGS="$LDFLAGS" >> LIBS="$LIBS" See config.log for possibly more details.]) fi fi _extendvars="ifelse([$4],,yes,$4)" if test ".$_extendvars" != .yes; then CPPFLAGS="$_ac_save_CPPFLAGS" CFLAGS="$_ac_save_CFLAGS" LDFLAGS="$_ac_save_LDFLAGS" LIBS="$_ac_save_LIBS" fi else _extendvars="ifelse([$4],,yes,$4)" if test ".$_extendvars" = .yes; then if test ".$svgc_subdir" = .yes; then CPPFLAGS="$CPPFLAGS $svgc_cppflags" CFLAGS="$CFLAGS $svgc_cflags" LDFLAGS="$LDFLAGS $svgc_ldflags" LIBS="$LIBS $svgc_libs" fi fi fi SVGC_CPPFLAGS="$svgc_cppflags" SVGC_CFLAGS="$svgc_cflags" SVGC_LDFLAGS="$svgc_ldflags" SVGC_LIBS="$svgc_libs" AC_SUBST(SVGC_CPPFLAGS) AC_SUBST(SVGC_CFLAGS) AC_SUBST(SVGC_LDFLAGS) AC_SUBST(SVGC_LIBS) _AC_SVGC_VERBOSE([+ Final Results:]) _AC_SVGC_VERBOSE([ o SVGC_CPPFLAGS=\"$SVGC_CPPFLAGS\"]) _AC_SVGC_VERBOSE([ o SVGC_CFLAGS=\"$SVGC_CFLAGS\"]) _AC_SVGC_VERBOSE([ o SVGC_LDFLAGS=\"$SVGC_LDFLAGS\"]) _AC_SVGC_VERBOSE([ o SVGC_LIBS=\"$SVGC_LIBS\"]) fi if test ".$with_svgc" != .no; then AC_MSG_RESULT([version $svgc_version, $svgc_type under $svgc_location]) ifelse([$5], , :, [$5]) else AC_MSG_RESULT([no]) ifelse([$6], , :, [$6]) fi ])